From 5ae5036e62d515423214b90ec34965afc066d8ea Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Mon, 1 Sep 2014 04:03:35 +0100 Subject: [PATCH 1/3] Replace the old connected glass renderer with one adapted from Chisel. I've made modifications to the original system to allow multi-meta CTM, such as between Dynamic Tanks and Dynamic Valves. This also allows texturing with effectively 5 textures, as opposed to the 47 needed previously --- .../java/mekanism/api/MekanismConfig.java | 1 + .../java/mekanism/client/ClientProxy.java | 4 + src/main/java/mekanism/client/render/CTM.java | 306 ++++++++++++++ .../render/block/CTMRenderingHandler.java | 67 +++ .../client/render/block/RenderBlocksCTM.java | 387 ++++++++++++++++++ .../client/render/block/TextureSubmap.java | 42 ++ .../client/render/block/TextureVirtual.java | 97 +++++ src/main/java/mekanism/common/CTMData.java | 47 +++ .../common/ConnectedTextureRenderer.java | 127 ------ .../java/mekanism/common/base/IBlockCTM.java | 8 + .../mekanism/common/block/BlockBasic.java | 102 +++-- .../generators/common/block/BlockReactor.java | 61 ++- .../textures/blocks/ctm/DynamicGlass-ctm.png | Bin 0 -> 1254 bytes .../DynamicGlass.png} | Bin .../textures/blocks/ctm/DynamicTank-ctm.png | Bin 0 -> 1277 bytes .../DynamicTank.png} | Bin 1180 -> 1201 bytes .../textures/blocks/ctm/DynamicValve-ctm.png | Bin 0 -> 1410 bytes .../DynamicValve.png} | Bin 1206 -> 1308 bytes .../textures/blocks/ctm/ReactorGlass-ctm.png | Bin 0 -> 3313 bytes .../textures/blocks/ctm/ReactorGlass.png | Bin 0 -> 2621 bytes .../blocks/ctm/ReactorLaserFocus-ctm.png | Bin 0 -> 3246 bytes .../textures/blocks/ctm/ReactorLaserFocus.png | Bin 0 -> 2601 bytes .../textures/blocks/glass/DynamicGlass_1.png | Bin 1173 -> 0 bytes .../textures/blocks/glass/DynamicGlass_10.png | Bin 1182 -> 0 bytes .../textures/blocks/glass/DynamicGlass_12.png | Bin 1181 -> 0 bytes .../textures/blocks/glass/DynamicGlass_13.png | Bin 1169 -> 0 bytes .../textures/blocks/glass/DynamicGlass_14.png | Bin 1181 -> 0 bytes .../textures/blocks/glass/DynamicGlass_15.png | Bin 1185 -> 0 bytes .../textures/blocks/glass/DynamicGlass_16.png | Bin 1193 -> 0 bytes .../textures/blocks/glass/DynamicGlass_17.png | Bin 1188 -> 0 bytes .../textures/blocks/glass/DynamicGlass_18.png | Bin 1192 -> 0 bytes .../textures/blocks/glass/DynamicGlass_19.png | Bin 1180 -> 0 bytes .../textures/blocks/glass/DynamicGlass_2.png | Bin 1202 -> 0 bytes .../textures/blocks/glass/DynamicGlass_20.png | Bin 1173 -> 0 bytes .../textures/blocks/glass/DynamicGlass_21.png | Bin 1185 -> 0 bytes .../textures/blocks/glass/DynamicGlass_22.png | Bin 1184 -> 0 bytes .../textures/blocks/glass/DynamicGlass_23.png | Bin 1181 -> 0 bytes .../textures/blocks/glass/DynamicGlass_24.png | Bin 1205 -> 0 bytes .../textures/blocks/glass/DynamicGlass_25.png | Bin 1178 -> 0 bytes .../textures/blocks/glass/DynamicGlass_26.png | Bin 1204 -> 0 bytes .../textures/blocks/glass/DynamicGlass_27.png | Bin 1225 -> 0 bytes .../textures/blocks/glass/DynamicGlass_28.png | Bin 1211 -> 0 bytes .../textures/blocks/glass/DynamicGlass_29.png | Bin 1186 -> 0 bytes .../textures/blocks/glass/DynamicGlass_3.png | Bin 1215 -> 0 bytes .../textures/blocks/glass/DynamicGlass_30.png | Bin 1207 -> 0 bytes .../textures/blocks/glass/DynamicGlass_31.png | Bin 1178 -> 0 bytes .../textures/blocks/glass/DynamicGlass_32.png | Bin 1178 -> 0 bytes .../textures/blocks/glass/DynamicGlass_33.png | Bin 1187 -> 0 bytes .../textures/blocks/glass/DynamicGlass_34.png | Bin 1189 -> 0 bytes .../textures/blocks/glass/DynamicGlass_35.png | Bin 1178 -> 0 bytes .../textures/blocks/glass/DynamicGlass_36.png | Bin 1223 -> 0 bytes .../textures/blocks/glass/DynamicGlass_37.png | Bin 1179 -> 0 bytes .../textures/blocks/glass/DynamicGlass_38.png | Bin 1217 -> 0 bytes .../textures/blocks/glass/DynamicGlass_4.png | Bin 1211 -> 0 bytes .../textures/blocks/glass/DynamicGlass_40.png | Bin 1182 -> 0 bytes .../textures/blocks/glass/DynamicGlass_41.png | Bin 1178 -> 0 bytes .../textures/blocks/glass/DynamicGlass_42.png | Bin 1184 -> 0 bytes .../textures/blocks/glass/DynamicGlass_43.png | Bin 1179 -> 0 bytes .../textures/blocks/glass/DynamicGlass_44.png | Bin 1189 -> 0 bytes .../textures/blocks/glass/DynamicGlass_45.png | Bin 1189 -> 0 bytes .../textures/blocks/glass/DynamicGlass_46.png | Bin 1183 -> 0 bytes .../textures/blocks/glass/DynamicGlass_5.png | Bin 1182 -> 0 bytes .../textures/blocks/glass/DynamicGlass_6.png | Bin 1207 -> 0 bytes .../textures/blocks/glass/DynamicGlass_7.png | Bin 1173 -> 0 bytes .../textures/blocks/glass/DynamicGlass_8.png | Bin 1177 -> 0 bytes .../textures/blocks/glass/DynamicGlass_9.png | Bin 1185 -> 0 bytes 66 files changed, 1083 insertions(+), 166 deletions(-) create mode 100644 src/main/java/mekanism/client/render/CTM.java create mode 100644 src/main/java/mekanism/client/render/block/CTMRenderingHandler.java create mode 100644 src/main/java/mekanism/client/render/block/RenderBlocksCTM.java create mode 100644 src/main/java/mekanism/client/render/block/TextureSubmap.java create mode 100644 src/main/java/mekanism/client/render/block/TextureVirtual.java create mode 100644 src/main/java/mekanism/common/CTMData.java delete mode 100644 src/main/java/mekanism/common/ConnectedTextureRenderer.java create mode 100644 src/main/java/mekanism/common/base/IBlockCTM.java create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicGlass-ctm.png rename src/main/resources/assets/mekanism/textures/blocks/{glass/DynamicGlass_39.png => ctm/DynamicGlass.png} (100%) create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicTank-ctm.png rename src/main/resources/assets/mekanism/textures/blocks/{glass/DynamicGlass_11.png => ctm/DynamicTank.png} (90%) create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicValve-ctm.png rename src/main/resources/assets/mekanism/textures/blocks/{glass/DynamicGlass_0.png => ctm/DynamicValve.png} (83%) create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorGlass-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorGlass.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorLaserFocus-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorLaserFocus.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_1.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_10.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_12.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_13.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_14.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_15.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_16.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_17.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_18.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_19.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_2.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_20.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_21.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_22.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_23.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_24.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_25.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_26.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_27.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_28.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_29.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_3.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_30.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_31.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_32.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_33.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_34.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_35.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_36.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_37.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_38.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_4.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_40.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_41.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_42.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_43.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_44.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_45.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_46.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_5.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_6.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_7.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_8.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_9.png diff --git a/src/main/java/mekanism/api/MekanismConfig.java b/src/main/java/mekanism/api/MekanismConfig.java index dc3b67a72..61374f5aa 100644 --- a/src/main/java/mekanism/api/MekanismConfig.java +++ b/src/main/java/mekanism/api/MekanismConfig.java @@ -47,6 +47,7 @@ public class MekanismConfig public static boolean machineEffects = true; public static boolean oldTransmitterRender = false; public static boolean replaceSoundsWhenResuming = true; + public static boolean renderCTM = true; } public static class usage diff --git a/src/main/java/mekanism/client/ClientProxy.java b/src/main/java/mekanism/client/ClientProxy.java index 4a0c62652..78a82a784 100644 --- a/src/main/java/mekanism/client/ClientProxy.java +++ b/src/main/java/mekanism/client/ClientProxy.java @@ -55,6 +55,7 @@ import mekanism.client.render.RenderGlowPanel; import mekanism.client.render.RenderPartTransmitter; import mekanism.client.render.RenderTickHandler; import mekanism.client.render.block.BasicRenderingHandler; +import mekanism.client.render.block.CTMRenderingHandler; import mekanism.client.render.block.MachineRenderingHandler; import mekanism.client.render.entity.RenderBalloon; import mekanism.client.render.entity.RenderFlame; @@ -174,6 +175,7 @@ public class ClientProxy extends CommonProxy { public static int MACHINE_RENDER_ID = RenderingRegistry.getNextAvailableRenderId(); public static int BASIC_RENDER_ID = RenderingRegistry.getNextAvailableRenderId(); + public static int CTM_RENDER_ID = RenderingRegistry.getNextAvailableRenderId(); @Override public void loadConfiguration() @@ -189,6 +191,7 @@ public class ClientProxy extends CommonProxy client.oldTransmitterRender = Mekanism.configuration.get("client", "OldTransmitterRender", false).getBoolean(); client.replaceSoundsWhenResuming = Mekanism.configuration.get("client", "ReplaceSoundsWhenResuming", true, "If true, will reduce lagging between player sounds. Setting to false will reduce GC load").getBoolean(); + client.renderCTM = Mekanism.configuration.get("client", "Use CTM Renderer", true).getBoolean(); if(Mekanism.configuration.hasChanged()) Mekanism.configuration.save(); @@ -336,6 +339,7 @@ public class ClientProxy extends CommonProxy //Register block handlers RenderingRegistry.registerBlockHandler(new MachineRenderingHandler()); RenderingRegistry.registerBlockHandler(new BasicRenderingHandler()); + RenderingRegistry.registerBlockHandler(new CTMRenderingHandler()); Mekanism.logger.info("Render registrations complete."); } diff --git a/src/main/java/mekanism/client/render/CTM.java b/src/main/java/mekanism/client/render/CTM.java new file mode 100644 index 000000000..544b5f84c --- /dev/null +++ b/src/main/java/mekanism/client/render/CTM.java @@ -0,0 +1,306 @@ +package mekanism.client.render; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.world.IBlockAccess; + +/** + * CTM Logic adapted from Chisel. + * Code licensed under GPLv2 + * @author AUTOMATIC_MAIDEN, asie, pokefenn, unpairedbracket + */ +public class CTM +{ + static int submaps[][] = { + {16, 17, 18, 19}, + {16, 9, 18, 13}, + {8, 9, 12, 13}, + {8, 17, 12, 19}, + {16, 9, 6, 15}, + {8, 17, 14, 7}, + {2, 11, 6, 15}, + {8, 9, 14, 15}, + {10, 1, 14, 15}, + {10, 11, 14, 5}, + {0, 11, 4, 15}, + {0, 1, 14, 15}, + {}, + {}, + {}, + {}, + {16, 17, 6, 7}, + {16, 9, 6, 5}, + {8, 9, 4, 5}, + {8, 17, 4, 7}, + {2, 11, 18, 13}, + {10, 3, 12, 19}, + {10, 11, 12, 13}, + {10, 3, 14, 7}, + {0, 11, 14, 15}, + {10, 11, 4, 15}, + {10, 11, 4, 5}, + {10, 1, 14, 5}, + {}, + {}, + {}, + {}, + {2, 3, 6, 7}, + {2, 1, 6, 5}, + {0, 1, 4, 5}, + {0, 3, 4, 7}, + {2, 11, 6, 5}, + {8, 9, 4, 15}, + {2, 1, 6, 15}, + {8, 9, 14, 5}, + {0, 1, 4, 15}, + {0, 1, 14, 5}, + {10, 1, 4, 15}, + {0, 11, 14, 5}, + {}, + {}, + {}, + {}, + {2, 3, 18, 19}, + {2, 1, 18, 13}, + {0, 1, 12, 13}, + {0, 3, 12, 19}, + {10, 1, 12, 13}, + {0, 3, 14, 7}, + {0, 11, 12, 13}, + {10, 3, 4, 7}, + {0, 11, 4, 5}, + {10, 1, 4, 5}, + {10, 11, 14, 15}, + {0, 1, 4, 5}, + {}, + {}, + {}, + {}, + }; + + public static int[] getSubmapIndices(IBlockAccess world, int x, int y, int z, int side, List metas) + { + int index = getTexture(world, x, y, z, side, metas); + + return submaps[index]; + } + + public static int getTexture(IBlockAccess world, int x, int y, int z, int side, List metas) + { + if(world == null) + return 0; + + int texture = 0; + Block block = world.getBlock(x, y, z); + + if(metas == null || metas.size() <= 0) + metas = Arrays.asList(world.getBlockMetadata(x, y, z)); + + boolean b[] = new boolean[6]; + if(side <= 1) + { + b[0] = isConnected(world, x - 1, y, z, side, block, metas); + b[1] = isConnected(world, x + 1, y, z, side, block, metas); + b[2] = isConnected(world, x, y, z + 1, side, block, metas); + b[3] = isConnected(world, x, y, z - 1, side, block, metas); + } else if(side == 2) + { + b[0] = isConnected(world, x + 1, y, z, side, block, metas); + b[1] = isConnected(world, x - 1, y, z, side, block, metas); + b[2] = isConnected(world, x, y - 1, z, side, block, metas); + b[3] = isConnected(world, x, y + 1, z, side, block, metas); + } else if(side == 3) + { + b[0] = isConnected(world, x - 1, y, z, side, block, metas); + b[1] = isConnected(world, x + 1, y, z, side, block, metas); + b[2] = isConnected(world, x, y - 1, z, side, block, metas); + b[3] = isConnected(world, x, y + 1, z, side, block, metas); + } else if(side == 4) + { + b[0] = isConnected(world, x, y, z - 1, side, block, metas); + b[1] = isConnected(world, x, y, z + 1, side, block, metas); + b[2] = isConnected(world, x, y - 1, z, side, block, metas); + b[3] = isConnected(world, x, y + 1, z, side, block, metas); + } else if(side == 5) + { + b[0] = isConnected(world, x, y, z + 1, side, block, metas); + b[1] = isConnected(world, x, y, z - 1, side, block, metas); + b[2] = isConnected(world, x, y - 1, z, side, block, metas); + b[3] = isConnected(world, x, y + 1, z, side, block, metas); + } + if(b[0] & !b[1] & !b[2] & !b[3]) + texture = 3; + else if(!b[0] & b[1] & !b[2] & !b[3]) + texture = 1; + else if(!b[0] & !b[1] & b[2] & !b[3]) + texture = 16; + else if(!b[0] & !b[1] & !b[2] & b[3]) + texture = 48; + else if(b[0] & b[1] & !b[2] & !b[3]) + texture = 2; + else if(!b[0] & !b[1] & b[2] & b[3]) + texture = 32; + else if(b[0] & !b[1] & b[2] & !b[3]) + texture = 19; + else if(b[0] & !b[1] & !b[2] & b[3]) + texture = 51; + else if(!b[0] & b[1] & b[2] & !b[3]) + texture = 17; + else if(!b[0] & b[1] & !b[2] & b[3]) + texture = 49; + else if(!b[0] & b[1] & b[2] & b[3]) + texture = 33; + else if(b[0] & !b[1] & b[2] & b[3]) + texture = 35; + else if(b[0] & b[1] & !b[2] & b[3]) + texture = 50; + else if(b[0] & b[1] & b[2] & !b[3]) + texture = 18; + else if(b[0] & b[1] & b[2] & b[3]) + texture = 34; + + boolean b2[] = new boolean[6]; + if(side <= 1) + { + b2[0] = !isConnected(world, x + 1, y, z + 1, side, block, metas); + b2[1] = !isConnected(world, x - 1, y, z + 1, side, block, metas); + b2[2] = !isConnected(world, x + 1, y, z - 1, side, block, metas); + b2[3] = !isConnected(world, x - 1, y, z - 1, side, block, metas); + } else if(side == 2) + { + b2[0] = !isConnected(world, x - 1, y - 1, z, side, block, metas); + b2[1] = !isConnected(world, x + 1, y - 1, z, side, block, metas); + b2[2] = !isConnected(world, x - 1, y + 1, z, side, block, metas); + b2[3] = !isConnected(world, x + 1, y + 1, z, side, block, metas); + } else if(side == 3) + { + b2[0] = !isConnected(world, x + 1, y - 1, z, side, block, metas); + b2[1] = !isConnected(world, x - 1, y - 1, z, side, block, metas); + b2[2] = !isConnected(world, x + 1, y + 1, z, side, block, metas); + b2[3] = !isConnected(world, x - 1, y + 1, z, side, block, metas); + } else if(side == 4) + { + b2[0] = !isConnected(world, x, y - 1, z + 1, side, block, metas); + b2[1] = !isConnected(world, x, y - 1, z - 1, side, block, metas); + b2[2] = !isConnected(world, x, y + 1, z + 1, side, block, metas); + b2[3] = !isConnected(world, x, y + 1, z - 1, side, block, metas); + } else if(side == 5) + { + b2[0] = !isConnected(world, x, y - 1, z - 1, side, block, metas); + b2[1] = !isConnected(world, x, y - 1, z + 1, side, block, metas); + b2[2] = !isConnected(world, x, y + 1, z - 1, side, block, metas); + b2[3] = !isConnected(world, x, y + 1, z + 1, side, block, metas); + } + + if(texture == 17 && b2[0]) + texture = 4; + if(texture == 19 && b2[1]) + texture = 5; + if(texture == 49 && b2[2]) + texture = 20; + if(texture == 51 && b2[3]) + texture = 21; + + if(texture == 18 && b2[0] && b2[1]) + texture = 7; + if(texture == 33 && b2[0] && b2[2]) + texture = 6; + if(texture == 35 && b2[3] && b2[1]) + texture = 23; + if(texture == 50 && b2[3] && b2[2]) + texture = 22; + + if(texture == 18 && !b2[0] && b2[1]) + texture = 39; + if(texture == 33 && b2[0] && !b2[2]) + texture = 38; + if(texture == 35 && !b2[3] && b2[1]) + texture = 53; + if(texture == 50 && b2[3] && !b2[2]) + texture = 52; + + if(texture == 18 && b2[0] && !b2[1]) + texture = 37; + if(texture == 33 && !b2[0] && b2[2]) + texture = 36; + if(texture == 35 && b2[3] && !b2[1]) + texture = 55; + if(texture == 50 && !b2[3] && b2[2]) + texture = 54; + + + if(texture == 34 && b2[0] && b2[1] && b2[2] && b2[3]) + texture = 58; + + if(texture == 34 && !b2[0] && b2[1] && b2[2] && b2[3]) + texture = 9; + if(texture == 34 && b2[0] && !b2[1] && b2[2] && b2[3]) + texture = 25; + if(texture == 34 && b2[0] && b2[1] && !b2[2] && b2[3]) + texture = 8; + if(texture == 34 && b2[0] && b2[1] && b2[2] && !b2[3]) + texture = 24; + + if(texture == 34 && b2[0] && b2[1] && !b2[2] && !b2[3]) + texture = 11; + if(texture == 34 && !b2[0] && !b2[1] && b2[2] && b2[3]) + texture = 26; + if(texture == 34 && !b2[0] && b2[1] && !b2[2] && b2[3]) + texture = 27; + if(texture == 34 && b2[0] && !b2[1] && b2[2] && !b2[3]) + texture = 10; + + if(texture == 34 && b2[0] && !b2[1] && !b2[2] && b2[3]) + texture = 42; + if(texture == 34 && !b2[0] && b2[1] && b2[2] && !b2[3]) + texture = 43; + + if(texture == 34 && b2[0] && !b2[1] && !b2[2] && !b2[3]) + texture = 40; + if(texture == 34 && !b2[0] && b2[1] && !b2[2] && !b2[3]) + texture = 41; + if(texture == 34 && !b2[0] && !b2[1] && b2[2] && !b2[3]) + texture = 56; + if(texture == 34 && !b2[0] && !b2[1] && !b2[2] && b2[3]) + texture = 57; + return texture; + } + + public static boolean isConnected(IBlockAccess world, int x, int y, int z, int side, Block block, List metas) + { + int x2 = x, y2 = y, z2 = z; + + switch(side) + { + case 0: + y2--; + break; + case 1: + y2++; + break; + case 2: + z2--; + break; + case 3: + z2++; + break; + case 4: + x2--; + break; + case 5: + x2++; + break; + } + + int meta = world.getBlockMetadata(x, y, z); + int meta2 = world.getBlockMetadata(x2, y2, z2); + + boolean validMeta = metas.contains(meta); + boolean validMeta2 = metas.contains(meta2); + + return world.getBlock(x, y, z).equals(block) && validMeta && !(world.getBlock(x2, y2, z2).equals(block) && validMeta2); + } +} \ No newline at end of file diff --git a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java new file mode 100644 index 000000000..b37da4b77 --- /dev/null +++ b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java @@ -0,0 +1,67 @@ +package mekanism.client.render.block; + +import mekanism.api.MekanismConfig; +import mekanism.client.ClientProxy; +import mekanism.client.render.MekanismRenderer; +import mekanism.common.CTMData; +import mekanism.common.base.IBlockCTM; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +/** + * CTM ISBRH adapted from Chisel + * Code licensed under GPLv2 + * @author AUTOMATIC_MAIDEN, asie, pokefenn, unpairedbracket + */ +public class CTMRenderingHandler implements ISimpleBlockRenderingHandler +{ + RenderBlocksCTM rendererCTM = new RenderBlocksCTM(); + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) + { + MekanismRenderer.renderItem(renderer, metadata, block); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks rendererOld) + { + int meta = world.getBlockMetadata(x, y, z); + + CTMData blockCTM = ((IBlockCTM)block).getCTMData(meta); + + if(MekanismConfig.client.renderCTM && blockCTM != null) + { + rendererCTM.blockAccess = world; + rendererCTM.renderMaxX = 1.0; + rendererCTM.renderMaxY = 1.0; + rendererCTM.renderMaxZ = 1.0; + + rendererCTM.submap = blockCTM.submap; + rendererCTM.submapSmall = blockCTM.submapSmall; + rendererCTM.metas = blockCTM.acceptableMetas; + + rendererCTM.rendererOld = rendererOld; + + return rendererCTM.renderStandardBlock(block, x, y, z); + } + return rendererOld.renderStandardBlock(block, x, y, z); + } + + @Override + public boolean shouldRender3DInInventory(int renderId) + { + return true; + } + + @Override + public int getRenderId() + { + return ClientProxy.CTM_RENDER_ID; + } + +} diff --git a/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java b/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java new file mode 100644 index 000000000..a93c92a6b --- /dev/null +++ b/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java @@ -0,0 +1,387 @@ +package mekanism.client.render.block; + +import java.util.List; + +import mekanism.client.render.CTM; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; + +/** + * CTM RenderBlocks adapted from Chisel + * Code licensed under GPLv2 + * @author AUTOMATIC_MAIDEN, asie, pokefenn, unpairedbracket + */ +public class RenderBlocksCTM extends RenderBlocks +{ + + RenderBlocksCTM() + { + super(); + + resetVertices(); + } + + Tessellator tessellator; + double[] X = new double[26]; + double[] Y = new double[26]; + double[] Z = new double[26]; + double[] U = new double[26]; + double[] V = new double[26]; + int[] L = new int[26]; + float[] R = new float[26]; + float[] G = new float[26]; + float[] B = new float[26]; + TextureSubmap submap; + TextureSubmap submapSmall; + RenderBlocks rendererOld; + List metas; + + int bx, by, bz; + + @Override + public boolean renderStandardBlock(Block block, int x, int y, int z) + { + bx = x; + by = y; + bz = z; + + tessellator = Tessellator.instance; + tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F); + + tessellator.addTranslation(x, y, z); + + boolean res = super.renderStandardBlock(block, x, y, z); + + tessellator.addTranslation(-x, -y, -z); + + return res; + } + + void setupSides(int a, int b, int c, int d, int xa, int xb, int xc, int xd, int e) + { + L[a] = brightnessBottomLeft; + L[b] = brightnessBottomRight; + L[c] = brightnessTopRight; + L[d] = brightnessTopLeft; + L[e] = (brightnessBottomLeft + brightnessTopLeft + brightnessTopRight + brightnessBottomRight) / 4; + L[xa] = (L[a] + L[b]) / 2; + L[xb] = (L[b] + L[c]) / 2; + L[xc] = (L[c] + L[d]) / 2; + L[xd] = (L[d] + L[a]) / 2; + + R[a] = colorRedBottomLeft; + R[b] = colorRedBottomRight; + R[c] = colorRedTopRight; + R[d] = colorRedTopLeft; + R[e] = (colorRedBottomLeft + colorRedTopLeft + colorRedTopRight + colorRedBottomRight) / 4; + R[xa] = (R[a] + R[b]) / 2; + R[xb] = (R[b] + R[c]) / 2; + R[xc] = (R[c] + R[d]) / 2; + R[xd] = (R[d] + R[a]) / 2; + + G[a] = colorGreenBottomLeft; + G[b] = colorGreenBottomRight; + G[c] = colorGreenTopRight; + G[d] = colorGreenTopLeft; + G[e] = (colorGreenBottomLeft + colorGreenTopLeft + colorGreenTopRight + colorGreenBottomRight) / 4; + G[xa] = (G[a] + G[b]) / 2; + G[xb] = (G[b] + G[c]) / 2; + G[xc] = (G[c] + G[d]) / 2; + G[xd] = (G[d] + G[a]) / 2; + + B[a] = colorBlueBottomLeft; + B[b] = colorBlueBottomRight; + B[c] = colorBlueTopRight; + B[d] = colorBlueTopLeft; + B[e] = (colorBlueBottomLeft + colorBlueTopLeft + colorBlueTopRight + colorBlueBottomRight) / 4; + B[xa] = (B[a] + B[b]) / 2; + B[xb] = (B[b] + B[c]) / 2; + B[xc] = (B[c] + B[d]) / 2; + B[xd] = (B[d] + B[a]) / 2; + } + + void side(int a, int b, int c, int d, int iconIndex, boolean flip) + { + IIcon icon = iconIndex >= 16 ? submapSmall.icons[iconIndex - 16] : submap.icons[iconIndex]; + + double u0 = icon.getMaxU(); + double u1 = icon.getMinU(); + double v0 = icon.getMaxV(); + double v1 = icon.getMinV(); + + U[a] = flip ? u1 : u1; + U[b] = flip ? u0 : u1; + U[c] = flip ? u0 : u0; + U[d] = flip ? u1 : u0; + + V[a] = flip ? v1 : v1; + V[b] = flip ? v1 : v0; + V[c] = flip ? v0 : v0; + V[d] = flip ? v0 : v1; + + vert(a); + vert(b); + vert(c); + vert(d); + } + + void vert(int index) + { + if(enableAO) + { + tessellator.setColorOpaque_F(R[index], G[index], B[index]); + tessellator.setBrightness(L[index]); + } + + tessellator.addVertexWithUV(X[index], Y[index], Z[index], U[index], V[index]); + } + + @Override + public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) + { + if(rendererOld != null && rendererOld.hasOverrideBlockTexture()) + { + IIcon i = rendererOld.overrideBlockTexture; + + tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); + } else + { + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 4, metas); + + setupSides(1, 0, 4, 5, 14, 19, 17, 23, 9); + side(1, 14, 9, 23, tex[0], false); + side(23, 9, 17, 5, tex[1], false); + side(9, 19, 4, 17, tex[3], false); + side(14, 0, 19, 9, tex[2], false); + } + } + + @Override + public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) + { + if(rendererOld != null && rendererOld.hasOverrideBlockTexture()) + { + IIcon i = rendererOld.overrideBlockTexture; + + tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMinU(), i.getMinV()); + } else + { + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 5, metas); + + setupSides(3, 2, 6, 7, 15, 25, 16, 21, 11); + side(11, 21, 3, 15, tex[3], false); + side(16, 7, 21, 11, tex[2], false); + side(25, 11, 15, 2, tex[1], false); + side(6, 16, 11, 25, tex[0], false); + } + } + + @Override + public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) + { + if(rendererOld != null && rendererOld.hasOverrideBlockTexture()) + { + IIcon i = rendererOld.overrideBlockTexture; + + tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); + } else + { + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 2, metas); + + setupSides(2, 3, 0, 1, 15, 18, 14, 22, 8); + side(2, 15, 8, 22, tex[0], false); + side(15, 3, 18, 8, tex[2], false); + side(8, 18, 0, 14, tex[3], false); + side(22, 8, 14, 1, tex[1], false); + } + } + + + @Override + public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) + { + if(rendererOld != null && rendererOld.hasOverrideBlockTexture()) + { + IIcon i = rendererOld.overrideBlockTexture; + + tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); + } else + { + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 3, metas); + + setupSides(4, 7, 6, 5, 20, 16, 24, 17, 10); + side(17, 4, 20, 10, tex[2], false); + side(5, 17, 10, 24, tex[0], false); + side(24, 10, 16, 6, tex[1], false); + side(10, 20, 7, 16, tex[3], false); + } + } + + @Override + public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon) + { + if(rendererOld != null && rendererOld.hasOverrideBlockTexture()) + { + IIcon i = rendererOld.overrideBlockTexture; + + tessellator.addVertexWithUV(0.0, 0.0, 1.0, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(0.0, 0.0, 0.0, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(1.0, 0.0, 0.0, i.getMaxU(), i.getMinV()); + tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); + } else + { + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 0, metas); + + setupSides(0, 3, 7, 4, 18, 21, 20, 19, 13); + side(13, 21, 7, 20, tex[3], true); + side(19, 13, 20, 4, tex[2], true); + side(0, 18, 13, 19, tex[0], true); + side(18, 3, 21, 13, tex[1], true); + } + } + + @Override + public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon) + { + if(rendererOld != null && rendererOld.hasOverrideBlockTexture()) + { + IIcon i = rendererOld.overrideBlockTexture; + + tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); + tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMinU(), i.getMaxV()); + tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMaxV()); + tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV()); + } else + { + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 1, metas); + + setupSides(2, 1, 5, 6, 22, 23, 24, 25, 12); + side(12, 24, 6, 25, tex[3], false); + side(22, 12, 25, 2, tex[1], false); + side(1, 23, 12, 22, tex[0], false); + side(23, 5, 24, 12, tex[2], false); + } + } + + void resetVertices() + { + X[0] = 0; + Z[0] = 0; + Y[0] = 0; + + X[1] = 0; + Z[1] = 0; + Y[1] = 1; + + X[2] = 1; + Z[2] = 0; + Y[2] = 1; + + X[3] = 1; + Z[3] = 0; + Y[3] = 0; + + X[4] = 0; + Z[4] = 1; + Y[4] = 0; + + X[5] = 0; + Z[5] = 1; + Y[5] = 1; + + X[6] = 1; + Z[6] = 1; + Y[6] = 1; + + X[7] = 1; + Z[7] = 1; + Y[7] = 0; + + X[8] = 0.5; + Z[8] = 0; + Y[8] = 0.5; + + X[9] = 0; + Z[9] = 0.5; + Y[9] = 0.5; + + X[10] = 0.5; + Z[10] = 1; + Y[10] = 0.5; + + X[11] = 1; + Z[11] = 0.5; + Y[11] = 0.5; + + X[12] = 0.5; + Z[12] = 0.5; + Y[12] = 1; + + X[13] = 0.5; + Z[13] = 0.5; + Y[13] = 0; + + X[14] = 0; + Z[14] = 0; + Y[14] = 0.5; + + X[15] = 1; + Z[15] = 0; + Y[15] = 0.5; + + X[16] = 1; + Z[16] = 1; + Y[16] = 0.5; + + X[17] = 0; + Z[17] = 1; + Y[17] = 0.5; + + X[18] = 0.5; + Z[18] = 0; + Y[18] = 0; + + X[19] = 0; + Z[19] = 0.5; + Y[19] = 0; + + X[20] = 0.5; + Z[20] = 1; + Y[20] = 0; + + X[21] = 1; + Z[21] = 0.5; + Y[21] = 0; + + X[22] = 0.5; + Z[22] = 0; + Y[22] = 1; + + X[23] = 0; + Z[23] = 0.5; + Y[23] = 1; + + X[24] = 0.5; + Z[24] = 1; + Y[24] = 1; + + X[25] = 1; + Z[25] = 0.5; + Y[25] = 1; + } +} diff --git a/src/main/java/mekanism/client/render/block/TextureSubmap.java b/src/main/java/mekanism/client/render/block/TextureSubmap.java new file mode 100644 index 000000000..2ac629774 --- /dev/null +++ b/src/main/java/mekanism/client/render/block/TextureSubmap.java @@ -0,0 +1,42 @@ +package mekanism.client.render.block; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.common.MinecraftForge; + +/** + * Multi-texture class adapted from Chisel + * Code licensed under GPLv2 + * @author AUTOMATIC_MAIDEN, asie, pokefenn, unpairedbracket + */ +public class TextureSubmap +{ + public int width, height; + public IIcon icon; + public IIcon icons[]; + + public TextureSubmap(IIcon i, int w, int h) + { + icon = i; + width = w; + height = h; + icons = new IIcon[width * height]; + + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void TexturesStitched(TextureStitchEvent.Post event) + { + + for(int x = 0; x < width; x++) + { + for(int y = 0; y < height; y++) + { + icons[y * width + x] = new TextureVirtual(icon, width, height, x, y); + } + } + } + +} diff --git a/src/main/java/mekanism/client/render/block/TextureVirtual.java b/src/main/java/mekanism/client/render/block/TextureVirtual.java new file mode 100644 index 000000000..28b81580b --- /dev/null +++ b/src/main/java/mekanism/client/render/block/TextureVirtual.java @@ -0,0 +1,97 @@ +package mekanism.client.render.block; + +import net.minecraft.util.IIcon; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +/** + * Texture component class adapted from Chisel + * Code licensed under GPLv2 + * @author AUTOMATIC_MAIDEN, asie, pokefenn, unpairedbracket + */ +public class TextureVirtual implements IIcon +{ + int ox, oy; + float u0, u1, v0, v1; + String name; + IIcon icon; + + TextureVirtual(IIcon parent, int w, int h, int x, int y) + { + icon = parent; + + u0 = icon.getInterpolatedU(16.0 * (x) / w); + u1 = icon.getInterpolatedU(16.0 * (x + 1) / w); + v0 = icon.getInterpolatedV(16.0 * (y) / h); + v1 = icon.getInterpolatedV(16.0 * (y + 1) / h); + + name = icon.getIconName() + "|" + x + "." + y; + + ox = icon.getIconWidth(); + oy = icon.getIconHeight(); + } + + @Override + @SideOnly(Side.CLIENT) + public float getMinU() + { + return u0; + } + + @Override + @SideOnly(Side.CLIENT) + public float getMaxU() + { + return u1; + } + + @Override + @SideOnly(Side.CLIENT) + public float getInterpolatedU(double d0) + { + return (float) (u0 + (u1 - u0) * d0 / 16.0); + } + + @Override + @SideOnly(Side.CLIENT) + public float getMinV() + { + return v0; + } + + @Override + @SideOnly(Side.CLIENT) + public float getMaxV() + { + return v1; + } + + @Override + @SideOnly(Side.CLIENT) + public float getInterpolatedV(double d0) + { + return (float) (v0 + (v1 - v0) * d0 / 16.0); + } + + @Override + @SideOnly(Side.CLIENT) + public String getIconName() + { + return name; + } + + @Override + @SideOnly(Side.CLIENT) + public int getIconWidth() + { + return ox; + } + + @Override + @SideOnly(Side.CLIENT) + public int getIconHeight() + { + return oy; + } + +} diff --git a/src/main/java/mekanism/common/CTMData.java b/src/main/java/mekanism/common/CTMData.java new file mode 100644 index 000000000..ccd24df07 --- /dev/null +++ b/src/main/java/mekanism/common/CTMData.java @@ -0,0 +1,47 @@ +package mekanism.common; + +import java.util.List; + +import mekanism.api.Coord4D; +import mekanism.client.render.block.TextureSubmap; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class CTMData +{ + public IIcon icon; + + public TextureSubmap submap; + + public TextureSubmap submapSmall; + + public String texture; + + public List acceptableMetas; + + public CTMData(String textureName, List connectableMeta) + { + texture = textureName; + acceptableMetas = connectableMeta; + } + + public void registerIcons(IIconRegister register) + { + icon = register.registerIcon("mekanism:" + texture); + submap = new TextureSubmap(register.registerIcon("mekanism:" + texture + "-ctm"), 4, 4); + submapSmall = new TextureSubmap(icon, 2, 2); + } + + @SideOnly(Side.CLIENT) + public boolean shouldRenderSide(IBlockAccess world, int x, int y, int z, int side, Block block) + { + Coord4D obj = new Coord4D(x, y, z); + return !(obj.getBlock(world).equals(block) && acceptableMetas.contains(obj.getMetadata(world))); + } + +} diff --git a/src/main/java/mekanism/common/ConnectedTextureRenderer.java b/src/main/java/mekanism/common/ConnectedTextureRenderer.java deleted file mode 100644 index b10cd7c76..000000000 --- a/src/main/java/mekanism/common/ConnectedTextureRenderer.java +++ /dev/null @@ -1,127 +0,0 @@ -package mekanism.common; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import mekanism.api.Coord4D; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class ConnectedTextureRenderer -{ - public static final byte[][] sideEdges = {{2, 5, 3, 4}, {2, 5, 3, 4}, {1, 4, 0, 5}, {1, 5, 0, 4}, {1, 3, 0, 2}, {1, 2, 0, 3}}; - - public Block block; - public List metadata; - - public String iconTitle; - - public Map glassMap = new HashMap(); - - public ConnectedTextureRenderer(String title, Block b, List meta) - { - iconTitle = title; - block = b; - metadata = meta; - } - - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister register) - { - glassMap.put(0, register.registerIcon("mekanism:" + iconTitle + "_13")); - glassMap.put(1, register.registerIcon("mekanism:" + iconTitle + "_20")); - glassMap.put(4, register.registerIcon("mekanism:" + iconTitle + "_19")); - glassMap.put(5, register.registerIcon("mekanism:" + iconTitle + "_23")); - glassMap.put(7, register.registerIcon("mekanism:" + iconTitle + "_1")); - glassMap.put(16, register.registerIcon("mekanism:" + iconTitle + "_7")); - glassMap.put(17, register.registerIcon("mekanism:" + iconTitle + "_35")); - glassMap.put(20, register.registerIcon("mekanism:" + iconTitle + "_40")); - glassMap.put(21, register.registerIcon("mekanism:" + iconTitle + "_21")); - glassMap.put(23, register.registerIcon("mekanism:" + iconTitle + "_31")); - glassMap.put(28, register.registerIcon("mekanism:" + iconTitle + "_14")); - glassMap.put(29, register.registerIcon("mekanism:" + iconTitle + "_45")); - glassMap.put(31, register.registerIcon("mekanism:" + iconTitle + "_2")); - glassMap.put(64, register.registerIcon("mekanism:" + iconTitle + "_8")); - glassMap.put(65, register.registerIcon("mekanism:" + iconTitle + "_41")); - glassMap.put(68, register.registerIcon("mekanism:" + iconTitle + "_46")); - glassMap.put(69, register.registerIcon("mekanism:" + iconTitle + "_22")); - glassMap.put(71, register.registerIcon("mekanism:" + iconTitle + "_32")); - glassMap.put(80, register.registerIcon("mekanism:" + iconTitle + "_11")); - glassMap.put(81, register.registerIcon("mekanism:" + iconTitle + "_10")); - glassMap.put(84, register.registerIcon("mekanism:" + iconTitle + "_9")); - glassMap.put(85, register.registerIcon("mekanism:" + iconTitle + "_17")); - glassMap.put(87, register.registerIcon("mekanism:" + iconTitle + "_5")); - glassMap.put(92, register.registerIcon("mekanism:" + iconTitle + "_34")); - glassMap.put(93, register.registerIcon("mekanism:" + iconTitle + "_18")); - glassMap.put(95, register.registerIcon("mekanism:" + iconTitle + "_6")); - glassMap.put(112, register.registerIcon("mekanism:" + iconTitle + "_25")); - glassMap.put(113, register.registerIcon("mekanism:" + iconTitle + "_43")); - glassMap.put(116, register.registerIcon("mekanism:" + iconTitle + "_42")); - glassMap.put(117, register.registerIcon("mekanism:" + iconTitle + "_29")); - glassMap.put(119, register.registerIcon("mekanism:" + iconTitle + "_37")); - glassMap.put(124, register.registerIcon("mekanism:" + iconTitle + "_26")); - glassMap.put(125, register.registerIcon("mekanism:" + iconTitle + "_30")); - glassMap.put(127, register.registerIcon("mekanism:" + iconTitle + "_38")); - glassMap.put(193, register.registerIcon("mekanism:" + iconTitle + "_12")); - glassMap.put(197, register.registerIcon("mekanism:" + iconTitle + "_44")); - glassMap.put(199, register.registerIcon("mekanism:" + iconTitle + "_0")); - glassMap.put(209, register.registerIcon("mekanism:" + iconTitle + "_33")); - glassMap.put(213, register.registerIcon("mekanism:" + iconTitle + "_16")); - glassMap.put(215, register.registerIcon("mekanism:" + iconTitle + "_4")); - glassMap.put(221, register.registerIcon("mekanism:" + iconTitle + "_15")); - glassMap.put(223, register.registerIcon("mekanism:" + iconTitle + "_3")); - glassMap.put(241, register.registerIcon("mekanism:" + iconTitle + "_24")); - glassMap.put(245, register.registerIcon("mekanism:" + iconTitle + "_28")); - glassMap.put(247, register.registerIcon("mekanism:" + iconTitle + "_36")); - glassMap.put(253, register.registerIcon("mekanism:" + iconTitle + "_27")); - glassMap.put(255, register.registerIcon("mekanism:" + iconTitle + "_39")); - } - - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) - { - int map = 0; - - for(int face = 0; face < 4; face++) - { - int side0 = sideEdges[side][((face + 3) % 4)]; - int side1 = sideEdges[side][face]; - - if(!canConnect(world, new Coord4D(x, y, z), sideEdges[side][face], side)) - { - map |= (7 << face * 2) % 256 | 7 >>> 8 - face * 2; - } - else if(!canConnect(world, new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side0)), side1, side)) - { - map |= 1 << face * 2; - } - else if(!canConnect(world, new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side1)), side0, side)) - { - map |= 1 << face * 2; - } - } - - return glassMap.get(map); - } - - private boolean canConnect(IBlockAccess access, Coord4D obj, int side, int face) - { - Coord4D coord = obj.getFromSide(ForgeDirection.getOrientation(side)); - Coord4D coordAbove = obj.getFromSide(ForgeDirection.getOrientation(face)); - - return (coord.getBlock(access) == block && metadata.contains(coord.getMetadata(access))) && (coordAbove.getBlock(access) != block || metadata.contains(coordAbove.getMetadata(access))); - } - - @SideOnly(Side.CLIENT) - public boolean shouldRenderSide(IBlockAccess world, int x, int y, int z, int side) - { - Coord4D obj = new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side).getOpposite()); - return obj.getBlock(world) != block || !metadata.contains(obj.getMetadata(world)); - } -} diff --git a/src/main/java/mekanism/common/base/IBlockCTM.java b/src/main/java/mekanism/common/base/IBlockCTM.java new file mode 100644 index 000000000..8f6343cf1 --- /dev/null +++ b/src/main/java/mekanism/common/base/IBlockCTM.java @@ -0,0 +1,8 @@ +package mekanism.common.base; + +import mekanism.common.CTMData; + +public interface IBlockCTM +{ + public CTMData getCTMData(int meta); +} diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index 5d6708100..a689199a0 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -8,7 +8,8 @@ import java.util.Random; import mekanism.api.Coord4D; import mekanism.api.Range4D; import mekanism.client.ClientProxy; -import mekanism.common.ConnectedTextureRenderer; +import mekanism.common.base.IBlockCTM; +import mekanism.common.CTMData; import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; import mekanism.common.MekanismBlocks; @@ -72,11 +73,13 @@ import cpw.mods.fml.relauncher.SideOnly; * @author AidanBrady * */ -public class BlockBasic extends Block +public class BlockBasic extends Block implements IBlockCTM { public IIcon[][] icons = new IIcon[256][6]; - public ConnectedTextureRenderer glassRenderer = new ConnectedTextureRenderer("glass/DynamicGlass", this, Arrays.asList(10)); + public CTMData dynamicTankCTM = new CTMData("ctm/DynamicTank", Arrays.asList(9, 11)); + public CTMData dynamicGlassCTM = new CTMData("ctm/DynamicGlass",Arrays.asList(10)); + public CTMData dynamicValveCTM = new CTMData("ctm/DynamicValve", Arrays.asList(11, 9)); public BlockBasic() { @@ -134,7 +137,9 @@ public class BlockBasic extends Block icons[14][2] = register.registerIcon("mekanism:SalinationBlock"); icons[15][0] = register.registerIcon("mekanism:SalinationValve"); - glassRenderer.registerIcons(register); + dynamicTankCTM.registerIcons(register); + dynamicGlassCTM.registerIcons(register); + dynamicValveCTM.registerIcons(register); } else if(this == MekanismBlocks.BasicBlock2) { @@ -150,40 +155,42 @@ public class BlockBasic extends Block if(this == MekanismBlocks.BasicBlock) { - if(metadata == 6) + switch(metadata) { - TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getTileEntity(x, y, z); + case 6: + TileEntityBasicBlock tileEntity6 = (TileEntityBasicBlock)world.getTileEntity(x, y, z); - if(side == 0 || side == 1) - { - return MekanismUtils.isActive(world, x, y, z) ? icons[6][3] : icons[6][1]; - } - else if(side == tileEntity.facing) - { - return MekanismUtils.isActive(world, x, y, z) ? icons[6][4] : icons[6][2]; - } - else { - return icons[6][0]; - } - } - else if(metadata == 10) - { - return glassRenderer.getIcon(world, x, y, z, side); - } - else if(metadata == 14) - { - TileEntitySalinationController tileEntity = (TileEntitySalinationController)world.getTileEntity(x, y, z); + if(side == 0 || side == 1) + { + return MekanismUtils.isActive(world, x, y, z) ? icons[6][3] : icons[6][1]; + } + else if(side == tileEntity6.facing) + { + return MekanismUtils.isActive(world, x, y, z) ? icons[6][4] : icons[6][2]; + } + else + { + return icons[6][0]; + } + case 9: + return dynamicTankCTM.icon; + case 10: + return dynamicGlassCTM.icon; + case 11: + return dynamicValveCTM.icon; + case 14: + TileEntitySalinationController tileEntity14 = (TileEntitySalinationController)world.getTileEntity(x, y, z); - if(side == tileEntity.facing) - { - return tileEntity.structured ? icons[14][1] : icons[14][0]; - } - else { - return icons[14][2]; - } - } - else { - return getIcon(side, metadata); + if(side == tileEntity14.facing) + { + return tileEntity14.structured ? icons[14][1] : icons[14][0]; + } + else + { + return icons[14][2]; + } + default: + return getIcon(side, metadata); } } else if(this == MekanismBlocks.BasicBlock2) @@ -583,7 +590,7 @@ public class BlockBasic extends Block @SideOnly(Side.CLIENT) public int getRenderType() { - return ClientProxy.BASIC_RENDER_ID; + return ClientProxy.CTM_RENDER_ID; } @Override @@ -795,9 +802,10 @@ public class BlockBasic extends Block @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { - if(this == MekanismBlocks.BasicBlock && world.getBlockMetadata(x, y, z) == 10) + Coord4D obj = new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side).getOpposite()); + if(this == MekanismBlocks.BasicBlock && obj.getMetadata(world) == 10) { - return glassRenderer.shouldRenderSide(world, x, y, z, side); + return dynamicGlassCTM.shouldRenderSide(world, x, y, z, side, this); } else { return super.shouldSideBeRendered(world, x, y, z, side); @@ -843,4 +851,22 @@ public class BlockBasic extends Block return false; } + + @Override + public CTMData getCTMData(int meta) + { + if(this == MekanismBlocks.BasicBlock) + { + switch(meta) + { + case 9: + return dynamicTankCTM; + case 10: + return dynamicGlassCTM; + case 11: + return dynamicValveCTM; + } + } + return null; + } } \ No newline at end of file diff --git a/src/main/java/mekanism/generators/common/block/BlockReactor.java b/src/main/java/mekanism/generators/common/block/BlockReactor.java index b9998703c..75f8d391b 100644 --- a/src/main/java/mekanism/generators/common/block/BlockReactor.java +++ b/src/main/java/mekanism/generators/common/block/BlockReactor.java @@ -1,10 +1,16 @@ package mekanism.generators.common.block; +import java.util.Arrays; import java.util.List; import java.util.Random; +import mekanism.api.Coord4D; +import mekanism.client.ClientProxy; +import mekanism.common.CTMData; import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; +import mekanism.common.MekanismBlocks; +import mekanism.common.base.IBlockCTM; import mekanism.common.tile.TileEntityBasicBlock; import mekanism.common.tile.TileEntityElectricBlock; import mekanism.common.util.MekanismUtils; @@ -29,15 +35,21 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + import buildcraft.api.tools.IToolWrench; import cpw.mods.fml.common.ModAPIManager; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class BlockReactor extends BlockContainer +public class BlockReactor extends BlockContainer implements IBlockCTM { public IIcon[][] icons = new IIcon[16][16]; + public CTMData reactorGlassCTM = new CTMData("ctm/ReactorGlass", Arrays.asList(0, 1)); + + public CTMData reactorLaserFocusCTM = new CTMData("ctm/ReactorLaserFocus", Arrays.asList(1, 0)); + public BlockReactor() { super(Material.iron); @@ -63,6 +75,9 @@ public class BlockReactor extends BlockContainer { icons[0][0] = register.registerIcon("mekanism:ReactorGlass"); icons[1][0] = register.registerIcon("mekanism:ReactorLaserFocus"); + + reactorGlassCTM.registerIcons(register); + reactorLaserFocusCTM.registerIcons(register); } } @@ -253,6 +268,12 @@ public class BlockReactor extends BlockContainer return this == GeneratorsBlocks.Reactor ? 0 : 1; } + @Override + public int getRenderType() + { + return ClientProxy.CTM_RENDER_ID; + } + @Override public boolean isOpaqueCube() { @@ -280,6 +301,44 @@ public class BlockReactor extends BlockContainer return null; } + @Override + public CTMData getCTMData(int meta) + { + if(this == GeneratorsBlocks.ReactorGlass) + { + switch(meta) + { + case 0: + return reactorGlassCTM; + case 1: + return reactorLaserFocusCTM; + } + } + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) + { + Coord4D obj = new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side).getOpposite()); + if(this == GeneratorsBlocks.ReactorGlass) + { + switch(obj.getMetadata(world)) + { + case 0: + return reactorGlassCTM.shouldRenderSide(world, x, y, z, side, this); + case 1: + return reactorLaserFocusCTM.shouldRenderSide(world, x, y, z, side, this); + default: + return super.shouldSideBeRendered(world, x, y, z, side); + } + } + else { + return super.shouldSideBeRendered(world, x, y, z, side); + } + } + public static enum ReactorBlockType { CONTROLLER(GeneratorsBlocks.Reactor, 0, "ReactorController", 10, TileEntityReactorController.class), diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicGlass-ctm.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicGlass-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..2af4a6fdc240231800f808af0215c910176e8d30 GIT binary patch literal 1254 zcmV4Tx0C?Jsl+SMzWf;dlyYtSh2{;E+0gJ(jKY)-zwqTG3L3g{$wouDv+hW_8 znCoMPiX1$ccrw9X5iY<%0|`MxY)DKvl=ve=5-x_+!%TMv zXvO#R%=3Pq@AvyW?~{Sd=T+Z#(-zEnp{kVf*7(GvmAOHhXIMiwYpQnO=gQ?FfU57i zJaX>+ObX!I_LcAd^Q@`Kz=qTlK(iLuvyeIlx@-F?1mhO4=V<7Mka-s9QsWbokjVmF z^(Za?T~kp!4s@x}No`@q40Cbh4CzWGcl~Ud+tLC)h%7op= zT>sBA>$aBlHUVpcnUO=lR!ALdsDVlxe_~gQBfyK0y6lJf3a}Ycf3#-Ca={irt|ajcdi^v~yrE#?Sk1c_{KG&Z<^rEXG`|s$wbP5r0c> zEaucV)T)I;zz)#&b0k$o(qsyWjmLc~DwN1$;iG6Wje|=GiHAhtq@H93XBAu-iHhS6 zqK?F45ru=j3MNvx9b=key~v7PA}jWaA+b;F5q((VHSxOGFA5?n`o!LLZ8@QDQRjA> z=UrMzEGir!f4aN1wWD`Zz3tdnPThH+y7`D_x$Gx70Rm>)$nDAgFU^0qp~G=qoO|oq z+Dr2se%yTZTl%7YUB9K@&=)!g{a1ZKU(j!m!^NeJWEP2oha^ZiNcM06myjwhzv0nL z;2uz%_D*+qZtN?k?#TCs?+tUZr<2Y8lKnG#J^N|)Z1(quro7^mw2!o}wC}aAwQsZ^ zv9$Br1?>mzqV}csZQ`v~-;eg&lS_0f@m8F*#5MEgM)L);U_NKQWDa%s%=KokIbd!v z3+Bf5yCwCKy*NzZwx_zXR)ibF!{I0rML-o7kK+&Re_Sm#iC!`I(AMq|dqvx&Q8Wrh z4$IhP^clUzK_l1kXKXPFMxU|8C_b=t_9`971S;9*cBYU7%%E_XL*f!3LwPI&=x_SR zl~Zqo*3NA96)WfauCxX{dqXw500000008jUPTTeK_~!fk7qE^G+bG2E QssI2007*qoM6N<$f+M_MEC2ui literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_39.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicGlass.png similarity index 100% rename from src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_39.png rename to src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicGlass.png diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicTank-ctm.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicTank-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..af7e4bd8c06f7f9fcd703c2e8a5ea86f18a3de07 GIT binary patch literal 1277 zcmaKs`#aMM9LK*aZLCaGgmt>;#2G1F3C-GQvLrRB?Bro?&tx$fM@(lmnIjYHNRmrv zD+^p9`bqQgK5YoKfC2zu=!wPn z>bBdO^ufBxjffrvfc5GKG}^}#jo#%GLk^9I3;}?6X+};rd27h_cBDY{;iZ8i%vrF)nAkHU%{VF~yj80ftCF88waYHb?Au~F{xkKXsra`dZqD4mLd!Gu zTU1_{Kl(U{8#g9@|KIKuu2SFM5CV3O@?~Jqutacy%TK91N7>GoFl!X@hVRw+8-#!DU1zk$F5~j2G)2WNl zDsx{NFSIR2cnpg?S^@jReL?-g+M>}y~SF3(-3N3kBd`*nw+{-6f zQ5=(5lG#cXJh8{rl^Sm&+gi4XY1O${<#1wiKXatWB7@ZWFOL#H4%3i#C9}$|C(Vk?7$ms|kF9|=CLH9C9OT~;o zDo#hW6fbOwf zY8j2Y?o>oRFOPdHCtShWA>g}dd_iq(3Dvh=F?h*)B%zSMcrWbjw6zmxU8uA}A^Lux zi}t3dIhv54_*E+PQo)ly-I~9;RGds`EdAVLc0zyUQWEM~51G~6T6&*onnq9Ei*>|m zZh-z|A?zE+dvRkw`Q&T7snn=x+wz$XEkkKYd0n2}_5H!h;Y8Qv2u-9$n_Bj_EQgoL zd&N`MzN#hjc2@IL(hUlTqF7U^xh|{l`<$s6&i0D6o%PGFZ8@r%^iXZ62|O9rK!n{~ z5YLCcate%c*f`my5&S&=pxzNTR#(n{?RUqrxp~~i#NBP1S>}Y1f)=p-k8tu`mCZfX!aI`j}j^0+dVp1ANvE?Q=? z3!Px6H$`4*XI~)S8Tb&X*=8$WuH=DT6HjO2ZxXzm<~_Fip8@-JiKMVL>wOhdW=U^O zL9rErKG9vWu%XdSAQhdh8%qZU8b67yD;VWS21THFn3uk~$dR1ej8jU@lPbFC$&`pM zGoc-~^tDL;D@$^5U*Af%+tn1+OygxBI==rRB3kzbz(HQ8F~I6t7uJ_&>xjV(>}3i7 zY}~RY5RjL@T?Zkto@d=5qXr-lct3h0`hX5GJu#?@@lwSw%20T4lU@@E56!~u`Gzvb zbQUKQAEuOKeWO&?Yaci9okl{V ax3viJS_R$NDP_#AWjx)zF_otRfBzpWYFGdO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_11.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicTank.png similarity index 90% rename from src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_11.png rename to src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicTank.png index 8dc1ec015c510e5d825d1dd4eae2e58e2c10c234..ca24627d38846b7094bc1edc385f96f0cb818ec8 100644 GIT binary patch delta 101 zcmbQkxsh{22urMor;B4q1n1l9j=T&89L|B;6qtm+>T?O|sC>R~`nbc(-CsRst>U_# vTE2Tza(8_6FaBqYECLP;$V8F(qGCn+`|0d=;y%XtGXR07tDnm{r-UW|Fh3%k delta 80 zcmdnUIfrvY2#bfYr;B4q1n1iej=T&EJWPf>599AmTX|!-gvF&J90Cds4GfG-ED%Ox ge&e>!UmxD$zGT46yK(*1Weh;z>FVdQ&MBb@08qvpDF6Tf diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicValve-ctm.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicValve-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..4a0a66be7f2c541773a4ef4a01fcb0e72d539b9b GIT binary patch literal 1410 zcmV-|1%3L7P)4Tx0C?Jsl+SMzWf;dlyYtSh2{;E+0gJ(jKY)-zwqTG3L3g{$wouDv+hW_8 znCoMPiX1$ccrw9X5iY<%0|`MxY)DKvl=ve=5-x_+!%TMv zXvO#R%=3Pq@AvyW?~{Sd=T+Z#(-zEnp{kVf*7(GvmAOHhXIMiwYpQnO=gQ?FfU57i zJaX>+ObX!I_LcAd^Q@`Kz=qTlK(iLuvyeIlx@-F?1mhO4=V<7Mka-s9QsWbokjVmF z^(Za?T~kp!4s@x}No`@q40Cbh4CzWGcl~Ud+tLC)h%7op= zT>sBA>$aBlHUVpcnUO=lR!ALdsDVlxe_~gQBfyK0y6lJf3a}Ycf3#-Ca={irt|ajcdi^v~yrE#?Sk1c_{KG&Z<^rEXG`|s$wbP5r0c> zEaucV)T)I;zz)#&b0k$o(qsyWjmLc~DwN1$;iG6Wje|=GiHAhtq@H93XBAu-iHhS6 zqK?F45ru=j3MNvx9b=key~v7PA}jWaA+b;F5q((VHSxOGFA5?n`o!LLZ8@QDQRjA> z=UrMzEGir!f4aN1wWD`Zz3tdnPThH+y7`D_x$Gx70Rm>)$nDAgFU^0qp~G=qoO|oq z+Dr2se%yTZTl%7YUB9K@&=)!g{a1ZKU(j!m!^NeJWEP2oha^ZiNcM06myjwhzv0nL z;2uz%_D*+qZtN?k?#TCs?+tUZr<2Y8lKnG#J^N|)Z1(quro7^mw2!o}wC}aAwQsZ^ zv9$Br1?>mzqV}csZQ`v~-;eg&lS_0f@m8F*#5MEgM)L);U_NKQWDa%s%=KokIbd!v z3+Bf5yCwCKy*NzZwx_zXR)ibF!{I0rML-o7kK+&Re_Sm#iC!`I(AMq|dqvx&Q8Wrh z4$IhP^clUzK_l1kXKXPFMxU|8C_b=t_9`971S;9*cBYU7%%E_XL*f!3LwPI&=x_SR zl~Zqo*3NA96)WfauCxX{dqx0S`$;K~#9!?b|U5gfI|5(Q&a6 zJ3&aJH}E{(#glk6!5bLS(sH-jLe?!JW2VTT&V(@W86$x)>$>hOhT*-Jx~@%fJLlvj zi3b1x00000000000I5bEI-qG9Da-P2|1?dHPFOpCFu-vf(zdNsRrS+1&-3F?Ogn#m zXA=9q%Q%jwwqY2eEnCg}Y=Qvr6}T6D-=D6xZHqc_t^BtDmSwqYD~ck@&1>cl23XhC zbjfPxXA=Yf000000000003g-VpmQ#1fXuo;f>!_l0000000000005)2K$6 zK7dUSfRw)i-=IF=qK*212tj=Sn;-xH000000001h(qYJZZ$1gD-{(a{J_=uV12)}n Q(EtDd07*qoM6N<$g2mpVkpKVy literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_0.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicValve.png similarity index 83% rename from src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_0.png rename to src/main/resources/assets/mekanism/textures/blocks/ctm/DynamicValve.png index fd38898923d84f042c1873db195e9bb37d4ba673..b053a882cf2ccfa3543e4e7ece57a20ddee34216 100644 GIT binary patch delta 209 zcmV;?051Qw37iVBR0MysNklMCsB@&0plXx;@HbfXUttu04xj_*0JsCk?k1E{62{o& zHShgp?q6bCKx>UCr3mMI;tL^6*b3Md&11R9p4D|jQV}>@D zQik|$@JK+6apLb7rF6nqz_x&#^NMpTk3)zKpabXtI`Cb^kU!)PE-fP)GAjx&00000 LNkvXXu0mjfiPc?l delta 106 zcmbQkwT*K_2uqT$r;B4q1n1iehI|YP94w9>?f?9*l-k9;kagD9%}M!Z?%uyybDPn; zSN{5i28%q+6@OPVK0cm2mu<`XwR{2%3``sf2;u|dt8`Ycqc#HE3_#%N>gTe~DWM4f D;m;>y diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorGlass-ctm.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorGlass-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..cd001c80cc09b967c95340ca3ea76fe81bd0fa75 GIT binary patch literal 3313 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorGlass.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/ReactorGlass.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1c34c34fd0aa21d10e5918af3b38f85e9a4892 GIT binary patch literal 2621 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 KhVGd000McNliru-UlBOEhJp??=b)X3ARZ@ zK~z}7jaNO79oca`RdqkQ`}NE`4k?j&1Zx31vcgT78c=433T!BI>cB7r z2}+$AFa&4&2Q05s!B{}fmI5}A1!yVKGmpdfUVq$stIEL}E*AdW${Kwe)%TpLQ>W;? z_ug|6L9G=b1TZsNYXAUd1~cPLFf&vY?hZ2p5h2D15dkx!)(R2%{Jg57>pF-CVvIN* zk673B^Y3nMZV=oZ-~ax1|MYmQsaEoFB-`(86k!j6LrO+hS4&4E%FHwjQr4Af*WqBs z6eGM80|1CHN^uUsky2DZ?BZf9*Vk7m1a=~$WijsiuGTv7kAM7=e++%!W1fxsKCgY> z$7Pwj%|_^OScKVlSv<|N#SpkLyE3D?lU-bFtTl&OP?5@|XzaS!O4;X9q%k7^)nC5c zMI!UoV9ewqj#6d`K|JStLO?Y`HO1@e*P9rL?%us)L?9ygZnuZK)bsOD%*b+1G)+Zb zy=s{`mXsO+-1<2Y)Jah;~F4#U95W>riX0%)N+MsI^)trRAJmM2@AD=!0RaF? zQO!9lT}LVsB9O+B8jYFC@Z71Q!vgDntZ9M9|s_v(EY+;oiLm zrIakwGJ1mzA08;cy7UF!Z%n zS1kpAivUFAM9M^ja0}&f@7`G>iaj9Pl+wjK&%D`ez|0~d%FOkXPo6#b=wCki-kZd4 z;tS8-b=_ZYx7$zGb@kgKjYL$;LTYW+QpiP2iGnlpiGs~$SeW}9LZ>1f6OpKDud1tv z=rm0+=e&IM(Lev?e@*^B{D{Bx*6;keyAy!5og~kh#YF@}2BJc$3#%%)>pF~Mq!2vj zETpQ7yDyu~W(7b1+}-JuPo8}fUot*<_KPPuXH`|oIj=eA8bWRWp_CHLHZF3yM<}I0 zhHYs z?hi^Sf)jsKYxS;6jfmZh+$_6$BLLu&y8&%BzG0T(R%G1FVhDl95o_O*{`SM){mqv} z;K`H6&zN~(W<5JQYn#nRYc1&ejSfTd5CqKmq^>6m#+fL#TGs~fuq;ajkO1^4T}I|s z03845kKg}$0RF$#!qcZu{SUtRt-r}RFRE%HVyfz@$^g6Sig{jyNF6XCB7_rHKBPo0 z!f~EUsI}Uj&{r`rVZ-4v!AHDtdTc57$+Ei7? zacs9UB;4E_$!ukj2qK_07!kcG!cbLB+?D#iuK<<@4<5`RguLJHSwwmfxi}muF7MpA z`QU>O{`S|u{_NiEY{hr}I$tjhzLD=_*<=nZvbl7b#=Gf82~vRkF?!xX`bg)Yhl&e+;6)Q?6*#v0nDY8Vnl7~`~K$6ojZ%W z-vDUiIBL#$UDp-kI3lH_BGSfjY!??7uSzL1fVQq{t+nbr&vComRx@)EN!QocY-VtW zxz|i2o)STXK}07hzPTx-?*|Zxmr~YS{;Qdhs^;VIcwTE|RRw@XL^=$^mAjYQ{Xk-j zvfuCJ>gwt^j$;xLAtKaT0{{jJa_+sgm8J;-6qp%8j1gwhOPOr9BjjwVs!J(lQ%X59 zGvA6*>AFt(zTXqkbaizlXJ=!}7*6}#QbHASqzY1;QOO1Zv%9b!y#jLM~Ot+k%^f_wKa4kEy26N_r6 zBJS>uU%guMJWJ?%CL%8G4d>_44~JS**P_}aC90~8WAyUi!KJ-^z2f{lpjKvGo$Z&xSxie zyW`F3emj~!e-~rKx~^E)^}nt1r4+b3Zms&~LIwc0CKt=H0090I=a{JOeQB3400000 LNkvXXu0mjfNd6rp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_1.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_1.png deleted file mode 100644 index a01ff0671e5fd995f6d4587b1d762c547f17b48a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1173 zcmV;G1Zw+4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000iNkl0rQs n0RsjM7%*VKfB^#r4169qtzH3$=ctl!00000NkvXXu0mjf%#STW diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_10.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_10.png deleted file mode 100644 index 43ed750186c92c29ed6d2153630477c544b837b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1182 zcmV;P1Y!G$P)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000rNkl;a}dCso19&xTHVQ wc47nw5FkK+009C72oNAZfWW7~=RLpn0$*JOlK^6A@Bjb+07*qoM6N<$f~#XOpa1{> diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_12.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_12.png deleted file mode 100644 index 7177958af8fc342b17f18e467f822c06451575e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1181 zcmV;O1Y-M%P)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000qNkl*KpZS*u2`2b-25xC3 vnR;A5wlD1f0RjXF5FkK+009C72oNB!kvsv#wBUtt00000NkvXXu0mjf4B0Lv diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_13.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_13.png deleted file mode 100644 index 8f8eae4945e34e802e8a6510331a2b81b3bb301b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1169 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 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_28.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_28.png deleted file mode 100644 index eae4873235e67811905d4ae4277f3686f6bfccaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1211 zcmV;s1VsCZP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000|Nkl;iuG(s+m-Aop5^7(G|7 Z;{!AS2vl=UzSjT%002ovPDHLkV1fd}KWhL0 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_29.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_29.png deleted file mode 100644 index b8d72cd49ff19a5e37027d3d4fd9e8527a3d9428..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 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 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_32.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_32.png deleted file mode 100644 index f1a9ccbe26a064a17de18ca73cba1651807d8b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 zcmV;L1ZDe)P)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000nNkl4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000wNkl`K(Ob>SdY6A!mAV7cs0RjXF5FkK+z;1ze4P2AZ152$rfVcnv002ovPDHLkV1l|X BGU5OL diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_34.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_34.png deleted file mode 100644 index f923e20ff1feb6da3348af3cd237f15cead20bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 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 ZegW+J2GA)TDUARC002ovPDHLkV1nfRJ}3YH diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_40.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_40.png deleted file mode 100644 index 0113052c16737c304fcaa7023b9543184bffa1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1182 zcmV;P1Y!G$P)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000rNkl;a}dCso19&xTHUl w$F-fuyfgs<1PBlyK!5-N0t5&UAduWWU*g*X4WzT2r~m)}07*qoM6N<$g39MH`v3p{ diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_41.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_41.png deleted file mode 100644 index 866464cd4fbeb2f4d1ddc1111c8505c299e1c748..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 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 DczZOn diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_45.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_45.png deleted file mode 100644 index aeb5d6cddbf80046223dc2d5d27a94985db960fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmV;W1X}xvP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000yNkl4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000sNkl4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000rNkl(?H2?A-sNmBXxTL>z wk|`rVfB*pk1PBlyK!5-N0t7w4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000^Nkl}fFps#1TOe2 z!23F~s%HFp8b1uF$^tl4g`#}H#2q1s}0tg_000Iag;1_Uz&leo~ V2GGqFWE=nh002ovPDHLkV1gq1J#qj5 diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_7.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_7.png deleted file mode 100644 index ddb9becd1583fc001bd68567eb6e6b3f7900cda7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1173 zcmV;G1Zw+4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000iNklb* n1`HT5V8DO@0|pFy9%y?560`w_|B#Ka00000NkvXXu0mjfT}~?B diff --git a/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_8.png b/src/main/resources/assets/mekanism/textures/blocks/glass/DynamicGlass_8.png deleted file mode 100644 index 38edb2e861c14d9ea5a1fbc85b5a2c4ed7db8aef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1177 zcmV;K1ZMk*P)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000mNkl4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000uNkl-0RbH00000NkvXXu0mjf-Sja7 From b1a11b0ba23f11a29f201294bf8dc641d3e378cd Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Mon, 1 Sep 2014 18:19:21 +0100 Subject: [PATCH 2/3] Further adapt the multiblock code. This will allow inter-block connected textures. I'll try and get side-specific texture overrides (eg. for the Salination Controller) working next. --- src/main/java/mekanism/client/render/CTM.java | 112 ++++++++++-------- .../render/block/CTMRenderingHandler.java | 2 +- .../client/render/block/RenderBlocksCTM.java | 15 +-- src/main/java/mekanism/common/CTMData.java | 30 ++++- .../mekanism/common/block/BlockBasic.java | 34 ++---- .../generators/common/block/BlockReactor.java | 26 ++-- .../blocks/ctm/SalinationBlock-ctm.png | Bin 0 -> 1292 bytes .../textures/blocks/ctm/SalinationBlock.png | Bin 0 -> 1206 bytes .../blocks/ctm/SalinationController.png | Bin 0 -> 1802 bytes .../blocks/ctm/SalinationControllerOn.png | Bin 0 -> 1952 bytes .../ctm/SalinationControllerOn.png.mcmeta | 5 + .../blocks/ctm/SalinationValve-ctm.png | Bin 0 -> 1438 bytes .../textures/blocks/ctm/SalinationValve.png | Bin 0 -> 1316 bytes 13 files changed, 116 insertions(+), 108 deletions(-) create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationBlock-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationBlock.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationController.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationControllerOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationControllerOn.png.mcmeta create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationValve-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationValve.png diff --git a/src/main/java/mekanism/client/render/CTM.java b/src/main/java/mekanism/client/render/CTM.java index 544b5f84c..2af53ba90 100644 --- a/src/main/java/mekanism/client/render/CTM.java +++ b/src/main/java/mekanism/client/render/CTM.java @@ -2,7 +2,9 @@ package mekanism.client.render; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; import net.minecraft.block.Block; import net.minecraft.world.IBlockAccess; @@ -81,55 +83,51 @@ public class CTM {}, }; - public static int[] getSubmapIndices(IBlockAccess world, int x, int y, int z, int side, List metas) + public static int[] getSubmapIndices(IBlockAccess world, int x, int y, int z, int side, HashMap> blockMetas) { - int index = getTexture(world, x, y, z, side, metas); + int index = getTexture(world, x, y, z, side, blockMetas); return submaps[index]; } - public static int getTexture(IBlockAccess world, int x, int y, int z, int side, List metas) + public static int getTexture(IBlockAccess world, int x, int y, int z, int side, HashMap> blockMetas) { if(world == null) return 0; int texture = 0; - Block block = world.getBlock(x, y, z); - - if(metas == null || metas.size() <= 0) - metas = Arrays.asList(world.getBlockMetadata(x, y, z)); boolean b[] = new boolean[6]; if(side <= 1) { - b[0] = isConnected(world, x - 1, y, z, side, block, metas); - b[1] = isConnected(world, x + 1, y, z, side, block, metas); - b[2] = isConnected(world, x, y, z + 1, side, block, metas); - b[3] = isConnected(world, x, y, z - 1, side, block, metas); + b[0] = isConnected(world, x - 1, y, z, side, blockMetas); + b[1] = isConnected(world, x + 1, y, z, side, blockMetas); + b[2] = isConnected(world, x, y, z + 1, side, blockMetas); + b[3] = isConnected(world, x, y, z - 1, side, blockMetas); } else if(side == 2) { - b[0] = isConnected(world, x + 1, y, z, side, block, metas); - b[1] = isConnected(world, x - 1, y, z, side, block, metas); - b[2] = isConnected(world, x, y - 1, z, side, block, metas); - b[3] = isConnected(world, x, y + 1, z, side, block, metas); + b[0] = isConnected(world, x + 1, y, z, side, blockMetas); + b[1] = isConnected(world, x - 1, y, z, side, blockMetas); + b[2] = isConnected(world, x, y - 1, z, side, blockMetas); + b[3] = isConnected(world, x, y + 1, z, side, blockMetas); } else if(side == 3) { - b[0] = isConnected(world, x - 1, y, z, side, block, metas); - b[1] = isConnected(world, x + 1, y, z, side, block, metas); - b[2] = isConnected(world, x, y - 1, z, side, block, metas); - b[3] = isConnected(world, x, y + 1, z, side, block, metas); + b[0] = isConnected(world, x - 1, y, z, side, blockMetas); + b[1] = isConnected(world, x + 1, y, z, side, blockMetas); + b[2] = isConnected(world, x, y - 1, z, side, blockMetas); + b[3] = isConnected(world, x, y + 1, z, side, blockMetas); } else if(side == 4) { - b[0] = isConnected(world, x, y, z - 1, side, block, metas); - b[1] = isConnected(world, x, y, z + 1, side, block, metas); - b[2] = isConnected(world, x, y - 1, z, side, block, metas); - b[3] = isConnected(world, x, y + 1, z, side, block, metas); + b[0] = isConnected(world, x, y, z - 1, side, blockMetas); + b[1] = isConnected(world, x, y, z + 1, side, blockMetas); + b[2] = isConnected(world, x, y - 1, z, side, blockMetas); + b[3] = isConnected(world, x, y + 1, z, side, blockMetas); } else if(side == 5) { - b[0] = isConnected(world, x, y, z + 1, side, block, metas); - b[1] = isConnected(world, x, y, z - 1, side, block, metas); - b[2] = isConnected(world, x, y - 1, z, side, block, metas); - b[3] = isConnected(world, x, y + 1, z, side, block, metas); + b[0] = isConnected(world, x, y, z + 1, side, blockMetas); + b[1] = isConnected(world, x, y, z - 1, side, blockMetas); + b[2] = isConnected(world, x, y - 1, z, side, blockMetas); + b[3] = isConnected(world, x, y + 1, z, side, blockMetas); } if(b[0] & !b[1] & !b[2] & !b[3]) texture = 3; @@ -165,34 +163,34 @@ public class CTM boolean b2[] = new boolean[6]; if(side <= 1) { - b2[0] = !isConnected(world, x + 1, y, z + 1, side, block, metas); - b2[1] = !isConnected(world, x - 1, y, z + 1, side, block, metas); - b2[2] = !isConnected(world, x + 1, y, z - 1, side, block, metas); - b2[3] = !isConnected(world, x - 1, y, z - 1, side, block, metas); + b2[0] = !isConnected(world, x + 1, y, z + 1, side, blockMetas); + b2[1] = !isConnected(world, x - 1, y, z + 1, side, blockMetas); + b2[2] = !isConnected(world, x + 1, y, z - 1, side, blockMetas); + b2[3] = !isConnected(world, x - 1, y, z - 1, side, blockMetas); } else if(side == 2) { - b2[0] = !isConnected(world, x - 1, y - 1, z, side, block, metas); - b2[1] = !isConnected(world, x + 1, y - 1, z, side, block, metas); - b2[2] = !isConnected(world, x - 1, y + 1, z, side, block, metas); - b2[3] = !isConnected(world, x + 1, y + 1, z, side, block, metas); + b2[0] = !isConnected(world, x - 1, y - 1, z, side, blockMetas); + b2[1] = !isConnected(world, x + 1, y - 1, z, side, blockMetas); + b2[2] = !isConnected(world, x - 1, y + 1, z, side, blockMetas); + b2[3] = !isConnected(world, x + 1, y + 1, z, side, blockMetas); } else if(side == 3) { - b2[0] = !isConnected(world, x + 1, y - 1, z, side, block, metas); - b2[1] = !isConnected(world, x - 1, y - 1, z, side, block, metas); - b2[2] = !isConnected(world, x + 1, y + 1, z, side, block, metas); - b2[3] = !isConnected(world, x - 1, y + 1, z, side, block, metas); + b2[0] = !isConnected(world, x + 1, y - 1, z, side, blockMetas); + b2[1] = !isConnected(world, x - 1, y - 1, z, side, blockMetas); + b2[2] = !isConnected(world, x + 1, y + 1, z, side, blockMetas); + b2[3] = !isConnected(world, x - 1, y + 1, z, side, blockMetas); } else if(side == 4) { - b2[0] = !isConnected(world, x, y - 1, z + 1, side, block, metas); - b2[1] = !isConnected(world, x, y - 1, z - 1, side, block, metas); - b2[2] = !isConnected(world, x, y + 1, z + 1, side, block, metas); - b2[3] = !isConnected(world, x, y + 1, z - 1, side, block, metas); + b2[0] = !isConnected(world, x, y - 1, z + 1, side, blockMetas); + b2[1] = !isConnected(world, x, y - 1, z - 1, side, blockMetas); + b2[2] = !isConnected(world, x, y + 1, z + 1, side, blockMetas); + b2[3] = !isConnected(world, x, y + 1, z - 1, side, blockMetas); } else if(side == 5) { - b2[0] = !isConnected(world, x, y - 1, z - 1, side, block, metas); - b2[1] = !isConnected(world, x, y - 1, z + 1, side, block, metas); - b2[2] = !isConnected(world, x, y + 1, z - 1, side, block, metas); - b2[3] = !isConnected(world, x, y + 1, z + 1, side, block, metas); + b2[0] = !isConnected(world, x, y - 1, z - 1, side, blockMetas); + b2[1] = !isConnected(world, x, y - 1, z + 1, side, blockMetas); + b2[2] = !isConnected(world, x, y + 1, z - 1, side, blockMetas); + b2[3] = !isConnected(world, x, y + 1, z + 1, side, blockMetas); } if(texture == 17 && b2[0]) @@ -269,7 +267,7 @@ public class CTM return texture; } - public static boolean isConnected(IBlockAccess world, int x, int y, int z, int side, Block block, List metas) + public static boolean isConnected(IBlockAccess world, int x, int y, int z, int side, HashMap> blockMetas) { int x2 = x, y2 = y, z2 = z; @@ -295,12 +293,22 @@ public class CTM break; } - int meta = world.getBlockMetadata(x, y, z); + Block block1 = world.getBlock(x, y, z); + Block block2 = world.getBlock(x2, y2, z2); + + int meta1 = world.getBlockMetadata(x, y, z); int meta2 = world.getBlockMetadata(x2, y2, z2); - boolean validMeta = metas.contains(meta); - boolean validMeta2 = metas.contains(meta2); + boolean validBlockMeta1 = false; + boolean invalidBlockMeta2 = true; - return world.getBlock(x, y, z).equals(block) && validMeta && !(world.getBlock(x2, y2, z2).equals(block) && validMeta2); + for(Entry> entry : blockMetas.entrySet()) + { + validBlockMeta1 |= block1.equals(entry.getKey()) && entry.getValue().contains(meta1); + + invalidBlockMeta2 &= !(block2.equals(entry.getKey()) && entry.getValue().contains(meta2)); + } + + return validBlockMeta1 && invalidBlockMeta2; } } \ No newline at end of file diff --git a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java index b37da4b77..48d27c97d 100644 --- a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java +++ b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java @@ -43,7 +43,7 @@ public class CTMRenderingHandler implements ISimpleBlockRenderingHandler rendererCTM.submap = blockCTM.submap; rendererCTM.submapSmall = blockCTM.submapSmall; - rendererCTM.metas = blockCTM.acceptableMetas; + rendererCTM.blockMetas = blockCTM.acceptableBlockMetas; rendererCTM.rendererOld = rendererOld; diff --git a/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java b/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java index a93c92a6b..d399f0dda 100644 --- a/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java +++ b/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java @@ -1,5 +1,6 @@ package mekanism.client.render.block; +import java.util.HashMap; import java.util.List; import mekanism.client.render.CTM; @@ -37,7 +38,7 @@ public class RenderBlocksCTM extends RenderBlocks TextureSubmap submap; TextureSubmap submapSmall; RenderBlocks rendererOld; - List metas; + HashMap> blockMetas; int bx, by, bz; @@ -152,7 +153,7 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 4, metas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 4, blockMetas); setupSides(1, 0, 4, 5, 14, 19, 17, 23, 9); side(1, 14, 9, 23, tex[0], false); @@ -175,7 +176,7 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMinU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 5, metas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 5, blockMetas); setupSides(3, 2, 6, 7, 15, 25, 16, 21, 11); side(11, 21, 3, 15, tex[3], false); @@ -198,7 +199,7 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 2, metas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 2, blockMetas); setupSides(2, 3, 0, 1, 15, 18, 14, 22, 8); side(2, 15, 8, 22, tex[0], false); @@ -222,7 +223,7 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 3, metas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 3, blockMetas); setupSides(4, 7, 6, 5, 20, 16, 24, 17, 10); side(17, 4, 20, 10, tex[2], false); @@ -245,7 +246,7 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 0, metas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 0, blockMetas); setupSides(0, 3, 7, 4, 18, 21, 20, 19, 13); side(13, 21, 7, 20, tex[3], true); @@ -268,7 +269,7 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 1, metas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 1, blockMetas); setupSides(2, 1, 5, 6, 22, 23, 24, 25, 12); side(12, 24, 6, 25, tex[3], false); diff --git a/src/main/java/mekanism/common/CTMData.java b/src/main/java/mekanism/common/CTMData.java index ccd24df07..908bfa0b0 100644 --- a/src/main/java/mekanism/common/CTMData.java +++ b/src/main/java/mekanism/common/CTMData.java @@ -1,6 +1,8 @@ package mekanism.common; +import java.util.HashMap; import java.util.List; +import java.util.Map.Entry; import mekanism.api.Coord4D; import mekanism.client.render.block.TextureSubmap; @@ -22,26 +24,42 @@ public class CTMData public String texture; - public List acceptableMetas; + public HashMap> acceptableBlockMetas = new HashMap>(); - public CTMData(String textureName, List connectableMeta) + public CTMData(String textureName, Block block, List connectableMeta) { texture = textureName; - acceptableMetas = connectableMeta; + acceptableBlockMetas.put(block, connectableMeta); } - public void registerIcons(IIconRegister register) + public CTMData registerIcons(IIconRegister register) { icon = register.registerIcon("mekanism:" + texture); submap = new TextureSubmap(register.registerIcon("mekanism:" + texture + "-ctm"), 4, 4); submapSmall = new TextureSubmap(icon, 2, 2); + + return this; + } + + public CTMData addOtherBlockConnectivities(Block block, List connectableMeta) + { + acceptableBlockMetas.put(block, connectableMeta); + return this; } @SideOnly(Side.CLIENT) - public boolean shouldRenderSide(IBlockAccess world, int x, int y, int z, int side, Block block) + public boolean shouldRenderSide(IBlockAccess world, int x, int y, int z, int side) { Coord4D obj = new Coord4D(x, y, z); - return !(obj.getBlock(world).equals(block) && acceptableMetas.contains(obj.getMetadata(world))); + Block coordBlock = obj.getBlock(world); + int coordMeta = obj.getMetadata(world); + boolean valid = false; + + for(Entry> entry : acceptableBlockMetas.entrySet()) + { + valid |= entry.getKey().equals(coordBlock) && entry.getValue().contains(coordMeta); + } + return !valid; } } diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index a689199a0..ad51332ce 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -77,9 +77,7 @@ public class BlockBasic extends Block implements IBlockCTM { public IIcon[][] icons = new IIcon[256][6]; - public CTMData dynamicTankCTM = new CTMData("ctm/DynamicTank", Arrays.asList(9, 11)); - public CTMData dynamicGlassCTM = new CTMData("ctm/DynamicGlass",Arrays.asList(10)); - public CTMData dynamicValveCTM = new CTMData("ctm/DynamicValve", Arrays.asList(11, 9)); + public CTMData[] ctms = new CTMData[16]; public BlockBasic() { @@ -137,13 +135,17 @@ public class BlockBasic extends Block implements IBlockCTM icons[14][2] = register.registerIcon("mekanism:SalinationBlock"); icons[15][0] = register.registerIcon("mekanism:SalinationValve"); - dynamicTankCTM.registerIcons(register); - dynamicGlassCTM.registerIcons(register); - dynamicValveCTM.registerIcons(register); + ctms[9] = new CTMData("ctm/DynamicTank", this, Arrays.asList(9, 11)).registerIcons(register); + ctms[10] = new CTMData("ctm/DynamicGlass", this, Arrays.asList(10)).registerIcons(register); + ctms[11] = new CTMData("ctm/DynamicValve", this, Arrays.asList(11, 9)).registerIcons(register); + + ctms[15] = new CTMData("ctm/SalinationValve", this, Arrays.asList(15)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock2, Arrays.asList(0)).registerIcons(register); } else if(this == MekanismBlocks.BasicBlock2) { icons[0][0] = register.registerIcon("mekanism:SalinationBlock"); + + ctms[0] = new CTMData("ctm/SalinationBlock", this, Arrays.asList(0)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock, Arrays.asList(15)).registerIcons(register); } } @@ -173,11 +175,9 @@ public class BlockBasic extends Block implements IBlockCTM return icons[6][0]; } case 9: - return dynamicTankCTM.icon; case 10: - return dynamicGlassCTM.icon; case 11: - return dynamicValveCTM.icon; + return ctms[metadata].icon; case 14: TileEntitySalinationController tileEntity14 = (TileEntitySalinationController)world.getTileEntity(x, y, z); @@ -805,7 +805,7 @@ public class BlockBasic extends Block implements IBlockCTM Coord4D obj = new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side).getOpposite()); if(this == MekanismBlocks.BasicBlock && obj.getMetadata(world) == 10) { - return dynamicGlassCTM.shouldRenderSide(world, x, y, z, side, this); + return ctms[10].shouldRenderSide(world, x, y, z, side); } else { return super.shouldSideBeRendered(world, x, y, z, side); @@ -855,18 +855,6 @@ public class BlockBasic extends Block implements IBlockCTM @Override public CTMData getCTMData(int meta) { - if(this == MekanismBlocks.BasicBlock) - { - switch(meta) - { - case 9: - return dynamicTankCTM; - case 10: - return dynamicGlassCTM; - case 11: - return dynamicValveCTM; - } - } - return null; + return ctms[meta]; } } \ No newline at end of file diff --git a/src/main/java/mekanism/generators/common/block/BlockReactor.java b/src/main/java/mekanism/generators/common/block/BlockReactor.java index 75f8d391b..42c3cedaf 100644 --- a/src/main/java/mekanism/generators/common/block/BlockReactor.java +++ b/src/main/java/mekanism/generators/common/block/BlockReactor.java @@ -46,9 +46,7 @@ public class BlockReactor extends BlockContainer implements IBlockCTM { public IIcon[][] icons = new IIcon[16][16]; - public CTMData reactorGlassCTM = new CTMData("ctm/ReactorGlass", Arrays.asList(0, 1)); - - public CTMData reactorLaserFocusCTM = new CTMData("ctm/ReactorLaserFocus", Arrays.asList(1, 0)); + public CTMData[] ctms = new CTMData[16]; public BlockReactor() { @@ -76,8 +74,8 @@ public class BlockReactor extends BlockContainer implements IBlockCTM icons[0][0] = register.registerIcon("mekanism:ReactorGlass"); icons[1][0] = register.registerIcon("mekanism:ReactorLaserFocus"); - reactorGlassCTM.registerIcons(register); - reactorLaserFocusCTM.registerIcons(register); + ctms[0] = new CTMData("ctm/ReactorGlass", this, Arrays.asList(0, 1)).registerIcons(register); + ctms[1] = new CTMData("ctm/ReactorLaserFocus", this, Arrays.asList(1, 0)).registerIcons(register); } } @@ -304,17 +302,7 @@ public class BlockReactor extends BlockContainer implements IBlockCTM @Override public CTMData getCTMData(int meta) { - if(this == GeneratorsBlocks.ReactorGlass) - { - switch(meta) - { - case 0: - return reactorGlassCTM; - case 1: - return reactorLaserFocusCTM; - } - } - return null; + return ctms[meta]; } @Override @@ -324,12 +312,12 @@ public class BlockReactor extends BlockContainer implements IBlockCTM Coord4D obj = new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side).getOpposite()); if(this == GeneratorsBlocks.ReactorGlass) { - switch(obj.getMetadata(world)) + int metadata = obj.getMetadata(world); + switch(metadata) { case 0: - return reactorGlassCTM.shouldRenderSide(world, x, y, z, side, this); case 1: - return reactorLaserFocusCTM.shouldRenderSide(world, x, y, z, side, this); + return ctms[metadata].shouldRenderSide(world, x, y, z, side); default: return super.shouldSideBeRendered(world, x, y, z, side); } diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationBlock-ctm.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationBlock-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..91611254d28403c39c0fc8df2cfda451953cbffa GIT binary patch literal 1292 zcmaKs{WsGK9LK*(!^%W?UN^OF+;NpsAsRNCNFMT3c5|5Fki}$Nv1x_Pl@&^o%wtvy z8Qm9}omkg_wQ;wAxL=W-Mh>E(t*ns~+IaZxeh0FWfi$?wPS4>#yWaAcoeYS^gxs${oO z5oEe^QwSa8MC9}~dG+GPLdOaVCG%qw^`E~iKK-%;bBGfdKPQoCQ2WB96K&VDExArR zHJp$!Xb+qGRTxUgGGnOSgQynSsaWRA(w<2b8}`z?biUZ{EAg`)|91v6e`#d3qoUxg zQ&B`9@=P={aZ3F0pF?D(lw%*iu;~Gw63PptTe6omJ=~0;eU1%!qYZRBP;>MKTy;jT zP8>OxNl(_B^O@O~NAKBzSuwK&FuvaQkc1k+1q3#j%QhZ1!p^3b)S%v%WWlt6gn|mw zg0QOvK9lelv+S9VcP6@nxB5?hYkIhHS|ytD_&$>Bk3JCnJpBTc6dI5X<7U&F=QG#9 zb%s79Hm)n4dm4>6#e)3dvby}j)TkW4R1^_S+gQv*e(7Mn+pfe)Ln zcT6T;w`JhH#feYEm@8-tIP?&ynbX)vSffMp1J>QS@ zk=`)c<1oc3--JSU88mJD*2>lOvNTL<<<|jyJN38)m(mRS}exp?Ch8|093KG*Li#@%+s)gbT!$fvJI2Dp|JB8U(~84PS=GDc=An)crgP*xFWUOLd--Xxu;t5ddKK zzHO@jMa2e6sFvV%(M4@iLq*Hhbg_h`rbLh3P)?VVgpx6aHu?A-M*)|y*Mh9t4PY{A zMrkT^o+X+4!9X{elx{7xd_7TLd(C>DiI0(uViSX^=3vRn3qLFqBr>RK91w3-V7|XQ pX!^rlfDF|PNPU7R8&<4kWgYbOhCI4t=S4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0000@NklusKuiW7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC70TxgnaUgrh0CuYg Ug(bnEbN~PV07*qoM6N<$g3*#ZH2?qr literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationController.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationController.png new file mode 100644 index 0000000000000000000000000000000000000000..1275a0a8bddb96aa82bb4b8f4827aa0f77c60f54 GIT binary patch literal 1802 zcmV+l2le=gP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0007^NklW6Uy_fl}BHDYsZcT9=L;c1`lQ~#Yqm+70D!aDP03X z96>+__Z$m8l%z#fhmCdAxnW{AzN^cOqNIH$*+1|ae?fp7xP18htFDan|LWNTC9)tO zPyM%xKylia@?;)f31!1_;E5_sHzG$xy?^wucMziyVDP_xe%~H}A>hnT%s^g#{!>S& zz09xcu->TqjDi@hyT4x(=#X_b^@B|z0HaBofQGKKDIRQt2$+COHU!;8_7Z3V8k%H% zWCQ`vsrP%m!@hv@xX=ZGByA1|G>#>4xN&?zU@R~_ZloRe;xMY0pg!+ShlU<#U%DWG zfNxKhs46l}Hi`}<-kPJ9JtWpP9`u7$2&^|L?35QxQreb9{NoZPja@jG6@OaK-o#Sd z=QDMc)2tx=;X)$_T*Uo183vS7)t%VoZAhj;? zViH-duDk5V>n#@~rC-h-7i|R_*H6#SDv6tT9B3nObk`;2 zWdw$t*}SfOh2J9hmQCOQ)<>*n1T{~y!@#A@c6#PB>P#$|T-(&kK3#Q@1H2E&n~MD0 s>I#5a(0!2Qx?R^R0(c?ojW?nH2QWVS&5zaFumAu607*qoM6N<$g40WAjsO4v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationControllerOn.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationControllerOn.png new file mode 100644 index 0000000000000000000000000000000000000000..7769211beb7fbfb6d3efeef9f822a134871d3a7e GIT binary patch literal 1952 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 Date: Mon, 1 Sep 2014 20:04:00 +0100 Subject: [PATCH 3/3] Add in support for rendering sides with overriden textures. Also special facing support. Salination Plants now fully connected - the Controller texture could do with some cleaning up to improve the connected look. --- .../render/block/CTMRenderingHandler.java | 14 ++- .../client/render/block/RenderBlocksCTM.java | 69 +++++++------- src/main/java/mekanism/common/CTMData.java | 86 +++++++++++++++--- .../java/mekanism/common/CTMTextureData.java | 31 +++++++ .../java/mekanism/common/base/IBlockCTM.java | 5 +- .../mekanism/common/block/BlockBasic.java | 27 ++++-- .../tile/TileEntitySalinationController.java | 27 +++++- .../generators/common/block/BlockReactor.java | 2 +- .../blocks/ctm/SalinationController-ctm.png | Bin 0 -> 1922 bytes .../blocks/ctm/SalinationControllerOn-ctm.png | Bin 0 -> 2170 bytes .../ctm/SalinationControllerOn-ctm.png.mcmeta | 5 + 11 files changed, 203 insertions(+), 63 deletions(-) create mode 100644 src/main/java/mekanism/common/CTMTextureData.java create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationController-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationControllerOn-ctm.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationControllerOn-ctm.png.mcmeta diff --git a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java index 48d27c97d..ade6d4401 100644 --- a/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java +++ b/src/main/java/mekanism/client/render/block/CTMRenderingHandler.java @@ -5,9 +5,12 @@ import mekanism.client.ClientProxy; import mekanism.client.render.MekanismRenderer; import mekanism.common.CTMData; import mekanism.common.base.IBlockCTM; +import mekanism.common.tile.TileEntityBasicBlock; +import mekanism.common.util.MekanismUtils; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -32,18 +35,21 @@ public class CTMRenderingHandler implements ISimpleBlockRenderingHandler { int meta = world.getBlockMetadata(x, y, z); - CTMData blockCTM = ((IBlockCTM)block).getCTMData(meta); + CTMData blockCTM = ((IBlockCTM)block).getCTMData(world, x, y, z, meta); if(MekanismConfig.client.renderCTM && blockCTM != null) { + if(blockCTM.hasFacingOverride() && world.getTileEntity(x, y, z) instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock tile = (TileEntityBasicBlock)world.getTileEntity(x, y, z); + blockCTM.setFacing(tile.facing); + } rendererCTM.blockAccess = world; rendererCTM.renderMaxX = 1.0; rendererCTM.renderMaxY = 1.0; rendererCTM.renderMaxZ = 1.0; - rendererCTM.submap = blockCTM.submap; - rendererCTM.submapSmall = blockCTM.submapSmall; - rendererCTM.blockMetas = blockCTM.acceptableBlockMetas; + rendererCTM.dataCTM = blockCTM; rendererCTM.rendererOld = rendererOld; diff --git a/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java b/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java index d399f0dda..af12f556e 100644 --- a/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java +++ b/src/main/java/mekanism/client/render/block/RenderBlocksCTM.java @@ -4,6 +4,7 @@ import java.util.HashMap; import java.util.List; import mekanism.client.render.CTM; +import mekanism.common.CTMData; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; @@ -35,10 +36,8 @@ public class RenderBlocksCTM extends RenderBlocks float[] R = new float[26]; float[] G = new float[26]; float[] B = new float[26]; - TextureSubmap submap; - TextureSubmap submapSmall; + CTMData dataCTM; RenderBlocks rendererOld; - HashMap> blockMetas; int bx, by, bz; @@ -104,9 +103,9 @@ public class RenderBlocksCTM extends RenderBlocks B[xd] = (B[d] + B[a]) / 2; } - void side(int a, int b, int c, int d, int iconIndex, boolean flip) + void side(int a, int b, int c, int d, int iconIndex, boolean flip, int side) { - IIcon icon = iconIndex >= 16 ? submapSmall.icons[iconIndex - 16] : submap.icons[iconIndex]; + IIcon icon = iconIndex >= 16 ? dataCTM.getSmallSubmap(side).icons[iconIndex - 16] : dataCTM.getSubmap(side).icons[iconIndex]; double u0 = icon.getMaxU(); double u1 = icon.getMinU(); @@ -153,13 +152,13 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(0.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 4, blockMetas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 4, dataCTM.acceptableBlockMetas); setupSides(1, 0, 4, 5, 14, 19, 17, 23, 9); - side(1, 14, 9, 23, tex[0], false); - side(23, 9, 17, 5, tex[1], false); - side(9, 19, 4, 17, tex[3], false); - side(14, 0, 19, 9, tex[2], false); + side(1, 14, 9, 23, tex[0], false, 4); + side(23, 9, 17, 5, tex[1], false, 4); + side(9, 19, 4, 17, tex[3], false, 4); + side(14, 0, 19, 9, tex[2], false, 4); } } @@ -176,13 +175,13 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMinU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 5, blockMetas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 5, dataCTM.acceptableBlockMetas); setupSides(3, 2, 6, 7, 15, 25, 16, 21, 11); - side(11, 21, 3, 15, tex[3], false); - side(16, 7, 21, 11, tex[2], false); - side(25, 11, 15, 2, tex[1], false); - side(6, 16, 11, 25, tex[0], false); + side(11, 21, 3, 15, tex[3], false, 5); + side(16, 7, 21, 11, tex[2], false, 5); + side(25, 11, 15, 2, tex[1], false, 5); + side(6, 16, 11, 25, tex[0], false, 5); } } @@ -199,13 +198,13 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(0.0, 1.0, 0.0, i.getMinU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 2, blockMetas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 2, dataCTM.acceptableBlockMetas); setupSides(2, 3, 0, 1, 15, 18, 14, 22, 8); - side(2, 15, 8, 22, tex[0], false); - side(15, 3, 18, 8, tex[2], false); - side(8, 18, 0, 14, tex[3], false); - side(22, 8, 14, 1, tex[1], false); + side(2, 15, 8, 22, tex[0], false, 2); + side(15, 3, 18, 8, tex[2], false, 2); + side(8, 18, 0, 14, tex[3], false, 2); + side(22, 8, 14, 1, tex[1], false, 2); } } @@ -223,13 +222,13 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 1.0, 1.0, i.getMaxU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 3, blockMetas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 3, dataCTM.acceptableBlockMetas); setupSides(4, 7, 6, 5, 20, 16, 24, 17, 10); - side(17, 4, 20, 10, tex[2], false); - side(5, 17, 10, 24, tex[0], false); - side(24, 10, 16, 6, tex[1], false); - side(10, 20, 7, 16, tex[3], false); + side(17, 4, 20, 10, tex[2], false, 3); + side(5, 17, 10, 24, tex[0], false, 3); + side(24, 10, 16, 6, tex[1], false, 3); + side(10, 20, 7, 16, tex[3], false, 3); } } @@ -246,13 +245,13 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 0.0, 1.0, i.getMaxU(), i.getMaxV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 0, blockMetas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 0, dataCTM.acceptableBlockMetas); setupSides(0, 3, 7, 4, 18, 21, 20, 19, 13); - side(13, 21, 7, 20, tex[3], true); - side(19, 13, 20, 4, tex[2], true); - side(0, 18, 13, 19, tex[0], true); - side(18, 3, 21, 13, tex[1], true); + side(13, 21, 7, 20, tex[3], true, 0); + side(19, 13, 20, 4, tex[2], true, 0); + side(0, 18, 13, 19, tex[0], true, 0); + side(18, 3, 21, 13, tex[1], true, 0); } } @@ -269,13 +268,13 @@ public class RenderBlocksCTM extends RenderBlocks tessellator.addVertexWithUV(1.0, 1.0, 0.0, i.getMaxU(), i.getMinV()); } else { - int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 1, blockMetas); + int tex[] = CTM.getSubmapIndices(blockAccess, bx, by, bz, 1, dataCTM.acceptableBlockMetas); setupSides(2, 1, 5, 6, 22, 23, 24, 25, 12); - side(12, 24, 6, 25, tex[3], false); - side(22, 12, 25, 2, tex[1], false); - side(1, 23, 12, 22, tex[0], false); - side(23, 5, 24, 12, tex[2], false); + side(12, 24, 6, 25, tex[3], false, 1); + side(22, 12, 25, 2, tex[1], false, 1); + side(1, 23, 12, 22, tex[0], false, 1); + side(23, 5, 24, 12, tex[2], false, 1); } } diff --git a/src/main/java/mekanism/common/CTMData.java b/src/main/java/mekanism/common/CTMData.java index 908bfa0b0..239626b1e 100644 --- a/src/main/java/mekanism/common/CTMData.java +++ b/src/main/java/mekanism/common/CTMData.java @@ -11,36 +11,100 @@ import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class CTMData { - public IIcon icon; - - public TextureSubmap submap; - - public TextureSubmap submapSmall; - - public String texture; + public CTMTextureData mainTextureData; public HashMap> acceptableBlockMetas = new HashMap>(); + public CTMTextureData[] sideOverrides = new CTMTextureData[6]; + + public CTMTextureData facingOverride; + + public int facing; + public CTMData(String textureName, Block block, List connectableMeta) { - texture = textureName; + mainTextureData = new CTMTextureData(textureName); acceptableBlockMetas.put(block, connectableMeta); } + public CTMData addSideOverride(ForgeDirection side, String sideTexture) + { + sideOverrides[side.ordinal()] = new CTMTextureData(sideTexture); + + return this; + } + + public CTMData addFacingOverride(String facingTexture) + { + facingOverride = new CTMTextureData(facingTexture); + + return this; + } + + public boolean hasFacingOverride() + { + return facingOverride != null; + } + + public void setFacing(int newFacing) + { + facing = newFacing; + } + public CTMData registerIcons(IIconRegister register) { - icon = register.registerIcon("mekanism:" + texture); - submap = new TextureSubmap(register.registerIcon("mekanism:" + texture + "-ctm"), 4, 4); - submapSmall = new TextureSubmap(icon, 2, 2); + mainTextureData.registerIcons(register); + + if(facingOverride != null) + { + facingOverride.registerIcons(register); + } + + for(CTMTextureData data : sideOverrides) + { + if(data != null) + { + data.registerIcons(register); + } + } return this; } + public CTMTextureData getTextureData(int side) + { + if(hasFacingOverride() && side == facing) + { + return facingOverride; + } + if(sideOverrides[side] != null) + { + return sideOverrides[side]; + } + return mainTextureData; + } + + public IIcon getIcon(int side) + { + return getTextureData(side).icon; + } + + public TextureSubmap getSubmap(int side) + { + return getTextureData(side).submap; + } + + public TextureSubmap getSmallSubmap(int side) + { + return getTextureData(side).submapSmall; + } + public CTMData addOtherBlockConnectivities(Block block, List connectableMeta) { acceptableBlockMetas.put(block, connectableMeta); diff --git a/src/main/java/mekanism/common/CTMTextureData.java b/src/main/java/mekanism/common/CTMTextureData.java new file mode 100644 index 000000000..490bd8e4f --- /dev/null +++ b/src/main/java/mekanism/common/CTMTextureData.java @@ -0,0 +1,31 @@ +package mekanism.common; + +import mekanism.client.render.block.TextureSubmap; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; + +public class CTMTextureData +{ + public IIcon icon; + + public TextureSubmap submap; + + public TextureSubmap submapSmall; + + public String texture; + + public CTMTextureData(String textureName) + { + texture = textureName; + } + + public void registerIcons(IIconRegister register) + { + icon = register.registerIcon("mekanism:" + texture); + submap = new TextureSubmap(register.registerIcon("mekanism:" + texture + "-ctm"), 4, 4); + submapSmall = new TextureSubmap(icon, 2, 2); + } + + +} diff --git a/src/main/java/mekanism/common/base/IBlockCTM.java b/src/main/java/mekanism/common/base/IBlockCTM.java index 8f6343cf1..8475b14df 100644 --- a/src/main/java/mekanism/common/base/IBlockCTM.java +++ b/src/main/java/mekanism/common/base/IBlockCTM.java @@ -2,7 +2,10 @@ package mekanism.common.base; import mekanism.common.CTMData; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + public interface IBlockCTM { - public CTMData getCTMData(int meta); + public CTMData getCTMData(IBlockAccess world, int x, int y, int z, int meta); } diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index ad51332ce..92afe748b 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -77,7 +77,7 @@ public class BlockBasic extends Block implements IBlockCTM { public IIcon[][] icons = new IIcon[256][6]; - public CTMData[] ctms = new CTMData[16]; + public CTMData[][] ctms = new CTMData[16][2]; public BlockBasic() { @@ -135,17 +135,19 @@ public class BlockBasic extends Block implements IBlockCTM icons[14][2] = register.registerIcon("mekanism:SalinationBlock"); icons[15][0] = register.registerIcon("mekanism:SalinationValve"); - ctms[9] = new CTMData("ctm/DynamicTank", this, Arrays.asList(9, 11)).registerIcons(register); - ctms[10] = new CTMData("ctm/DynamicGlass", this, Arrays.asList(10)).registerIcons(register); - ctms[11] = new CTMData("ctm/DynamicValve", this, Arrays.asList(11, 9)).registerIcons(register); + ctms[9][0] = new CTMData("ctm/DynamicTank", this, Arrays.asList(9, 11)).registerIcons(register); + ctms[10][0] = new CTMData("ctm/DynamicGlass", this, Arrays.asList(10)).registerIcons(register); + ctms[11][0] = new CTMData("ctm/DynamicValve", this, Arrays.asList(11, 9)).registerIcons(register); - ctms[15] = new CTMData("ctm/SalinationValve", this, Arrays.asList(15)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock2, Arrays.asList(0)).registerIcons(register); + ctms[14][0] = new CTMData("ctm/SalinationBlock", this, Arrays.asList(14, 15)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock2, Arrays.asList(0)).addFacingOverride("ctm/SalinationController").registerIcons(register); + ctms[14][1] = new CTMData("ctm/SalinationBlock", this, Arrays.asList(14, 15)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock2, Arrays.asList(0)).addFacingOverride("ctm/SalinationControllerOn").registerIcons(register); + ctms[15][0] = new CTMData("ctm/SalinationValve", this, Arrays.asList(15, 14)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock2, Arrays.asList(0)).registerIcons(register); } else if(this == MekanismBlocks.BasicBlock2) { icons[0][0] = register.registerIcon("mekanism:SalinationBlock"); - ctms[0] = new CTMData("ctm/SalinationBlock", this, Arrays.asList(0)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock, Arrays.asList(15)).registerIcons(register); + ctms[0][0] = new CTMData("ctm/SalinationBlock", this, Arrays.asList(0)).addOtherBlockConnectivities(MekanismBlocks.BasicBlock, Arrays.asList(14, 15)).registerIcons(register); } } @@ -177,7 +179,7 @@ public class BlockBasic extends Block implements IBlockCTM case 9: case 10: case 11: - return ctms[metadata].icon; + return ctms[metadata][0].getIcon(side); case 14: TileEntitySalinationController tileEntity14 = (TileEntitySalinationController)world.getTileEntity(x, y, z); @@ -805,7 +807,7 @@ public class BlockBasic extends Block implements IBlockCTM Coord4D obj = new Coord4D(x, y, z).getFromSide(ForgeDirection.getOrientation(side).getOpposite()); if(this == MekanismBlocks.BasicBlock && obj.getMetadata(world) == 10) { - return ctms[10].shouldRenderSide(world, x, y, z, side); + return ctms[10][0].shouldRenderSide(world, x, y, z, side); } else { return super.shouldSideBeRendered(world, x, y, z, side); @@ -853,8 +855,13 @@ public class BlockBasic extends Block implements IBlockCTM } @Override - public CTMData getCTMData(int meta) + public CTMData getCTMData(IBlockAccess world, int x, int y, int z, int meta) { - return ctms[meta]; + if(ctms[meta][1] != null && MekanismUtils.isActive(world, x, y, z)) + { + return ctms[meta][1]; + } + + return ctms[meta][0]; } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/tile/TileEntitySalinationController.java b/src/main/java/mekanism/common/tile/TileEntitySalinationController.java index a0c8f6b02..a3ff8501d 100644 --- a/src/main/java/mekanism/common/tile/TileEntitySalinationController.java +++ b/src/main/java/mekanism/common/tile/TileEntitySalinationController.java @@ -10,6 +10,7 @@ import mekanism.api.Coord4D; import mekanism.api.ISalinationSolar; import mekanism.api.Range4D; import mekanism.common.Mekanism; +import mekanism.common.base.IActiveState; import mekanism.common.content.tank.TankUpdateProtocol; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.util.MekanismUtils; @@ -26,7 +27,7 @@ import net.minecraftforge.fluids.FluidTank; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class TileEntitySalinationController extends TileEntitySalinationBlock +public class TileEntitySalinationController extends TileEntitySalinationBlock implements IActiveState { public static final int MAX_BRINE = 10000; public static final int MAX_SOLARS = 4; @@ -755,4 +756,28 @@ public class TileEntitySalinationController extends TileEntitySalinationBlock { return INFINITE_EXTENT_AABB; } + + @Override + public boolean getActive() + { + return structured; + } + + @Override + public void setActive(boolean active) + { + + } + + @Override + public boolean renderUpdate() + { + return false; + } + + @Override + public boolean lightUpdate() + { + return false; + } } diff --git a/src/main/java/mekanism/generators/common/block/BlockReactor.java b/src/main/java/mekanism/generators/common/block/BlockReactor.java index 42c3cedaf..ceaea6654 100644 --- a/src/main/java/mekanism/generators/common/block/BlockReactor.java +++ b/src/main/java/mekanism/generators/common/block/BlockReactor.java @@ -300,7 +300,7 @@ public class BlockReactor extends BlockContainer implements IBlockCTM } @Override - public CTMData getCTMData(int meta) + public CTMData getCTMData(IBlockAccess world, int x, int y, int z, int meta) { return ctms[meta]; } diff --git a/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationController-ctm.png b/src/main/resources/assets/mekanism/textures/blocks/ctm/SalinationController-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..bd2eeacec35c15edf31a849a468159de4c6b72a5 GIT binary patch literal 1922 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