Quellcode durchsuchen

禁止把方块放入铁砧

LTCatt vor 6 Jahren
Ursprung
Commit
b20a9cf3f8

+ 15 - 3
src/main/java/com/hexdragon/enchrebirth/block/anvil/AnvilContainerRe.java

@@ -4,7 +4,9 @@ import com.hexdragon.core.item.EnchantmentHelperRe;
 import com.hexdragon.core.item.ItemHelperRe;
 import com.hexdragon.enchrebirth.registry.RegMain;
 import net.minecraft.block.AnvilBlock;
+import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
 import net.minecraft.enchantment.Enchantment;
 import net.minecraft.enchantment.EnchantmentHelper;
 import net.minecraft.entity.player.PlayerEntity;
@@ -37,7 +39,7 @@ public class AnvilContainerRe extends Container {
         this.player = playerInventory.player;
         worldPosCallable.consume((world, blockPos) -> this.inputInventory = (AnvilTileEntity) world.getTileEntity(blockPos)); // 与 NBT 中的物品栏同步
         Constuct(playerInventory);
-        onCraftMatrixChanged(inputInventory);
+        onCraftMatrixChanged(inputInventory); // 初始化输出
     }
 
     // 输入与输出物品槽
@@ -46,8 +48,18 @@ public class AnvilContainerRe extends Container {
 
     // 构造页面槽位
     private void Constuct(PlayerInventory playerInventory) {
-        this.addSlot(new Slot(this.inputInventory, 0, 62, 28));
-        this.addSlot(new Slot(this.inputInventory, 1, 80, 28));
+        this.addSlot(new Slot(this.inputInventory, 0, 62, 28) {
+            public boolean isItemValid(ItemStack stack) {
+                // 只允许将物品放入,阻止方块
+                return Block.getBlockFromItem(stack.getItem()) == Blocks.AIR;
+            }
+        });
+        this.addSlot(new Slot(this.inputInventory, 1, 80, 28) {
+            public boolean isItemValid(ItemStack stack) {
+                // 只允许将物品放入,阻止方块
+                return Block.getBlockFromItem(stack.getItem()) == Blocks.AIR;
+            }
+        });
         this.addSlot(new Slot(this.outputInventory, 2, 138, 28) {
             // 禁止将物品放在输出格
             public boolean isItemValid(ItemStack stack) {

+ 6 - 2
src/main/java/com/hexdragon/enchrebirth/block/anvil/AnvilTileEntity.java

@@ -1,7 +1,9 @@
 package com.hexdragon.enchrebirth.block.anvil;
 
 import com.hexdragon.enchrebirth.registry.RegMain;
+import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
 import net.minecraft.entity.player.PlayerInventory;
 import net.minecraft.inventory.ItemStackHelper;
 import net.minecraft.inventory.container.Container;
@@ -29,11 +31,9 @@ public class AnvilTileEntity extends LockableLootTileEntity {
     public static class PerfectAnvilTileEntity extends AnvilTileEntity {
         public PerfectAnvilTileEntity() { super(RegMain.tileEntityPerfectAnvil.get()); }
     }
-
     public static class ChippedAnvilTileEntity extends AnvilTileEntity {
         public ChippedAnvilTileEntity() { super(RegMain.tileEntityChippedAnvil.get()); }
     }
-
     public static class DamagedAnvilTileEntity extends AnvilTileEntity {
         public DamagedAnvilTileEntity() { super(RegMain.tileEntityDamagedAnvil.get()); }
     }
@@ -48,6 +48,10 @@ public class AnvilTileEntity extends LockableLootTileEntity {
     public void setItems(NonNullList<ItemStack> itemsIn) {
         this.inventory = itemsIn;
     }
+    public boolean isItemValidForSlot(int index, ItemStack stack) {
+        // 只允许将物品放入(这个方法只影响自动化,从 GUI 放入需要在 Slot 里写)
+        return Block.getBlockFromItem(stack.getItem()) == Blocks.AIR;
+    }
 
     // NBT 交互
     public CompoundNBT write(CompoundNBT compound) {