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

阻止下界合金砧因为摔落而损坏

LTCatt 6 лет назад
Родитель
Сommit
5a5b90e573

+ 1 - 1
.idea/runConfigurations/runClient.xml

@@ -14,7 +14,7 @@
     </envs>
     <option name="MAIN_CLASS_NAME" value="net.minecraftforge.userdev.LaunchTesting" />
     <module name="Enchanting_Rebirth.main" />
-    <option name="VM_PARAMETERS" value="-Dforge.logging.markers=SCAN,REGISTRIES,REGISTRYDUMP -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump &quot;-Dos.name=Windows 10&quot; -Dos.version=10.0" />
+    <option name="VM_PARAMETERS" value="-Dforge.logging.console.level=info -Dforge.logging.markers=SCAN,REGISTRIES,REGISTRYDUMP -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump &quot;-Dos.name=Windows 10&quot; -Dos.version=10.0" />
     <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/run" />
     <method v="2">
       <option name="Make" enabled="true" />

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

@@ -36,13 +36,13 @@ public class AnvilTileEntity extends LockableLootTileEntity {
         public DamagedAnvilTileEntity() { super(RegMain.tileEntityDamagedAnvil.get()); }
     }
     public static class PerfectNetheriteAnvilTileEntity extends AnvilTileEntity {
-        public PerfectNetheriteAnvilTileEntity() { super(RegMain.tileEntityNetheritePerfectAnvil.get()); }
+        public PerfectNetheriteAnvilTileEntity() { super(RegMain.tileEntityPerfectNetheriteAnvil.get()); }
     }
     public static class ChippedNetheriteAnvilTileEntity extends AnvilTileEntity {
-        public ChippedNetheriteAnvilTileEntity() { super(RegMain.tileEntityNetheriteChippedAnvil.get()); }
+        public ChippedNetheriteAnvilTileEntity() { super(RegMain.tileEntityChippedNetheriteAnvil.get()); }
     }
     public static class DamagedNetheriteAnvilTileEntity extends AnvilTileEntity {
-        public DamagedNetheriteAnvilTileEntity() { super(RegMain.tileEntityNetheriteDamagedAnvil.get()); }
+        public DamagedNetheriteAnvilTileEntity() { super(RegMain.tileEntityDamagedNetheriteAnvil.get()); }
     }
     public AnvilTileEntity(TileEntityType<?> typeIn) { super(typeIn); }
 

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

@@ -16,10 +16,9 @@ import net.minecraftforge.common.ToolType;
 public class NetheriteAnvil extends AnvilBlock {
 
     public NetheriteAnvil() {
-        super(AbstractBlock.Properties.create(Material.ANVIL, MaterialColor.IRON).setRequiresTool().hardnessAndResistance(50F, 1200.0F).harvestTool(ToolType.PICKAXE).harvestLevel(4).sound(SoundType.ANVIL));
+        super(AbstractBlock.Properties.create(Material.ANVIL, MaterialColor.IRON).setRequiresTool().hardnessAndResistance(50F, 1200.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3).sound(SoundType.ANVIL));
         this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH).with(RegMain.blockStateMaterial, 1));
     }
-    // TODO : 设置挖掘等级等等
 
     public static class NetheriteAnvilItem extends BlockItem {
         public NetheriteAnvilItem(Block blockIn) {

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

@@ -44,8 +44,14 @@ public abstract class AnvilBlockMixin extends FallingBlock implements IForgeBloc
             return new AnvilTileEntity.PerfectAnvilTileEntity();
         } else if (state.isIn(Blocks.CHIPPED_ANVIL)) {
             return new AnvilTileEntity.ChippedAnvilTileEntity();
-        } else {
+        } else if (state.isIn(Blocks.DAMAGED_ANVIL)) {
             return new AnvilTileEntity.DamagedAnvilTileEntity();
+        } else if (state.isIn(RegMain.blockPerfectNetheriteAnvil.get())) {
+            return new AnvilTileEntity.PerfectNetheriteAnvilTileEntity();
+        } else if (state.isIn(RegMain.blockChippedNetheriteAnvil.get())) {
+            return new AnvilTileEntity.ChippedNetheriteAnvilTileEntity();
+        } else {
+            return new AnvilTileEntity.DamagedNetheriteAnvilTileEntity();
         }
     }
 
@@ -82,4 +88,16 @@ public abstract class AnvilBlockMixin extends FallingBlock implements IForgeBloc
         builder.add(RegMain.blockStateMaterial);
     }
 
+    // 阻止下界合金砧因为摔落而损坏
+    @Inject(method = "damage", at = @At(value = "HEAD"), cancellable = true, locals = LocalCapture.CAPTURE_FAILEXCEPTION)
+    private static void damage(BlockState state, CallbackInfoReturnable<BlockState> cir) {
+        if (state.isIn(RegMain.blockDamagedNetheriteAnvil.get()) || state.isIn(RegMain.blockChippedNetheriteAnvil.get()) || state.isIn(RegMain.blockPerfectNetheriteAnvil.get())) {
+            cir.setReturnValue(state.getBlock().getDefaultState().with(FACING, state.get(FACING)));
+            cir.cancel();
+        }
+    }
+
+    // TODO : 下界合金砧的 GUI 打不开
+    // TODO : 破坏下界合金砧没有掉落物
+
 }

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

