From cc1893448c3251df94383559ba164dbd49a1894e Mon Sep 17 00:00:00 2001 From: Adrian Siekierka Date: Fri, 17 Jun 2022 11:44:01 +0200 Subject: [PATCH] Make the alpha pass bug fix improvements more resilient. --- .../builders/render/RenderFrame.java | 3 ++- .../core/lib/render/RenderBlockComplex.java | 3 ++- .../render/BCSimpleBlockRenderingHandler.java | 16 ++++++++++++++ .../core/render/RenderingEntityBlocks.java | 2 +- .../core/render/RenderingMarkers.java | 2 +- .../silicon/render/RenderLaserBlock.java | 3 ++- .../silicon/render/RenderLaserTable.java | 22 +++++++++---------- .../transport/render/PipeRendererWorld.java | 13 ++++------- 8 files changed, 38 insertions(+), 26 deletions(-) create mode 100644 common/buildcraft/core/render/BCSimpleBlockRenderingHandler.java diff --git a/common/buildcraft/builders/render/RenderFrame.java b/common/buildcraft/builders/render/RenderFrame.java index a64dcd93..0e9ee6b0 100644 --- a/common/buildcraft/builders/render/RenderFrame.java +++ b/common/buildcraft/builders/render/RenderFrame.java @@ -1,5 +1,6 @@ package buildcraft.builders.render; +import buildcraft.core.render.BCSimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; @@ -14,7 +15,7 @@ import buildcraft.core.CoreConstants; import buildcraft.core.lib.render.FakeBlock; import buildcraft.core.lib.render.RenderUtils; -public class RenderFrame implements ISimpleBlockRenderingHandler { +public class RenderFrame extends BCSimpleBlockRenderingHandler { private void renderTwoWayBlock(RenderBlocks renderblocks, FakeBlock stateHost, int x, int y, int z, float[] dim, int mask) { assert mask != 0; diff --git a/common/buildcraft/core/lib/render/RenderBlockComplex.java b/common/buildcraft/core/lib/render/RenderBlockComplex.java index ad0385f5..20dc0314 100644 --- a/common/buildcraft/core/lib/render/RenderBlockComplex.java +++ b/common/buildcraft/core/lib/render/RenderBlockComplex.java @@ -1,5 +1,6 @@ package buildcraft.core.lib.render; +import buildcraft.core.render.BCSimpleBlockRenderingHandler; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; @@ -12,7 +13,7 @@ import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import buildcraft.BuildCraftCore; import buildcraft.core.lib.block.BlockBuildCraft; -public class RenderBlockComplex implements ISimpleBlockRenderingHandler { +public class RenderBlockComplex extends BCSimpleBlockRenderingHandler { private static final int[] Y_ROTATE = {3, 0, 1, 2}; @Override diff --git a/common/buildcraft/core/render/BCSimpleBlockRenderingHandler.java b/common/buildcraft/core/render/BCSimpleBlockRenderingHandler.java new file mode 100644 index 00000000..865088a4 --- /dev/null +++ b/common/buildcraft/core/render/BCSimpleBlockRenderingHandler.java @@ -0,0 +1,16 @@ +package buildcraft.core.render; + +import buildcraft.BuildCraftCore; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.client.renderer.Tessellator; + +public abstract class BCSimpleBlockRenderingHandler implements ISimpleBlockRenderingHandler { + protected void fixEmptyAlphaPass(int x, int y, int z) { + if (BuildCraftCore.alphaPassBugPresent) { + Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); + Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); + Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); + Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); + } + } +} diff --git a/common/buildcraft/core/render/RenderingEntityBlocks.java b/common/buildcraft/core/render/RenderingEntityBlocks.java index 282ea195..17a16560 100644 --- a/common/buildcraft/core/render/RenderingEntityBlocks.java +++ b/common/buildcraft/core/render/RenderingEntityBlocks.java @@ -19,7 +19,7 @@ import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import buildcraft.BuildCraftCore; import buildcraft.core.lib.render.IInventoryRenderer; -public class RenderingEntityBlocks implements ISimpleBlockRenderingHandler { +public class RenderingEntityBlocks extends BCSimpleBlockRenderingHandler { public static HashMap blockByEntityRenders = new HashMap(); diff --git a/common/buildcraft/core/render/RenderingMarkers.java b/common/buildcraft/core/render/RenderingMarkers.java index 23405b18..320aa3d4 100644 --- a/common/buildcraft/core/render/RenderingMarkers.java +++ b/common/buildcraft/core/render/RenderingMarkers.java @@ -18,7 +18,7 @@ import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import buildcraft.BuildCraftCore; -public class RenderingMarkers implements ISimpleBlockRenderingHandler { +public class RenderingMarkers extends BCSimpleBlockRenderingHandler { /* PATH MARKER RENDERING */ public static final double[][][] frontX = new double[6][3][4]; diff --git a/common/buildcraft/silicon/render/RenderLaserBlock.java b/common/buildcraft/silicon/render/RenderLaserBlock.java index ce6352eb..41339131 100755 --- a/common/buildcraft/silicon/render/RenderLaserBlock.java +++ b/common/buildcraft/silicon/render/RenderLaserBlock.java @@ -8,6 +8,7 @@ */ package buildcraft.silicon.render; +import buildcraft.core.render.BCSimpleBlockRenderingHandler; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; @@ -21,7 +22,7 @@ import net.minecraftforge.common.util.ForgeDirection; import buildcraft.core.lib.render.RenderUtils; import buildcraft.silicon.SiliconProxy; -public class RenderLaserBlock implements ISimpleBlockRenderingHandler { +public class RenderLaserBlock extends BCSimpleBlockRenderingHandler { @Override public int getRenderId() { return SiliconProxy.laserBlockModel; diff --git a/common/buildcraft/silicon/render/RenderLaserTable.java b/common/buildcraft/silicon/render/RenderLaserTable.java index 1913f471..7f9d6cb7 100644 --- a/common/buildcraft/silicon/render/RenderLaserTable.java +++ b/common/buildcraft/silicon/render/RenderLaserTable.java @@ -1,5 +1,6 @@ package buildcraft.silicon.render; +import buildcraft.core.render.BCSimpleBlockRenderingHandler; import org.lwjgl.opengl.GL11; import net.minecraft.block.Block; @@ -16,13 +17,7 @@ import buildcraft.core.lib.render.RenderUtils; import buildcraft.core.lib.render.SubIcon; import buildcraft.silicon.SiliconProxy; -public class RenderLaserTable implements ISimpleBlockRenderingHandler { - private void workaround17(int x, int y, int z) { - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - } +public class RenderLaserTable extends BCSimpleBlockRenderingHandler { @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { @@ -74,6 +69,9 @@ public class RenderLaserTable implements ISimpleBlockRenderingHandler { case 5: renderStampingTable(renderer, false, x, y, z, bcBlock); break; + default: + fixEmptyAlphaPass(x, y, z); + break; } return true; } @@ -107,7 +105,7 @@ public class RenderLaserTable implements ISimpleBlockRenderingHandler { private void renderAssemblyTable(RenderBlocks renderer, boolean isInv, int x, int y, int z, BlockBuildCraft block) { if (!isInv && block.getCurrentRenderPass() != 0) { - workaround17(x, y, z); + fixEmptyAlphaPass(x, y, z); return; } IIcon base = block.getIcon(0, 0); @@ -118,7 +116,7 @@ public class RenderLaserTable implements ISimpleBlockRenderingHandler { private void renderChargingTable(RenderBlocks renderer, boolean isInv, int x, int y, int z, BlockBuildCraft block) { if (!isInv && block.getCurrentRenderPass() != 0) { - workaround17(x, y, z); + fixEmptyAlphaPass(x, y, z); return; } IIcon base = block.getIcon(0, 3); @@ -163,7 +161,7 @@ public class RenderLaserTable implements ISimpleBlockRenderingHandler { private void renderIntegrationTable(RenderBlocks renderer, boolean isInv, int x, int y, int z, BlockBuildCraft block) { IIcon base = block.getIcon(0, 2); if (!isInv && block.getCurrentRenderPass() != 0) { - workaround17(x, y, z); + fixEmptyAlphaPass(x, y, z); return; } renderCube(renderer, isInv, x, y, z, 0, 0, 0, 16, 1, 16, 16, 21, base, 0x3f); // black bottom @@ -186,7 +184,7 @@ public class RenderLaserTable implements ISimpleBlockRenderingHandler { private void renderAdvancedCraftingTable(RenderBlocks renderer, boolean isInv, int x, int y, int z, BlockBuildCraft block) { if (!isInv && block.getCurrentRenderPass() != 0) { - workaround17(x, y, z); + fixEmptyAlphaPass(x, y, z); return; } IIcon base = block.getIcon(0, 1); @@ -203,7 +201,7 @@ public class RenderLaserTable implements ISimpleBlockRenderingHandler { private void renderStampingTable(RenderBlocks renderer, boolean isInv, int x, int y, int z, BlockBuildCraft block) { if (!isInv && block.getCurrentRenderPass() != 0) { - workaround17(x, y, z); + fixEmptyAlphaPass(x, y, z); return; } IIcon base = block.getIcon(0, 5); diff --git a/common/buildcraft/transport/render/PipeRendererWorld.java b/common/buildcraft/transport/render/PipeRendererWorld.java index 7497ebea..64e865d5 100644 --- a/common/buildcraft/transport/render/PipeRendererWorld.java +++ b/common/buildcraft/transport/render/PipeRendererWorld.java @@ -9,6 +9,7 @@ package buildcraft.transport.render; import buildcraft.BuildCraftCore; +import buildcraft.core.render.BCSimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.block.BlockChest; import net.minecraft.client.Minecraft; @@ -33,7 +34,7 @@ import buildcraft.transport.TileGenericPipe; import buildcraft.transport.TransportProxy; import buildcraft.transport.pipes.PipeStructureCobblestone; -public class PipeRendererWorld implements ISimpleBlockRenderingHandler { +public class PipeRendererWorld extends BCSimpleBlockRenderingHandler { public static int renderPass = -1; public static float zFightOffset = 1F / 4096F; @@ -238,14 +239,8 @@ public class PipeRendererWorld implements ISimpleBlockRenderingHandler { rendered = renderPipe(renderer, world, pipeTile, x, y, z); } - if (!rendered && BuildCraftCore.alphaPassBugPresent) { - // Here to prevent Minecraft from crashing when nothing renders on a render pass - // (rarely in pass 0, often in pass 1) - // This is a 1.7 bug. - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); - Tessellator.instance.addVertexWithUV(x, y, z, 0, 0); + if (!rendered) { + fixEmptyAlphaPass(x, y, z); } return true;