diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.java b/src/main/java/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.java index 7c8e63893..f7c7cf196 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/ForgeBlockModelRenderer.java @@ -22,6 +22,7 @@ public class ForgeBlockModelRenderer extends BlockModelRenderer return new VertexLighterFlat(); } }; + private final ThreadLocal lighterSmooth = new ThreadLocal() { @Override @@ -31,6 +32,8 @@ public class ForgeBlockModelRenderer extends BlockModelRenderer } }; + private final ThreadLocal wrFlat = new ThreadLocal(); + private final ThreadLocal wrSmooth = new ThreadLocal(); private final ThreadLocal lastRendererFlat = new ThreadLocal(); private final ThreadLocal lastRendererSmooth = new ThreadLocal(); @@ -42,8 +45,11 @@ public class ForgeBlockModelRenderer extends BlockModelRenderer if(wr != lastRendererFlat.get()) { lastRendererFlat.set(wr); - lighterFlat.get().setParent(new WorldRendererConsumer(wr)); + WorldRendererConsumer newCons = new WorldRendererConsumer(wr); + wrFlat.set(newCons); + lighterFlat.get().setParent(newCons); } + wrFlat.get().setOffset(pos); return render(lighterFlat.get(), world, model, block, pos, wr, checkSides); } else @@ -60,8 +66,11 @@ public class ForgeBlockModelRenderer extends BlockModelRenderer if(wr != lastRendererSmooth.get()) { lastRendererSmooth.set(wr); - lighterSmooth.get().setParent(new WorldRendererConsumer(wr)); + WorldRendererConsumer newCons = new WorldRendererConsumer(wr); + wrSmooth.set(newCons); + lighterSmooth.get().setParent(newCons); } + wrSmooth.get().setOffset(pos); return render(lighterSmooth.get(), world, model, block, pos, wr, checkSides); } else diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/VertexLighterFlat.java b/src/main/java/net/minecraftforge/client/model/pipeline/VertexLighterFlat.java index 72d005aa3..954215f9f 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/VertexLighterFlat.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/VertexLighterFlat.java @@ -144,12 +144,13 @@ public class VertexLighterFlat extends QuadGatheringTransformer switch(parent.getVertexFormat().getElement(e).getUsage()) { case POSITION: - float[] pos = new float[4]; + // position adding moved to WorldRendererConsumer due to x and z not fitting completely into a float + /*float[] pos = new float[4]; System.arraycopy(position[v], 0, pos, 0, position[v].length); pos[0] += blockInfo.getBlockPos().getX(); pos[1] += blockInfo.getBlockPos().getY(); - pos[2] += blockInfo.getBlockPos().getZ(); - parent.put(e, pos); + pos[2] += blockInfo.getBlockPos().getZ();*/ + parent.put(e, position[v]); break; case NORMAL: if(normalIndex != -1) { diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/WorldRendererConsumer.java b/src/main/java/net/minecraftforge/client/model/pipeline/WorldRendererConsumer.java index 2e9ee09aa..fea7dff22 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/WorldRendererConsumer.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/WorldRendererConsumer.java @@ -4,6 +4,7 @@ import java.util.Arrays; import net.minecraft.client.renderer.WorldRenderer; import net.minecraft.client.renderer.vertex.VertexFormat; +import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; /** @@ -14,6 +15,7 @@ public class WorldRendererConsumer implements IVertexConsumer private final WorldRenderer renderer; private final int[] quadData; private int v = 0; + private BlockPos offset = BlockPos.ORIGIN; public WorldRendererConsumer(WorldRenderer renderer) { @@ -36,13 +38,18 @@ public class WorldRendererConsumer implements IVertexConsumer if(v == 4) { renderer.addVertexData(quadData); - renderer.putPosition(0, 0, 0); + renderer.putPosition(offset.getX(), offset.getY(), offset.getZ()); Arrays.fill(quadData, 0); v = 0; } } } + public void setOffset(BlockPos offset) + { + this.offset = new BlockPos(offset); + } + public void setQuadTint(int tint) {} public void setQuadOrientation(EnumFacing orientation) {} public void setQuadColored() {}