@@ -26,6 +26,9 @@ public class RegClient {
         ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityPerfectAnvil.get(), (AnvilRenderer::new));
         ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityChippedAnvil.get(), (AnvilRenderer::new));
         ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityDamagedAnvil.get(), (AnvilRenderer::new));
+        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityPerfectNetheriteAnvil.get(), (AnvilRenderer::new));
+        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityChippedNetheriteAnvil.get(), (AnvilRenderer::new));
+        ClientRegistry.bindTileEntityRenderer(RegMain.tileEntityDamagedNetheriteAnvil.get(), (AnvilRenderer::new));
     }
 
 }

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

@@ -39,12 +39,12 @@ public class RegMain {
 
     // TileEntity
     public static final DeferredRegister<TileEntityType<?>> TILE_ENTITIES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, Main.MODID);
-    public static RegistryObject<TileEntityType<AnvilTileEntity.PerfectAnvilTileEntity>> tileEntityPerfectAnvil = TILE_ENTITIES.register("anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.PerfectAnvilTileEntity::new, Blocks.ANVIL).build(null));
-    public static RegistryObject<TileEntityType<AnvilTileEntity.ChippedAnvilTileEntity>> tileEntityChippedAnvil = TILE_ENTITIES.register("chipped_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.ChippedAnvilTileEntity::new, Blocks.CHIPPED_ANVIL).build(null));
-    public static RegistryObject<TileEntityType<AnvilTileEntity.DamagedAnvilTileEntity>> tileEntityDamagedAnvil = TILE_ENTITIES.register("damaged_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.DamagedAnvilTileEntity::new, Blocks.DAMAGED_ANVIL).build(null));
-    public static RegistryObject<TileEntityType<AnvilTileEntity.PerfectNetheriteAnvilTileEntity>> tileEntityNetheritePerfectAnvil = TILE_ENTITIES.register("netherite_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.PerfectNetheriteAnvilTileEntity::new, blockPerfectNetheriteAnvil.get()).build(null));
-    public static RegistryObject<TileEntityType<AnvilTileEntity.ChippedNetheriteAnvilTileEntity>> tileEntityNetheriteChippedAnvil = TILE_ENTITIES.register("chipped_netherite_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.ChippedNetheriteAnvilTileEntity::new, blockChippedNetheriteAnvil.get()).build(null));
-    public static RegistryObject<TileEntityType<AnvilTileEntity.DamagedNetheriteAnvilTileEntity>> tileEntityNetheriteDamagedAnvil = TILE_ENTITIES.register("damaged_netherite_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.DamagedNetheriteAnvilTileEntity::new, blockDamagedNetheriteAnvil.get()).build(null));
+    public static final RegistryObject<TileEntityType<AnvilTileEntity.PerfectAnvilTileEntity>> tileEntityPerfectAnvil = TILE_ENTITIES.register("anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.PerfectAnvilTileEntity::new, Blocks.ANVIL).build(null));
+    public static final RegistryObject<TileEntityType<AnvilTileEntity.ChippedAnvilTileEntity>> tileEntityChippedAnvil = TILE_ENTITIES.register("chipped_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.ChippedAnvilTileEntity::new, Blocks.CHIPPED_ANVIL).build(null));
+    public static final RegistryObject<TileEntityType<AnvilTileEntity.DamagedAnvilTileEntity>> tileEntityDamagedAnvil = TILE_ENTITIES.register("damaged_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.DamagedAnvilTileEntity::new, Blocks.DAMAGED_ANVIL).build(null));
+    public static final RegistryObject<TileEntityType<AnvilTileEntity.PerfectNetheriteAnvilTileEntity>> tileEntityPerfectNetheriteAnvil = TILE_ENTITIES.register("netherite_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.PerfectNetheriteAnvilTileEntity::new, blockPerfectNetheriteAnvil.get()).build(null));
+    public static final RegistryObject<TileEntityType<AnvilTileEntity.ChippedNetheriteAnvilTileEntity>> tileEntityChippedNetheriteAnvil = TILE_ENTITIES.register("chipped_netherite_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.ChippedNetheriteAnvilTileEntity::new, blockChippedNetheriteAnvil.get()).build(null));
+    public static final RegistryObject<TileEntityType<AnvilTileEntity.DamagedNetheriteAnvilTileEntity>> tileEntityDamagedNetheriteAnvil = TILE_ENTITIES.register("damaged_netherite_anvil", () -> TileEntityType.Builder.create(AnvilTileEntity.DamagedNetheriteAnvilTileEntity::new, blockDamagedNetheriteAnvil.get()).build(null));
 
     // BlockState
     public static final IntegerProperty blockStateMaterial = IntegerProperty.create("material", 0, 1);