Procházet zdrojové kódy

将铁砧容器绑定到 TileEntity

LTCatt před 6 roky
rodič
revize
20a7452422

+ 2 - 1
src/main/java/com/hexdragon/enchrebirth/block/AnvilContainerRe.java

@@ -26,7 +26,7 @@ import java.util.Map;
 public class AnvilContainerRe extends Container {
 
     // 输入与输出物品槽
-    private final IInventory inputInventory = new Inventory(2) {
+    private final Inventory inputInventory = new Inventory(2) {
         public void markDirty() {
             super.markDirty();
             AnvilContainerRe.this.onCraftMatrixChanged(this);
@@ -195,6 +195,7 @@ public class AnvilContainerRe extends Container {
         super(RegMain.containerAnvil.get(), id);
         this.worldPosCallable = worldPosCallable;
         this.player = playerInventory.player;
+        // worldPosCallable.consume((world,  blockPos) -> this.inputInventory = ((AnvilTileEntity) world.getTileEntity(blockPos)).getInventory());
         Constuct(playerInventory);
     }
 

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

@@ -16,13 +16,9 @@ import net.minecraft.item.Items;
 import net.minecraftforge.client.model.data.EmptyModelData;
 
 public class AnvilRenderer extends TileEntityRenderer<AnvilTileEntity> {
+    public AnvilRenderer(TileEntityRendererDispatcher rendererDispatcherIn) { super(rendererDispatcherIn); }
 
-    public AnvilRenderer(TileEntityRendererDispatcher rendererDispatcherIn) {
-        super(rendererDispatcherIn);
-    }
-
-    @Override
-    public void render(AnvilTileEntity tileEntityIn, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
+    @Override public void render(AnvilTileEntity tileEntityIn, float partialTicks, MatrixStack matrixStackIn, IRenderTypeBuffer bufferIn, int combinedLightIn, int combinedOverlayIn) {
         matrixStackIn.push();
         matrixStackIn.translate(1, 0, 0);
         BlockRendererDispatcher blockRenderer = Minecraft.getInstance().getBlockRendererDispatcher();

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

@@ -1,10 +1,50 @@
 package com.hexdragon.enchrebirth.block;
 
 import com.hexdragon.enchrebirth.registry.RegMain;
+import com.sun.istack.internal.Nullable;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.entity.player.PlayerInventory;
+import net.minecraft.inventory.container.Container;
+import net.minecraft.inventory.container.INamedContainerProvider;
 import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IWorldPosCallable;
+import net.minecraft.util.text.ITextComponent;
+import net.minecraft.util.text.StringTextComponent;
 
-public class AnvilTileEntity extends TileEntity {
+public class AnvilTileEntity extends TileEntity implements INamedContainerProvider {
     public AnvilTileEntity() {
         super(RegMain.tileEntityAnvil.get());
     }
+
+    @Override
+    public ITextComponent getDisplayName() {
+        return new StringTextComponent("First Container");
+    }
+
+    @Nullable
+    @Override
+    public Container createMenu(int sycID, PlayerInventory inventory, PlayerEntity player) {
+        return new AnvilContainerRe(sycID, inventory, IWorldPosCallable.of(this.world, this.pos));
+    }
+
+//    @Override
+//    public void read(BlockState state, CompoundNBT compound) {
+//        this.inventory.addItem(ItemStack.read(compound.getCompound("item1")));
+//        this.inventory.addItem(ItemStack.read(compound.getCompound("item2")));
+//        super.read(null, compound);
+//    }
+//
+//    @Override
+//    public CompoundNBT write(CompoundNBT compound) {
+//        ItemStack itemStack1 = this.inventory.getStackInSlot(0).copy();
+//        compound.put("item1", itemStack1.serializeNBT());
+//        ItemStack itemStack2 = this.inventory.getStackInSlot(1).copy();
+//        compound.put("item2", itemStack2.serializeNBT());
+//        return super.write(compound);
+//    }
+//
+//    public Inventory getInventory() {
+//        return inventory;
+//    }
+
 }

+ 1 - 7
src/main/java/com/hexdragon/enchrebirth/mixin/block/AnvilBlockMixin.java

@@ -1,16 +1,12 @@
 package com.hexdragon.enchrebirth.mixin.block;
 
-import com.hexdragon.enchrebirth.block.AnvilContainerRe;
 import com.hexdragon.enchrebirth.block.AnvilTileEntity;
 import net.minecraft.block.AnvilBlock;
 import net.minecraft.block.BlockState;
 import net.minecraft.block.FallingBlock;
 import net.minecraft.inventory.container.INamedContainerProvider;
-import net.minecraft.inventory.container.SimpleNamedContainerProvider;
 import net.minecraft.tileentity.TileEntity;
-import net.minecraft.util.IWorldPosCallable;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.text.TranslationTextComponent;
 import net.minecraft.world.IBlockReader;
 import net.minecraft.world.World;
 import net.minecraftforge.common.extensions.IForgeBlock;
@@ -27,9 +23,7 @@ public abstract class AnvilBlockMixin extends FallingBlock implements IForgeBloc
     // 将铁砧的处理事件替换为 Mod 所提供的事件
     @Inject(method = "getContainer", at = @At(value = "HEAD"), cancellable = true, locals = LocalCapture.CAPTURE_FAILEXCEPTION)
     private void getContainer(BlockState state, World worldIn, BlockPos pos, CallbackInfoReturnable<INamedContainerProvider> cir) {
-        cir.setReturnValue(new SimpleNamedContainerProvider(
-                (id, inventory, player) -> new AnvilContainerRe(id, inventory, IWorldPosCallable.of(worldIn, pos)),
-                new TranslationTextComponent("block.minecraft.anvil")));
+        cir.setReturnValue((INamedContainerProvider) worldIn.getTileEntity(pos));
         cir.cancel();
     }