From 62a9a53e3f206f108fdac6b9cacde4329c12415b Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Wed, 9 Oct 2024 23:55:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=B6=88=E4=BC=A4=E5=AE=B3=E9=9A=8F?= =?UTF-8?q?=E7=AD=89=E7=BA=A7=E6=8F=90=E5=8D=87=E6=9C=BA=E5=88=B6=EF=BC=8C?= =?UTF-8?q?=E5=88=A0=E9=99=A4pvpmode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/command/PVPModeCommand.java | 37 ------------- .../superbwarfare/event/GunEventHandler.java | 2 +- .../event/LivingEventHandler.java | 2 +- .../event/PlayerEventHandler.java | 28 ++++++++-- .../superbwarfare/item/gun/GunItem.java | 1 - .../item/gun/sniper/SentinelItem.java | 2 +- .../superbwarfare/network/ModVariables.java | 54 +------------------ .../network/message/FireMessage.java | 10 ++-- .../superbwarfare/tools/GunsTool.java | 12 ----- .../superbwarfare/tools/TooltipTool.java | 20 +++---- 10 files changed, 40 insertions(+), 128 deletions(-) delete mode 100644 src/main/java/net/mcreator/superbwarfare/command/PVPModeCommand.java diff --git a/src/main/java/net/mcreator/superbwarfare/command/PVPModeCommand.java b/src/main/java/net/mcreator/superbwarfare/command/PVPModeCommand.java deleted file mode 100644 index 02af67b2f..000000000 --- a/src/main/java/net/mcreator/superbwarfare/command/PVPModeCommand.java +++ /dev/null @@ -1,37 +0,0 @@ - -package net.mcreator.superbwarfare.command; - -import net.mcreator.superbwarfare.network.ModVariables; -import net.minecraft.commands.Commands; -import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraftforge.common.util.FakePlayerFactory; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod; - -@Mod.EventBusSubscriber -public class PVPModeCommand { - @SubscribeEvent - public static void registerCommand(RegisterCommandsEvent event) { - event.getDispatcher().register(Commands.literal("superbwarfare:pvpmode").requires(s -> s.hasPermission(4)).executes(arguments -> { - Level world = arguments.getSource().getUnsidedLevel(); - Entity entity = arguments.getSource().getEntity(); - if (entity == null && world instanceof ServerLevel server) { - entity = FakePlayerFactory.getMinecraft(server); - } - - var mapVariables = ModVariables.MapVariables.get(world); - mapVariables.pvpMode = !mapVariables.pvpMode; - mapVariables.syncData(world); - - if (entity instanceof Player player && !player.level().isClientSide()) { - player.displayClientMessage(Component.translatable("commands.pvp_mode." + (mapVariables.pvpMode ? "on" : "off")), false); - } - return 0; - })); - } -} diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index ce511c77d..a3798f227 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -194,7 +194,7 @@ public class GunEventHandler { if (!player.level().isClientSide()) { float headshot = (float) heldItem.getOrCreateTag().getDouble("headshot"); - float damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("sentinelChargeDamage")) * (float) heldItem.getOrCreateTag().getDouble("levelDamageMultiple") * (float) perkDamage(heldItem); + float damage = (float) (heldItem.getOrCreateTag().getDouble("damage") + heldItem.getOrCreateTag().getDouble("sentinelChargeDamage")) * (float) perkDamage(heldItem); float velocity = (float) heldItem.getOrCreateTag().getDouble("velocity") * (float) perkSpeed(heldItem); int projectileAmount = (int) heldItem.getOrCreateTag().getDouble("projectile_amount"); float bypassArmorRate = (float) heldItem.getOrCreateTag().getDouble("BypassesArmor"); diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index 014654320..e66d5e779 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -212,7 +212,7 @@ public class LivingEventHandler { var tag = stack.getOrCreateTag(); int level = stack.getOrCreateTag().getInt("Level"); double exp = stack.getOrCreateTag().getDouble("Exp"); - double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; + double upgradeExpNeeded = 20 * Math.pow(level, 2) + 140 * level + 20; if (exp >= upgradeExpNeeded) { tag.putDouble("Exp", exp - upgradeExpNeeded); diff --git a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java index 462206ba7..c1b734e98 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java @@ -6,6 +6,8 @@ import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.message.SimulationDistanceMessage; +import net.mcreator.superbwarfare.tools.GunInfo; +import net.mcreator.superbwarfare.tools.GunsTool; import net.mcreator.superbwarfare.tools.SoundTool; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -52,13 +54,29 @@ public class PlayerEventHandler { capability.syncPlayerVariables(player); }); - if (!ModVariables.MapVariables.get(player.level()).pvpMode) { - return; - } - for (ItemStack stack : player.getInventory().items) { if (stack.is(ModTags.Items.GUN)) { - stack.getOrCreateTag().putInt("ammo", stack.getOrCreateTag().getInt("mag")); + if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { + GunsTool.reload(player, GunInfo.Type.SHOTGUN); + } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { + GunsTool.reload(player, GunInfo.Type.SNIPER); + } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { + GunsTool.reload(player, GunInfo.Type.HANDGUN); + } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { + GunsTool.reload(player, GunInfo.Type.RIFLE); + } else if (stack.getItem() == ModItems.TASER.get()) { + stack.getOrCreateTag().putInt("ammo", 1); + player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots()); + } else if (stack.getItem() == ModItems.M_79.get()) { + stack.getOrCreateTag().putInt("ammo", 1); + player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots()); + } else if (stack.getItem() == ModItems.RPG.get()) { + stack.getOrCreateTag().putInt("ammo", 1); + player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots()); + } else if (stack.getItem() == ModItems.JAVELIN.get()) { + stack.getOrCreateTag().putInt("ammo", 1); + player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots()); + } } } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 2f97f2fe5..330a27d67 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -54,7 +54,6 @@ public abstract class GunItem extends Item { GunsTool.genUUID(itemstack); ItemNBTTool.setBoolean(itemstack, "init", true); } - GunsTool.pvpModeCheck(itemstack, level); if (itemstack.getOrCreateTag().getBoolean("draw")) { itemstack.getOrCreateTag().putBoolean("draw", false); diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java index f3f6c15c1..dfecb28be 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/sniper/SentinelItem.java @@ -211,7 +211,7 @@ public class SentinelItem extends GunItem implements GeoItem, AnimatedItem { int energyStored = energy.getEnergyStored(); if (energyStored > 0) { energy.extractEnergy(5, false); - tag.putDouble("sentinelChargeDamage", 0.2857142857142857 * tag.getDouble("damage") * tag.getDouble("levelDamageMultiple")); + tag.putDouble("sentinelChargeDamage", 0.2857142857142857 * tag.getDouble("damage")); } else { tag.putDouble("sentinelChargeDamage", 0); } diff --git a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java index f2bf74e6d..50c329f33 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java +++ b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java @@ -13,7 +13,6 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.saveddata.SavedData; import net.minecraftforge.common.capabilities.*; import net.minecraftforge.common.util.FakePlayer; @@ -95,11 +94,7 @@ public class ModVariables { @SubscribeEvent public static void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { if (event.getEntity().level().isClientSide()) return; - - SavedData mapData = MapVariables.get(event.getEntity().level()); SavedData worldData = WorldVariables.get(event.getEntity().level()); - if (mapData != null) - ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getEntity()), new SavedDataSyncMessage(0, mapData)); if (worldData != null) ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getEntity()), new SavedDataSyncMessage(1, worldData)); } @@ -107,7 +102,6 @@ public class ModVariables { @SubscribeEvent public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) { if (event.getEntity().level().isClientSide()) return; - SavedData worldData = WorldVariables.get(event.getEntity().level()); if (worldData != null) ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) event.getEntity()), new SavedDataSyncMessage(1, worldData)); @@ -146,44 +140,6 @@ public class ModVariables { } } - public static class MapVariables extends SavedData { - public static final String DATA_NAME = ModUtils.MODID + "_map_variables"; - public boolean pvpMode = false; - - public static MapVariables load(CompoundTag tag) { - MapVariables data = new MapVariables(); - data.read(tag); - return data; - } - - public static MapVariables get(LevelAccessor world) { - if (world instanceof ServerLevelAccessor serverLevelAcc) { - var level = serverLevelAcc.getLevel().getServer().getLevel(Level.OVERWORLD); - if (level != null) { - return level.getDataStorage().computeIfAbsent(MapVariables::load, MapVariables::new, DATA_NAME); - } - } - return clientSide; - } - - public void read(CompoundTag nbt) { - pvpMode = nbt.getBoolean("pvp_mode"); - } - - public void syncData(LevelAccessor world) { - this.setDirty(); - if (world instanceof Level && !world.isClientSide()) - ModUtils.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new SavedDataSyncMessage(0, this)); - } - - static MapVariables clientSide = new MapVariables(); - - @Override - public CompoundTag save(CompoundTag nbt) { - nbt.putBoolean("pvp_mode", pvpMode); - return nbt; - } - } public static class SavedDataSyncMessage { private final int type; @@ -194,11 +150,7 @@ public class ModVariables { CompoundTag nbt = buffer.readNbt(); if (nbt == null) return; - this.data = this.type == 0 ? new MapVariables() : new WorldVariables(); - if (this.data instanceof MapVariables mapVariables) - mapVariables.read(nbt); - else if (this.data instanceof WorldVariables worldVariables) - worldVariables.read(nbt); + new WorldVariables(); } public SavedDataSyncMessage(int type, SavedData data) { @@ -216,9 +168,7 @@ public class ModVariables { NetworkEvent.Context context = contextSupplier.get(); context.enqueueWork(() -> { if (!context.getDirection().getReceptionSide().isServer() && message.data != null) { - if (message.type == 0) - MapVariables.clientSide = (MapVariables) message.data; - else + if (message.type != 0) WorldVariables.clientSide = (WorldVariables) message.data; } }); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java index 3b5ebaf14..751d75698 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -269,10 +269,10 @@ public class FireMessage { if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { spread = 0.01f; - damage = 0.08333333 * tag.getDouble("damage") * tag.getDouble("speed") * tag.getDouble("levelDamageMultiple") * perkDamage(heldItem); + damage = 0.08333333 * tag.getDouble("damage") * tag.getDouble("speed") * perkDamage(heldItem); } else { spread = perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 1 : 2.5f; - damage = (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 0.08333333 : 0.008333333) * tag.getDouble("damage") * tag.getDouble("speed") * tag.getDouble("levelDamageMultiple") * perkDamage(heldItem); + damage = (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug ? 0.08333333 : 0.008333333) * tag.getDouble("damage") * tag.getDouble("speed") * perkDamage(heldItem); } ProjectileEntity projectile = new ProjectileEntity(player.level()) @@ -408,7 +408,7 @@ public class FireMessage { Level level = player.level(); if (!level.isClientSide()) { GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, - (float) stack.getOrCreateTag().getDouble("damage") * (float) stack.getOrCreateTag().getDouble("levelDamageMultiple")); + (float) stack.getOrCreateTag().getDouble("damage")); var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) { @@ -461,7 +461,7 @@ public class FireMessage { if (!level.isClientSide()) { RpgRocketEntity rocketEntity = new RpgRocketEntity(player, level, - (float) tag.getDouble("damage") * (float) tag.getDouble("levelDamageMultiple")); + (float) tag.getDouble("damage")); var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) { @@ -526,7 +526,7 @@ public class FireMessage { if (!level.isClientSide()) { JavelinMissileEntity missileEntity = new JavelinMissileEntity(player, level, - (float) tag.getDouble("damage") * (float) tag.getDouble("levelDamageMultiple")); + (float) tag.getDouble("damage")); var dmgPerk = PerkHelper.getPerkByType(stack, Perk.Type.DAMAGE); if (dmgPerk == ModPerks.MONSTER_HUNTER.get()) { diff --git a/src/main/java/net/mcreator/superbwarfare/tools/GunsTool.java b/src/main/java/net/mcreator/superbwarfare/tools/GunsTool.java index 9d92a8a09..cb3927a29 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/GunsTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/GunsTool.java @@ -64,18 +64,6 @@ public class GunsTool { } } - public static void pvpModeCheck(ItemStack stack, Level level) { - if (!ModVariables.MapVariables.get(level).pvpMode) { - if (stack.getOrCreateTag().getInt("Level") >= 10) { - stack.getOrCreateTag().putDouble("levelDamageMultiple", 1 + 0.05 * (stack.getOrCreateTag().getInt("Level") - 10)); - } else { - stack.getOrCreateTag().putDouble("levelDamageMultiple", 1); - } - } else { - stack.getOrCreateTag().putDouble("levelDamageMultiple", 1); - } - } - public static void genUUID(ItemStack stack) { UUID uuid = UUID.randomUUID(); stack.getOrCreateTag().putUUID("gun_uuid", uuid); diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index 1c7502ef0..91f39b5b3 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -52,8 +52,7 @@ public class TooltipTool { public static void addGunTips(List tooltip, ItemStack stack) { tooltip.add(Component.literal("")); - double damage = ItemNBTTool.getDouble(stack, "damage", 0) - * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1) * perkDamage(stack); + double damage = ItemNBTTool.getDouble(stack, "damage", 0) * perkDamage(stack); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) @@ -77,16 +76,14 @@ public class TooltipTool { } if (slug) { - double damage = ItemNBTTool.getDouble(stack, "damage", 0) * ItemNBTTool.getDouble(stack, "projectile_amount", 0) - * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1) * perkDamage(stack); + double damage = ItemNBTTool.getDouble(stack, "damage", 0) * ItemNBTTool.getDouble(stack, "projectile_amount", 0) * perkDamage(stack); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(new DecimalFormat("##.#").format(damage) + (heBullet(stack) ? " + " + new DecimalFormat("##.#").format(0.8 * damage * (1 + 0.1 * heBulletLevel(stack))) : "")).withStyle(ChatFormatting.GREEN))); } else { - double damage = ItemNBTTool.getDouble(stack, "damage", 0) - * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1) * perkDamage(stack); + double damage = ItemNBTTool.getDouble(stack, "damage", 0) * perkDamage(stack); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) @@ -220,7 +217,7 @@ public class TooltipTool { slug = true; } - double total = ItemNBTTool.getDouble(stack, "damage", 0) * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1) * perkDamage(stack); + double total = ItemNBTTool.getDouble(stack, "damage", 0) * perkDamage(stack); if (slug) { tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) @@ -251,14 +248,13 @@ public class TooltipTool { if (flag.get()) { double damage = (ItemNBTTool.getDouble(stack, "damage", 0) + ItemNBTTool.getDouble(stack, "sentinelChargeDamage", 0)) - * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1) * perkDamage(stack); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(new DecimalFormat("##.#").format(damage) + (heBullet(stack) ? " + " + new DecimalFormat("##.#").format(0.8 * damage * (1 + 0.1 * heBulletLevel(stack))) : "")).withStyle(ChatFormatting.AQUA).withStyle(ChatFormatting.BOLD))); } else { - double damage = ItemNBTTool.getDouble(stack, "damage", 0) * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1) * perkDamage(stack); + double damage = ItemNBTTool.getDouble(stack, "damage", 0) * perkDamage(stack); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) @@ -280,8 +276,7 @@ public class TooltipTool { public static void addTaserTips(List tooltip, ItemStack stack) { tooltip.add(Component.literal("")); - double damage = ItemNBTTool.getDouble(stack, "damage", 0) - * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1); + double damage = ItemNBTTool.getDouble(stack, "damage", 0); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET)) @@ -302,8 +297,7 @@ public class TooltipTool { public static void addLauncherTips(List tooltip, ItemStack stack) { tooltip.add(Component.literal("")); - double damage = ItemNBTTool.getDouble(stack, "damage", 0) - * ItemNBTTool.getDouble(stack, "levelDamageMultiple", 1); + double damage = ItemNBTTool.getDouble(stack, "damage", 0); tooltip.add(Component.translatable("des.superbwarfare.tips.damage").withStyle(ChatFormatting.GRAY) .append(Component.literal("").withStyle(ChatFormatting.RESET))