From 9360983a8b48950d781729b56d8b7e5b9ab775a3 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Mon, 9 Feb 2026 17:21:57 -0800 Subject: [PATCH 01/22] Rework glass panes to connect properly. Fixes rendering for both clear and stained glass panes, and cleans up some older code. This commit is missing textures for the tops and bottoms of the stained panes. --- .../smeltery/SmelteryProxyClient.java | 2 - .../tconstruct/smeltery/TinkerSmeltery.java | 24 +- .../smeltery/blocks/GlassBlock.java | 73 --- .../smeltery/blocks/GlassBlockConnected.java | 619 ++++++------------ .../blocks/GlassBlockConnectedMeta.java | 53 +- .../smeltery/blocks/GlassBlockStained.java | 50 -- .../tconstruct/smeltery/blocks/GlassPane.java | 18 - .../smeltery/blocks/GlassPaneConnected.java | 533 +-------------- .../blocks/GlassPaneConnectedMeta.java | 77 +++ .../smeltery/blocks/GlassPaneStained.java | 38 -- .../tconstruct/smeltery/blocks/PaneBase.java | 81 --- .../smeltery/itemblocks/GlassBlockItem.java | 3 +- .../smeltery/itemblocks/GlassPaneItem.java | 2 +- .../itemblocks/StainedGlassClearPaneItem.java | 9 + .../smeltery/model/PaneConnectedRender.java | 252 ++++++- .../tconstruct/smeltery/model/PaneRender.java | 47 -- .../blocks/glass/clear/glass_side.png | Bin 202 -> 217 bytes 17 files changed, 580 insertions(+), 1301 deletions(-) delete mode 100644 src/main/java/tconstruct/smeltery/blocks/GlassBlock.java delete mode 100644 src/main/java/tconstruct/smeltery/blocks/GlassBlockStained.java delete mode 100644 src/main/java/tconstruct/smeltery/blocks/GlassPane.java create mode 100644 src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java delete mode 100644 src/main/java/tconstruct/smeltery/blocks/GlassPaneStained.java delete mode 100644 src/main/java/tconstruct/smeltery/blocks/PaneBase.java delete mode 100644 src/main/java/tconstruct/smeltery/model/PaneRender.java diff --git a/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java b/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java index 4d8b245d550..54b5325aefb 100644 --- a/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java +++ b/src/main/java/tconstruct/smeltery/SmelteryProxyClient.java @@ -29,7 +29,6 @@ import tconstruct.smeltery.model.CastingBlockRender; import tconstruct.smeltery.model.CastingTableSpecialRenderer; import tconstruct.smeltery.model.PaneConnectedRender; -import tconstruct.smeltery.model.PaneRender; import tconstruct.smeltery.model.SmelteryRender; import tconstruct.smeltery.model.TankItemRenderer; import tconstruct.smeltery.model.TankRender; @@ -49,7 +48,6 @@ void registerRenderer() { RenderingRegistry.registerBlockHandler(new TankRender()); RenderingRegistry.registerBlockHandler(new CastingBlockRender()); RenderingRegistry.registerBlockHandler(new DryingRackRender()); - RenderingRegistry.registerBlockHandler(new PaneRender()); RenderingRegistry.registerBlockHandler(new PaneConnectedRender()); RenderingRegistry.registerBlockHandler(new RenderBlockFluid()); RenderingRegistry.registerBlockHandler(new BlockRenderCastingChannel()); diff --git a/src/main/java/tconstruct/smeltery/TinkerSmeltery.java b/src/main/java/tconstruct/smeltery/TinkerSmeltery.java index e825d58dbff..e850de43c26 100644 --- a/src/main/java/tconstruct/smeltery/TinkerSmeltery.java +++ b/src/main/java/tconstruct/smeltery/TinkerSmeltery.java @@ -48,7 +48,7 @@ import tconstruct.smeltery.blocks.GlassBlockConnected; import tconstruct.smeltery.blocks.GlassBlockConnectedMeta; import tconstruct.smeltery.blocks.GlassPaneConnected; -import tconstruct.smeltery.blocks.GlassPaneStained; +import tconstruct.smeltery.blocks.GlassPaneConnectedMeta; import tconstruct.smeltery.blocks.GlueBlock; import tconstruct.smeltery.blocks.GlueFluid; import tconstruct.smeltery.blocks.LavaTankBlock; @@ -511,7 +511,6 @@ public void preInit(FMLPreInitializationEvent event) { // Glass TinkerSmeltery.clearGlass = new GlassBlockConnected("clear", false).setBlockName("GlassBlock"); - TinkerSmeltery.clearGlass.stepSound = Block.soundTypeGlass; TinkerSmeltery.glassPane = new GlassPaneConnected("clear", false); TinkerSmeltery.stainedGlassClear = new GlassBlockConnectedMeta( "stained", @@ -532,8 +531,25 @@ public void preInit(FMLPreInitializationEvent event) { "green", "red", "black").setBlockName("GlassBlock.StainedClear"); - TinkerSmeltery.stainedGlassClear.stepSound = Block.soundTypeGlass; - TinkerSmeltery.stainedGlassClearPane = new GlassPaneStained(); + TinkerSmeltery.stainedGlassClearPane = new GlassPaneConnectedMeta( + "stained", + true, + "white", + "orange", + "magenta", + "light_blue", + "yellow", + "lime", + "pink", + "gray", + "light_gray", + "cyan", + "purple", + "blue", + "brown", + "green", + "red", + "black"); GameRegistry.registerBlock(TinkerSmeltery.searedSlab, SearedSlabItem.class, "SearedSlab"); GameRegistry.registerBlock(TinkerSmeltery.speedSlab, SpeedSlabItem.class, "SpeedSlab"); diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlock.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlock.java deleted file mode 100644 index 02bf28a2e25..00000000000 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlock.java +++ /dev/null @@ -1,73 +0,0 @@ -package tconstruct.smeltery.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import tconstruct.blocks.TConstructBlock; - -public class GlassBlock extends TConstructBlock { - - static String[] blockTextures = { "glass_clear", "soulglass", "soulglass_clear" }; - - public GlassBlock() { - super(Material.glass, 3f, blockTextures); - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { - Block i1 = par1IBlockAccess.getBlock(par2, par3, par4); - return i1 != this && super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, par5); - } - - @Override - public float getBlockHardness(World world, int x, int y, int z) { - int meta = world.getBlockMetadata(x, y, z); - switch (meta) { - case 0: - return 0.3F; - case 1: - case 2: - return 50.0F; - default: - return blockHardness; - } - } - - @Override - public float getExplosionResistance(Entity entity, World world, int x, int y, int z, double explosionX, - double explosionY, double explosionZ) { - int meta = world.getBlockMetadata(x, y, z); - switch (meta) { - case 0: - return 1.5F; - case 1: - case 2: - return 2000F; - default: - return getExplosionResistance(entity); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.icons = new IIcon[textureNames.length]; - - for (int i = 0; i < this.icons.length; ++i) { - this.icons[i] = iconRegister.registerIcon("tinker:glass/" + textureNames[i]); - } - } -} diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java index 0495f69b5bc..cd701f57cdc 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java @@ -21,7 +21,7 @@ public class GlassBlockConnected extends MantleBlock { protected IIcon[] icons = new IIcon[16]; - private final boolean shouldRenderSelectionBox = true; + private static final boolean shouldRenderSelectionBox = true; protected String folder; private final int renderPass; @@ -34,11 +34,6 @@ public GlassBlockConnected(String location, boolean hasAlpha) { this.setCreativeTab(TConstructRegistry.blockTab); } - // For FMP support - public IIcon[] getIcons() { - return icons; - } - @Override public boolean isOpaqueCube() { return false; @@ -54,519 +49,315 @@ public int getRenderBlockPass() { return renderPass; } - /** - * This is checked to see if the texture should connect to this block - * - * @param par2 x - * @param par3 y - * @param par4 z - * @param par5 ID this block is asking to connect to (may be 0 if there is no block) - * @param par6 Metadata of the block this block is trying to connect to - * @return true if should connect - */ - public boolean shouldConnectToBlock(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, Block par5, - int par6) { - return par5 == this; + public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int z, Block block, int meta) { + return block == this; } @Override @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { - return par1IBlockAccess.getBlockMetadata(par2, par3, par4) == 15 ? icons[0] - : getConnectedBlockTexture(par1IBlockAccess, par2, par3, par4, par5, icons); + public IIcon getIcon(IBlockAccess blockAccess, int x, int y, int z, int side) { + return getConnectedBlockTexture(blockAccess, x, y, z, side, icons); } - public IIcon getConnectedBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5, - IIcon[] icons) { + public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, int z, int side, IIcon[] icons) { if (PHConstruct.connectedTexturesMode == 0) { return icons[0]; } boolean isOpenUp = false, isOpenDown = false, isOpenLeft = false, isOpenRight = false; - switch (par5) { + switch (side) { case 0: + case 1: if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { + blockAccess, + x, + y, + z, + blockAccess.getBlock(x - 1, y, z), + blockAccess.getBlockMetadata(x - 1, y, z))) { isOpenLeft = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { + blockAccess, + x, + y, + z, + blockAccess.getBlock(x + 1, y, z), + blockAccess.getBlockMetadata(x + 1, y, z))) { isOpenRight = true; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[11]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[12]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[13]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[14]; - } else if (isOpenDown && isOpenUp) { - return icons[5]; - } else if (isOpenLeft && isOpenRight) { - return icons[6]; - } else if (isOpenDown && isOpenLeft) { - return icons[8]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[9]; - } else if (isOpenDown) { - return icons[3]; - } else if (isOpenUp) { - return icons[4]; - } else if (isOpenLeft) { - return icons[2]; - } else if (isOpenRight) { - return icons[1]; - } - break; - case 1: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenDown = true; - } - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y, z - 1), + blockAccess.getBlockMetadata(x, y, z - 1))) { isOpenUp = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y, z + 1), + blockAccess.getBlockMetadata(x, y, z + 1))) { + isOpenDown = true; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[11]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[12]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[13]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[14]; - } else if (isOpenDown && isOpenUp) { - return icons[5]; - } else if (isOpenLeft && isOpenRight) { - return icons[6]; - } else if (isOpenDown && isOpenLeft) { - return icons[8]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[9]; - } else if (isOpenDown) { - return icons[3]; - } else if (isOpenUp) { - return icons[4]; - } else if (isOpenLeft) { - return icons[2]; - } else if (isOpenRight) { - return icons[1]; - } break; case 2: if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x + 1, y, z), + blockAccess.getBlockMetadata(x + 1, y, z))) { + isOpenLeft = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x - 1, y, z), + blockAccess.getBlockMetadata(x - 1, y, z))) { + isOpenRight = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenLeft = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y + 1, z), + blockAccess.getBlockMetadata(x, y + 1, z))) { + isOpenUp = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenRight = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y - 1, z), + blockAccess.getBlockMetadata(x, y - 1, z))) { + isOpenDown = true; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[13]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[14]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[9]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[8]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[4]; - } else if (isOpenRight) { - return icons[3]; - } break; case 3: if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x - 1, y, z), + blockAccess.getBlockMetadata(x - 1, y, z))) { + isOpenLeft = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x + 1, y, z), + blockAccess.getBlockMetadata(x + 1, y, z))) { + isOpenRight = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenLeft = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y + 1, z), + blockAccess.getBlockMetadata(x, y + 1, z))) { + isOpenUp = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenRight = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y - 1, z), + blockAccess.getBlockMetadata(x, y - 1, z))) { + isOpenDown = true; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[14]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[13]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[10]; - } else if (isOpenDown && isOpenRight) { - return icons[9]; - } else if (isOpenUp && isOpenLeft) { - return icons[8]; - } else if (isOpenUp && isOpenRight) { - return icons[7]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[3]; - } else if (isOpenRight) { - return icons[4]; - } break; case 4: if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y, z - 1), + blockAccess.getBlockMetadata(x, y, z - 1))) { + isOpenLeft = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y, z + 1), + blockAccess.getBlockMetadata(x, y, z + 1))) { + isOpenRight = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y + 1, z), + blockAccess.getBlockMetadata(x, y + 1, z))) { + isOpenUp = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y - 1, z), + blockAccess.getBlockMetadata(x, y - 1, z))) { + isOpenDown = true; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[14]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[13]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[10]; - } else if (isOpenDown && isOpenRight) { - return icons[9]; - } else if (isOpenUp && isOpenLeft) { - return icons[8]; - } else if (isOpenUp && isOpenRight) { - return icons[7]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[3]; - } else if (isOpenRight) { - return icons[4]; - } break; case 5: if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y, z + 1), + blockAccess.getBlockMetadata(x, y, z + 1))) { + isOpenLeft = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y, z - 1), + blockAccess.getBlockMetadata(x, y, z - 1))) { + isOpenRight = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y + 1, z), + blockAccess.getBlockMetadata(x, y + 1, z))) { + isOpenUp = true; } if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; + blockAccess, + x, + y, + z, + blockAccess.getBlock(x, y - 1, z), + blockAccess.getBlockMetadata(x, y - 1, z))) { + isOpenDown = true; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[13]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[14]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[9]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[8]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[4]; - } else if (isOpenRight) { - return icons[3]; - } break; } - return icons[0]; + if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { + return icons[15]; + } else if (isOpenUp && isOpenDown && isOpenLeft) { + return icons[14]; + } else if (isOpenUp && isOpenDown && isOpenRight) { + return icons[13]; + } else if (isOpenDown && isOpenLeft && isOpenRight) { + return icons[12]; + } else if (isOpenUp && isOpenLeft && isOpenRight) { + return icons[11]; + } else if (isOpenDown && isOpenLeft) { + return icons[10]; + } else if (isOpenDown && isOpenRight) { + return icons[9]; + } else if (isOpenUp && isOpenLeft) { + return icons[8]; + } else if (isOpenUp && isOpenRight) { + return icons[7]; + } else if (isOpenDown && isOpenUp) { + return icons[6]; + } else if (isOpenLeft && isOpenRight) { + return icons[5]; + } else if (isOpenRight) { + return icons[4]; + } else if (isOpenLeft) { + return icons[3]; + } else if (isOpenUp) { + return icons[2]; + } else if (isOpenDown) { + return icons[1]; + } else { + return icons[0]; + } } @Override - public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { - Block b = par1IBlockAccess.getBlock(par2, par3, par4); - return b != this && super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, par5); + public boolean shouldSideBeRendered(IBlockAccess blockAccess, int x, int y, int z, int side) { + Block b = blockAccess.getBlock(x, y, z); + return b != this && super.shouldSideBeRendered(blockAccess, x, y, z, side); } @Override @SideOnly(Side.CLIENT) - public IIcon getIcon(int par1, int par2) { + public IIcon getIcon(int side, int meta) { return icons[0]; } @Override - public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int par2, int par3, int par4) { + public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { if (shouldRenderSelectionBox) { - return super.getSelectedBoundingBoxFromPool(par1World, par2, par3, par4); + return super.getSelectedBoundingBoxFromPool(world, x, y, z); } else { return AxisAlignedBB.getBoundingBox(0D, 0D, 0D, 0D, 0D, 0D); } } + protected void registerBlockIcons(IIconRegister iconRegister, IIcon[] icons, String folder) { + icons[0] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass"); + icons[1] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_d"); + icons[2] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_u"); + icons[3] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_l"); + icons[4] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_r"); + icons[5] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_h"); + icons[6] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_v"); + icons[7] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_dl"); + icons[8] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_dr"); + icons[9] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_ul"); + icons[10] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_ur"); + icons[11] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_d"); + icons[12] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_u"); + icons[13] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_l"); + icons[14] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_r"); + icons[15] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_4"); + } + @Override - public void registerBlockIcons(IIconRegister par1IconRegister) { - icons[0] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass"); - icons[1] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_d"); - icons[2] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_u"); - icons[3] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_l"); - icons[4] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_r"); - icons[5] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_h"); - icons[6] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_v"); - icons[7] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_dl"); - icons[8] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_dr"); - icons[9] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_ul"); - icons[10] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_2_ur"); - icons[11] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_d"); - icons[12] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_u"); - icons[13] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_l"); - icons[14] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_3_r"); - icons[15] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_4"); + public void registerBlockIcons(IIconRegister iconRegister) { + registerBlockIcons(iconRegister, icons, folder); } @Override diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java index 8684ea4cf66..5c3aa585d21 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java @@ -9,7 +9,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -23,7 +22,7 @@ public class GlassBlockConnectedMeta extends GlassBlockConnected { public String[] textures; public IIcon[][] icons; - boolean ignoreMetaForConnectedGlass = PHConstruct.connectedTexturesMode == 2; + public static final boolean ignoreMetaForConnectedGlass = PHConstruct.connectedTexturesMode == 2; public GlassBlockConnectedMeta(String location, boolean hasAlpha, String... textures) { super(location, hasAlpha); @@ -33,64 +32,42 @@ public GlassBlockConnectedMeta(String location, boolean hasAlpha, String... text @Override @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { - int meta = par1IBlockAccess.getBlockMetadata(par2, par3, par4); + public IIcon getIcon(IBlockAccess blockAccess, int x, int y, int z, int side) { + int meta = blockAccess.getBlockMetadata(x, y, z); if (meta < icons.length) { - return getConnectedBlockTexture(par1IBlockAccess, par2, par3, par4, par5, icons[meta]); + return getConnectedBlockTexture(blockAccess, x, y, z, side, icons[meta]); } else { - return getConnectedBlockTexture(par1IBlockAccess, par2, par3, par4, par5, icons[0]); + return getConnectedBlockTexture(blockAccess, x, y, z, side, icons[0]); } } @Override - public boolean shouldConnectToBlock(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, Block par5, - int par6) { - return par5 == this - && (par6 == par1IBlockAccess.getBlockMetadata(par2, par3, par4) || ignoreMetaForConnectedGlass); + public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int z, Block block, int meta) { + return block == this && (meta == blockAccess.getBlockMetadata(x, y, z) || ignoreMetaForConnectedGlass); } @Override @SideOnly(Side.CLIENT) - public IIcon getIcon(int par1, int par2) { - return icons[par2][0]; + public IIcon getIcon(int side, int meta) { + return icons[meta][0]; } @Override - public void getSubBlocks(Item b, CreativeTabs par2CreativeTabs, List par3List) { + public void getSubBlocks(Item b, CreativeTabs creativeTabs, List list) { for (int i = 0; i < textures.length; i++) { - par3List.add(new ItemStack(b, 1, i)); + list.add(new ItemStack(b, 1, i)); } } @Override - public void registerBlockIcons(IIconRegister par1IconRegister) { + public void registerBlockIcons(IIconRegister iconRegister) { for (int i = 0; i < textures.length; i++) { - icons[i][0] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass"); - icons[i][1] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_1_d"); - icons[i][2] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_1_u"); - icons[i][3] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_1_l"); - icons[i][4] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_1_r"); - icons[i][5] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_2_h"); - icons[i][6] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_2_v"); - icons[i][7] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_2_dl"); - icons[i][8] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_2_dr"); - icons[i][9] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_2_ul"); - icons[i][10] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_2_ur"); - icons[i][11] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_3_d"); - icons[i][12] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_3_u"); - icons[i][13] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_3_l"); - icons[i][14] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_3_r"); - icons[i][15] = par1IconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_4"); + registerBlockIcons(iconRegister, icons[i], folder + "/" + textures[i]); } } @Override - public int damageDropped(int par1) { - return par1; - } - - @Override - public boolean canPlaceTorchOnTop(World world, int x, int y, int z) { - return true; + public int damageDropped(int meta) { + return meta; } } diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockStained.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockStained.java deleted file mode 100644 index 1c2b5ea42fe..00000000000 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockStained.java +++ /dev/null @@ -1,50 +0,0 @@ -package tconstruct.smeltery.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -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; -import tconstruct.blocks.TConstructBlock; - -public class GlassBlockStained extends TConstructBlock { - - static String[] blockTextures = { "white", "orange", "magenta", "lightblue", "yellow", "lime", "pink", "gray", - "lightgray", "cyan", "purple", "blue", "brown", "green", "red", "black" }; - String textureName; - - public GlassBlockStained(String tex) { - super(Material.glass, 3f, blockTextures); - this.textureName = tex; - } - - @Override - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { - Block block = world.getBlock(x, y, z); - return block != this && super.shouldSideBeRendered(world, x, y, z, side); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.icons = new IIcon[textureNames.length]; - - for (int i = 0; i < this.icons.length; ++i) { - this.icons[i] = iconRegister.registerIcon("tinker:glass/" + textureName + textureNames[i]); - } - } -} diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPane.java b/src/main/java/tconstruct/smeltery/blocks/GlassPane.java deleted file mode 100644 index afa30e203f5..00000000000 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPane.java +++ /dev/null @@ -1,18 +0,0 @@ -package tconstruct.smeltery.blocks; - -import net.minecraft.block.material.Material; - -import tconstruct.library.TConstructRegistry; - -public class GlassPane extends PaneBase { - - static String[] blockTextures = { "glass_clear", "soulglass", "soulglass_clear" }; - - public GlassPane() { - super(Material.glass, "glass/", blockTextures); - this.setHardness(0.3F); - this.stepSound = soundTypeGlass; - this.setBlockName("tconstruct.glasspane"); - this.setCreativeTab(TConstructRegistry.blockTab); - } -} diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index 119d9d1e5d0..1221c7944ee 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -12,14 +12,11 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import tconstruct.smeltery.model.PaneConnectedRender; -import tconstruct.util.config.PHConstruct; public class GlassPaneConnected extends GlassBlockConnected { - private IIcon theIcon; + private IIcon sideIcon; public GlassPaneConnected(String location, boolean hasAlpha) { super(location, hasAlpha); @@ -28,510 +25,54 @@ public GlassPaneConnected(String location, boolean hasAlpha) { @Override public int getRenderType() { return PaneConnectedRender.model; - // return 0; } @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { - if (par5 == 0 || par5 == 1) { - return par1IBlockAccess.getBlock(par2, par3 - 1, par4) == this && par5 == 0 ? icons[15] - : par1IBlockAccess.getBlock(par2, par3 + 1, par4) == this && par5 == 1 ? icons[15] - : getSideTextureIndex(); - } else { - return super.getIcon(par1IBlockAccess, par2, par3, par4, par5); - } - } - - @Override - public IIcon getConnectedBlockTexture(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5, - IIcon[] icons) { - if (par5 == 0 || par5 == 1) { - return getSideTextureIndex(); - } - - if (PHConstruct.connectedTexturesMode == 0) { - return icons[0]; - } - - boolean isOpenUp = false, isOpenDown = false, isOpenLeft = false, isOpenRight = false; - - switch (par5) { - case 0: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; - } - - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[11]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[12]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[13]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[14]; - } else if (isOpenDown && isOpenUp) { - return icons[5]; - } else if (isOpenLeft && isOpenRight) { - return icons[6]; - } else if (isOpenDown && isOpenLeft) { - return icons[8]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[9]; - } else if (isOpenDown) { - return icons[3]; - } else if (isOpenUp) { - return icons[4]; - } else if (isOpenLeft) { - return icons[2]; - } else if (isOpenRight) { - return icons[1]; - } - break; - case 1: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; - } - - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[11]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[12]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[13]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[14]; - } else if (isOpenDown && isOpenUp) { - return icons[5]; - } else if (isOpenLeft && isOpenRight) { - return icons[6]; - } else if (isOpenDown && isOpenLeft) { - return icons[8]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[9]; - } else if (isOpenDown) { - return icons[3]; - } else if (isOpenUp) { - return icons[4]; - } else if (isOpenLeft) { - return icons[2]; - } else if (isOpenRight) { - return icons[1]; - } - break; - case 2: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenRight = true; - } - - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[13]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[14]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[9]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[8]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[4]; - } else if (isOpenRight) { - return icons[3]; - } - break; - case 3: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 - 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 - 1, par3, par4))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2 + 1, par3, par4), - par1IBlockAccess.getBlockMetadata(par2 + 1, par3, par4))) { - isOpenRight = true; - } - - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[14]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[13]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[10]; - } else if (isOpenDown && isOpenRight) { - return icons[9]; - } else if (isOpenUp && isOpenLeft) { - return icons[8]; - } else if (isOpenUp && isOpenRight) { - return icons[7]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[3]; - } else if (isOpenRight) { - return icons[4]; - } - break; - case 4: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; - } - - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[14]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[13]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[10]; - } else if (isOpenDown && isOpenRight) { - return icons[9]; - } else if (isOpenUp && isOpenLeft) { - return icons[8]; - } else if (isOpenUp && isOpenRight) { - return icons[7]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[3]; - } else if (isOpenRight) { - return icons[4]; - } - break; - case 5: - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 - 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 - 1, par4))) { - isOpenDown = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3 + 1, par4), - par1IBlockAccess.getBlockMetadata(par2, par3 + 1, par4))) { - isOpenUp = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 - 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 - 1))) { - isOpenLeft = true; - } - - if (shouldConnectToBlock( - par1IBlockAccess, - par2, - par3, - par4, - par1IBlockAccess.getBlock(par2, par3, par4 + 1), - par1IBlockAccess.getBlockMetadata(par2, par3, par4 + 1))) { - isOpenRight = true; - } + public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, int z, int side, IIcon[] icons) { + if (side == 0 || side == 1) { + if ((blockAccess.getBlock(x, y - 1, z) == this && side == 0) + || (blockAccess.getBlock(x, y + 1, z) == this && side == 1)) { + return icons[15]; + } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[13]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[14]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenDown && isOpenLeft) { - return icons[9]; - } else if (isOpenDown && isOpenRight) { - return icons[10]; - } else if (isOpenUp && isOpenLeft) { - return icons[7]; - } else if (isOpenUp && isOpenRight) { - return icons[8]; - } else if (isOpenDown) { - return icons[1]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenLeft) { - return icons[4]; - } else if (isOpenRight) { - return icons[3]; - } - break; + return getSideTextureIndex(blockAccess.getBlockMetadata(x, y, z)); } - return icons[0]; + return super.getConnectedBlockTexture(blockAccess, x, y, z, side, icons); } @Override - public void addCollisionBoxesToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, - List par6List, Entity par7Entity) { - boolean flag = this.canPaneConnectTo(par1World, par2, par3, par4, ForgeDirection.NORTH); - boolean flag1 = this.canPaneConnectTo(par1World, par2, par3, par4, ForgeDirection.SOUTH); - boolean flag2 = this.canPaneConnectTo(par1World, par2, par3, par4, ForgeDirection.WEST); - boolean flag3 = this.canPaneConnectTo(par1World, par2, par3, par4, ForgeDirection.EAST); + public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, + List par6List, Entity entity) { + boolean flag = this.canPaneConnectTo(world, x, y, z - 1, ForgeDirection.NORTH); + boolean flag1 = this.canPaneConnectTo(world, x, y, z + 1, ForgeDirection.SOUTH); + boolean flag2 = this.canPaneConnectTo(world, x - 1, y, z, ForgeDirection.WEST); + boolean flag3 = this.canPaneConnectTo(world, x + 1, y, z, ForgeDirection.EAST); if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) { if (flag2 && !flag3) { this.setBlockBounds(0.0F, 0.0F, 0.4375F, 0.5F, 1.0F, 0.5625F); - super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); + super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, par6List, entity); } else if (!flag2 && flag3) { this.setBlockBounds(0.5F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); - super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); + super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, par6List, entity); } } else { this.setBlockBounds(0.0F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); - super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); + super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, par6List, entity); } if ((!flag || !flag1) && (flag2 || flag3 || flag || flag1)) { if (flag && !flag1) { this.setBlockBounds(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 0.5F); - super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); + super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, par6List, entity); } else if (!flag && flag1) { this.setBlockBounds(0.4375F, 0.0F, 0.5F, 0.5625F, 1.0F, 1.0F); - super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); + super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, par6List, entity); } } else { this.setBlockBounds(0.4375F, 0.0F, 0.0F, 0.5625F, 1.0F, 1.0F); - super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); + super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, par6List, entity); } } @@ -541,15 +82,15 @@ public void setBlockBoundsForItemRender() { } @Override - public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { + public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int x, int y, int z) { float f = 0.4375F; float f1 = 0.5625F; float f2 = 0.4375F; float f3 = 0.5625F; - boolean flag = this.canPaneConnectTo(par1IBlockAccess, par2, par3, par4, ForgeDirection.NORTH); - boolean flag1 = this.canPaneConnectTo(par1IBlockAccess, par2, par3, par4, ForgeDirection.SOUTH); - boolean flag2 = this.canPaneConnectTo(par1IBlockAccess, par2, par3, par4, ForgeDirection.WEST); - boolean flag3 = this.canPaneConnectTo(par1IBlockAccess, par2, par3, par4, ForgeDirection.EAST); + boolean flag = this.canPaneConnectTo(blockAccess, x, y, z - 1, ForgeDirection.NORTH); + boolean flag1 = this.canPaneConnectTo(blockAccess, x, y, z + 1, ForgeDirection.SOUTH); + boolean flag2 = this.canPaneConnectTo(blockAccess, x - 1, y, z, ForgeDirection.WEST); + boolean flag3 = this.canPaneConnectTo(blockAccess, x + 1, y, z, ForgeDirection.EAST); if ((!flag2 || !flag3) && (flag2 || flag3 || flag || flag1)) { if (flag2 && !flag3) { @@ -576,27 +117,21 @@ public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); } - public IIcon getSideTextureIndex() { - return this.theIcon; + public IIcon getSideTextureIndex(int meta) { + return sideIcon; } - public final boolean canThisPaneConnectToThisBlock(Block b) { + public final boolean canPaneConnectToBlock(Block b) { return b.isOpaqueCube() || b == this || b == Blocks.glass; } @Override - public void registerBlockIcons(IIconRegister par1IconRegister) { - super.registerBlockIcons(par1IconRegister); - this.theIcon = par1IconRegister.registerIcon("tinker:glass/" + folder + "/glass_side"); - } - - public boolean canPaneConnectTo(IBlockAccess access, int x, int y, int z, ForgeDirection dir) { - return canThisPaneConnectToThisBlock(access.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ)) - || access.isSideSolid(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir.getOpposite(), false); + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.sideIcon = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_side"); } - @Override - public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) { - return true; + public boolean canPaneConnectTo(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + return canPaneConnectToBlock(world.getBlock(x, y, z)) || world.isSideSolid(x, y, z, dir.getOpposite(), false); } } diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java new file mode 100644 index 00000000000..3039a71db13 --- /dev/null +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java @@ -0,0 +1,77 @@ +package tconstruct.smeltery.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tconstruct.util.config.PHConstruct; + +public class GlassPaneConnectedMeta extends GlassPaneConnected { + + public String[] textures; + public IIcon[][] icons; + public IIcon[] sideIcons; + public static final boolean ignoreMetaForConnectedGlass = PHConstruct.connectedTexturesMode == 2; + + public GlassPaneConnectedMeta(String location, boolean hasAlpha, String... textures) { + super(location, hasAlpha); + this.textures = textures; + this.icons = new IIcon[textures.length][16]; + this.sideIcons = new IIcon[textures.length]; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess blockAccess, int x, int y, int z, int side) { + int meta = blockAccess.getBlockMetadata(x, y, z); + if (meta < icons.length) { + return getConnectedBlockTexture(blockAccess, x, y, z, side, icons[meta]); + } else { + return getConnectedBlockTexture(blockAccess, x, y, z, side, icons[0]); + } + } + + @Override + public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int z, Block block, int meta) { + return block == this && (meta == blockAccess.getBlockMetadata(x, y, z) || ignoreMetaForConnectedGlass); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return icons[meta][0]; + } + + @Override + public void getSubBlocks(Item b, CreativeTabs creativeTabs, List list) { + for (int i = 0; i < textures.length; i++) { + list.add(new ItemStack(b, 1, i)); + } + } + + @Override + public void registerBlockIcons(IIconRegister iconRegister) { + for (int i = 0; i < textures.length; i++) { + registerBlockIcons(iconRegister, icons[i], folder + "/" + textures[i]); + sideIcons[i] = iconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_side"); + } + } + + @Override + public IIcon getSideTextureIndex(int meta) { + return sideIcons[meta]; + } + + @Override + public int damageDropped(int meta) { + return meta; + } +} diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneStained.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneStained.java deleted file mode 100644 index 09bb6775c6f..00000000000 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneStained.java +++ /dev/null @@ -1,38 +0,0 @@ -package tconstruct.smeltery.blocks; - -import net.minecraft.block.material.Material; - -import tconstruct.library.TConstructRegistry; - -public class GlassPaneStained extends PaneBase { - - static String[] blockTextures = { "white", "orange", "magenta", "lightblue", "yellow", "lime", "pink", "gray", - "lightgray", "cyan", "purple", "blue", "brown", "green", "red", "black" }; - - public GlassPaneStained() { - super(Material.glass, "glass/", assembleBlockTextures()); - // TODO setHardness - this.setHardness(0.3F); - this.stepSound = soundTypeGlass; - this.setBlockName("tconstruct.glasspanestained"); - this.setCreativeTab(TConstructRegistry.blockTab); - } - - private static String[] assembleBlockTextures() { - String[] textures = new String[blockTextures.length]; - for (int i = 0; i < blockTextures.length; i++) { - textures[i] = "stainedglass_" + blockTextures[i]; - } - return textures; - } - - @Override - public int getRenderBlockPass() { - return 1; - } - - @Override - public int damageDropped(int par1) { - return par1; - } -} diff --git a/src/main/java/tconstruct/smeltery/blocks/PaneBase.java b/src/main/java/tconstruct/smeltery/blocks/PaneBase.java deleted file mode 100644 index d542a6f5505..00000000000 --- a/src/main/java/tconstruct/smeltery/blocks/PaneBase.java +++ /dev/null @@ -1,81 +0,0 @@ -package tconstruct.smeltery.blocks; - -import java.util.List; - -import net.minecraft.block.BlockStainedGlassPane; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import tconstruct.smeltery.model.PaneRender; - -public class PaneBase extends BlockStainedGlassPane { - - public String[] textureNames; - public String folder; - public IIcon[] icons; - public IIcon[] sideIcons; - - public PaneBase(Material material, String folder, String[] blockTextures) { - super(); - textureNames = blockTextures; - this.folder = folder; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - this.icons = new IIcon[textureNames.length]; - this.sideIcons = new IIcon[textureNames.length]; - - for (int i = 0; i < this.icons.length; ++i) { - this.icons[i] = iconRegister.registerIcon("tinker:" + folder + textureNames[i]); - this.sideIcons[i] = iconRegister.registerIcon("tinker:" + folder + textureNames[i] + "_side"); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon func_149735_b(int side, int meta) { - return icons[meta]; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon func_150104_b(int p_150104_1_) { - return sideIcons[p_150104_1_]; - } - - @Override - public IIcon getIcon(int side, int meta) { - return icons[meta]; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item b, CreativeTabs tab, List list) { - for (int iter = 0; iter < textureNames.length; iter++) { - list.add(new ItemStack(b, 1, iter)); - } - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public int getRenderType() { - return PaneRender.model; - } -} diff --git a/src/main/java/tconstruct/smeltery/itemblocks/GlassBlockItem.java b/src/main/java/tconstruct/smeltery/itemblocks/GlassBlockItem.java index 7c06f5e88b8..ffb62f577ea 100644 --- a/src/main/java/tconstruct/smeltery/itemblocks/GlassBlockItem.java +++ b/src/main/java/tconstruct/smeltery/itemblocks/GlassBlockItem.java @@ -11,8 +11,7 @@ public class GlassBlockItem extends MultiItemBlock { - public static final String[] blockTypes = { "pure" }; // , "soul", - // "soul.pure" }; + public static final String[] blockTypes = { "pure" }; public GlassBlockItem(Block b) { super(b, "block.glass", blockTypes); diff --git a/src/main/java/tconstruct/smeltery/itemblocks/GlassPaneItem.java b/src/main/java/tconstruct/smeltery/itemblocks/GlassPaneItem.java index 63f14aab7da..2d0dd8f949e 100644 --- a/src/main/java/tconstruct/smeltery/itemblocks/GlassPaneItem.java +++ b/src/main/java/tconstruct/smeltery/itemblocks/GlassPaneItem.java @@ -6,7 +6,7 @@ public class GlassPaneItem extends MultiItemBlock { - public static final String[] blockTypes = { "pure", "soul", "soul.pure" }; + public static final String[] blockTypes = { "pure" }; public GlassPaneItem(Block b) { super(b, "block.glass", "pane", blockTypes); diff --git a/src/main/java/tconstruct/smeltery/itemblocks/StainedGlassClearPaneItem.java b/src/main/java/tconstruct/smeltery/itemblocks/StainedGlassClearPaneItem.java index 296552c09c6..b44ff22f7f2 100644 --- a/src/main/java/tconstruct/smeltery/itemblocks/StainedGlassClearPaneItem.java +++ b/src/main/java/tconstruct/smeltery/itemblocks/StainedGlassClearPaneItem.java @@ -1,7 +1,10 @@ package tconstruct.smeltery.itemblocks; import net.minecraft.block.Block; +import net.minecraft.util.IIcon; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import mantle.blocks.abstracts.MultiItemBlock; public class StainedGlassClearPaneItem extends MultiItemBlock { @@ -14,4 +17,10 @@ public StainedGlassClearPaneItem(Block b) { setMaxDamage(0); setHasSubtypes(true); } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + return this.field_150939_a.getIcon(1, meta); + } } diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index 8fd3194749b..06838a17d84 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -6,9 +6,12 @@ import static net.minecraftforge.common.util.ForgeDirection.WEST; import net.minecraft.block.Block; +import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; @@ -22,59 +25,240 @@ public class PaneConnectedRender implements ISimpleBlockRenderingHandler { public static int model = RenderingRegistry.getNextAvailableRenderId(); @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {} + public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer) {} @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - boolean temp = renderer.renderAllFaces; - renderer.renderAllFaces = true; + // Boilerplate partially copied from renderBlockPane / renderBlockStainedGlassPane + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + int multRGB = block.colorMultiplier(world, x, y, z); + float multR = (float) (multRGB >> 16 & 255) / 255.0F; + float multG = (float) (multRGB >> 8 & 255) / 255.0F; + float multB = (float) (multRGB & 255) / 255.0F; - GlassPaneConnected pane = (GlassPaneConnected) block; + if (EntityRenderer.anaglyphEnable) { + float tempR = (multR * 30.0F + multG * 59.0F + multB * 11.0F) / 100.0F; + float tempG = (multR * 30.0F + multG * 70.0F) / 100.0F; + float tempB = (multR * 30.0F + multB * 70.0F) / 100.0F; + multR = tempR; + multG = tempG; + multB = tempB; + } - boolean flag = pane.canPaneConnectTo(world, x, y, z, EAST); - boolean flag1 = pane.canPaneConnectTo(world, x, y, z, WEST); - boolean flag2 = pane.canPaneConnectTo(world, x, y, z, SOUTH); - boolean flag3 = pane.canPaneConnectTo(world, x, y, z, NORTH); + tessellator.setColorOpaque_F(multR, multG, multB); + + // Fetch pane + GlassPaneConnected pane = (GlassPaneConnected) block; - IIcon sideTexture = pane.getSideTextureIndex(); + boolean bottom = pane.shouldSideBeRendered(world, x, y - 1, z, 0); + boolean top = pane.shouldSideBeRendered(world, x, y + 1, z, 1); + boolean north = pane.canPaneConnectTo(world, x, y, z - 1, NORTH); + boolean south = pane.canPaneConnectTo(world, x, y, z + 1, SOUTH); + boolean west = pane.canPaneConnectTo(world, x - 1, y, z, WEST); + boolean east = pane.canPaneConnectTo(world, x + 1, y, z, EAST); - if (!flag && !flag1 && !flag2 && !flag3) { - renderer.setRenderBounds(0D, 0D, 0.45D, 1D, 1D, 0.55D); - renderer.renderStandardBlock(block, x, y, z); - renderer.setRenderBounds(0.45D, 0D, 0D, 0.55D, 1D, 1D); - renderer.renderStandardBlock(block, x, y, z); - } // else { - // renderer.setRenderBounds(0.45D, 0D, 0.45D, 0.55D, 1D, 0.55D); - // renderer.renderStandardBlock(block, x, y, z); - // } + boolean cross = false; + if (!north && !south && !west && !east) { + cross = true; + north = south = west = east = true; + } - // renderer.setOverrideBlockTexture(sideTexture); + IIcon bottomIcon = pane.getIcon(world, x, y, z, 0); + IIcon topIcon = pane.getIcon(world, x, y, z, 1); + IIcon northIcon = pane.getIcon(world, x, y, z, 2); + IIcon southIcon = pane.getIcon(world, x, y, z, 3); + IIcon westIcon = pane.getIcon(world, x, y, z, 4); + IIcon eastIcon = pane.getIcon(world, x, y, z, 5); - if (flag) { - renderer.setRenderBounds(0.45D, 0D, 0.45D, 1D, 1D, 0.55D); - renderer.renderStandardBlock(block, x, y, z); + if (bottom) { + renderTopOrBottom(tessellator, x, y, z, north, south, west, east, false, bottomIcon); } - if (flag1) { - renderer.setRenderBounds(0D, 0D, 0.45D, 0.45D, 1D, 0.55D); - renderer.renderStandardBlock(block, x, y, z); + if (top) { + renderTopOrBottom(tessellator, x, y, z, north, south, west, east, true, topIcon); } - if (flag2) { - renderer.setRenderBounds(0.45D, 0D, 0.45D, 0.55D, 1D, 1D); - renderer.renderStandardBlock(block, x, y, z); + renderSide(tessellator, x, y, z, NORTH, east, west, north, cross, northIcon); + renderSide(tessellator, x, y, z, SOUTH, west, east, south, cross, southIcon); + renderSide(tessellator, x, y, z, WEST, north, south, west, cross, westIcon); + renderSide(tessellator, x, y, z, EAST, south, north, east, cross, eastIcon); + + return true; + } + + private void renderTopOrBottom(Tessellator tessellator, int x, int y, int z, boolean north, boolean south, + boolean west, boolean east, boolean top, IIcon icon) { + float minU = icon.getMinU(); + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float maxV = icon.getMaxV(); + float startU = icon.getInterpolatedU(7); + float endU = icon.getInterpolatedU(9); + float startV = icon.getInterpolatedV(7); + float endV = icon.getInterpolatedV(9); + double startX = x + (7.0 / 16.0); + double startZ = z + (7.0 / 16.0); + double endX = x + (9.0 / 16.0); + double endZ = z + (9.0 / 16.0); + + // All in top winding order - direction is reversed for bottom + double[] centerSquareXZUV = new double[] { endX, startZ, endU, startV, startX, startZ, startU, startV, startX, + endZ, startU, endV, endX, endZ, endU, endV, }; + double[] northXZUV = new double[] { endX, z, endU, minV, startX, z, startU, minV, startX, startZ, startU, + startV, endX, startZ, endU, startV }; + double[] southXZUV = new double[] { endX, endZ, endU, endV, startX, endZ, startU, endV, startX, z + 1, startU, + maxV, endX, z + 1, endU, maxV }; + double[] eastXZUV = new double[] { x + 1, startZ, maxU, startV, endX, startZ, endU, startV, endX, endZ, endU, + endV, x + 1, endZ, maxU, endV }; + double[] westXZUV = new double[] { startX, startZ, startU, startV, x, startZ, minU, startV, x, endZ, minU, endV, + startX, endZ, startU, endV }; + + renderXZUV(tessellator, centerSquareXZUV, y, top); + + if (north) { + renderXZUV(tessellator, northXZUV, y, top); } + if (south) { + renderXZUV(tessellator, southXZUV, y, top); + } + if (east) { + renderXZUV(tessellator, eastXZUV, y, top); + } + if (west) { + renderXZUV(tessellator, westXZUV, y, top); + } + } - if (flag3) { - renderer.setRenderBounds(0.45D, 0D, 0D, 0.55D, 1D, 0.45D); - renderer.renderStandardBlock(block, x, y, z); + private void renderXZUV(Tessellator tessellator, double[] xzuv, double y, boolean top) { + if (top) { + for (int i = 0; i < xzuv.length; i += 4) { + tessellator.addVertexWithUV(xzuv[i], y + 1, xzuv[i + 1], xzuv[i + 2], xzuv[i + 3]); + } + } else { + for (int i = xzuv.length - 4; i >= 0; i -= 4) { + tessellator.addVertexWithUV(xzuv[i], y - 0, xzuv[i + 1], xzuv[i + 2], xzuv[i + 3]); + } } + } - renderer.clearOverrideBlockTexture(); + private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirection side, boolean left, + boolean right, boolean front, boolean cross, IIcon icon) { + float minU = icon.getMinU(); + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float maxV = icon.getMaxV(); + float startU = icon.getInterpolatedU(7); + float endU = icon.getInterpolatedU(9); + double startX = x + (7.0 / 16.0); + double startZ = z + (7.0 / 16.0); + double endX = x + (9.0 / 16.0); + double endZ = z + (9.0 / 16.0); - renderer.renderAllFaces = false; - return true; + switch (side) { + case NORTH: + double northZ = z + (7.0 / 16.0); + if (right) { + tessellator.addVertexWithUV(x, y + 1, northZ, maxU, minV); + tessellator.addVertexWithUV(startX, y + 1, northZ, endU, minV); + tessellator.addVertexWithUV(startX, y, northZ, endU, maxV); + tessellator.addVertexWithUV(x, y, northZ, maxU, maxV); + } + + if (left) { + tessellator.addVertexWithUV(endX, y + 1, northZ, startU, minV); + tessellator.addVertexWithUV(x + 1, y + 1, northZ, minU, minV); + tessellator.addVertexWithUV(x + 1, y, northZ, minU, maxV); + tessellator.addVertexWithUV(endX, y, northZ, startU, maxV); + } + + if (cross) northZ = z; + if (cross || !front) { + tessellator.addVertexWithUV(startX, y + 1, northZ, endU, minV); + tessellator.addVertexWithUV(endX, y + 1, northZ, startU, minV); + tessellator.addVertexWithUV(endX, y, northZ, startU, maxV); + tessellator.addVertexWithUV(startX, y, northZ, endU, maxV); + } + + break; + case SOUTH: + double southZ = z + (9.0 / 16.0); + if (right) { + tessellator.addVertexWithUV(x + 1, y + 1, southZ, maxU, minV); + tessellator.addVertexWithUV(endX, y + 1, southZ, endU, minV); + tessellator.addVertexWithUV(endX, y, southZ, endU, maxV); + tessellator.addVertexWithUV(x + 1, y, southZ, maxU, maxV); + } + + if (left) { + tessellator.addVertexWithUV(startX, y + 1, southZ, startU, minV); + tessellator.addVertexWithUV(x, y + 1, southZ, minU, minV); + tessellator.addVertexWithUV(x, y, southZ, minU, maxV); + tessellator.addVertexWithUV(startX, y, southZ, startU, maxV); + } + + if (cross) southZ = z + 1; + if (cross || !front) { + tessellator.addVertexWithUV(endX, y + 1, southZ, endU, minV); + tessellator.addVertexWithUV(startX, y + 1, southZ, startU, minV); + tessellator.addVertexWithUV(startX, y, southZ, startU, maxV); + tessellator.addVertexWithUV(endX, y, southZ, endU, maxV); + } + + break; + case WEST: + double westX = x + (7.0 / 16.0); + if (right) { + tessellator.addVertexWithUV(westX, y + 1, z + 1, maxU, minV); + tessellator.addVertexWithUV(westX, y + 1, endZ, endU, minV); + tessellator.addVertexWithUV(westX, y, endZ, endU, maxV); + tessellator.addVertexWithUV(westX, y, z + 1, maxU, maxV); + } + + if (left) { + tessellator.addVertexWithUV(westX, y + 1, startZ, startU, minV); + tessellator.addVertexWithUV(westX, y + 1, z, minU, minV); + tessellator.addVertexWithUV(westX, y, z, minU, maxV); + tessellator.addVertexWithUV(westX, y, startZ, startU, maxV); + } + + if (cross) westX = x; + if (cross || !front) { + tessellator.addVertexWithUV(westX, y + 1, endZ, endU, minV); + tessellator.addVertexWithUV(westX, y + 1, startZ, startU, minV); + tessellator.addVertexWithUV(westX, y, startZ, startU, maxV); + tessellator.addVertexWithUV(westX, y, endZ, endU, maxV); + } + + break; + case EAST: + double eastX = x + (9.0 / 16.0); + + if (right) { + tessellator.addVertexWithUV(eastX, y + 1, z, maxU, minV); + tessellator.addVertexWithUV(eastX, y + 1, startZ, endU, minV); + tessellator.addVertexWithUV(eastX, y, startZ, endU, maxV); + tessellator.addVertexWithUV(eastX, y, z, maxU, maxV); + } + + if (left) { + tessellator.addVertexWithUV(eastX, y + 1, endZ, startU, minV); + tessellator.addVertexWithUV(eastX, y + 1, z + 1, minU, minV); + tessellator.addVertexWithUV(eastX, y, z + 1, minU, maxV); + tessellator.addVertexWithUV(eastX, y, endZ, startU, maxV); + } + + if (cross) eastX = x + 1; + if (cross || !front) { + tessellator.addVertexWithUV(eastX, y + 1, startZ, endU, minV); + tessellator.addVertexWithUV(eastX, y + 1, endZ, startU, minV); + tessellator.addVertexWithUV(eastX, y, endZ, startU, maxV); + tessellator.addVertexWithUV(eastX, y, startZ, endU, maxV); + } + + break; + } } @Override diff --git a/src/main/java/tconstruct/smeltery/model/PaneRender.java b/src/main/java/tconstruct/smeltery/model/PaneRender.java deleted file mode 100644 index 2e226ff655a..00000000000 --- a/src/main/java/tconstruct/smeltery/model/PaneRender.java +++ /dev/null @@ -1,47 +0,0 @@ -package tconstruct.smeltery.model; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.world.IBlockAccess; - -import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import tconstruct.util.ItemHelper; - -@ThreadSafeISBRH(perThread = false) -public class PaneRender implements ISimpleBlockRenderingHandler { - - public static int model = RenderingRegistry.getNextAvailableRenderId(); - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) { - if (modelID == model) { - renderer.setRenderBounds(0.0F, 0.0F, 0.4375F, 1.0F, 1.0F, 0.5625F); - ItemHelper.renderStandardInvBlock(renderer, block, metadata); - } - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelID, - RenderBlocks renderer) { - if (modelID == model) { - // renderer.setOverrideBlockTexture(((PaneBase)block).getIcon(0, world.getBlockMetadata(x,y,z))); - return renderer.renderBlockStainedGlassPane(block, x, y, z); - // return renderPaneInWorld(renderer, world, x, y, z, (PaneBase) block); - } else { - return false; - } - } - - @Override - public boolean shouldRender3DInInventory(int modelID) { - return true; - } - - @Override - public int getRenderId() { - return model; - } -} diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/clear/glass_side.png b/src/main/resources/assets/tinker/textures/blocks/glass/clear/glass_side.png index 6aacd57b2f09586c26640348b0fc2a11e7032b82..1935c8efec258182ec25d1ea8ea4532cf30130c0 100644 GIT binary patch delta 168 zcmV;Z09XIY0oehNIe&{uL_t(IPh()f1OEN{_y54xfB)eESO628g#&zkco)vb1_&C! zE3XV^V*_{%IP@LP#0l^k00MTLa3<*h6o{Lz-6lT}iSYsp$QC#c2_S0*MJ329Ffn9r zF~Xb(3vE!ef!HA0TSJ*)>kULSg7`2)VCwJ!kj;d`052E@DIt*13<1AxG(^@fS>^&Td-l6 z^I_qD&W2$IkPRRVlZ3Hh;>Z};5STj3y)evE;^6QCAp-zxjS}A~ZoH`L00000NkvXX Hu0mjf`Q<(a From eb36b6dd4aa63fa244140ad8a0c3b5824964b6c0 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Fri, 3 Apr 2026 16:07:30 -0700 Subject: [PATCH 02/22] Add textures for stained glass top/bottom --- .../smeltery/blocks/GlassPaneConnected.java | 9 +++++-- .../blocks/GlassPaneConnectedMeta.java | 22 ++++++++++++------ .../glass/stained/black/glass_bottom.png | Bin 0 -> 113 bytes .../blocks/glass/stained/black/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/blue/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/blue/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/brown/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/brown/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/cyan/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/cyan/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/gray/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/gray/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/green/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/green/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/light_blue/glass_bottom.png | Bin 0 -> 116 bytes .../glass/stained/light_blue/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/light_gray/glass_bottom.png | Bin 0 -> 116 bytes .../glass/stained/light_gray/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/lime/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/lime/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/magenta/glass_bottom.png | Bin 0 -> 116 bytes .../glass/stained/magenta/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/orange/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/orange/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/pink/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/pink/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/purple/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/purple/glass_top.png | Bin 0 -> 116 bytes .../blocks/glass/stained/red/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/red/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/white/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/white/glass_top.png | Bin 0 -> 116 bytes .../glass/stained/yellow/glass_bottom.png | Bin 0 -> 116 bytes .../blocks/glass/stained/yellow/glass_top.png | Bin 0 -> 116 bytes 34 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/black/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/black/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/blue/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/blue/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/lime/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/lime/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/orange/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/orange/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_top.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_bottom.png create mode 100644 src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_top.png diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index 1221c7944ee..d839c3c089b 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -35,7 +35,8 @@ public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, in return icons[15]; } - return getSideTextureIndex(blockAccess.getBlockMetadata(x, y, z)); + int meta = blockAccess.getBlockMetadata(x, y, z); + return side == 0 ? getBottomIcon(meta) : getTopIcon(meta); } return super.getConnectedBlockTexture(blockAccess, x, y, z, side, icons); @@ -117,7 +118,11 @@ public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int x, int y, i this.setBlockBounds(f, 0.0F, f2, f1, 1.0F, f3); } - public IIcon getSideTextureIndex(int meta) { + public IIcon getTopIcon(int meta) { + return sideIcon; + } + + public IIcon getBottomIcon(int meta) { return sideIcon; } diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java index 3039a71db13..b9283343638 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java @@ -16,16 +16,18 @@ public class GlassPaneConnectedMeta extends GlassPaneConnected { - public String[] textures; - public IIcon[][] icons; - public IIcon[] sideIcons; + private final String[] textures; + private final IIcon[][] icons; + private final IIcon[] topIcons; + private final IIcon[] bottomIcons; public static final boolean ignoreMetaForConnectedGlass = PHConstruct.connectedTexturesMode == 2; public GlassPaneConnectedMeta(String location, boolean hasAlpha, String... textures) { super(location, hasAlpha); this.textures = textures; this.icons = new IIcon[textures.length][16]; - this.sideIcons = new IIcon[textures.length]; + this.topIcons = new IIcon[textures.length]; + this.bottomIcons = new IIcon[textures.length]; } @Override @@ -61,13 +63,19 @@ public void getSubBlocks(Item b, CreativeTabs creativeTabs, List list public void registerBlockIcons(IIconRegister iconRegister) { for (int i = 0; i < textures.length; i++) { registerBlockIcons(iconRegister, icons[i], folder + "/" + textures[i]); - sideIcons[i] = iconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_side"); + topIcons[i] = iconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_top"); + bottomIcons[i] = iconRegister.registerIcon("tinker:glass/" + folder + "/" + textures[i] + "/glass_bottom"); } } @Override - public IIcon getSideTextureIndex(int meta) { - return sideIcons[meta]; + public IIcon getTopIcon(int meta) { + return topIcons[meta]; + } + + @Override + public IIcon getBottomIcon(int meta) { + return bottomIcons[meta]; } @Override diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/black/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/black/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7bb1d516b482be9c62b22e7b21aec2704214182f GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|v^`xMLo9le z6Atj7b1?KfaKu3|LCUnD@sUA-iiodCKdV!MiJ~AQo1H!b!&_z+iLx)&DnM-vp00i_ I>zopr0Iduh761SM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/black/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/black/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..493d357c521b35d85fe6eb870b658ab00da051ac GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amz|`OUe(a_Gku1H%B08E(7@3oLjfI9-L$CNt_w_<9^^Y&_4+@S2fZb?d^toj{!o Mp00i_>zopr08g?Y8vpmdKI;Vst06vl*wg3PC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/blue/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/blue/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..965349143dae8ade4c1cf1f454cd8beef94f9df1 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amz&&Hq!)*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5!T63qDW|vRQJ_u+ MPgg&ebxsLQ0DAl&WdHyG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0598522464d0b786fff32a6c4de3a31751d03b GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6AmyZ`7Ax(U|?tJ!z049ERb13gOAzG>7vW$hy&bi!a{`!4?Z(7{LE%AnGyc|Hc%&n Mr>mdKI;Vst04uv7Jpcdz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..21ba3a2959b1939002854ede6b8d4e7bce145a44 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amz&wRg;6OsvV8A)&$IvzW~wK!&ZSWl`s|jSb>GYATNo9C*&ka50Q?ev(}2GN4Wd MPgg&ebxsLQ0B9>AZU6uP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a8d2b40d30e4144544c0881467cfd04ce6e5b2 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6AmzkY`S&6!NAVchew2ISs=571|PGV(?yrh5eK;4goO$d9(-nEsP5xz6gwLI3#gO9 M)78&qol`;+06O9y?EnA( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5e7510eb5c7135d17ffd4dda26dd02f685fc82 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{;j6b~KJ?>?fnfm03^(3{1r|IKoUX!WlNt3Td_9gdHlF8Zkl4g$_(uOw98f2N Mr>mdKI;Vst073^JfB*mh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..9546e430625b618585bb02f80c585b03f709d168 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!XnKS2HgMpo?5041bvOs1D4L)W!r;9G1BMxx82@4e_JowDS5T?fdZA(tKI8Y~p Mr>mdKI;Vst05N7CSO5S3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..458b540605bda086294a07fadc4763a7df021a4e GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!v-Puvd*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5;lHN90o?@!%YZr= NJYD@<);T3K0RWR(A#nfz literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6c7a02826ac69ce3bd05e850d1f5f4bfef52b71b GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amy>IU8}l!NAVchew2ISs=571|PGV(?yrh5eK;4goO$d9(-nExOa>79jkYwIZ!8q Mr>mdKI;Vst05xA9jsO4v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d97c77025b97ec011231415223c03c4ac69419da GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!1tBI>(Yx%e`F=>H-L9f&She8Php)R#q$C=^`W=-f|W}Yw3&~7PUB9L2}0MyCg M>FVdQ&MBb@0AdLrdjJ3c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..2944a1742e67f6993c4ce962ef2374eed519da8e GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amyx(k`FFm{^lFLqdbaXEB>WfDBtt%c9O_8ym!X)KnfFIPjd6;d3DOi^89WnSnYP NJYD@<);T3K0RV@2BB}rY literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..16c6079504172119a66ddbf0ba96cc19c53bbfcb GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!z-T7V5*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5;e)GSWeQV0Cr~GY Mr>mdKI;Vst0EMd{Q~&?~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..8d896d33795b603ffeed150258320ec0585f780d GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amyh^P5}6*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5A$J?kH-L9f&She8Php)R#q$C=^`W=-f|W}Yw3uy(27e!0j8{6L)y Mp00i_>zopr0D6!hyZ`_I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/lime/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/lime/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..426b0a16fc8b4809d3c549b9b88a88087de5cd8f GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amy>T0Q4ngMpo?5041bvOs1D4L)W!r;9G1BMxx82@4e_JowDSz;c*#^Xlx!`aqow Mp00i_>zopr0654W%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/lime/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/lime/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..79601478b00c92fe5243e95ac107198b12bd77f3 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!T{k>nt*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5;pBTk?%UlTJ_B_! Nc)I$ztaD0e0sy5*BCr4e literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..c2844ef42fe38978002c11ba2c4f895298a3ebc8 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{s@*=HF|j6VhJ*%-&tf)%02#KPmPMVV$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5VF8O^v{lBLML?Yl Mp00i_>zopr0GA~p4FCWD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/orange/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/orange/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ca1e5c3ec81b969ff189e5eea2a923fad5ffa9 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amz|?ff{0F|j6VhJ*%-&tf)%02#KPmPMVzopr0EHGI%>V!Z literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/orange/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/orange/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b73ea8adc30fe7ac46bc334f7cc3d0db4576c156 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{v%guz*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5;rcH@fvAf??}0iQ NJYD@<);T3K0RWmdKI;Vst0CUM8m;e9( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..ef05d8d6324c1c6feba30a9bd90089024de266c7 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{o4>!Bt>xp&#H0lR2E9@T910~2gu2vb9cPL&m^Gn;nR&iA!?h2B`Espi1c5pk NJYD@<);T3K0RXCgA;16t literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..d0728adfaadc9429b9da9e51333074690d1a5e9f GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6AmylE$u$nU|?tJ!z049ERb13gOAzG>7vW$hy&bi!a{`!4?Z(7%;@0Avs6>|1?pt* MboFyt=akR{00PS$-~a#s literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1370be7502b462525f28a8bbaa619096e821c6 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!H)BRD;*79*>V$uQugI=iv4uuj1LS1UJjx)s>%$m@_%sgM5A*)uP(}Ue4AE=YT M)78&qol`;+0E4|CCjbBd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb93ab9f7fa38901d42d2d1afb52b9b0c2aa5bd GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!1x^eS-gMpo?5041bvOs1D4L)W!r;9G1BMxx82@4e_JowDSAo_^yfXw!8M NJYD@<);T3K0RUaeAo2hJ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c7757a7d4c0b1b3f996a6efd2a00ff442e7ddb15 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{lea2iYx%e`F=>H-L9f&She8Php)R#q$C=^`W=-f|W}Yw3uvbuEIdh-CAW$cR Mr>mdKI;Vst09vCTWB>pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e87cd338e8f18f4da8d37d12b3497b4340b17a48 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Amz&#qX|VYx%e`F=>H-L9f&She8Php)R#q$C=^`W=-f|W}Yw3AbC%Kr`C0DG*Bml Mr>mdKI;Vst09`R3y#N3J literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..71a8707f78399b80914095d4ca667b710b54111b GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{`}@0`t>xp&#H0lR2E9@T910~2gu2vb9cPL&m^Gn;nR&iA!{50=zn*yR=>zIy N@O1TaS?83{1OVR&Bdq`c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0d2585c91d85cf947808fd93fa7b9fe74139f3 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{+SGc!!NAVchew2ISs=571|PGV(?yrh5eK;4goO$d9(-nEU^~tkQuiZ$B~T}W Mr>mdKI;Vst083^dD*ylh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_top.png new file mode 100644 index 0000000000000000000000000000000000000000..bda2cbe53bd6b9e776aee028bc38b8f5ae79b867 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|^gLZ0Lo9le z6Am!{`**jTt>xp&#H0lR2E9@T910~2gu2vb9cPL&m^Gn;nR&iALtCTZ1`dN`Pk=fZ NJYD@<);T3K0RX;3A{_t# literal 0 HcmV?d00001 From 1f7454f378783505e6443c53d3e3866b6ed241a1 Mon Sep 17 00:00:00 2001 From: UltraProdigy <187078471+UltraProdigy@users.noreply.github.com> Date: Sat, 4 Apr 2026 20:39:44 -0400 Subject: [PATCH 03/22] optimize images --- .../textures/blocks/glass/clear/glass_side.png | Bin 217 -> 167 bytes .../blocks/glass/stained/black/glass_bottom.png | Bin 113 -> 102 bytes .../blocks/glass/stained/black/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/blue/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/blue/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/brown/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/brown/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/cyan/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/cyan/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/gray/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/gray/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/green/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/green/glass_top.png | Bin 116 -> 107 bytes .../glass/stained/light_blue/glass_bottom.png | Bin 116 -> 107 bytes .../glass/stained/light_blue/glass_top.png | Bin 116 -> 107 bytes .../glass/stained/light_gray/glass_bottom.png | Bin 116 -> 107 bytes .../glass/stained/light_gray/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/lime/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/lime/glass_top.png | Bin 116 -> 107 bytes .../glass/stained/magenta/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/magenta/glass_top.png | Bin 116 -> 107 bytes .../glass/stained/orange/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/orange/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/pink/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/pink/glass_top.png | Bin 116 -> 107 bytes .../glass/stained/purple/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/purple/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/red/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/red/glass_top.png | Bin 116 -> 107 bytes .../blocks/glass/stained/white/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/white/glass_top.png | Bin 116 -> 107 bytes .../glass/stained/yellow/glass_bottom.png | Bin 116 -> 107 bytes .../blocks/glass/stained/yellow/glass_top.png | Bin 116 -> 107 bytes 33 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/clear/glass_side.png b/src/main/resources/assets/tinker/textures/blocks/glass/clear/glass_side.png index 1935c8efec258182ec25d1ea8ea4532cf30130c0..2f71e27f7d9f742c2ae1405a057799697957a401 100644 GIT binary patch delta 117 zcmV-*0E++F0jB|wIc`}=L_t(I%VS``1OEN{_y54xfBzZC1t0@9U%O420Tj6aq?uv^ zK&}|LFaWuLpaCFTuwj`0K?cCQ0uw`4#{g0QQ-rJmM8muQ!`KX_+zZ1zB@PZR5HbJ& XN3-85>8(Ud00000NkvXXu0mjff|M>P delta 168 zcmV;Z09XH~0oehNIe&{uL_t(IPh()f1OEN{_y54xfB)eESO628g#&zkco)vb1_&C! zE3XV^V*_{%IP@LP#0l^k00MTLa3<*h6o{Lz-6lT}iSYsp$QC#c2_S0*MJ329Ffn9r zF~Xb(3vE!ef!HA0TSJ*)>kULSg7`2)VCwJ!kj;d`052E@DIt*2IZFPkv{ Nfv2mV%Q~loCIFJI78w8l delta 69 zcmYc*oM7mn?djqeV$qwNaDe}ugQ4GnBMyoQQl<@!j|>u2M0`#9S)CG06a^XC?DQEJ X-ZHaDlzp*QVE_V8S3j3^P6gnPbVsSb-;Q+Im-<%sPhj^Ye1v0-#W$+Q)IirZ#EjiIbf`LJ#vL$!p SjO=R+K;Y@>=d#Wzp$P!fnHA#z delta 72 zcmc~UnPBLw=jq}YV$qwNaDZ9OZ_W*tLqDz<7zS|6aN|u_V8J87=_-6SnNeTD*W*ZI b<9Tj|*Noh%TNm!_WB>wBS3j3^P6gnPbVsSb-;Q;fFEvwHp7%=ZlxWZ5+$q?+Kx9m>C#Rv&LHUzae&)RSg0`J b!Dl80xfJ$hv(rt-8Gyjk)z4*}Q$iB}jT;zD diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/blue/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/blue/glass_top.png index 965349143dae8ade4c1cf1f454cd8beef94f9df1..b1cdc5b10521a1ebfad831a2491cd484d5ce1872 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q+JQ{6E!fEs`f#7qeYB%`ii$$nYs!&#^-V1`G_X502Qb9^oGH#=)`Sjb b=K10b#&-ltIlVoPG5~?6tDnm{r-UW|$%PpE diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_bottom.png index 6d0598522464d0b786fff32a6c4de3a31751d03b..f1c271259c705e025e14f8f5a9850bfcdc8efd1b 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q(`z&(iY^2FyDXt}s+dG6cKmExXfjF+zfmje+5{R)nG& SgXJRzAnXEuAujPUQb8Gyjk)z4*}Q$iB}dPEr0 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/brown/glass_top.png index 21ba3a2959b1939002854ede6b8d4e7bce145a44..9ab092070e9eed01eafb58e2568a1f23dc9cb1d8 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q+H)d&eBcM7E-XD;U2RF)Ztd@!83^c%y*~4+F!?{36vY SDoSh&K;Y@>=d#Wzp$P!Y!W9z$ delta 72 zcmc~UnPBLw=jq}YV$qwNaDdsYy<-kzVolZz2@MvX#cT!vGHg99i#nfeY!L5JQ+agY bz;jlHi(#DeljKU5F#v(5tDnm{r-UW|wzL`q diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_bottom.png index e7a8d2b40d30e4144544c0881467cfd04ce6e5b2..67210823f9e39c4956911327a4d7d264f685bae8 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q({Urd#J5448K&Tw$n^WC(WATXv`6VuS=A8w10IYXy6k SUN%3+00f?{elF{r5}E)Duovq9 delta 72 zcmc~UnPBLw=jq}YV$qwNaDX{v)2;Ij26m=CJR(fX0+}T=_?X?CF1mb3LbsuM=*wN@;3_#%N>gTe~DWM4fiE9{x diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/cyan/glass_top.png index 8a5e7510eb5c7135d17ffd4dda26dd02f685fc82..f52acf3f80c07c1dded9ea4b03a9e0d57f1dc8a4 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;d=zIsdMLp)EK0-0Z=GWZDYoKeK=mYirI!N8#Uf5qQN S-P%zMK;Y@>=d#Wzp$P!qsuphm delta 72 zcmc~UnPBLw=jq}YV$qwNaDe#_U%e&sp&wTa3v5#9 b@jN$!#3nw&H~NR-7=Xaj)z4*}Q$iB}kdPP_ diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_bottom.png index 9546e430625b618585bb02f80c585b03f709d168..a08d9e652ec816b3792f9b7283eaf085a4cea743 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fTIdjf67%=ZlxWZ5+$q?+Kx9m>C#Rv&LHUzae&)RSg0`J b!Dl9hFg5mXTXMR^8Gyjk)z4*}Q$iB}fA1IW diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/gray/glass_top.png index 458b540605bda086294a07fadc4763a7df021a4e..4c96687da30629337757e98cac302f6e0ed5e51d 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q({qogIa2Es`f#7qeYB%`ii$$nYs!&#^-V1`G^)n~!h2 T^{ePS0}yz+`njxgN@xNAEDITp delta 72 zcmc~UnPBLw=jq}YV$qwNaDX}Q&W=L1mX9kFlNJaV^hzCYD3mY|>Qb9^oGH#=)`Sjb b=K10b|1|{;=q@N&#sCDKu6{1-oD!M<;o=$x diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_bottom.png index 6c7a02826ac69ce3bd05e850d1f5f4bfef52b71b..4f4d636d750a73ac3874b170fa2b8ed2fcacc293 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fLvk~VT448K&Tw$n^WC(WATXv`6VuS=A8w11Ebl01^ S_d5J!00K`}KbLh*2~7a}p%-5O delta 72 zcmc~UnPBLw=jq}YV$qwNaDaKr*@*KE26m=CJR(fX0+}T=_?X?CF1mb4$y<4pBSiK|78Gyjk)z4*}Q$iB}gXkC} diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/green/glass_top.png index d97c77025b97ec011231415223c03c4ac69419da..d542278c9893f36d7ab8fcbb168f09399cca37b4 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fxnz$;q7ReK=i`g!mW|*N=WcZY==h&eF0|titKL-`} S@-IEc00f?{elF{r5}E)5>=)Aj delta 72 zcmc~UnPBLw=jq}YV$qwNaDaJTObP0l+XkKu#y-N diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_blue/glass_bottom.png index 2944a1742e67f6993c4ce962ef2374eed519da8e..873f41b1b62d00abb7a2fac72d19b521bdb203e9 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;d^?eaN{iEKp&S1^7tVp!G@gnPbVsSb-;Q+JVo!|9rEs`f#7qeYB%`ii$$nYs!&#^-V1`G_L&KF`8 Sgms)4fWXt$&t;ucLK6V^a~3xM delta 72 zcmc~UnPBLw=jq}YV$qwNaDZ9w&hL7*mX9kFlNJaV^hzCYD3mY|>Qb9^oGH#=)`Sjb b=K10bA6x}1Q<&;G8Gyjk)z4*}Q$iB})HE3C diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_bottom.png index 8d896d33795b603ffeed150258320ec0585f780d..ece993f335a5637cc0ebdf6f56575d6d5f2101fb 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;e8zqwUxEs`f#7qeYB%`ii$$nYs!&#^-V1`G`EOJ_{o TdCl)50}yz+`njxgN@xNA66P4U delta 72 zcmc~UnPBLw=jq}YV$qwNaDaK4-`py;mX9kFlNJaV^hzCYD3mY|>Qb9^oGH#=)`Sjb b=K10bx!ZUy7mIf3GXR07tDnm{r-UW|!*Ll0 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/light_gray/glass_top.png index b9700ee7a15c158d721ade1d54edec3381cbad55..31f5c21b885fbd682ea2f1ff6708b6d524e1c527 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q({ozM4w57ReK=i`g!mW|*N=WcZY==h&eF0|o}3DVLZ2 S7W~`D00f?{elF{r5}E)86Bqyh delta 72 zcmc~UnPBLw=jq}YV$qwNaDX{(Uri-j%g2?8NecuFdZi9H6iOHfb*ard&J<@bYeEMz b^L%lJwMzx}%SArmX8;0ES3j3^P6gnPbVsSb-;Q;fb)pO1@7%=ZlxWZ5+$q?+Kx9m>C#Rv&LHU@^xe~U%m S%@04!00f?{elF{r5}E)5A{TN1 delta 72 zcmc~UnPBLw=jq}YV$qwNaDaKz>N)2c4D3vOctn_%1u{!$@G-kNU3B>zae&)RSg0`J b!Dl80mcyKzS7$%gX8;0ES3j3^P6gnPbVsSb-;Q+JT-}_~3Es`f#7qeYB%`ii$$nYs!&#^-V1`G`E= delta 72 zcmc~UnPBLw=jq}YV$qwNaDZ9v@BK2imX9kFlNJaV^hzCYD3mY|>Qb9^oGH#=)`Sjb c=K10bC*KQl-|qhKnE?nqUHx3vIVCg!0Q1osMgRZ+ diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_bottom.png index c2844ef42fe38978002c11ba2c4f895298a3ebc8..507a58af4ca90c33f889c5dc528bbaaf65b52e12 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fm+U@fh6WNLmu3-FP#IUR*#%Cwv;*AC}JPZtPjrv>} S=WNer00K`}KbLh*2~7Y1$QHo> delta 72 zcmc~UnPBLw=jq}YV$qwNaDe$&?e_VMi8Wa>Bs5rj7PA=y$guUaEb4r=u|d2?P36&n c1J79*WVUdBpVt&TnE?nqUHx3vIVCg!0Pm6;UH||9 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/magenta/glass_top.png index c92cd0593946d490e4ab8c90bc49390c1bbdf7bf..9d082246d7b017bac9d4e3740c5163105066b4f9 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q({oyZ`lUEs`f#7qeYB%`ii$$nYs!&#^-V1`G^!|IU3q TH`~OY0SG)@{an^LB{Ts5G&~tX delta 72 zcmc~UnPBLw=jq}YV$qwNaDX}P-T!*FmX9kFlNJaV^hzCYD3mY|>Qb9^oGH#=)`Sjb b=K10b3s?lBtuoFmVgLe9S3j3^P6gnPbVsSb-;Q+JR&X02#6WNLmu3-FP#IUR*#%Cwv;*AC}JPZtLs#6^^ S7xsBE0D-5gpUXO@geCy)R2E(U delta 72 zcmc~UnPBLw=jq}YV$qwNaDZ8D=f^pWi8Wa>Bs5rj7PA=y$guUaEb4r=u|d2?P36&n b1J79*-gI*GSj~`gWdH(CS3j3^P6gnPbVsSb-;Q;eL`Qb9^oGH#=)`Sjb b=K10b*MA8LL|qJe&j19Tu6{1-oD!M<@c$a8 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_bottom.png index 7d2fdf60e72f6d3a3c6711df0a54d3335c711cb1..167a76a7df1dbfdb09dee5719f5464b92dd806cd 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fwmg(~u6WNLmu3-FP#IUR*#%Cwv;*AC}JPZs8Yx-YK S-y$E+00f?{elF{r5}E-2BNrF| delta 72 zcmc~UnPBLw=jq}YV$qwNaDe$-%k=q-i8Wa>Bs5rj7PA=y$guUaEb4r=u|d2?P36&n b1J79*Y9n~07#(z48Gyjk)z4*}Q$iB}!crM7 diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/pink/glass_top.png index ef05d8d6324c1c6feba30a9bd90089024de266c7..51778b159b9dc76841004e6cbccad2c128936e88 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;f$`TMKcS|m@fE@r!Mnqh`gk>OLeo@0j!3>X+nOwK=j T`d45k0}yz+`njxgN@xNAFRmF2 delta 72 zcmc~UnPBLw=jq}YV$qwNaDe&W{QcEzEgx4VCM^&!=#@I)P$*#_)TK7-I8&U#tO*^= b%=5(=u6+>9muo#E$N&VMu6{1-oD!M<`3D+S diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/purple/glass_bottom.png index d0728adfaadc9429b9da9e51333074690d1a5e9f..8d45835443b31e06e065763f1e48642bacd21c8e 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q%w!((ZE&2FyDXt}s+dG6cKmExXfjF+zfmje%jMS@O+= SteSodK;Y@>=d#Wzp$P!Wo)shj delta 72 zcmc~UnPBLw=jq}YV$qwNaDbUgnPbVsSb-;Q;eH-5>RAEs`f#7qeYB%`ii$$nYs!&#^-V1`G`4la9(> Sx6$cl00K`}KbLh*2~7YH)EATh delta 72 zcmc~UnPBLw=jq}YV$qwNaDe%p?vHx5mX9kFlNJaV^hzCYD3mY|>Qb9^oGH#=)`Sjb b=K10bS+xS49_%Lh3_#%N>gTe~DWM4f(nc7) diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_bottom.png index 0eb93ab9f7fa38901d42d2d1afb52b9b0c2aa5bd..437cefc3fd8d29c507ecd709f99472f8184fc8c0 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fh8#m847%=ZlxWZ5+$q?+Kx9m>C#Rv&LHU@@s+Ws4T SiX7%M0D-5gpUXO@geCw51{SOU delta 72 zcmc~UnPBLw=jq}YV$qwNaDaK$jhp8i4D3vOctn_%1u{!$@G-kNU3B>zae&)RSg0`J b!Dl80(MN0tbiN#1&j19Tu6{1-oD!M diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/red/glass_top.png index c7757a7d4c0b1b3f996a6efd2a00ff442e7ddb15..be3a0a0ea924f7dc7f59bf4022f97c60155bbc0c 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;eLd8-n(7ReK=i`g!mW|*N=WcZY==h&eF0|ti7-N#xl S?9^ao00K`}KbLh*2~7a@u@^l6 delta 72 zcmc~UnPBLw=jq}YV$qwNaDe%ryj2NX%g2?8NecuFdZi9H6iOHfb*ard&J<@bYeEMz b^L%lJy@CSEnfv?&8Gyjk)z4*}Q$iB}sVo=z diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_bottom.png index e87cd338e8f18f4da8d37d12b3497b4340b17a48..58cfe3acbc76f27437dbe6005908ade4707e692e 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q+H){O($|7ReK=i`g!mW|*N=WcZY==h&eF0|tifoc)fw SLipY?0D-5gpUXO@geCy+j29XJ delta 72 zcmc~UnPBLw=jq}YV$qwNaDdq?es?Wf%g2?8NecuFdZi9H6iOHfb*ard&J<@bYeEMz b^L%jz$$J7kwXSoc8Gyjk)z4*}Q$iB}tGXCd diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/white/glass_top.png index 71a8707f78399b80914095d4ca667b710b54111b..c4f25b008034d9b83dc63d38b0a33c7d02975034 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;f$zrV}bS|m@fE@r!Mnqh`gk>OLeo@0j!3>X-MZ#>HE TS)YA`0SG)@{an^LB{Ts5MJE|r delta 72 zcmc~UnPBLw=jq}YV$qwNaDe&W-{0kIEgx4VCM^&!=#@I)P$*#_)TK7-I8&U#tO*^= c%=5(={>~Np^~7^e9|I70y85}Sb4q9e04<>$LjV8( diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_bottom.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_bottom.png index fd0d2585c91d85cf947808fd93fa7b9fe74139f3..03bbcb6ebcbe9e52d03ea51d282e1e8a6fbdff2b 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;fmO|9n}448K&Tw$n^WC(WATXv`6VuS=A8w10xEqM#) Sc~==S0D-5gpUXO@geCw8L>B!3 delta 72 zcmc~UnPBLw=jq}YV$qwNaDe&Orq=Tf26m=CJR(fX0+}T=_?X?CF1mb2g+i}j2x*zE)8Gyjk)z4*}Q$iB}neQ0E diff --git a/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_top.png b/src/main/resources/assets/tinker/textures/blocks/glass/stained/yellow/glass_top.png index bda2cbe53bd6b9e776aee028bc38b8f5ae79b867..c1b12984847a0b2ce64518db545ac12d108f2b21 100644 GIT binary patch delta 63 zcmXTPo?vLD>gnPbVsSb-;Q;f$e|O8-S|m@fE@r!Mnqh`gk>OLeo@0j!3>X;JI$Zj= TU_*Tt0}yz+`njxgN@xNAMvNJT delta 72 zcmc~UnPBLw=jq}YV$qwNaDe&Wzq{pZEgx4VCM^&!=#@I)P$*#_)TK7-I8&U#tO*^= b%=5(=+8PBna2OnW!T Date: Tue, 26 May 2026 19:02:04 -0700 Subject: [PATCH 04/22] Add bounds check to getIcons in GlassPaneConnectedMeta --- .../blocks/GlassPaneConnectedMeta.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java index b9283343638..65fbd043159 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java @@ -49,7 +49,11 @@ public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { - return icons[meta][0]; + if (meta < icons.length) { + return icons[meta][0]; + } else { + return icons[0][0]; + } } @Override @@ -70,12 +74,20 @@ public void registerBlockIcons(IIconRegister iconRegister) { @Override public IIcon getTopIcon(int meta) { - return topIcons[meta]; + if (meta < topIcons.length) { + return topIcons[meta]; + } else { + return topIcons[0]; + } } @Override public IIcon getBottomIcon(int meta) { - return bottomIcons[meta]; + if (meta < bottomIcons.length) { + return bottomIcons[meta]; + } else { + return bottomIcons[0]; + } } @Override From 9bdf192f64b6583cd48ee137ef5a155268c5a7a0 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Tue, 26 May 2026 19:02:55 -0700 Subject: [PATCH 05/22] y - 0 --- .../java/tconstruct/smeltery/model/PaneConnectedRender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index 06838a17d84..595e5814681 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -138,7 +138,7 @@ private void renderXZUV(Tessellator tessellator, double[] xzuv, double y, boolea } } else { for (int i = xzuv.length - 4; i >= 0; i -= 4) { - tessellator.addVertexWithUV(xzuv[i], y - 0, xzuv[i + 1], xzuv[i + 2], xzuv[i + 3]); + tessellator.addVertexWithUV(xzuv[i], y, xzuv[i + 1], xzuv[i + 2], xzuv[i + 3]); } } } From f7578f33dea223b57555fe4b96a13f83a677513f Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Tue, 26 May 2026 19:09:29 -0700 Subject: [PATCH 06/22] Remove obsolete selection box code --- .../tconstruct/smeltery/blocks/GlassBlockConnected.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java index cd701f57cdc..8b164fef15f 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java @@ -21,7 +21,6 @@ public class GlassBlockConnected extends MantleBlock { protected IIcon[] icons = new IIcon[16]; - private static final boolean shouldRenderSelectionBox = true; protected String folder; private final int renderPass; @@ -329,11 +328,7 @@ public IIcon getIcon(int side, int meta) { @Override public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { - if (shouldRenderSelectionBox) { - return super.getSelectedBoundingBoxFromPool(world, x, y, z); - } else { - return AxisAlignedBB.getBoundingBox(0D, 0D, 0D, 0D, 0D, 0D); - } + return super.getSelectedBoundingBoxFromPool(world, x, y, z); } protected void registerBlockIcons(IIconRegister iconRegister, IIcon[] icons, String folder) { From f8cac096f3dec4108654b7c1fc7d419f209af4f8 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Fri, 29 May 2026 22:17:21 -0700 Subject: [PATCH 07/22] More meta bounds checks --- .../tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java index 5c3aa585d21..e2850524f40 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnectedMeta.java @@ -49,7 +49,11 @@ public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { - return icons[meta][0]; + if (meta < icons.length) { + return icons[meta][0]; + } else { + return icons[0][0]; + } } @Override From 534d58c621e1d1165b485ade4d2177af4d6b8827 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Fri, 29 May 2026 22:17:39 -0700 Subject: [PATCH 08/22] Remove redundant override --- .../tconstruct/smeltery/blocks/GlassBlockConnected.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java index 8b164fef15f..db8404d0259 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java @@ -3,7 +3,6 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -326,11 +325,6 @@ public IIcon getIcon(int side, int meta) { return icons[0]; } - @Override - public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { - return super.getSelectedBoundingBoxFromPool(world, x, y, z); - } - protected void registerBlockIcons(IIconRegister iconRegister, IIcon[] icons, String folder) { icons[0] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass"); icons[1] = iconRegister.registerIcon("tinker:glass/" + folder + "/glass_1_d"); From 6804de618d214d469f578f95554785872e75a8c0 Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Wed, 3 Jun 2026 20:05:59 +0200 Subject: [PATCH 09/22] Fix connected texture settings --- src/main/java/tconstruct/util/config/PHConstruct.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/util/config/PHConstruct.java b/src/main/java/tconstruct/util/config/PHConstruct.java index c597ec61419..af86485c613 100644 --- a/src/main/java/tconstruct/util/config/PHConstruct.java +++ b/src/main/java/tconstruct/util/config/PHConstruct.java @@ -276,7 +276,7 @@ public static void initProps(File location) { islandRarity = config.get("Worldgen", "Slime Island Rarity", 1450).getInt(1450); // Looks - Property conTexMode = config.get("Looks", "Connected Textures Enabled", true); + Property conTexMode = config.get("Looks", "Connected Textures Enabled", 2); conTexMode.comment = "0 = disabled, 1 = enabled, 2 = enabled + ignore stained glass meta"; connectedTexturesMode = conTexMode.getInt(2); From f9873bedb13b741a5283a2b284b35398f64a5e1d Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Wed, 3 Jun 2026 20:34:30 +0200 Subject: [PATCH 10/22] Extract helper method --- .../smeltery/blocks/GlassBlockConnected.java | 54 ++++++++----------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java index db8404d0259..2956d9c1feb 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java @@ -278,39 +278,27 @@ public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, in break; } - if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) { - return icons[15]; - } else if (isOpenUp && isOpenDown && isOpenLeft) { - return icons[14]; - } else if (isOpenUp && isOpenDown && isOpenRight) { - return icons[13]; - } else if (isOpenDown && isOpenLeft && isOpenRight) { - return icons[12]; - } else if (isOpenUp && isOpenLeft && isOpenRight) { - return icons[11]; - } else if (isOpenDown && isOpenLeft) { - return icons[10]; - } else if (isOpenDown && isOpenRight) { - return icons[9]; - } else if (isOpenUp && isOpenLeft) { - return icons[8]; - } else if (isOpenUp && isOpenRight) { - return icons[7]; - } else if (isOpenDown && isOpenUp) { - return icons[6]; - } else if (isOpenLeft && isOpenRight) { - return icons[5]; - } else if (isOpenRight) { - return icons[4]; - } else if (isOpenLeft) { - return icons[3]; - } else if (isOpenUp) { - return icons[2]; - } else if (isOpenDown) { - return icons[1]; - } else { - return icons[0]; - } + return getConnectedTexture(icons, isOpenUp, isOpenDown, isOpenLeft, isOpenRight); + } + + protected IIcon getConnectedTexture(IIcon[] icons, boolean isOpenUp, boolean isOpenDown, boolean isOpenLeft, + boolean isOpenRight) { + if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) return icons[15]; + if (isOpenUp && isOpenDown && isOpenLeft) return icons[14]; + if (isOpenUp && isOpenDown && isOpenRight) return icons[13]; + if (isOpenDown && isOpenLeft && isOpenRight) return icons[12]; + if (isOpenUp && isOpenLeft && isOpenRight) return icons[11]; + if (isOpenDown && isOpenLeft) return icons[10]; + if (isOpenDown && isOpenRight) return icons[9]; + if (isOpenUp && isOpenLeft) return icons[8]; + if (isOpenUp && isOpenRight) return icons[7]; + if (isOpenDown && isOpenUp) return icons[6]; + if (isOpenLeft && isOpenRight) return icons[5]; + if (isOpenRight) return icons[4]; + if (isOpenLeft) return icons[3]; + if (isOpenUp) return icons[2]; + if (isOpenDown) return icons[1]; + return icons[0]; } @Override From 53caae61df708dc8883473e104fb21f5522e566c Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Wed, 3 Jun 2026 22:23:57 +0200 Subject: [PATCH 11/22] Add helper to compute visible segments --- .../smeltery/blocks/GlassPaneConnected.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index d839c3c089b..1f4a1c331f6 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -13,9 +13,15 @@ import net.minecraftforge.common.util.ForgeDirection; import tconstruct.smeltery.model.PaneConnectedRender; +import tconstruct.util.config.PHConstruct; public class GlassPaneConnected extends GlassBlockConnected { + public static final int SEGMENT_CENTER = 1; + public static final int SEGMENT_NORTH = 1 << 1; + public static final int SEGMENT_SOUTH = 1 << 2; + public static final int SEGMENT_WEST = 1 << 3; + public static final int SEGMENT_EAST = 1 << 4; private IIcon sideIcon; public GlassPaneConnected(String location, boolean hasAlpha) { @@ -42,6 +48,40 @@ public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, in return super.getConnectedBlockTexture(blockAccess, x, y, z, side, icons); } + public static int segments(boolean center, boolean north, boolean south, boolean west, boolean east) { + return (center ? SEGMENT_CENTER : 0) | (north ? SEGMENT_NORTH : 0) + | (south ? SEGMENT_SOUTH : 0) + | (west ? SEGMENT_WEST : 0) + | (east ? SEGMENT_EAST : 0); + } + + public int getVisibleVerticalSegments(IBlockAccess world, int x, int y, int z, int dy, boolean north, boolean south, + boolean west, boolean east) { + Block neighbor = world.getBlock(x, y + dy, z); + if (PHConstruct.connectedTexturesMode != 0 && neighbor == this) { + boolean neighborNorth = canPaneConnectTo(world, x, y + dy, z - 1, ForgeDirection.NORTH); + boolean neighborSouth = canPaneConnectTo(world, x, y + dy, z + 1, ForgeDirection.SOUTH); + boolean neighborWest = canPaneConnectTo(world, x - 1, y + dy, z, ForgeDirection.WEST); + boolean neighborEast = canPaneConnectTo(world, x + 1, y + dy, z, ForgeDirection.EAST); + if (!neighborNorth && !neighborSouth && !neighborWest && !neighborEast) { + neighborNorth = neighborSouth = neighborWest = neighborEast = true; + } + boolean connecting = shouldConnectToBlock(world, x, y, z, neighbor, world.getBlockMetadata(x, y + dy, z)); + if (connecting) { + boolean perfectCrossing = (north != neighborNorth) && (south != neighborSouth) + && (west != neighborWest) + && (east != neighborEast); + return segments( + perfectCrossing, + north && !neighborNorth, + south && !neighborSouth, + west && !neighborWest, + east && !neighborEast); + } + } + return neighbor.isOpaqueCube() ? 0 : segments(true, north, south, west, east); + } + @Override public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, List par6List, Entity entity) { From f0b2da6e8004f0d1dd7ecc8e0cd3e4e68df48d4b Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Wed, 3 Jun 2026 22:31:40 +0200 Subject: [PATCH 12/22] Improve face culling --- .../smeltery/blocks/GlassPaneConnected.java | 6 +- .../smeltery/model/PaneConnectedRender.java | 58 ++++++++++--------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index 1f4a1c331f6..a1b9fab2dcf 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -36,11 +36,7 @@ public int getRenderType() { @Override public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, int z, int side, IIcon[] icons) { if (side == 0 || side == 1) { - if ((blockAccess.getBlock(x, y - 1, z) == this && side == 0) - || (blockAccess.getBlock(x, y + 1, z) == this && side == 1)) { - return icons[15]; - } - + // Per-segment culling in the renderer handles whether the center / arm strips actually draw int meta = blockAccess.getBlockMetadata(x, y, z); return side == 0 ? getBottomIcon(meta) : getTopIcon(meta); } diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index 595e5814681..cbd56bec515 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -52,18 +52,22 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b // Fetch pane GlassPaneConnected pane = (GlassPaneConnected) block; - boolean bottom = pane.shouldSideBeRendered(world, x, y - 1, z, 0); - boolean top = pane.shouldSideBeRendered(world, x, y + 1, z, 1); - boolean north = pane.canPaneConnectTo(world, x, y, z - 1, NORTH); - boolean south = pane.canPaneConnectTo(world, x, y, z + 1, SOUTH); - boolean west = pane.canPaneConnectTo(world, x - 1, y, z, WEST); - boolean east = pane.canPaneConnectTo(world, x + 1, y, z, EAST); - - boolean cross = false; - if (!north && !south && !west && !east) { - cross = true; - north = south = west = east = true; - } + boolean rawNorth = pane.canPaneConnectTo(world, x, y, z - 1, NORTH); + boolean rawSouth = pane.canPaneConnectTo(world, x, y, z + 1, SOUTH); + boolean rawWest = pane.canPaneConnectTo(world, x - 1, y, z, WEST); + boolean rawEast = pane.canPaneConnectTo(world, x + 1, y, z, EAST); + boolean cross = !rawNorth && !rawSouth && !rawWest && !rawEast; + boolean north = cross || rawNorth; + boolean south = cross || rawSouth; + boolean west = cross || rawWest; + boolean east = cross || rawEast; + + // Per-segment visibility for the top and bottom faces. Whole-face culling is too coarse: + // stacked panes with mismatched arm configs (e.g. an E-W line below an N-S line) leave + // arm tops with nothing covering them, so they have to render even though the centers + // do not. + int bottomSegments = pane.getVisibleVerticalSegments(world, x, y, z, -1, north, south, west, east); + int topSegments = pane.getVisibleVerticalSegments(world, x, y, z, 1, north, south, west, east); IIcon bottomIcon = pane.getIcon(world, x, y, z, 0); IIcon topIcon = pane.getIcon(world, x, y, z, 1); @@ -72,13 +76,8 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b IIcon westIcon = pane.getIcon(world, x, y, z, 4); IIcon eastIcon = pane.getIcon(world, x, y, z, 5); - if (bottom) { - renderTopOrBottom(tessellator, x, y, z, north, south, west, east, false, bottomIcon); - } - - if (top) { - renderTopOrBottom(tessellator, x, y, z, north, south, west, east, true, topIcon); - } + renderTopOrBottom(tessellator, x, y, z, bottomSegments, false, bottomIcon); + renderTopOrBottom(tessellator, x, y, z, topSegments, true, topIcon); renderSide(tessellator, x, y, z, NORTH, east, west, north, cross, northIcon); renderSide(tessellator, x, y, z, SOUTH, west, east, south, cross, southIcon); @@ -88,8 +87,12 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b return true; } - private void renderTopOrBottom(Tessellator tessellator, int x, int y, int z, boolean north, boolean south, - boolean west, boolean east, boolean top, IIcon icon) { + private void renderTopOrBottom(Tessellator tessellator, int x, int y, int z, int segments, boolean top, + IIcon icon) { + if (segments == 0) { + return; + } + float minU = icon.getMinU(); float maxU = icon.getMaxU(); float minV = icon.getMinV(); @@ -115,18 +118,19 @@ private void renderTopOrBottom(Tessellator tessellator, int x, int y, int z, boo double[] westXZUV = new double[] { startX, startZ, startU, startV, x, startZ, minU, startV, x, endZ, minU, endV, startX, endZ, startU, endV }; - renderXZUV(tessellator, centerSquareXZUV, y, top); - - if (north) { + if ((segments & GlassPaneConnected.SEGMENT_CENTER) != 0) { + renderXZUV(tessellator, centerSquareXZUV, y, top); + } + if ((segments & GlassPaneConnected.SEGMENT_NORTH) != 0) { renderXZUV(tessellator, northXZUV, y, top); } - if (south) { + if ((segments & GlassPaneConnected.SEGMENT_SOUTH) != 0) { renderXZUV(tessellator, southXZUV, y, top); } - if (east) { + if ((segments & GlassPaneConnected.SEGMENT_EAST) != 0) { renderXZUV(tessellator, eastXZUV, y, top); } - if (west) { + if ((segments & GlassPaneConnected.SEGMENT_WEST) != 0) { renderXZUV(tessellator, westXZUV, y, top); } } From b1891a178bdede5cd9817f076ffa23fdee8df010 Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Wed, 3 Jun 2026 23:04:15 +0200 Subject: [PATCH 13/22] Improve side rendering --- .../smeltery/blocks/GlassPaneConnected.java | 24 +++ .../blocks/GlassPaneConnectedMeta.java | 11 ++ .../smeltery/model/PaneConnectedRender.java | 140 ++++++++++++++++-- 3 files changed, 160 insertions(+), 15 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index a1b9fab2dcf..2f583131298 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -78,6 +78,30 @@ public int getVisibleVerticalSegments(IBlockAccess world, int x, int y, int z, i return neighbor.isOpaqueCube() ? 0 : segments(true, north, south, west, east); } + public IIcon getPaneConnectedTexture(IBlockAccess blockAccess, int x, int y, int z, boolean openUp, + boolean openDown, boolean openLeft, boolean openRight) { + if (PHConstruct.connectedTexturesMode == 0) { + return icons[0]; + } + return getConnectedTexture(icons, openUp, openDown, openLeft, openRight); + } + + // Side-face strip icon driven by a single segment's top/bottom culling: if the segment's + // top (bottom) is hidden in topSegments /bottomSegments the strip on that piece uses the + // open-edge connected variant, matching what the top/bottom face culling does. + public IIcon getPaneSegmentTexture(IBlockAccess blockAccess, int x, int y, int z, int segment, + int topSegments, int bottomSegments, boolean openLeft, boolean openRight) { + return getPaneConnectedTexture( + blockAccess, + x, + y, + z, + (topSegments & segment) == 0, + (bottomSegments & segment) == 0, + openLeft, + openRight); + } + @Override public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, List par6List, Entity entity) { diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java index 65fbd043159..9cdb8c48e35 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java @@ -46,6 +46,17 @@ public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int return block == this && (meta == blockAccess.getBlockMetadata(x, y, z) || ignoreMetaForConnectedGlass); } + @Override + public IIcon getPaneConnectedTexture(IBlockAccess blockAccess, int x, int y, int z, boolean openUp, + boolean openDown, boolean openLeft, boolean openRight) { + int meta = blockAccess.getBlockMetadata(x, y, z); + IIcon[] icons = meta < this.icons.length ? this.icons[meta] : this.icons[0]; + if (PHConstruct.connectedTexturesMode == 0) { + return icons[0]; + } + return getConnectedTexture(icons, openUp, openDown, openLeft, openRight); + } + @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index cbd56bec515..eb5374f8e5b 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -71,18 +71,85 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b IIcon bottomIcon = pane.getIcon(world, x, y, z, 0); IIcon topIcon = pane.getIcon(world, x, y, z, 1); - IIcon northIcon = pane.getIcon(world, x, y, z, 2); - IIcon southIcon = pane.getIcon(world, x, y, z, 3); - IIcon westIcon = pane.getIcon(world, x, y, z, 4); - IIcon eastIcon = pane.getIcon(world, x, y, z, 5); + + boolean connEast = pane.shouldConnectToBlock( + world, + x, + y, + z, + world.getBlock(x + 1, y, z), + world.getBlockMetadata(x + 1, y, z)); + boolean connWest = pane.shouldConnectToBlock( + world, + x, + y, + z, + world.getBlock(x - 1, y, z), + world.getBlockMetadata(x - 1, y, z)); + boolean connNorth = pane.shouldConnectToBlock( + world, + x, + y, + z, + world.getBlock(x, y, z - 1), + world.getBlockMetadata(x, y, z - 1)); + boolean connSouth = pane.shouldConnectToBlock( + world, + x, + y, + z, + world.getBlock(x, y, z + 1), + world.getBlockMetadata(x, y, z + 1)); + + // Each side face is split into three strips (two arms + center). Per-strip vertical + // openness mirrors the corresponding segment's bit in {top,bottom}Segments — i.e. the + // exact same culling that decides whether the top/bottom face is rendered. In the cross + // case the "center" strip is actually the front-facing arm's edge, so it uses that + // arm's segment instead of SEGMENT_CENTER. + int northCenterSeg = cross ? GlassPaneConnected.SEGMENT_NORTH : GlassPaneConnected.SEGMENT_CENTER; + int southCenterSeg = cross ? GlassPaneConnected.SEGMENT_SOUTH : GlassPaneConnected.SEGMENT_CENTER; + int westCenterSeg = cross ? GlassPaneConnected.SEGMENT_WEST : GlassPaneConnected.SEGMENT_CENTER; + int eastCenterSeg = cross ? GlassPaneConnected.SEGMENT_EAST : GlassPaneConnected.SEGMENT_CENTER; + + IIcon northLeftIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_EAST, topSegments, bottomSegments, connEast, connWest); + IIcon northRightIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_WEST, topSegments, bottomSegments, connEast, connWest); + IIcon northCenterIcon = pane.getPaneSegmentTexture( + world, x, y, z, northCenterSeg, topSegments, bottomSegments, connEast, connWest); + + IIcon southLeftIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_WEST, topSegments, bottomSegments, connWest, connEast); + IIcon southRightIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_EAST, topSegments, bottomSegments, connWest, connEast); + IIcon southCenterIcon = pane.getPaneSegmentTexture( + world, x, y, z, southCenterSeg, topSegments, bottomSegments, connWest, connEast); + + IIcon westLeftIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_NORTH, topSegments, bottomSegments, connNorth, connSouth); + IIcon westRightIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_SOUTH, topSegments, bottomSegments, connNorth, connSouth); + IIcon westCenterIcon = pane.getPaneSegmentTexture( + world, x, y, z, westCenterSeg, topSegments, bottomSegments, connNorth, connSouth); + + IIcon eastLeftIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_SOUTH, topSegments, bottomSegments, connSouth, connNorth); + IIcon eastRightIcon = pane.getPaneSegmentTexture( + world, x, y, z, GlassPaneConnected.SEGMENT_NORTH, topSegments, bottomSegments, connSouth, connNorth); + IIcon eastCenterIcon = pane.getPaneSegmentTexture( + world, x, y, z, eastCenterSeg, topSegments, bottomSegments, connSouth, connNorth); renderTopOrBottom(tessellator, x, y, z, bottomSegments, false, bottomIcon); renderTopOrBottom(tessellator, x, y, z, topSegments, true, topIcon); - renderSide(tessellator, x, y, z, NORTH, east, west, north, cross, northIcon); - renderSide(tessellator, x, y, z, SOUTH, west, east, south, cross, southIcon); - renderSide(tessellator, x, y, z, WEST, north, south, west, cross, westIcon); - renderSide(tessellator, x, y, z, EAST, south, north, east, cross, eastIcon); + renderSide(tessellator, x, y, z, NORTH, east, west, north, cross, + northLeftIcon, northRightIcon, northCenterIcon); + renderSide(tessellator, x, y, z, SOUTH, west, east, south, cross, + southLeftIcon, southRightIcon, southCenterIcon); + renderSide(tessellator, x, y, z, WEST, north, south, west, cross, + westLeftIcon, westRightIcon, westCenterIcon); + renderSide(tessellator, x, y, z, EAST, south, north, east, cross, + eastLeftIcon, eastRightIcon, eastCenterIcon); return true; } @@ -148,13 +215,8 @@ private void renderXZUV(Tessellator tessellator, double[] xzuv, double y, boolea } private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirection side, boolean left, - boolean right, boolean front, boolean cross, IIcon icon) { - float minU = icon.getMinU(); - float maxU = icon.getMaxU(); - float minV = icon.getMinV(); - float maxV = icon.getMaxV(); - float startU = icon.getInterpolatedU(7); - float endU = icon.getInterpolatedU(9); + boolean right, boolean front, boolean cross, + IIcon leftIcon, IIcon rightIcon, IIcon centerIcon) { double startX = x + (7.0 / 16.0); double startZ = z + (7.0 / 16.0); double endX = x + (9.0 / 16.0); @@ -164,6 +226,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec case NORTH: double northZ = z + (7.0 / 16.0); if (right) { + float minV = rightIcon.getMinV(); + float maxV = rightIcon.getMaxV(); + float maxU = rightIcon.getMaxU(); + float endU = rightIcon.getInterpolatedU(9); tessellator.addVertexWithUV(x, y + 1, northZ, maxU, minV); tessellator.addVertexWithUV(startX, y + 1, northZ, endU, minV); tessellator.addVertexWithUV(startX, y, northZ, endU, maxV); @@ -171,6 +237,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec } if (left) { + float minV = leftIcon.getMinV(); + float maxV = leftIcon.getMaxV(); + float minU = leftIcon.getMinU(); + float startU = leftIcon.getInterpolatedU(7); tessellator.addVertexWithUV(endX, y + 1, northZ, startU, minV); tessellator.addVertexWithUV(x + 1, y + 1, northZ, minU, minV); tessellator.addVertexWithUV(x + 1, y, northZ, minU, maxV); @@ -179,6 +249,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec if (cross) northZ = z; if (cross || !front) { + float minV = centerIcon.getMinV(); + float maxV = centerIcon.getMaxV(); + float startU = centerIcon.getInterpolatedU(7); + float endU = centerIcon.getInterpolatedU(9); tessellator.addVertexWithUV(startX, y + 1, northZ, endU, minV); tessellator.addVertexWithUV(endX, y + 1, northZ, startU, minV); tessellator.addVertexWithUV(endX, y, northZ, startU, maxV); @@ -189,6 +263,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec case SOUTH: double southZ = z + (9.0 / 16.0); if (right) { + float minV = rightIcon.getMinV(); + float maxV = rightIcon.getMaxV(); + float maxU = rightIcon.getMaxU(); + float endU = rightIcon.getInterpolatedU(9); tessellator.addVertexWithUV(x + 1, y + 1, southZ, maxU, minV); tessellator.addVertexWithUV(endX, y + 1, southZ, endU, minV); tessellator.addVertexWithUV(endX, y, southZ, endU, maxV); @@ -196,6 +274,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec } if (left) { + float minV = leftIcon.getMinV(); + float maxV = leftIcon.getMaxV(); + float minU = leftIcon.getMinU(); + float startU = leftIcon.getInterpolatedU(7); tessellator.addVertexWithUV(startX, y + 1, southZ, startU, minV); tessellator.addVertexWithUV(x, y + 1, southZ, minU, minV); tessellator.addVertexWithUV(x, y, southZ, minU, maxV); @@ -204,6 +286,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec if (cross) southZ = z + 1; if (cross || !front) { + float minV = centerIcon.getMinV(); + float maxV = centerIcon.getMaxV(); + float startU = centerIcon.getInterpolatedU(7); + float endU = centerIcon.getInterpolatedU(9); tessellator.addVertexWithUV(endX, y + 1, southZ, endU, minV); tessellator.addVertexWithUV(startX, y + 1, southZ, startU, minV); tessellator.addVertexWithUV(startX, y, southZ, startU, maxV); @@ -214,6 +300,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec case WEST: double westX = x + (7.0 / 16.0); if (right) { + float minV = rightIcon.getMinV(); + float maxV = rightIcon.getMaxV(); + float maxU = rightIcon.getMaxU(); + float endU = rightIcon.getInterpolatedU(9); tessellator.addVertexWithUV(westX, y + 1, z + 1, maxU, minV); tessellator.addVertexWithUV(westX, y + 1, endZ, endU, minV); tessellator.addVertexWithUV(westX, y, endZ, endU, maxV); @@ -221,6 +311,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec } if (left) { + float minV = leftIcon.getMinV(); + float maxV = leftIcon.getMaxV(); + float minU = leftIcon.getMinU(); + float startU = leftIcon.getInterpolatedU(7); tessellator.addVertexWithUV(westX, y + 1, startZ, startU, minV); tessellator.addVertexWithUV(westX, y + 1, z, minU, minV); tessellator.addVertexWithUV(westX, y, z, minU, maxV); @@ -229,6 +323,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec if (cross) westX = x; if (cross || !front) { + float minV = centerIcon.getMinV(); + float maxV = centerIcon.getMaxV(); + float startU = centerIcon.getInterpolatedU(7); + float endU = centerIcon.getInterpolatedU(9); tessellator.addVertexWithUV(westX, y + 1, endZ, endU, minV); tessellator.addVertexWithUV(westX, y + 1, startZ, startU, minV); tessellator.addVertexWithUV(westX, y, startZ, startU, maxV); @@ -240,6 +338,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec double eastX = x + (9.0 / 16.0); if (right) { + float minV = rightIcon.getMinV(); + float maxV = rightIcon.getMaxV(); + float maxU = rightIcon.getMaxU(); + float endU = rightIcon.getInterpolatedU(9); tessellator.addVertexWithUV(eastX, y + 1, z, maxU, minV); tessellator.addVertexWithUV(eastX, y + 1, startZ, endU, minV); tessellator.addVertexWithUV(eastX, y, startZ, endU, maxV); @@ -247,6 +349,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec } if (left) { + float minV = leftIcon.getMinV(); + float maxV = leftIcon.getMaxV(); + float minU = leftIcon.getMinU(); + float startU = leftIcon.getInterpolatedU(7); tessellator.addVertexWithUV(eastX, y + 1, endZ, startU, minV); tessellator.addVertexWithUV(eastX, y + 1, z + 1, minU, minV); tessellator.addVertexWithUV(eastX, y, z + 1, minU, maxV); @@ -255,6 +361,10 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec if (cross) eastX = x + 1; if (cross || !front) { + float minV = centerIcon.getMinV(); + float maxV = centerIcon.getMaxV(); + float startU = centerIcon.getInterpolatedU(7); + float endU = centerIcon.getInterpolatedU(9); tessellator.addVertexWithUV(eastX, y + 1, startZ, endU, minV); tessellator.addVertexWithUV(eastX, y + 1, endZ, startU, minV); tessellator.addVertexWithUV(eastX, y, endZ, startU, maxV); From 2459e4305b859978ddcc34312db4584f315b4314 Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Thu, 4 Jun 2026 01:59:36 +0200 Subject: [PATCH 14/22] Fix top/bottom borders against other blocks --- .../tconstruct/smeltery/blocks/GlassPaneConnected.java | 7 ++++--- .../tconstruct/smeltery/model/PaneConnectedRender.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index 2f583131298..bff0b511458 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -22,6 +22,7 @@ public class GlassPaneConnected extends GlassBlockConnected { public static final int SEGMENT_SOUTH = 1 << 2; public static final int SEGMENT_WEST = 1 << 3; public static final int SEGMENT_EAST = 1 << 4; + public static final int SEGMENT_CONNECTED = 1 << 5; private IIcon sideIcon; public GlassPaneConnected(String location, boolean hasAlpha) { @@ -67,7 +68,7 @@ public int getVisibleVerticalSegments(IBlockAccess world, int x, int y, int z, i boolean perfectCrossing = (north != neighborNorth) && (south != neighborSouth) && (west != neighborWest) && (east != neighborEast); - return segments( + return SEGMENT_CONNECTED | segments( perfectCrossing, north && !neighborNorth, south && !neighborSouth, @@ -96,8 +97,8 @@ public IIcon getPaneSegmentTexture(IBlockAccess blockAccess, int x, int y, int z x, y, z, - (topSegments & segment) == 0, - (bottomSegments & segment) == 0, + (topSegments & SEGMENT_CONNECTED) != 0 && (topSegments & segment) == 0, + (bottomSegments & SEGMENT_CONNECTED) != 0 && (bottomSegments & segment) == 0, openLeft, openRight); } diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index eb5374f8e5b..976f0920a48 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -156,7 +156,7 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b private void renderTopOrBottom(Tessellator tessellator, int x, int y, int z, int segments, boolean top, IIcon icon) { - if (segments == 0) { + if ((segments & ~GlassPaneConnected.SEGMENT_CONNECTED) == 0) { return; } From b17a93f08c3bfc5f2fff3c743dd05bcf211d3251 Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Thu, 4 Jun 2026 02:26:27 +0200 Subject: [PATCH 15/22] Fix bottom face logic with Hodgepodge fix --- .../smeltery/blocks/GlassBlockConnected.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java index 2956d9c1feb..dc63a1f12f9 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassBlockConnected.java @@ -3,6 +3,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.launchwrapper.Launch; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -19,6 +20,8 @@ */ public class GlassBlockConnected extends MantleBlock { + private static final String HODGEPODGE_FIX_BOTTOM_FACE_UV = "hodgepodge.FixesConfig.fixBottomFaceUV"; + protected IIcon[] icons = new IIcon[16]; protected String folder; private final int renderPass; @@ -107,6 +110,12 @@ public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, in isOpenDown = true; } + if (side == 0 && isHodgepodgeFixingBottomFaceUV()) { + boolean isOpenLeftCopy = isOpenLeft; + isOpenLeft = isOpenRight; + isOpenRight = isOpenLeftCopy; + } + break; case 2: if (shouldConnectToBlock( @@ -281,6 +290,10 @@ public IIcon getConnectedBlockTexture(IBlockAccess blockAccess, int x, int y, in return getConnectedTexture(icons, isOpenUp, isOpenDown, isOpenLeft, isOpenRight); } + private static boolean isHodgepodgeFixingBottomFaceUV() { + return Boolean.TRUE.equals(Launch.blackboard.get(HODGEPODGE_FIX_BOTTOM_FACE_UV)); + } + protected IIcon getConnectedTexture(IIcon[] icons, boolean isOpenUp, boolean isOpenDown, boolean isOpenLeft, boolean isOpenRight) { if (isOpenUp && isOpenDown && isOpenLeft && isOpenRight) return icons[15]; From 6870f5d14c685463449b7b0a533f9c211fdf6d6f Mon Sep 17 00:00:00 2001 From: Fabian Maurer Date: Thu, 4 Jun 2026 03:06:49 +0200 Subject: [PATCH 16/22] Adjust crossing logic --- .../tconstruct/smeltery/blocks/GlassPaneConnected.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index bff0b511458..4d33f22d087 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -65,11 +65,12 @@ public int getVisibleVerticalSegments(IBlockAccess world, int x, int y, int z, i } boolean connecting = shouldConnectToBlock(world, x, y, z, neighbor, world.getBlockMetadata(x, y + dy, z)); if (connecting) { - boolean perfectCrossing = (north != neighborNorth) && (south != neighborSouth) - && (west != neighborWest) - && (east != neighborEast); + boolean hasOverlappingArm = (north && neighborNorth) || (south && neighborSouth) + || (west && neighborWest) + || (east && neighborEast); + boolean crossing = !hasOverlappingArm; return SEGMENT_CONNECTED | segments( - perfectCrossing, + crossing, north && !neighborNorth, south && !neighborSouth, west && !neighborWest, From 7704f8a5eea72ba5fcb11420100bca235f928835 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 4 Jun 2026 10:38:12 +0200 Subject: [PATCH 17/22] sa --- .../smeltery/blocks/GlassPaneConnected.java | 4 +- .../smeltery/model/PaneConnectedRender.java | 183 +++++++++++++----- 2 files changed, 133 insertions(+), 54 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java index 4d33f22d087..10039e1a317 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnected.java @@ -91,8 +91,8 @@ public IIcon getPaneConnectedTexture(IBlockAccess blockAccess, int x, int y, int // Side-face strip icon driven by a single segment's top/bottom culling: if the segment's // top (bottom) is hidden in topSegments /bottomSegments the strip on that piece uses the // open-edge connected variant, matching what the top/bottom face culling does. - public IIcon getPaneSegmentTexture(IBlockAccess blockAccess, int x, int y, int z, int segment, - int topSegments, int bottomSegments, boolean openLeft, boolean openRight) { + public IIcon getPaneSegmentTexture(IBlockAccess blockAccess, int x, int y, int z, int segment, int topSegments, + int bottomSegments, boolean openLeft, boolean openRight) { return getPaneConnectedTexture( blockAccess, x, diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index 976f0920a48..15d7b0f634b 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -72,34 +72,14 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b IIcon bottomIcon = pane.getIcon(world, x, y, z, 0); IIcon topIcon = pane.getIcon(world, x, y, z, 1); - boolean connEast = pane.shouldConnectToBlock( - world, - x, - y, - z, - world.getBlock(x + 1, y, z), - world.getBlockMetadata(x + 1, y, z)); - boolean connWest = pane.shouldConnectToBlock( - world, - x, - y, - z, - world.getBlock(x - 1, y, z), - world.getBlockMetadata(x - 1, y, z)); - boolean connNorth = pane.shouldConnectToBlock( - world, - x, - y, - z, - world.getBlock(x, y, z - 1), - world.getBlockMetadata(x, y, z - 1)); - boolean connSouth = pane.shouldConnectToBlock( - world, - x, - y, - z, - world.getBlock(x, y, z + 1), - world.getBlockMetadata(x, y, z + 1)); + boolean connEast = pane + .shouldConnectToBlock(world, x, y, z, world.getBlock(x + 1, y, z), world.getBlockMetadata(x + 1, y, z)); + boolean connWest = pane + .shouldConnectToBlock(world, x, y, z, world.getBlock(x - 1, y, z), world.getBlockMetadata(x - 1, y, z)); + boolean connNorth = pane + .shouldConnectToBlock(world, x, y, z, world.getBlock(x, y, z - 1), world.getBlockMetadata(x, y, z - 1)); + boolean connSouth = pane + .shouldConnectToBlock(world, x, y, z, world.getBlock(x, y, z + 1), world.getBlockMetadata(x, y, z + 1)); // Each side face is split into three strips (two arms + center). Per-strip vertical // openness mirrors the corresponding segment's bit in {top,bottom}Segments — i.e. the @@ -112,44 +92,144 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b int eastCenterSeg = cross ? GlassPaneConnected.SEGMENT_EAST : GlassPaneConnected.SEGMENT_CENTER; IIcon northLeftIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_EAST, topSegments, bottomSegments, connEast, connWest); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_EAST, + topSegments, + bottomSegments, + connEast, + connWest); IIcon northRightIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_WEST, topSegments, bottomSegments, connEast, connWest); - IIcon northCenterIcon = pane.getPaneSegmentTexture( - world, x, y, z, northCenterSeg, topSegments, bottomSegments, connEast, connWest); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_WEST, + topSegments, + bottomSegments, + connEast, + connWest); + IIcon northCenterIcon = pane + .getPaneSegmentTexture(world, x, y, z, northCenterSeg, topSegments, bottomSegments, connEast, connWest); IIcon southLeftIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_WEST, topSegments, bottomSegments, connWest, connEast); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_WEST, + topSegments, + bottomSegments, + connWest, + connEast); IIcon southRightIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_EAST, topSegments, bottomSegments, connWest, connEast); - IIcon southCenterIcon = pane.getPaneSegmentTexture( - world, x, y, z, southCenterSeg, topSegments, bottomSegments, connWest, connEast); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_EAST, + topSegments, + bottomSegments, + connWest, + connEast); + IIcon southCenterIcon = pane + .getPaneSegmentTexture(world, x, y, z, southCenterSeg, topSegments, bottomSegments, connWest, connEast); IIcon westLeftIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_NORTH, topSegments, bottomSegments, connNorth, connSouth); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_NORTH, + topSegments, + bottomSegments, + connNorth, + connSouth); IIcon westRightIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_SOUTH, topSegments, bottomSegments, connNorth, connSouth); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_SOUTH, + topSegments, + bottomSegments, + connNorth, + connSouth); IIcon westCenterIcon = pane.getPaneSegmentTexture( - world, x, y, z, westCenterSeg, topSegments, bottomSegments, connNorth, connSouth); + world, + x, + y, + z, + westCenterSeg, + topSegments, + bottomSegments, + connNorth, + connSouth); IIcon eastLeftIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_SOUTH, topSegments, bottomSegments, connSouth, connNorth); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_SOUTH, + topSegments, + bottomSegments, + connSouth, + connNorth); IIcon eastRightIcon = pane.getPaneSegmentTexture( - world, x, y, z, GlassPaneConnected.SEGMENT_NORTH, topSegments, bottomSegments, connSouth, connNorth); + world, + x, + y, + z, + GlassPaneConnected.SEGMENT_NORTH, + topSegments, + bottomSegments, + connSouth, + connNorth); IIcon eastCenterIcon = pane.getPaneSegmentTexture( - world, x, y, z, eastCenterSeg, topSegments, bottomSegments, connSouth, connNorth); + world, + x, + y, + z, + eastCenterSeg, + topSegments, + bottomSegments, + connSouth, + connNorth); renderTopOrBottom(tessellator, x, y, z, bottomSegments, false, bottomIcon); renderTopOrBottom(tessellator, x, y, z, topSegments, true, topIcon); - renderSide(tessellator, x, y, z, NORTH, east, west, north, cross, - northLeftIcon, northRightIcon, northCenterIcon); - renderSide(tessellator, x, y, z, SOUTH, west, east, south, cross, - southLeftIcon, southRightIcon, southCenterIcon); - renderSide(tessellator, x, y, z, WEST, north, south, west, cross, - westLeftIcon, westRightIcon, westCenterIcon); - renderSide(tessellator, x, y, z, EAST, south, north, east, cross, - eastLeftIcon, eastRightIcon, eastCenterIcon); + renderSide( + tessellator, + x, + y, + z, + NORTH, + east, + west, + north, + cross, + northLeftIcon, + northRightIcon, + northCenterIcon); + renderSide( + tessellator, + x, + y, + z, + SOUTH, + west, + east, + south, + cross, + southLeftIcon, + southRightIcon, + southCenterIcon); + renderSide(tessellator, x, y, z, WEST, north, south, west, cross, westLeftIcon, westRightIcon, westCenterIcon); + renderSide(tessellator, x, y, z, EAST, south, north, east, cross, eastLeftIcon, eastRightIcon, eastCenterIcon); return true; } @@ -215,8 +295,7 @@ private void renderXZUV(Tessellator tessellator, double[] xzuv, double y, boolea } private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirection side, boolean left, - boolean right, boolean front, boolean cross, - IIcon leftIcon, IIcon rightIcon, IIcon centerIcon) { + boolean right, boolean front, boolean cross, IIcon leftIcon, IIcon rightIcon, IIcon centerIcon) { double startX = x + (7.0 / 16.0); double startZ = z + (7.0 / 16.0); double endX = x + (9.0 / 16.0); From a391f9076e2d0d75b035c10efae43ab4e77f4d14 Mon Sep 17 00:00:00 2001 From: Martin Robertz Date: Thu, 4 Jun 2026 10:38:38 +0200 Subject: [PATCH 18/22] update deps and gradle --- dependencies.gradle | 26 +++++++++++++------------- gradle/gradle-daemon-jvm.properties | 20 ++++++++++---------- settings.gradle | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 208e6dc6107..df8a1672b48 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,35 +1,35 @@ // Add your dependencies here dependencies { - compileOnlyApi('com.github.GTNewHorizons:Angelica:2.1.15:api') - api("com.github.GTNewHorizons:Mantle:0.5.1:dev") - api("com.github.GTNewHorizons:ForgeMultipart:1.7.3:dev") + compileOnlyApi('com.github.GTNewHorizons:Angelica:2.1.29:api') + api("com.github.GTNewHorizons:Mantle:0.5.2:dev") + api("com.github.GTNewHorizons:ForgeMultipart:1.7.10:dev") // gtnhlib is compileOnlyApi by us, but needed at runtime by nei, so require the correct version - api("com.github.GTNewHorizons:GTNHLib:0.9.47:dev") - implementation("com.github.GTNewHorizons:NotEnoughItems:2.8.84-GTNH:dev") + api("com.github.GTNewHorizons:GTNHLib:0.11.4:dev") + implementation("com.github.GTNewHorizons:NotEnoughItems:2.8.100-GTNH:dev") compileOnlyApi("curse.maven:cofh-core-69162:2388751") compileOnly("com.github.GTNewHorizons:inventory-tweaks:1.7.1:api") - compileOnly("com.github.GTNewHorizons:waila:1.19.22:api") + compileOnly("com.github.GTNewHorizons:waila:1.19.29:api") compileOnly("com.github.GTNewHorizons:Battlegear2:1.4.3:api") compileOnly("curse.maven:minefactory-reloaded-66672:2366150") compileOnly("curse.maven:zelda-sword-skills-220540:2384889") compileOnly("curse.maven:dynamic-sword-skills-226360:2495462") compileOnly("curse.maven:notenoughkeys-224614:2276280") compileOnly("thaumcraft:Thaumcraft:1.7.10-4.2.3.5:dev") - compileOnly("com.github.GTNewHorizons:Mobs-Info:0.5.10-GTNH:dev") + compileOnly("com.github.GTNewHorizons:Mobs-Info:0.5.15-GTNH:dev") compileOnlyApi("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") - compileOnlyApi("com.github.GTNewHorizons:Natura:2.8.17:dev") - compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.11-GTNH:dev') - compileOnly('com.github.GTNewHorizons:SpecialMobs:3.7.2') + compileOnlyApi("com.github.GTNewHorizons:Natura:2.8.19:dev") + compileOnly('com.github.GTNewHorizons:Baubles-Expanded:2.2.21-GTNH:dev') + compileOnly('com.github.GTNewHorizons:SpecialMobs:3.7.4') runtimeOnly('com.github.GTNewHorizons:TiC-Tooltips:1.4.1:dev'){transitive = false} - runtimeOnly("com.github.GTNewHorizons:ServerUtilities:2.2.20:dev") + runtimeOnly("com.github.GTNewHorizons:ServerUtilities:2.2.37:dev") // For testing scythe crop harvesting // devOnlyNonPublishable("net.industrial-craft:industrialcraft-2:2.2.828-experimental:dev") // devOnlyNonPublishable("com.github.GTNewHorizons:harvestcraft:1.3.11-GTNH:dev") // devOnlyNonPublishable(deobfCurse("pams-harvest-the-nether-231262:2241397")) - // devOnlyNonPublishable("com.github.GTNewHorizons:Natura:2.8.17:dev") - // devOnlyNonPublishable("com.github.GTNewHorizons:EnderCore:0.5.12") + // devOnlyNonPublishable("com.github.GTNewHorizons:Natura:2.8.19:dev") + // devOnlyNonPublishable("com.github.GTNewHorizons:EnderCore:0.5.14") } diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties index 991a69c7266..fa4ed510e60 100644 --- a/gradle/gradle-daemon-jvm.properties +++ b/gradle/gradle-daemon-jvm.properties @@ -1,12 +1,12 @@ #This file is generated by updateDaemonJvm -toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect -toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect -toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect -toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect -toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d4fd992c9557644e637ebe98263e0ae7/redirect -toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/faa12903720d410b387cc69ccafb1a74/redirect -toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/1630f7ebef05444cb27a2709ea0249b3/redirect -toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/cd495626d2ee49a75447e3fdc6afb287/redirect -toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/a4c09dd2e2d7079373d30e524bbc2829/redirect -toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/8e1d9ee5d0f13e442218f6884a306da1/redirect +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect toolchainVersion=25 diff --git a/settings.gradle b/settings.gradle index 407aea22199..d33995ebb3e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,7 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.24' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '2.0.25' } From 9e84c6e7ec420dba1d563b56ca6d3aa324ea6b92 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Thu, 4 Jun 2026 02:08:43 -0700 Subject: [PATCH 19/22] Fix block breaking animation --- .../smeltery/model/PaneConnectedRender.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index 15d7b0f634b..28211420130 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -91,6 +91,65 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b int westCenterSeg = cross ? GlassPaneConnected.SEGMENT_WEST : GlassPaneConnected.SEGMENT_CENTER; int eastCenterSeg = cross ? GlassPaneConnected.SEGMENT_EAST : GlassPaneConnected.SEGMENT_CENTER; + if (renderer.hasOverrideBlockTexture()) { + renderTopOrBottom(tessellator, x, y, z, bottomSegments, false, renderer.overrideBlockTexture); + renderTopOrBottom(tessellator, x, y, z, topSegments, true, renderer.overrideBlockTexture); + + renderSide( + tessellator, + x, + y, + z, + NORTH, + east, + west, + north, + cross, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture); + renderSide( + tessellator, + x, + y, + z, + SOUTH, + west, + east, + south, + cross, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture); + renderSide( + tessellator, + x, + y, + z, + WEST, + north, + south, + west, + cross, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture); + renderSide( + tessellator, + x, + y, + z, + EAST, + south, + north, + east, + cross, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture, + renderer.overrideBlockTexture); + return true; + } + IIcon northLeftIcon = pane.getPaneSegmentTexture( world, x, From ede5e24efd1f6ed5a8bd0ff41edcb255c07838da Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Thu, 4 Jun 2026 02:38:34 -0700 Subject: [PATCH 20/22] Restore 3D inventory rendering --- .../smeltery/model/PaneConnectedRender.java | 57 ++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index 28211420130..cfac15d69bf 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -13,6 +13,8 @@ import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.util.ForgeDirection; +import org.lwjgl.opengl.GL11; + import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -25,7 +27,58 @@ public class PaneConnectedRender implements ISimpleBlockRenderingHandler { public static int model = RenderingRegistry.getNextAvailableRenderId(); @Override - public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer) {} + public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + GlassPaneConnected pane = (GlassPaneConnected) block; + block.setBlockBoundsForItemRender(); + renderer.setRenderBoundsFromBlock(block); + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + int segments = GlassPaneConnected.SEGMENT_CENTER | GlassPaneConnected.SEGMENT_WEST + | GlassPaneConnected.SEGMENT_EAST; + + // Bottom + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, -1.0F, 0.0F); + renderTopOrBottom(tessellator, 0, 0, 0, segments, false, pane.getTopIcon(meta)); + tessellator.draw(); + + // Top + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + renderTopOrBottom(tessellator, 0, 0, 0, segments, true, pane.getTopIcon(meta)); + tessellator.draw(); + + // North + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, -1.0F); + IIcon northIcon = pane.getIcon(2, meta); + renderSide(tessellator, 0, 0, 0, NORTH, true, true, false, false, northIcon, northIcon, northIcon); + tessellator.draw(); + + // South + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, 1.0F); + IIcon southIcon = pane.getIcon(3, meta); + renderSide(tessellator, 0, 0, 0, SOUTH, true, true, false, false, southIcon, southIcon, southIcon); + tessellator.draw(); + + // West + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0F, 0.0F, 0.0F); + IIcon westIcon = pane.getIcon(4, meta); + renderSide(tessellator, 0, 0, 0, WEST, false, false, true, true, westIcon, westIcon, westIcon); + tessellator.draw(); + + // East + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0F, 0.0F, 0.0F); + IIcon eastIcon = pane.getIcon(5, meta); + renderSide(tessellator, 0, 0, 0, EAST, false, false, true, true, eastIcon, eastIcon, eastIcon); + tessellator.draw(); + + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, @@ -515,7 +568,7 @@ private void renderSide(Tessellator tessellator, int x, int y, int z, ForgeDirec @Override public boolean shouldRender3DInInventory(int modelID) { - return false; + return true; } @Override From 6b8274e1c683ed1cff2737a65f11201e14650d9e Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Thu, 4 Jun 2026 13:45:59 -0700 Subject: [PATCH 21/22] Fix copy paste error --- .../java/tconstruct/smeltery/model/PaneConnectedRender.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java index cfac15d69bf..6132da970c4 100644 --- a/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java +++ b/src/main/java/tconstruct/smeltery/model/PaneConnectedRender.java @@ -46,7 +46,7 @@ public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlock // Top tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 1.0F, 0.0F); - renderTopOrBottom(tessellator, 0, 0, 0, segments, true, pane.getTopIcon(meta)); + renderTopOrBottom(tessellator, 0, 0, 0, segments, true, pane.getBottomIcon(meta)); tessellator.draw(); // North From ead2614fdf6d7b446e8295fa0d020a1b3ea92d18 Mon Sep 17 00:00:00 2001 From: Moses Miller Date: Thu, 4 Jun 2026 13:48:31 -0700 Subject: [PATCH 22/22] Don't duplicate constant --- .../tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java index 9cdb8c48e35..56c78b32f20 100644 --- a/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java +++ b/src/main/java/tconstruct/smeltery/blocks/GlassPaneConnectedMeta.java @@ -20,7 +20,6 @@ public class GlassPaneConnectedMeta extends GlassPaneConnected { private final IIcon[][] icons; private final IIcon[] topIcons; private final IIcon[] bottomIcons; - public static final boolean ignoreMetaForConnectedGlass = PHConstruct.connectedTexturesMode == 2; public GlassPaneConnectedMeta(String location, boolean hasAlpha, String... textures) { super(location, hasAlpha); @@ -43,7 +42,8 @@ public IIcon getIcon(IBlockAccess blockAccess, int x, int y, int z, int side) { @Override public boolean shouldConnectToBlock(IBlockAccess blockAccess, int x, int y, int z, Block block, int meta) { - return block == this && (meta == blockAccess.getBlockMetadata(x, y, z) || ignoreMetaForConnectedGlass); + return block == this && (meta == blockAccess.getBlockMetadata(x, y, z) + || GlassBlockConnectedMeta.ignoreMetaForConnectedGlass); } @Override