diff --git a/src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java b/src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java index 3f4324f0c..8f552921c 100644 --- a/src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java +++ b/src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java @@ -1,18 +1,22 @@ package net.mcreator.target.network; import net.mcreator.target.TargetMod; -import net.mcreator.target.procedures.DismantlePressProcedure; +import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.init.TargetModTags; import net.mcreator.target.world.inventory.GunRecycleGuiMenu; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.network.NetworkEvent; -import java.util.HashMap; import java.util.function.Supplier; @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) @@ -43,25 +47,64 @@ public class GunRecycleGuiButtonMessage { public static void handler(GunRecycleGuiButtonMessage message, Supplier contextSupplier) { NetworkEvent.Context context = contextSupplier.get(); context.enqueueWork(() -> { - Player entity = context.getSender(); + Player player = context.getSender(); int buttonID = message.buttonID; int x = message.x; int y = message.y; int z = message.z; - handleButtonAction(entity, buttonID, x, y, z); + if (player == null) return; + handleButtonAction(player, buttonID, x, y, z); }); context.setPacketHandled(true); } - public static void handleButtonAction(Player entity, int buttonID, int x, int y, int z) { - Level world = entity.level(); - HashMap guistate = GunRecycleGuiMenu.guistate; + public static void handleButtonAction(Player player, int buttonID, int x, int y, int z) { // security measure to prevent arbitrary chunk generation - if (!world.hasChunkAt(new BlockPos(x, y, z))) - return; - if (buttonID == 0) { + if (!player.level().hasChunkAt(new BlockPos(x, y, z))) return; - DismantlePressProcedure.execute(entity); + if (buttonID == 0) { + dismantleGun(player); + } + } + + private static void dismantleGun(Player player) { + var menu = ((GunRecycleGuiMenu) player.containerMenu).get(); + var slot0 = menu.get(0); + var gun = slot0.getItem(); + + if (gun.is(ItemTags.create(new ResourceLocation("target:gun")))) { + // 普通稀有度 + var material = switch (gun.getRarity()) { + case COMMON -> Items.IRON_INGOT; + case RARE -> TargetModItems.INGOT_STEEL.get(); + case EPIC -> TargetModItems.CEMENTED_CARBIDE_INGOT.get(); + default -> null; + }; + if (material != null) ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(material)); + + // 特殊稀有度 + if (gun.is(TargetModTags.Items.LEGENDARY_GUN)) { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(Items.NETHERITE_INGOT)); + } + if (gun.is(TargetModTags.Items.SPECIAL_GUN)) { + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(TargetModItems.SOUL_STEEL_INGOT.get())); + } + + // 高等级额外奖励 + double level = gun.getOrCreateTag().getDouble("level"); + if (level >= 10) { + var soulSteelNuggetCount = 0; + + if (Math.random() < 0.005 * level) soulSteelNuggetCount += 3; + if (Math.random() < 0.01 * level) soulSteelNuggetCount += 2; + if (Math.random() < 0.03 * level) soulSteelNuggetCount++; + if (Math.random() < 0.06 * level) soulSteelNuggetCount++; + + ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(TargetModItems.SOUL_STEEL_NUGGET.get(), soulSteelNuggetCount)); + } + + slot0.set(ItemStack.EMPTY); + player.containerMenu.broadcastChanges(); } } diff --git a/src/main/java/net/mcreator/target/procedures/DismantlePressProcedure.java b/src/main/java/net/mcreator/target/procedures/DismantlePressProcedure.java deleted file mode 100644 index 4f6809af5..000000000 --- a/src/main/java/net/mcreator/target/procedures/DismantlePressProcedure.java +++ /dev/null @@ -1,100 +0,0 @@ -package net.mcreator.target.procedures; - -import net.mcreator.target.init.TargetModItems; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.ItemTags; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.Slot; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.Rarity; -import net.minecraftforge.items.ItemHandlerHelper; - -import java.util.Map; -import java.util.function.Supplier; - -public class DismantlePressProcedure { - public static void execute(Entity entity) { - if (entity == null) - return; - ItemStack stack; - stack = (entity instanceof Player _plrSlotItem && _plrSlotItem.containerMenu instanceof Supplier _splr && _splr.get() instanceof Map _slt ? ((Slot) _slt.get(0)).getItem() : ItemStack.EMPTY); - if (stack.is(ItemTags.create(new ResourceLocation("target:gun")))) { - if (stack.getRarity() == Rarity.COMMON) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(Items.IRON_INGOT); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (stack.getRarity() == Rarity.RARE) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.INGOT_STEEL.get()); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (stack.getRarity() == Rarity.EPIC) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.CEMENTED_CARBIDE_INGOT.get()); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (stack.is(ItemTags.create(new ResourceLocation("target:legendary_gun")))) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(Items.NETHERITE_INGOT); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (stack.is(ItemTags.create(new ResourceLocation("target:special_gun")))) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.SOUL_STEEL_INGOT.get()); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (stack.getOrCreateTag().getDouble("level") >= 10) { - if (Math.random() < 0.005 * stack.getOrCreateTag().getDouble("level")) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.SOUL_STEEL_NUGGET.get()); - _setstack.setCount(3); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (Math.random() < 0.01 * stack.getOrCreateTag().getDouble("level")) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.SOUL_STEEL_NUGGET.get()); - _setstack.setCount(2); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (Math.random() < 0.03 * stack.getOrCreateTag().getDouble("level")) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.SOUL_STEEL_NUGGET.get()); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (Math.random() < 0.06 * stack.getOrCreateTag().getDouble("level")) { - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.SOUL_STEEL_NUGGET.get()); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (entity instanceof Player _player) { - ItemStack _setstack = new ItemStack(TargetModItems.SOUL_STEEL_NUGGET.get()); - _setstack.setCount(1); - ItemHandlerHelper.giveItemToPlayer(_player, _setstack); - } - } - if (entity instanceof Player _player && _player.containerMenu instanceof Supplier _current && _current.get() instanceof Map _slots) { - ((Slot) _slots.get(0)).set(ItemStack.EMPTY); - _player.containerMenu.broadcastChanges(); - } - } - } -} diff --git a/src/main/java/net/mcreator/target/world/inventory/GunRecycleGuiMenu.java b/src/main/java/net/mcreator/target/world/inventory/GunRecycleGuiMenu.java index db555f8ee..3eb2a5b70 100644 --- a/src/main/java/net/mcreator/target/world/inventory/GunRecycleGuiMenu.java +++ b/src/main/java/net/mcreator/target/world/inventory/GunRecycleGuiMenu.java @@ -77,7 +77,6 @@ public class GunRecycleGuiMenu extends AbstractContainerMenu implements Supplier } } this.customSlots.put(0, this.addSlot(new SlotItemHandler(internal, 0, 79, 27) { - private final int slot = 0; @Override public boolean mayPlace(ItemStack stack) { @@ -109,29 +108,29 @@ public class GunRecycleGuiMenu extends AbstractContainerMenu implements Supplier ItemStack itemstack = ItemStack.EMPTY; Slot slot = this.slots.get(index); if (slot.hasItem()) { - ItemStack itemstack1 = slot.getItem(); - itemstack = itemstack1.copy(); + ItemStack itemStack = slot.getItem(); + itemstack = itemStack.copy(); if (index < 1) { - if (!this.moveItemStackTo(itemstack1, 1, this.slots.size(), true)) + if (!this.moveItemStackTo(itemStack, 1, this.slots.size(), true)) return ItemStack.EMPTY; - slot.onQuickCraft(itemstack1, itemstack); - } else if (!this.moveItemStackTo(itemstack1, 0, 1, false)) { + slot.onQuickCraft(itemStack, itemstack); + } else if (!this.moveItemStackTo(itemStack, 0, 1, false)) { if (index < 1 + 27) { - if (!this.moveItemStackTo(itemstack1, 1 + 27, this.slots.size(), true)) + if (!this.moveItemStackTo(itemStack, 1 + 27, this.slots.size(), true)) return ItemStack.EMPTY; } else { - if (!this.moveItemStackTo(itemstack1, 1, 1 + 27, false)) + if (!this.moveItemStackTo(itemStack, 1, 1 + 27, false)) return ItemStack.EMPTY; } return ItemStack.EMPTY; } - if (itemstack1.getCount() == 0) + if (itemStack.getCount() == 0) slot.set(ItemStack.EMPTY); else slot.setChanged(); - if (itemstack1.getCount() == itemstack.getCount()) + if (itemStack.getCount() == itemstack.getCount()) return ItemStack.EMPTY; - slot.onTake(playerIn, itemstack1); + slot.onTake(playerIn, itemStack); } return itemstack; }