From 6c24da5270fe9da6227d5cc145051139b0fd91ab Mon Sep 17 00:00:00 2001 From: brandyn Date: Mon, 2 Feb 2026 17:07:48 +0000 Subject: [PATCH] Fix ceramic tiles + Add config option to disable compartments Fix missing pixels in ceramic tiles Fix rendering of ceramic tiles Fix crashes of rendering ceramic tiles and breaking ceramic tiles Add config option to disable compartments --- .../botany/ceramic/BlockCeramicBrick.java | 11 ++++- src/main/java/binnie/core/BinnieCore.java | 8 ++- .../core/block/MultipassBlockRenderer.java | 46 ++++++++++++++++-- .../java/binnie/core/config/BCConfig.java | 13 +++++ .../textures/blocks/ceramic/chequered.1.png | Bin 397 -> 732 bytes .../textures/blocks/ceramic/crossed.1.png | Bin 251 -> 569 bytes 6 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 src/main/java/binnie/core/config/BCConfig.java diff --git a/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java b/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java index ca328348..e8ada5cc 100644 --- a/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java +++ b/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java @@ -167,7 +167,16 @@ public class BlockCeramicBrick extends Block implements IBlockMetadata, IMultipa @Override @SideOnly(Side.CLIENT) public int getRenderColor(int meta) { - return colorMultiplier(meta); + final BlockType type = this.getType(meta); + if (!MultipassBlockRenderer.isRendering()) { + return type.color1.getColor(false); + } + + final int layer = MultipassBlockRenderer.getLayer(); + if (layer == 0) return 0xffffff; + if (layer == 1) return type.color1.getColor(false); + if (layer == 2) return type.color2.getColor(false); + return 0xffffff; } @Override diff --git a/src/main/java/binnie/core/BinnieCore.java b/src/main/java/binnie/core/BinnieCore.java index 16068484..ba32b174 100644 --- a/src/main/java/binnie/core/BinnieCore.java +++ b/src/main/java/binnie/core/BinnieCore.java @@ -9,8 +9,12 @@ import net.minecraft.server.MinecraftServer; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.common.MinecraftForge; +import com.gtnewhorizon.gtnhlib.config.ConfigException; +import com.gtnewhorizon.gtnhlib.config.ConfigurationManager; + import binnie.Binnie; import binnie.core.block.MultipassBlockRenderer; +import binnie.core.config.BCConfig; import binnie.core.block.TileEntityMetadata; import binnie.core.craftgui.minecraft.ModuleCraftGUI; import binnie.core.gui.BinnieCoreGUI; @@ -78,7 +82,9 @@ public class BinnieCore extends AbstractMod { } addModule(new ModuleCraftGUI()); - addModule(new ModuleStorage()); + if (!BCConfig.disableCompartments) { + addModule(new ModuleStorage()); + } addModule(new ModuleItems()); if (Loader.isModLoaded("BuildCraft|Silicon")) { addModule(new ModuleTrigger()); diff --git a/src/main/java/binnie/core/block/MultipassBlockRenderer.java b/src/main/java/binnie/core/block/MultipassBlockRenderer.java index 26f26f4d..76b5630e 100644 --- a/src/main/java/binnie/core/block/MultipassBlockRenderer.java +++ b/src/main/java/binnie/core/block/MultipassBlockRenderer.java @@ -14,6 +14,7 @@ public class MultipassBlockRenderer implements ISimpleBlockRenderingHandler { public static MultipassBlockRenderer instance; private static int layer = 0; + private static boolean rendering = false; public MultipassBlockRenderer() { MultipassBlockRenderer.instance = this; @@ -23,30 +24,67 @@ public class MultipassBlockRenderer implements ISimpleBlockRenderingHandler { return MultipassBlockRenderer.layer; } + public static boolean isRendering() { + return MultipassBlockRenderer.rendering; + } + + private static int getPassesSafe(Block block) { + try { + return ((IMultipassBlock) block).getNumberOfPasses(); + } catch (Throwable t) { + return 1; + } + } + + private static int getColorSafe(Block block, int meta) { + try { + if (block instanceof IMultipassBlock) { + try { + java.lang.reflect.Method m = block.getClass().getMethod("colorMultiplier", int.class); + Object out = m.invoke(block, Integer.valueOf(meta)); + if (out instanceof Integer) { + return ((Integer) out).intValue(); + } + } catch (Throwable ignored) { + } + } + return block.getRenderColor(meta); + } catch (Throwable t) { + return 16777215; + } + } @Override public void renderInventoryBlock(Block block, int meta, int modelID, RenderBlocks renderer) { block.setBlockBoundsForItemRender(); renderer.setRenderBoundsFromBlock(block); GL11.glTranslatef(-0.5f, -0.5f, -0.5f); + MultipassBlockRenderer.rendering = true; MultipassBlockRenderer.layer = 0; - while (MultipassBlockRenderer.layer < ((IMultipassBlock) block).getNumberOfPasses()) { + while (MultipassBlockRenderer.layer < getPassesSafe(block)) { renderItem(block, renderer, meta); MultipassBlockRenderer.layer++; } MultipassBlockRenderer.layer = 0; + MultipassBlockRenderer.rendering = false; } @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { boolean r = true; + MultipassBlockRenderer.rendering = true; MultipassBlockRenderer.layer = 0; - while (MultipassBlockRenderer.layer < ((IMultipassBlock) block).getNumberOfPasses()) { - r = renderer.renderStandardBlock(block, x, y, z); + while (MultipassBlockRenderer.layer < getPassesSafe(block)) { + try { + r = renderer.renderStandardBlock(block, x, y, z); + } catch (Throwable t) { + return false; + } MultipassBlockRenderer.layer++; } MultipassBlockRenderer.layer = 0; + MultipassBlockRenderer.rendering = false; return r; } @@ -61,7 +99,7 @@ public class MultipassBlockRenderer implements ISimpleBlockRenderingHandler { } public void renderItem(Block block, RenderBlocks renderer, int meta) { - setColor(((IMultipassBlock) block).colorMultiplier(meta)); + setColor(getColorSafe(block, meta)); Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); tessellator.setNormal(0.0f, -1.0f, 0.0f); diff --git a/src/main/java/binnie/core/config/BCConfig.java b/src/main/java/binnie/core/config/BCConfig.java new file mode 100644 index 00000000..c36e4675 --- /dev/null +++ b/src/main/java/binnie/core/config/BCConfig.java @@ -0,0 +1,13 @@ +package binnie.core.config; + +import com.gtnewhorizon.gtnhlib.config.Config; +import binnie.core.BinnieCore; + +@Config(modid = BinnieCore.CORE_MODID) +public class BCConfig { + + @Config.Comment("If true, disables all compartment storage machines (no blocks/recipes will be registered).") + @Config.DefaultBoolean(false) + @Config.RequiresMcRestart + public static boolean disableCompartments; +} diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png index 77ceb3d5a4e825259f24c5ea7190cba7e66541aa..077dcb6393e70a48383f8dd44bc5f0128c6bc638 100644 GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkF1yemk zJwwAT4zY7UMLSX>JkvZqwHP>n999M?Mpgz!Aj=DgrJ-z)b2J#4!QxCnwjm=EgCLNO z0^-be7O;2@kPQL}Kn&6kqtR_;U|?oon841!0#svQWNg5=0Aemk59Mybe+SlRf;uvD#-#YpBrbPxKF5&AsnofQE|G(gw z#&-|BGj$)XCWd|#Sao@2$$JgHi23XHK55%3U8u3H-t^)eiB~PXlmA#Me0zP*+_-G_ zhJNYi+9L9v2OrFJtuKj})IOfPGx1(Q*gVaYn0+0^&Gqy8cz5L{S*ZHdT|T|*$C(86 zEqqh9*_+MyJhhus=}U}X>$W#978M5aOtLil@OARa?@#7j{M{DJe<^y~UDY#dWu#NI z9YdwJd9mCy2)Dl0`0MPFW!8C#KPHzyW^y}y*U%=(^&<1acNtT_9FB|7AolZ>N0d!g%fHwi}l^1RZw&CcAguo-31X?w+;biq18U zLlckRT(IgmP&jtUtmsol(|A?gcilb~q||M9@yMTvweIo9aI4FRGz_weN`o&x3eQf#S#0)z4*}Q$iB}zRCiQ delta 371 zcmV-(0gV3K1&srcBYy!@NklAVfqFElIQmR?1KSp)N%EEcRE)Q*SxI3^ znt3-MdV&aw@hCBP%7f)0r^K%MZty+pIGQOU%CuMEw_(_anSb2fU^IhwnXD2uI(FUy z&@qmYROW6_S0H|Y1&7myxE6jordGs$?gmkBa**gLqT~tNE~bD?9cq2~gtmD@#CJh+ z1kRfH0WoKS%=`L>W()0ksgGh4salHCCps96{eiM83*`c3C32oJ=L~N_a$@CrH85vL zK`f(6Ut;0l$ZRo?cVqbV!xO^8ZkbmKQ^csqjMFT1C-W}(Zm@?ybB5roh+bKg2j_(1 zv_wgAHRyBw_j^d?#}V?r36EC*%J%6W7#t~vK1x6i-XtJYA;|ZUT?yx&;16QO>JX3C RF)siB002ovPDHLkV1m|?u@V3P diff --git a/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png b/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png index 7285fe12bda1c32ec14a76ad398eb9ec8cb195b3..3f898b3ccf9353dab47a70125eed37eff5c131b0 100644 GIT binary patch literal 569 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv=}#LT=BJwMkF1yemk zJwwAT4zY7UMLSX>JkvZqwHP>n999M?Mpgz!Aj=DgrJ-z)b2J#4!QxCnwjm=EgCLNO z0^-be7O;2@kPQL}Kn&6kqtR_;U|?oon841!0#svQWNg5=0Aemk59MybeGM{?7IEGmGzny$Kuh~GrwZGS}ZNdVLp#T4W zN3B$0WdE=^ZiDLIhHpCV>1k%)x$Ntnp5mA%G3Cpbv!Nf_Uf6$D=J>T$-`ccDP9-qA zCn{ol+V#Gj-Hn??U6KVu9jfd%?D$msI^fp(TZUW3b8K&1XT9s5a@wb4($(!xV&2{| zEDCM$H2NZG{QhwLKO3c%YQM#g3b|8Qk?+`&vEhH d!uwC;2jh9=^v$=6*Ifd6-qY33Wt~$(698J=tC9c! delta 223 zcmV<503iRl1p5JyB!9w5L_t(|+U=9ajRY|a1SkJcN8UTGYK2We0o?VQs3rl{vz%f# zjc=Je9M2`6^