Преглед изворни кода

其他损坏度的铁砧也可以更新显示的物品了

LTCatt пре 6 година
родитељ
комит
862b4a2602

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

@@ -45,5 +45,6 @@ import net.minecraftforge.api.distmarker.OnlyIn;
             itemRenderer.renderItem(stackRight, ItemCameraTransforms.TransformType.FIXED, true, matrixStackIn, bufferIn, combinedLightIn, combinedOverlayIn, ibakedmodel);
             matrixStackIn.pop();
         }
+
     }
 }

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

@@ -10,6 +10,7 @@ import net.minecraft.nbt.CompoundNBT;
 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.IWorldPosCallable;
 import net.minecraft.util.NonNullList;
 import net.minecraft.util.text.ITextComponent;
@@ -20,10 +21,19 @@ import javax.annotation.Nullable;
 
 // 铁砧 TileEntity,用于引导自定义模型与存储物品 NBT
 public class AnvilTileEntity extends LockableLootTileEntity {
-    public AnvilTileEntity() {
-        super(RegMain.tileEntityAnvil.get());
+    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()); }
+    }
+    public AnvilTileEntity(TileEntityType<?> typeIn) { super(typeIn); }
+
     private Container container = null;
     public void markDirty() {
         super.markDirty();
@@ -93,5 +103,6 @@ public class AnvilTileEntity extends LockableLootTileEntity {
     }
 
     // TODO : 检查红石信号输出
+    // TODO : 需要重构
 
 }

+ 11 - 2
src/main/java/com/hexdragon/enchrebirth/mixin/block/AnvilBlockMixin.java

@@ -3,6 +3,7 @@ package com.hexdragon.enchrebirth.mixin.block;
 import com.hexdragon.enchrebirth.block.anvil.AnvilTileEntity;
 import net.minecraft.block.AnvilBlock;
 import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
 import net.minecraft.block.FallingBlock;
 import net.minecraft.inventory.InventoryHelper;
 import net.minecraft.inventory.container.INamedContainerProvider;
@@ -33,23 +34,31 @@ public abstract class AnvilBlockMixin extends FallingBlock implements IForgeBloc
         return true;
     }
     @Override public TileEntity createTileEntity(BlockState state, IBlockReader world) {
-        return new AnvilTileEntity();
+        if (state.isIn(Blocks.ANVIL)) {
+            return new AnvilTileEntity.PerfectAnvilTileEntity();
+        } else if (state.isIn(Blocks.CHIPPED_ANVIL)) {
+            return new AnvilTileEntity.ChippedAnvilTileEntity();
+        } else {
+            return new AnvilTileEntity.DamagedAnvilTileEntity();
+        }
     }
 
+    // 将同步事件传递到客户端
     @Override public boolean eventReceived(BlockState state, World worldIn, BlockPos pos, int id, int param) {
         super.eventReceived(state, worldIn, pos, id, param);
         TileEntity tileentity = worldIn.getTileEntity(pos);
         return tileentity != null && tileentity.receiveClientEvent(id, param);
     }
 
+    // 当破坏时掉落内容物
     @Override public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) {
         if (!state.isIn(newState.getBlock())) {
             TileEntity tileentity = worldIn.getTileEntity(pos);
             if (tileentity instanceof AnvilTileEntity) {
                 InventoryHelper.dropItems(worldIn, pos, ((AnvilTileEntity) tileentity).getItems());
             }
-
             super.onReplaced(state, worldIn, pos, newState, isMoving);
         }
     }
+
 }

+ 3 - 1
src/main/java/com/hexdragon/enchrebirth/registry/RegClient.java

@@ -25,7 +25,9 @@ public class RegClient {
     @SubscribeEvent
     public static void onClientEvent(FMLClientSetupEvent event) {
         // 注册 Renderer
-        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityAnvil.get(), (AnvilRenderer::new));
+        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityPerfectAnvil.get(), (AnvilRenderer::new));
+        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityChippedAnvil.get(), (AnvilRenderer::new));
+        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityDamagedAnvil.get(), (AnvilRenderer::new));
     }
 
 }

+ 3 - 1
src/main/java/com/hexdragon/enchrebirth/registry/RegMain.java

@@ -23,6 +23,8 @@ public class RegMain {
 
     // TileEntity
     public static final DeferredRegister<TileEntityType<?>> TILE_ENTITIES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, Main.MODID);
-    public static RegistryObject<TileEntityType<AnvilTileEntity>> tileEntityAnvil = TILE_ENTITIES.register("obsidian_ter_tileentity", () -> TileEntityType.Builder.create(AnvilTileEntity::new, Blocks.ANVIL).build(null));
+    public static RegistryObject<TileEntityType<AnvilTileEntity.PerfectAnvilTileEntity>> tileEntityPerfectAnvil = TILE_ENTITIES.register("anvil_tileentity", () -> TileEntityType.Builder.create(AnvilTileEntity.PerfectAnvilTileEntity::new, Blocks.ANVIL).build(null));
+    public static RegistryObject<TileEntityType<AnvilTileEntity.ChippedAnvilTileEntity>> tileEntityChippedAnvil = TILE_ENTITIES.register("chipped_anvil_tileentity", () -> TileEntityType.Builder.create(AnvilTileEntity.ChippedAnvilTileEntity::new, Blocks.CHIPPED_ANVIL).build(null));
+    public static RegistryObject<TileEntityType<AnvilTileEntity.DamagedAnvilTileEntity>> tileEntityDamagedAnvil = TILE_ENTITIES.register("damaged_anvil_tileentity", () -> TileEntityType.Builder.create(AnvilTileEntity.DamagedAnvilTileEntity::new, Blocks.DAMAGED_ANVIL).build(null));
 
 }