Просмотр исходного кода

尝试获取铁砧 GUI 对应的方块但是很失败

LTCatt 6 лет назад
Родитель
Сommit
8383a9f2b4

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

@@ -11,7 +11,6 @@ import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.PlayerInventory;
 import net.minecraft.inventory.CraftResultInventory;
 import net.minecraft.inventory.IInventory;
-import net.minecraft.inventory.Inventory;
 import net.minecraft.inventory.container.Container;
 import net.minecraft.inventory.container.Slot;
 import net.minecraft.item.ItemStack;
@@ -30,19 +29,20 @@ public class AnvilContainerRe extends Container {
     public final IWorldPosCallable worldPosCallable;
     private final PlayerEntity player;
     public AnvilContainerRe(int id, PlayerInventory playerInventory) {
-        this(id, playerInventory, IWorldPosCallable.DUMMY);
+        // 当从 Screen 渲染线程触发,就会从这里进行调用
+        this(id, playerInventory, IWorldPosCallable.DUMMY, new AnvilTileEntity(RegMain.tileEntityPerfectAnvil.get()));
     }
-    public AnvilContainerRe(int id, PlayerInventory playerInventory, IWorldPosCallable worldPosCallable) {
+    public AnvilContainerRe(int id, PlayerInventory playerInventory, IWorldPosCallable worldPosCallable, AnvilTileEntity tileEntity) {
         super(RegMain.containerAnvil.get(), id);
         this.worldPosCallable = worldPosCallable;
         this.player = playerInventory.player;
-        worldPosCallable.consume((world, blockPos) -> this.inputInventory = (AnvilTileEntity) world.getTileEntity(blockPos)); // 与 NBT 中的物品栏同步
+        this.inputInventory = tileEntity; // 与 NBT 中的物品栏同步
         Constuct(playerInventory);
         onCraftMatrixChanged(inputInventory); // 初始化输出
     }
 
     // 输入与输出物品槽
-    public IInventory inputInventory = new Inventory(2);
+    public AnvilTileEntity inputInventory;
     public final CraftResultInventory outputInventory = new CraftResultInventory();
 
     // 构造页面槽位

+ 5 - 5
src/main/java/com/hexdragon/enchrebirth/block/anvil/AnvilScreenRe.java

@@ -35,12 +35,12 @@ public class AnvilScreenRe extends ContainerScreen<AnvilContainerRe> {
         if ((this.container.getSlot(0).getHasStack() || this.container.getSlot(1).getHasStack()) && !this.container.getSlot(2).getHasStack()) {
             this.blit(matrixStack, i + 103, j + 26, this.xSize, 0, 28, 21);
         }
-        // 获取当前铁砧的物品
-        final ItemStack[] stack = new ItemStack[1];
-        this.container.worldPosCallable.consume((world, blockPos) -> stack[0] = new ItemStack(world.getTileEntity(blockPos).getBlockState().getBlock().asItem()));
-        if (stack[0] == null) stack[0] = new ItemStack(RegMain.itemDamagedNetheriteAnvil.get()); // 获取失败就渲染…… 测试用
+        // TODO : 获取当前铁砧对应的物品(很头大,因为它实际上调用的 AnvilContainerRe 的第一个构造函数,所以很难获取信息)
+        ItemStack stack = null;
+        // stack = new ItemStack(this.container.inputInventory.getType().);
+        if (stack == null) stack = new ItemStack(RegMain.itemDamagedNetheriteAnvil.get()); // 获取失败就渲染…… 测试用
         // 渲染这个物品
-        ItemRendererRe.renderItemModelIntoGUIScaled(this.itemRenderer, stack[0], i + 21, j + 15, 64);
+        ItemRendererRe.renderItemModelIntoGUIScaled(itemRenderer, stack, i + 21, j + 15, 64);
     }
 
     protected void drawGuiContainerForegroundLayer(MatrixStack matrixStack, int x, int y) {

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

@@ -87,7 +87,7 @@ public class AnvilTileEntity extends LockableLootTileEntity implements ISidedInv
         world.notifyBlockUpdate(pos, getBlockState(), getBlockState(), Constants.BlockFlags.BLOCK_UPDATE); // 通知客户端更新物品模型渲染
     }
     protected Container createMenu(int id, PlayerInventory player) {
-        AnvilContainerRe container = new AnvilContainerRe(id, player, IWorldPosCallable.of(this.world, this.pos));
+        AnvilContainerRe container = new AnvilContainerRe(id, player, IWorldPosCallable.of(this.world, this.pos), this);
         this.container = container;
         return container;
     }