diff --git a/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java b/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java index ca3283489..e8ada5cc7 100644 --- a/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java +++ b/src/main/java/binnie/botany/ceramic/BlockCeramicBrick.java @@ -167,7 +167,16 @@ public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, i @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 160684846..ba32b174d 100644 --- a/src/main/java/binnie/core/BinnieCore.java +++ b/src/main/java/binnie/core/BinnieCore.java @@ -9,8 +9,12 @@ 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 void preInit(FMLPreInitializationEvent event) { } 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 26f26f4d1..76b5630e6 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 static int getLayer() { 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 int getRenderId() { } 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 000000000..c36e46751 --- /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 77ceb3d5a..077dcb639 100644 Binary files a/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png and b/src/main/resources/assets/botany/textures/blocks/ceramic/chequered.1.png differ 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 7285fe12b..3f898b3cc 100644 Binary files a/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png and b/src/main/resources/assets/botany/textures/blocks/ceramic/crossed.1.png differ