Explorar o código

可以获取铁砧 GUI 对应的方块了

LTCatt %!s(int64=6) %!d(string=hai) anos
pai
achega
3787569f01

+ 2 - 0
src/main/java/com/hexdragon/enchrebirth/Main.java

@@ -1,9 +1,11 @@
 package com.hexdragon.enchrebirth;
 
+import net.minecraft.tileentity.TileEntity;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 public class Main {
     public static final String MODID = "enchrebirth";
     public static final Logger LOGGER = LogManager.getLogger();
+    public static TileEntity LastTileEntity = null;
 }

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

@@ -11,6 +11,7 @@ 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,9 +31,9 @@ public class AnvilContainerRe extends Container {
     private final PlayerEntity player;
     public AnvilContainerRe(int id, PlayerInventory playerInventory) {
         // 当从 Screen 渲染线程触发,就会从这里进行调用
-        this(id, playerInventory, IWorldPosCallable.DUMMY, new AnvilTileEntity(RegMain.tileEntityPerfectAnvil.get()));
+        this(id, playerInventory, IWorldPosCallable.DUMMY, new Inventory(2));
     }
-    public AnvilContainerRe(int id, PlayerInventory playerInventory, IWorldPosCallable worldPosCallable, AnvilTileEntity tileEntity) {
+    public AnvilContainerRe(int id, PlayerInventory playerInventory, IWorldPosCallable worldPosCallable, IInventory tileEntity) {
         super(RegMain.containerAnvil.get(), id);
         this.worldPosCallable = worldPosCallable;
         this.player = playerInventory.player;
@@ -42,7 +43,7 @@ public class AnvilContainerRe extends Container {
     }
 
     // 输入与输出物品槽
-    public AnvilTileEntity inputInventory;
+    public IInventory inputInventory;
     public final CraftResultInventory outputInventory = new CraftResultInventory();
 
     // 构造页面槽位

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

@@ -2,7 +2,6 @@ package com.hexdragon.enchrebirth.block.anvil;
 
 import com.hexdragon.corere.renderer.ItemRendererRe;
 import com.hexdragon.enchrebirth.Main;
-import com.hexdragon.enchrebirth.registry.RegMain;
 import com.mojang.blaze3d.matrix.MatrixStack;
 import com.mojang.blaze3d.systems.RenderSystem;
 import net.minecraft.client.Minecraft;
@@ -35,12 +34,13 @@ 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);
         }
-        // TODO : 获取当前铁砧对应的物品(很头大,因为它实际上调用的 AnvilContainerRe 的第一个构造函数,所以很难获取信息)
-        ItemStack stack = null;
-        // stack = new ItemStack(this.container.inputInventory.getType().);
-        if (stack == null) stack = new ItemStack(RegMain.itemDamagedNetheriteAnvil.get()); // 获取失败就渲染…… 测试用
-        // 渲染这个物品
-        ItemRendererRe.renderItemModelIntoGUIScaled(itemRenderer, stack, i + 21, j + 15, 64);
+        // TODO : 当铁砧破坏等级增加的时候存储的物品会掉出来
+        // TODO : 带有腐朽附魔的物品在满耐久的时候和原料一起放入铁砧允许修复,而不是打上红叉
+        // TODO : <验证> 检查使用 Main 获取 TileEntity 的方式是否会在多人造成兼容性问题
+        // TODO : 尝试找到更简洁的当前打开的 Block 的获取方式
+        // TODO : Timicasto 汇报的 Bug:按 Shift 转移物品容易崩溃?
+        // 渲染当前的 TileEntity
+        ItemRendererRe.renderItemModelIntoGUIScaled(itemRenderer, new ItemStack(Main.LastTileEntity.getBlockState().getBlock()), i + 21, j + 15, 64);
     }
 
     protected void drawGuiContainerForegroundLayer(MatrixStack matrixStack, int x, int y) {

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

@@ -1,5 +1,6 @@
 package com.hexdragon.enchrebirth.block.anvil;
 
+import com.hexdragon.enchrebirth.Main;
 import com.hexdragon.enchrebirth.registry.RegMain;
 import net.minecraft.block.AnvilBlock;
 import net.minecraft.block.BlockState;
@@ -88,6 +89,7 @@ public class AnvilTileEntity extends LockableLootTileEntity implements ISidedInv
     }
     protected Container createMenu(int id, PlayerInventory player) {
         AnvilContainerRe container = new AnvilContainerRe(id, player, IWorldPosCallable.of(this.world, this.pos), this);
+        Main.LastTileEntity = this;
         this.container = container;
         return container;
     }