LTCatt пре 6 година
родитељ
комит
8277c9f6df

+ 20 - 1
src/main/java/com/hexdragon/enchrebirth/block/anvil/AnvilTileEntity.java

@@ -13,12 +13,18 @@ import net.minecraft.network.NetworkManager;
 import net.minecraft.network.play.server.SUpdateTileEntityPacket;
 import net.minecraft.tileentity.LockableLootTileEntity;
 import net.minecraft.tileentity.TileEntityType;
+import net.minecraft.util.Direction;
 import net.minecraft.util.IWorldPosCallable;
 import net.minecraft.util.NonNullList;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.TranslationTextComponent;
+import net.minecraftforge.common.capabilities.Capability;
 import net.minecraftforge.common.util.Constants;
+import net.minecraftforge.common.util.LazyOptional;
+import net.minecraftforge.items.CapabilityItemHandler;
+import net.minecraftforge.items.ItemStackHandler;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 // 铁砧 TileEntity,用于引导自定义模型与存储物品 NBT
@@ -90,7 +96,20 @@ public class AnvilTileEntity extends LockableLootTileEntity {
         return container;
     }
 
-    // TODO : 让漏斗只能从上方注入物品(由于 Forge 接管了漏斗代码,需要使用它的 Capability,什么 SidedInventory 不管用)
+    // TODO : [难顶] 让漏斗只能从上方注入物品(由于 Forge 接管了漏斗代码,需要使用它的 Capability,什么 SidedInventory 不管用),不过这个写起来还是不太对的样子
+    @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
+        if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
+            return LazyOptional.of(() -> new ItemStackHandler() {
+                @Override public ItemStack insertItem(int slot, @Nonnull ItemStack stack, boolean simulate) {
+                    if (side != Direction.UP) return ItemStack.EMPTY;
+                    return super.insertItem(slot, stack, simulate);
+                }
+            }).cast();
+        }
+        return super.getCapability(cap, side);
+    }
+
+    // TODO : 由于目前的铁砧判断方式,它现在不接受线,因为线有对应的方块……
     // TODO : 让铁砧可以根据物品栏里的物品数量向比较器输出红石信号
 
 }