From a23e9be2a71b750823a8464895dec33229ea2d5b Mon Sep 17 00:00:00 2001 From: sdddddf80 <2980187979@qq.com> Date: Tue, 25 Jul 2023 13:47:26 +0800 Subject: [PATCH] add Structure display for custom machine --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../hbm/config/CustomMachineConfigJSON.java | 7 +-- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../tileentity/RenderCustomMachine.java | 44 +++++++++++++++++++ 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7783f7652..0e00c1c8e 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -2027,7 +2027,7 @@ public class ModBlocks { cm_tank = new BlockCMGlass(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_tank").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_tank"); cm_circuit = new BlockCM(Material.iron, EnumCMCircuit.class, true, true).setBlockName("cm_circuit").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_circuit"); cm_port = new BlockCMPort(Material.iron, EnumCMMaterials.class, true, true).setBlockName("cm_port").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":cm_port"); - custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setHardness(5.0F).setResistance(10.0F); + custom_machine = new BlockCustomMachine().setBlockName("custom_machine").setCreativeTab(MainRegistry.machineTab).setLightLevel(1F).setHardness(5.0F).setResistance(10.0F); reactor_element = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_element_top", RefStrings.MODID + ":reactor_element_base").setBlockName("reactor_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_element_side"); reactor_control = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_control_top").setBlockName("reactor_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_control_side"); diff --git a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java index 79a659261..359eb3db5 100644 --- a/src/main/java/com/hbm/config/CustomMachineConfigJSON.java +++ b/src/main/java/com/hbm/config/CustomMachineConfigJSON.java @@ -203,9 +203,9 @@ public class CustomMachineConfigJSON { compDef.y = compObject.get("y").getAsInt(); compDef.z = compObject.get("z").getAsInt(); compDef.allowedMetas = new HashSet(); - JsonArray metas = compObject.get("metas").getAsJsonArray(); - for(int k = 0; k < metas.size(); k++) { - compDef.allowedMetas.add(metas.get(k).getAsInt()); + compDef.metas = compObject.get("metas").getAsJsonArray(); + for(int k = 0; k < compDef.metas.size(); k++) { + compDef.allowedMetas.add(compDef.metas.get(k).getAsInt()); } configuration.components.add(compDef); @@ -248,6 +248,7 @@ public class CustomMachineConfigJSON { public static class ComponentDefinition { public Block block; public Set allowedMetas; + public JsonArray metas; public int x; public int y; public int z; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 14d0c8a6e..c31870b9c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -325,6 +325,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityITERStruct.class, new RenderITERMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlasmaStruct.class, new RenderPlasmaMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatzStruct.class, new RenderWatzMultiblock()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCustomMachine.class, new RenderCustomMachine()); //RBMK ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlManual.class, new RenderRBMKControlRod()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlAuto.class, new RenderRBMKControlRod()); diff --git a/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java b/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java new file mode 100644 index 000000000..eb325b70c --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderCustomMachine.java @@ -0,0 +1,44 @@ +package com.hbm.render.tileentity; + +import com.hbm.config.CustomMachineConfigJSON; +import com.hbm.render.util.SmallBlockPronter; +import com.hbm.tileentity.machine.TileEntityCustomMachine; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + +public class RenderCustomMachine extends TileEntitySpecialRenderer { + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + NBTTagCompound nbt = new NBTTagCompound(); + tile.writeToNBT(nbt); + CustomMachineConfigJSON.MachineConfiguration config = CustomMachineConfigJSON.customMachines.get(nbt.getString("machineType")); + + ForgeDirection dir = ForgeDirection.getOrientation(tile.getBlockMetadata()); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + bindTexture(TextureMap.locationBlocksTexture); + SmallBlockPronter.startDrawing(); + for(CustomMachineConfigJSON.MachineConfiguration.ComponentDefinition comp : config.components){ + int rx = - dir.offsetX * comp.x + rot.offsetX * comp.x; + int ry = + comp.y; + int rz = - dir.offsetZ * comp.z + rot.offsetZ * comp.z; + if(dir == ForgeDirection.EAST || dir == ForgeDirection.WEST) { + rx = + dir.offsetZ * comp.z - rot.offsetZ * comp.z; + rz = + dir.offsetX * comp.x - rot.offsetX * comp.x; + } + SmallBlockPronter.drawSmolBlockAt(comp.block,comp.metas.get(comp.metas.size()-1).getAsInt(),rx,ry,rz); + + } + + SmallBlockPronter.draw(); + + GL11.glPopMatrix(); + } +}