重写拆解逻辑
This commit is contained in:
parent
0224bb1766
commit
24c23e8eb4
3 changed files with 65 additions and 123 deletions
|
@ -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<NetworkEvent.Context> 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<String, Object> 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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue