From 8abc50634bceae8250e3c460e049f60273d6abbf Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Fri, 24 Apr 2015 16:43:30 -0400 Subject: [PATCH] RenderBlocksCTM will now respect the render bounds (read below) This behavior allows for certain renderers to no longer be needed (carpet floor) and for some rendering to be possible (CTM slabs). A single version of marble slab has been implemented with CTM as an example, we will move over the rest of the textures once this is finalized. --- .../com/cricketcraft/chisel/Features.java | 4 +- .../chisel/api/carving/IVariationInfo.java | 4 +- .../chisel/api/rendering/ISubmapManager.java | 9 +- .../chisel/api/rendering/TextureType.java | 13 +- .../chisel/carving/CarvableHelper.java | 9 +- .../client/render/BlockCarpetRenderer.java | 21 --- .../chisel/client/render/RenderBlocksCTM.java | 159 ++++++++++++++---- .../client/render/RenderBlocksCTMCarpet.java | 32 ---- .../chisel/client/render/RendererCTM.java | 5 + .../render/SubmapManagerCarpetFloor.java | 15 +- .../render/SubmapManagerFakeController.java | 13 +- .../client/render/SubmapManagerSlab.java | 76 +++++++++ .../chisel/config/Configurations.java | 2 +- .../chisel/proxy/ClientProxy.java | 1 - .../marbleslab/marble-arranged-bricks-ctm.png | Bin 0 -> 758 bytes .../marbleslab/marble-arranged-bricks-top.png | Bin 449 -> 0 bytes .../marbleslab/marble-arranged-bricks.png | Bin 0 -> 629 bytes 17 files changed, 258 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/com/cricketcraft/chisel/client/render/BlockCarpetRenderer.java delete mode 100644 src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java create mode 100644 src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerSlab.java create mode 100644 src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks-ctm.png delete mode 100644 src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks-top.png create mode 100644 src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks.png diff --git a/src/main/java/com/cricketcraft/chisel/Features.java b/src/main/java/com/cricketcraft/chisel/Features.java index d4be54ef..77cf080f 100644 --- a/src/main/java/com/cricketcraft/chisel/Features.java +++ b/src/main/java/com/cricketcraft/chisel/Features.java @@ -22,6 +22,7 @@ import com.cricketcraft.chisel.carving.Carving; import com.cricketcraft.chisel.carving.CarvingGroup; import com.cricketcraft.chisel.client.render.SubmapManagerCarpetFloor; import com.cricketcraft.chisel.client.render.SubmapManagerFakeController; +import com.cricketcraft.chisel.client.render.SubmapManagerSlab; import com.cricketcraft.chisel.compat.fmp.ItemBlockChiselTorchPart; import com.cricketcraft.chisel.config.Configurations; import com.cricketcraft.chisel.entity.EntityBallOMoss; @@ -45,7 +46,6 @@ import com.google.common.collect.Lists; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.registry.EntityRegistry; import cpw.mods.fml.common.registry.GameRegistry; - import static com.cricketcraft.chisel.init.ChiselBlocks.*; import static com.cricketcraft.chisel.utils.General.sGNames; @@ -1525,7 +1525,7 @@ public enum Features { marble_slab.carverHelper.addVariation("tile.marbleSlab.10.desc", 10, "marbleslab/terrain-pistonback-marbledent"); marble_slab.carverHelper.addVariation("tile.marbleSlab.11.desc", 11, "marbleslab/terrain-pistonback-marbledent-small"); marble_slab.carverHelper.addVariation("tile.marbleSlab.12.desc", 12, "marbleslab/marble-bricks"); - marble_slab.carverHelper.addVariation("tile.marbleSlab.13.desc", 13, "marbleslab/marble-arranged-bricks"); + marble_slab.carverHelper.addVariation("tile.marbleSlab.13.desc", 13, new SubmapManagerSlab("marbleslab/marble-arranged-bricks")); marble_slab.carverHelper.addVariation("tile.marbleSlab.14.desc", 14, "marbleslab/marble-fancy-bricks"); marble_slab.carverHelper.addVariation("tile.marbleSlab.15.desc", 15, "marbleslab/marble-blocks"); marble_slab.carverHelper.registerAll(marble_slab, "marble_slab", ItemCarvableSlab.class); diff --git a/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java b/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java index 6846db17..b42b5d72 100644 --- a/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java +++ b/src/main/java/com/cricketcraft/chisel/api/carving/IVariationInfo.java @@ -1,11 +1,13 @@ package com.cricketcraft.chisel.api.carving; +import net.minecraft.client.renderer.RenderBlocks; + import com.cricketcraft.chisel.api.rendering.ISubmapManager; import com.cricketcraft.chisel.api.rendering.TextureType; public interface IVariationInfo { - ISubmapManager getSubmapManager(); + ISubmapManager getSubmapManager(); ICarvingVariation getVariation(); diff --git a/src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java b/src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java index 20c47975..700bc532 100644 --- a/src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/ISubmapManager.java @@ -5,8 +5,9 @@ import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; -public interface ISubmapManager { +public interface ISubmapManager { /** * Gets the icon for item rendering, based on side and item metadata. @@ -36,5 +37,9 @@ public interface ISubmapManager { */ void registerIcons(String modName, Block block, IIconRegister register); - RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world); + T createRenderContext(RenderBlocks rendererOld, IBlockAccess world); + + void preRenderSide(T renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side); + + void postRenderSide(T renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side); } \ No newline at end of file diff --git a/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java index c595fcc6..99fe0663 100644 --- a/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java +++ b/src/main/java/com/cricketcraft/chisel/api/rendering/TextureType.java @@ -9,6 +9,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.tuple.Pair; @@ -306,7 +307,7 @@ public enum TextureType { this.suffixes = suffixes.length == 0 ? new String[] { "" } : suffixes; } - public ISubmapManager createManagerFor(ICarvingVariation variation, String texturePath) { + public ISubmapManager createManagerFor(ICarvingVariation variation, String texturePath) { return new SubmapManagerDefault(this, variation, texturePath); } @@ -355,7 +356,7 @@ public enum TextureType { } } - private static class SubmapManagerDefault implements ISubmapManager { + private static class SubmapManagerDefault implements ISubmapManager { private TextureType type; private ICarvingVariation variation; @@ -387,5 +388,13 @@ public enum TextureType { public RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { return type.createRenderContext(rendererOld, world, cachedObject); } + + @Override + public void preRenderSide(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + } + + @Override + public void postRenderSide(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + } } } \ No newline at end of file diff --git a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java index 3544b0fa..7c40a72a 100644 --- a/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java +++ b/src/main/java/com/cricketcraft/chisel/carving/CarvableHelper.java @@ -5,6 +5,7 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.ItemStack; @@ -34,7 +35,7 @@ public class CarvableHelper { public CarvableHelper(Block block) { this.theBlock = block; } - public void addVariation(String description, int metadata, ISubmapManager manager) { + public void addVariation(String description, int metadata, ISubmapManager manager) { addVariation(description, metadata, null, manager); } @@ -51,10 +52,10 @@ public class CarvableHelper { } public void addVariation(String description, int metadata, String texture) { - addVariation(description, metadata, texture, (ISubmapManager) null); + addVariation(description, metadata, texture, (ISubmapManager) null); } - public void addVariation(String description, int metadata, String texture, ISubmapManager manager) { + public void addVariation(String description, int metadata, String texture, ISubmapManager manager) { addVariation(description, metadata, texture, null, 0, Chisel.MOD_ID, manager); } @@ -78,7 +79,7 @@ public class CarvableHelper { addVariation(description, metadata, texture, block, blockMeta, modid, null); } - public void addVariation(String description, int metadata, String texture, Block block, int blockMeta, String modid, ISubmapManager customManager) { + public void addVariation(String description, int metadata, String texture, Block block, int blockMeta, String modid, ISubmapManager customManager) { if (infoList.size() >= 16) return; diff --git a/src/main/java/com/cricketcraft/chisel/client/render/BlockCarpetRenderer.java b/src/main/java/com/cricketcraft/chisel/client/render/BlockCarpetRenderer.java deleted file mode 100644 index 8090ad32..00000000 --- a/src/main/java/com/cricketcraft/chisel/client/render/BlockCarpetRenderer.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.cricketcraft.chisel.client.render; - -import com.cricketcraft.chisel.Chisel; - -import cpw.mods.fml.client.registry.RenderingRegistry; - -public class BlockCarpetRenderer extends RendererCTM { - - public BlockCarpetRenderer() { - super(); - - Chisel.renderCarpetId = RenderingRegistry.getNextAvailableRenderId(); - - rendererCTM = new RenderBlocksCTMCarpet(); - } - - @Override - public int getRenderId() { - return Chisel.renderCarpetId; - } -} diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java index 21bfcf7c..bbf49fe4 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTM.java @@ -1,15 +1,17 @@ package com.cricketcraft.chisel.client.render; -import com.cricketcraft.chisel.api.rendering.CTM; -import com.cricketcraft.chisel.api.rendering.TextureSubmap; - import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.util.IIcon; -import static com.cricketcraft.chisel.client.render.RenderBlocksCTM.Vert.*; +import net.minecraftforge.common.util.ForgeDirection; + +import com.cricketcraft.chisel.api.rendering.CTM; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; + import static com.cricketcraft.chisel.client.render.RenderBlocksCTM.SubSide.*; -import static com.cricketcraft.chisel.client.render.RenderBlocksCTM.Vert.Y_HALF_X; +import static com.cricketcraft.chisel.client.render.RenderBlocksCTM.Vert.*; public class RenderBlocksCTM extends RenderBlocks { @@ -18,11 +20,8 @@ public class RenderBlocksCTM extends RenderBlocks { * * The naming scheme is as follows: * - * ZERO and ONE are special cases, they are the absolute min and absolute - * max of the block. X, Y, Z, or any combination means that the axes listed - * in the name are at 1. X, Y, Z, or any combination followed by HALF means - * that those axes are at 0.5. X, Y, Z, or any combination after a HALF - * means those axes are at 1. + * ZERO is a special case, it is the absolute min point of the block. X, Y, Z, or any combination means that the axes listed in the name are at 1. X, Y, Z, or any combination followed by HALF + * means that those axes are at 0.5. X, Y, Z, or any combination after a HALF means those axes are at 1. */ enum Vert { // @formatter:off @@ -61,26 +60,53 @@ public class RenderBlocksCTM extends RenderBlocks { this.y = y; this.z = z; } + + private static double u, v, xDiff, yDiff, zDiff, uDiff, vDiff; - void render(RenderBlocksCTM inst, int cacheID) { + void render(RenderBlocksCTM inst, ForgeDirection normal, int cacheID) { if (inst.enableAO) { inst.tessellator.setColorOpaque_F(inst.redCache[cacheID], inst.grnCache[cacheID], inst.bluCache[cacheID]); inst.tessellator.setBrightness(inst.lightingCache[cacheID]); } - double xDiff = inst.renderMaxX - inst.renderMinX; - double yDiff = inst.renderMaxY - inst.renderMinY; - double zDiff = inst.renderMaxZ - inst.renderMinZ; + u = cacheID == 1 || cacheID == 2 ? inst.maxU : inst.minU; + v = cacheID < 2 ? inst.maxV : inst.minV; + + uDiff = inst.maxU - inst.minU; + vDiff = inst.maxV - inst.minV; - inst.tessellator.addVertexWithUV(inst.renderMinX + (x * xDiff), inst.renderMinY + (y * yDiff), inst.renderMinZ + (z * zDiff), inst.uCache[cacheID], inst.vCache[cacheID]); + if (inst.renderMinX + inst.renderMinY + inst.renderMinZ != 0 || inst.renderMaxX + inst.renderMaxY + inst.renderMaxZ != 3) { + boolean uMin = u == inst.minU; + boolean vMin = v == inst.minV; + + xDiff = inst.renderMaxX - inst.renderMinX; + yDiff = inst.renderMaxY - inst.renderMinY; + zDiff = inst.renderMaxZ - inst.renderMinZ; + + if (normal.offsetY != 0) { + uDiff *= uMin ? inst.renderMinX : 1 - inst.renderMaxX; + vDiff *= vMin ? inst.renderMinZ : 1 - inst.renderMaxZ; + } else if (normal.offsetX != 0) { + uDiff *= uMin ? inst.renderMinZ : 1 - inst.renderMaxZ; + vDiff *= vMin ? inst.renderMinY : 1 - inst.renderMaxY; + } else if (normal.offsetZ != 0) { + uDiff *= uMin ? inst.renderMinX : 1 - inst.renderMaxX; + vDiff *= vMin ? inst.renderMinY : 1 - inst.renderMaxY; + } + u = u == inst.minU ? inst.minU + uDiff : inst.maxU - uDiff; + + v = v == inst.minV ? inst.minV + vDiff : inst.maxV - vDiff; + } else { + xDiff = yDiff = zDiff = 1; + } + + inst.tessellator.addVertexWithUV(inst.renderMinX + (x * xDiff), inst.renderMinY + (y * yDiff), inst.renderMinZ + (z * zDiff), u, v); } } /** - * Each side is divided into 4 sub-sides. LB(left bottom), RB(right bottom), - * LT(right top), and RT(right top). + * Each side is divided into 4 sub-sides. LB(left bottom), RB(right bottom), LT(right top), and RT(right top). * - * Each sub-side contains 4 {@link Vert} objects representing its position - * on the block. + * Each sub-side contains 4 {@link Vert} objects representing its position on the block. */ enum SubSide { // @formatter:off @@ -94,22 +120,38 @@ public class RenderBlocksCTM extends RenderBlocks { YPOS_LB(YZ, X_HALF_YZ, XZ_HALF_Y, Z_HALF_Y), YPOS_RB(X_HALF_YZ, XYZ, Z_HALF_XY, XZ_HALF_Y), YPOS_RT(XZ_HALF_Y, Z_HALF_XY, XY, X_HALF_Y), YPOS_LT(Z_HALF_Y, XZ_HALF_Y, X_HALF_Y, Y); // @formatter:on private Vert xmin, xmax, ymin, ymax; + private ForgeDirection normal; SubSide(Vert xmin, Vert ymin, Vert ymax, Vert xmax) { this.xmin = xmin; this.ymin = ymin; this.ymax = ymax; this.xmax = xmax; + this.normal = calcNormal(); + } + + private ForgeDirection calcNormal() { + double xTot = xmin.x + xmax.x + ymin.x + ymax.x; + double yTot = xmin.y + xmax.y + ymin.y + ymax.y; + double zTot = xmin.z + xmax.z + ymin.z + ymax.z; + if (xTot % 4 == 0) { + return xTot > 0 ? ForgeDirection.EAST : ForgeDirection.WEST; + } else if (yTot % 4 == 0) { + return yTot > 0 ? ForgeDirection.UP : ForgeDirection.DOWN; + } else if (zTot % 4 == 0) { + return zTot > 0 ? ForgeDirection.SOUTH : ForgeDirection.NORTH; + } + return ForgeDirection.UNKNOWN; } void render(RenderBlocksCTM inst) { - xmin.render(inst, 0); - ymin.render(inst, 1); - ymax.render(inst, 2); - xmax.render(inst, 3); + xmin.render(inst, normal, 0); + ymin.render(inst, normal, 1); + ymax.render(inst, normal, 2); + xmax.render(inst, normal, 3); } } - + private static CTM ctm = CTM.getInstance(); // globals added to save the JVM some trouble. No need to constantly create @@ -125,8 +167,8 @@ public class RenderBlocksCTM extends RenderBlocks { } Tessellator tessellator; - double[] uCache = new double[4]; - double[] vCache = new double[4]; + double minU, maxU; + double minV, maxV; int[] lightingCache = new int[4]; float[] redCache = new float[4]; float[] grnCache = new float[4]; @@ -134,6 +176,7 @@ public class RenderBlocksCTM extends RenderBlocks { public TextureSubmap submap; public TextureSubmap submapSmall; public RenderBlocks rendererOld; + public ISubmapManager manager; int[][] lightmap = new int[3][3]; float[][] redmap = new float[3][3]; @@ -250,6 +293,7 @@ public class RenderBlocksCTM extends RenderBlocks { } void side(SubSide side, int iconIndex) { + IIcon icon; TextureSubmap map; if (iconIndex >= 16) { @@ -267,15 +311,20 @@ public class RenderBlocksCTM extends RenderBlocks { double vmax = icon.getMaxV(); double vmin = icon.getMinV(); - uCache[0] = umin; - uCache[1] = umax; - uCache[2] = umax; - uCache[3] = umin; + minU = umin; + maxU = umax; + minV = vmin; + maxV = vmax; - vCache[0] = vmax; - vCache[1] = vmax; - vCache[2] = vmin; - vCache[3] = vmin; + // uCache[0] = umin; + // uCache[1] = umax; + // uCache[2] = umax; + // uCache[3] = umin; + // + // vCache[0] = vmax; + // vCache[1] = vmax; + // vCache[2] = vmin; + // vCache[3] = vmin; side.render(this); } @@ -297,6 +346,8 @@ public class RenderBlocksCTM extends RenderBlocks { fillColormap(colorGreenBottomRight, colorGreenTopRight, colorGreenTopLeft, colorGreenBottomLeft, grnmap); fillColormap(colorBlueBottomRight, colorBlueTopRight, colorBlueTopLeft, colorBlueBottomLeft, blumap); + pre(ForgeDirection.WEST); + getLight(0, 0); side(XNEG_LB, tex[0]); getLight(1, 0); @@ -305,6 +356,8 @@ public class RenderBlocksCTM extends RenderBlocks { side(XNEG_RT, tex[2]); getLight(0, 1); side(XNEG_LT, tex[3]); + + post(ForgeDirection.WEST); } } @@ -324,6 +377,9 @@ public class RenderBlocksCTM extends RenderBlocks { fillColormap(colorRedTopLeft, colorRedBottomLeft, colorRedBottomRight, colorRedTopRight, redmap); fillColormap(colorGreenTopLeft, colorGreenBottomLeft, colorGreenBottomRight, colorGreenTopRight, grnmap); fillColormap(colorBlueTopLeft, colorBlueBottomLeft, colorBlueBottomRight, colorBlueTopRight, blumap); + + pre(ForgeDirection.EAST); + getLight(0, 0); side(XPOS_LB, tex[0]); getLight(1, 0); @@ -332,7 +388,10 @@ public class RenderBlocksCTM extends RenderBlocks { side(XPOS_RT, tex[2]); getLight(0, 1); side(XPOS_LT, tex[3]); + + post(ForgeDirection.EAST); } + rendererOld.clearOverrideBlockTexture(); } @Override @@ -351,6 +410,9 @@ public class RenderBlocksCTM extends RenderBlocks { fillColormap(colorRedBottomRight, colorRedTopRight, colorRedTopLeft, colorRedBottomLeft, redmap); fillColormap(colorGreenBottomRight, colorGreenTopRight, colorGreenTopLeft, colorGreenBottomLeft, grnmap); fillColormap(colorBlueBottomRight, colorBlueTopRight, colorBlueTopLeft, colorBlueBottomLeft, blumap); + + pre(ForgeDirection.NORTH); + getLight(0, 0); side(ZNEG_LB, tex[0]); getLight(1, 0); @@ -359,7 +421,10 @@ public class RenderBlocksCTM extends RenderBlocks { side(ZNEG_RT, tex[2]); getLight(0, 1); side(ZNEG_LT, tex[3]); + + post(ForgeDirection.NORTH); } + rendererOld.clearOverrideBlockTexture(); } @Override @@ -378,6 +443,9 @@ public class RenderBlocksCTM extends RenderBlocks { fillColormap(colorRedBottomLeft, colorRedBottomRight, colorRedTopRight, colorRedTopLeft, redmap); fillColormap(colorGreenBottomLeft, colorGreenBottomRight, colorGreenTopRight, colorGreenTopLeft, grnmap); fillColormap(colorBlueBottomLeft, colorBlueBottomRight, colorBlueTopRight, colorBlueTopLeft, blumap); + + pre(ForgeDirection.SOUTH); + getLight(0, 0); side(ZPOS_LB, tex[0]); getLight(1, 0); @@ -386,7 +454,10 @@ public class RenderBlocksCTM extends RenderBlocks { side(ZPOS_RT, tex[2]); getLight(0, 1); side(ZPOS_LT, tex[3]); + + post(ForgeDirection.SOUTH); } + rendererOld.clearOverrideBlockTexture(); } @Override @@ -405,6 +476,9 @@ public class RenderBlocksCTM extends RenderBlocks { fillColormap(colorRedBottomLeft, colorRedBottomRight, colorRedTopRight, colorRedTopLeft, redmap); fillColormap(colorGreenBottomLeft, colorGreenBottomRight, colorGreenTopRight, colorGreenTopLeft, grnmap); fillColormap(colorBlueBottomLeft, colorBlueBottomRight, colorBlueTopRight, colorBlueTopLeft, blumap); + + pre(ForgeDirection.DOWN); + getLight(0, 0); side(YNEG_LB, tex[0]); getLight(1, 0); @@ -413,7 +487,10 @@ public class RenderBlocksCTM extends RenderBlocks { side(YNEG_RT, tex[2]); getLight(0, 1); side(YNEG_LT, tex[3]); + + post(ForgeDirection.DOWN); } + rendererOld.clearOverrideBlockTexture(); } @Override @@ -432,6 +509,9 @@ public class RenderBlocksCTM extends RenderBlocks { fillColormap(colorRedTopRight, colorRedTopLeft, colorRedBottomLeft, colorRedBottomRight, redmap); fillColormap(colorGreenTopRight, colorGreenTopLeft, colorGreenBottomLeft, colorGreenBottomRight, grnmap); fillColormap(colorBlueTopRight, colorBlueTopLeft, colorBlueBottomLeft, colorBlueBottomRight, blumap); + + pre(ForgeDirection.UP); + getLight(0, 0); side(YPOS_LB, tex[0]); getLight(1, 0); @@ -440,6 +520,17 @@ public class RenderBlocksCTM extends RenderBlocks { side(YPOS_RT, tex[2]); getLight(0, 1); side(YPOS_LT, tex[3]); + + post(ForgeDirection.UP); } + rendererOld.clearOverrideBlockTexture(); + } + + private void pre(ForgeDirection face) { + manager.preRenderSide(this, blockAccess, bx, by, bz, face); + } + + private void post(ForgeDirection face) { + manager.postRenderSide(this, blockAccess, bx, by, bz, face); } } \ No newline at end of file diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java b/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java deleted file mode 100644 index f7b5bace..00000000 --- a/src/main/java/com/cricketcraft/chisel/client/render/RenderBlocksCTMCarpet.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.cricketcraft.chisel.client.render; - -import net.minecraft.block.Block; -import net.minecraft.util.IIcon; - -public class RenderBlocksCTMCarpet extends RenderBlocksCTM { - - public RenderBlocksCTMCarpet() { - super(); - } - - @Override - public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) { - rendererOld.renderFaceXNeg(block, 0, 0, 0, submapSmall.getBaseIcon()); - } - - @Override - public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) { - rendererOld.renderFaceXPos(block, 0, 0, 0, submapSmall.getBaseIcon()); - } - - @Override - public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) { - rendererOld.renderFaceZNeg(block, 0, 0, 0, submapSmall.getBaseIcon()); - } - - @Override - public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) { - rendererOld.renderFaceZPos(block, 0, 0, 0, submapSmall.getBaseIcon()); - } - -} diff --git a/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java b/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java index fd12c3cc..3b475000 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/RendererCTM.java @@ -9,6 +9,7 @@ import org.lwjgl.opengl.GL11; import com.cricketcraft.chisel.Chisel; import com.cricketcraft.chisel.api.ICarvable; import com.cricketcraft.chisel.api.carving.IVariationInfo; +import com.cricketcraft.chisel.api.rendering.ISubmapManager; import com.cricketcraft.chisel.utils.Drawing; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; @@ -32,6 +33,7 @@ public class RendererCTM implements ISimpleBlockRenderingHandler { GL11.glTranslatef(0.5F, 0.5F, 0.5F); } + @SuppressWarnings("unchecked") @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks rendererOld) { int meta = world.getBlockMetadata(x, y, z); @@ -41,6 +43,9 @@ public class RendererCTM implements ISimpleBlockRenderingHandler { if (!rendererOld.hasOverrideBlockTexture() && var != null) { RenderBlocks rb = var.getSubmapManager().createRenderContext(rendererOld, world); if (rb != null) { + if (rb.getClass() == RenderBlocksCTM.class) { + ((RenderBlocksCTM)rb).manager = (ISubmapManager) var.getSubmapManager(); + } return rb.renderStandardBlock(block, x, y, z); } } diff --git a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java index 792ac785..957c26dd 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerCarpetFloor.java @@ -5,14 +5,15 @@ import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import com.cricketcraft.chisel.api.rendering.ISubmapManager; import com.cricketcraft.chisel.api.rendering.TextureSubmap; -public class SubmapManagerCarpetFloor implements ISubmapManager { +public class SubmapManagerCarpetFloor implements ISubmapManager { - private static RenderBlocksCTMCarpet rb = new RenderBlocksCTMCarpet(); + private static RenderBlocksCTM rb = new RenderBlocksCTM(); private TextureSubmap submap; private TextureSubmap submapSmall; @@ -40,7 +41,7 @@ public class SubmapManagerCarpetFloor implements ISubmapManager { } @Override - public RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { + public RenderBlocksCTM createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { rb.blockAccess = world; rb.renderMaxX = 1.0; rb.renderMaxY = 1f / 16f; @@ -52,4 +53,12 @@ public class SubmapManagerCarpetFloor implements ISubmapManager { rb.rendererOld = rendererOld; return rb; } + + @Override + public void preRenderSide(RenderBlocksCTM renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + } + + @Override + public void postRenderSide(RenderBlocksCTM renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + } } diff --git a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java index 4950c799..078be9dd 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerFakeController.java @@ -5,6 +5,7 @@ import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; import com.cricketcraft.chisel.api.rendering.CTM; import com.cricketcraft.chisel.api.rendering.ISubmapManager; @@ -13,7 +14,7 @@ import com.cricketcraft.chisel.init.ChiselBlocks; import static com.cricketcraft.chisel.api.rendering.Dir.*; -public class SubmapManagerFakeController implements ISubmapManager { +public class SubmapManagerFakeController implements ISubmapManager { private TextureSubmap map; private CTM ctm = CTM.getInstance(); @@ -45,9 +46,17 @@ public class SubmapManagerFakeController implements ISubmapManager { public void registerIcons(String modName, Block block, IIconRegister register) { map = new TextureSubmap(register.registerIcon(modName + ":futura/WIP/controllerWIP-ctm"), 2, 2); } - + @Override public RenderBlocks createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { return rendererOld; } + + @Override + public void preRenderSide(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + } + + @Override + public void postRenderSide(RenderBlocks renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + } } diff --git a/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerSlab.java b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerSlab.java new file mode 100644 index 00000000..2872fc87 --- /dev/null +++ b/src/main/java/com/cricketcraft/chisel/client/render/SubmapManagerSlab.java @@ -0,0 +1,76 @@ +package com.cricketcraft.chisel.client.render; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import com.cricketcraft.chisel.api.rendering.ISubmapManager; +import com.cricketcraft.chisel.api.rendering.TextureSubmap; + +public class SubmapManagerSlab implements ISubmapManager { + + private static RenderBlocksCTM rb = new RenderBlocksCTM(); + + private TextureSubmap submap; + private TextureSubmap submapSmall; + private IIcon sideTexture; + private String texture; + + public SubmapManagerSlab(String texture) { + this.texture = texture; + } + + @Override + public IIcon getIcon(int side, int meta) { + return submapSmall.getBaseIcon(); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + return getIcon(side, world.getBlockMetadata(x, y, z)); + } + + @Override + public void registerIcons(String modName, Block block, IIconRegister register) { + String path = modName + ":" + texture; + submap = new TextureSubmap(register.registerIcon(path + "-ctm"), 4, 4); + submapSmall = new TextureSubmap(register.registerIcon(path), 2, 2); + sideTexture = register.registerIcon(path + "-side"); + } + + @Override + public RenderBlocksCTM createRenderContext(RenderBlocks rendererOld, IBlockAccess world) { + rb.blockAccess = world; + rb.renderMaxX = 1.0; + rb.renderMaxY = 1f / 2f; + rb.renderMaxZ = 1.0; + + rb.submap = submap; + rb.submapSmall = submapSmall; + + rb.rendererOld = rendererOld; + return rb; + } + + private boolean hadOverride = false; + + @Override + public void preRenderSide(RenderBlocksCTM renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + if (side.ordinal() < 2 && !renderer.rendererOld.hasOverrideBlockTexture()) { + renderer.rendererOld.setOverrideBlockTexture(sideTexture); + hadOverride = false; + } else { + hadOverride = true; + } + } + + @Override + public void postRenderSide(RenderBlocksCTM renderer, IBlockAccess world, int x, int y, int z, ForgeDirection side) { + if (!hadOverride) { + renderer.rendererOld.clearOverrideBlockTexture(); + } + } +} diff --git a/src/main/java/com/cricketcraft/chisel/config/Configurations.java b/src/main/java/com/cricketcraft/chisel/config/Configurations.java index e502c2b9..7194e9fb 100644 --- a/src/main/java/com/cricketcraft/chisel/config/Configurations.java +++ b/src/main/java/com/cricketcraft/chisel/config/Configurations.java @@ -91,7 +91,7 @@ public class Configurations { particlesTickrate = config.get(category, "particleTickrate", 1, "Particle tick rate. Greater value = less particles.").getInt(1); oldPillars = config.get(category, "pillarOldGraphics", false, "Use old pillar textures").getBoolean(false); disableCTM = !config.get(category, "connectedTextures", true, "Enable connected textures").getBoolean(true); - CTM.disableObscuredFaceCheckConfig = connectInsideCTM = !config.get(category, "connectInsideCTM", false, + CTM.disableObscuredFaceCheckConfig = connectInsideCTM = config.get(category, "connectInsideCTM", false, "Choose whether the inside corner is disconnected on a CTM block - http://imgur.com/eUywLZ4").getBoolean(false); fancy = config.get(category, "fancyLeaves", true, "Enable fancy textures").getBoolean(true); blockDescriptions = config.get(category, "tooltipsUseBlockDescriptions", true, "Make variations of blocks have the same name, and use the description in tooltip to distinguish them.") diff --git a/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java b/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java index b784d272..064fbf23 100644 --- a/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java +++ b/src/main/java/com/cricketcraft/chisel/proxy/ClientProxy.java @@ -39,7 +39,6 @@ public class ClientProxy extends CommonProxy { RenderingRegistry.registerBlockHandler(new RendererPillar()); RenderingRegistry.registerBlockHandler(new RendererEldritch()); RenderingRegistry.registerBlockHandler(new RendererCTM()); - RenderingRegistry.registerBlockHandler(new BlockCarpetRenderer()); RenderingRegistry.registerBlockHandler(new RendererLayeredGlow()); RenderingRegistry.registerBlockHandler(new RendererCTMFullbright()); RenderingRegistry.registerBlockHandler(new RendererSimpleLayered()); diff --git a/src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks-ctm.png b/src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks-ctm.png new file mode 100644 index 0000000000000000000000000000000000000000..c47b238205fc6ce65a4b859e23987787bc849c1e GIT binary patch literal 758 zcmVCQ)YR0cr>A{=ebdv^si~=YdU|VXYm1AE@bK_vW@gvd z*Urw);Nal8y1K5euClVSwzjr=dwYR_f#v1p-{0Td+}vPbU}|b=#>U34udm|b;%;tk z-rnAYg@uNOhKGlTf`Wp>!^41pfad1rrKP2$q@;v|guuYSii(P9X=$ykt$%-iY;0_0 zWo2A$(tQ8`0dq-2K~#8Nb&|u9HbE2xtJ?05wryi*+xX4*e}RdLiQ9|0QLBvHo;>6v z6UfSczI!}$geCYcHI4|0DA8h9-vk=fWe|M7B>W}0$eLOVb#-7T5ZD6O9AA&PVlaN{ zm*T*I7*)Z)?QE};yp{;tt7IN1TwdkC$JR_CdW?vbS|JUT<&FeyP+289iKT=>p$4?c z-5Gdg+#C{JKb8bSYQS_$JO@`sHzL}B&g=~M)S?#J!CWL#;J37)q8%=bxdcAxhKFc} z$hA8H5Bqyjv_rAH;rYR;?4TV&X4?g~536;w!`D#r3%J}Uxo8KaCGCNi`t{&P|3$uC zmhT6wKl%gfPkr=3t5TKqM}J`bAD!`&saVgfKl%gff9&^Xn=h|J)}Q+a9=#oS^mgFU z+kr>;0hj0xi0}g*y+80sSpR8Kn|JaPAM20)!1}+1tiDmH{9ygjA6Wmk`E!&o8^2h8 o^as{o`Tg&|uceBt|K~rv1N57C1k7GpX#fBK07*qoM6N<$g2_{)00000 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks-top.png b/src/main/resources/assets/chisel/textures/blocks/marbleslab/marble-arranged-bricks-top.png deleted file mode 100644 index 20e2203afda8cd921fedf6c070b6a05b1e736287..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 449 zcmV;y0Y3hTP)MzP`TM+1azRvwnVlxVX5&!otCdQ&CRf|uzY-c+S=OI*4D1BuD7?h!NI}O($dPx%GA`tE+W&b-lg4adB~XcXx1baG#%_xw*Nr zva+$Uv4w?&q@<*&sj1A&%&MxY!^6YG#Kd!RbHKpBczAeeX=!Y1Y-MF-q0WxU00026 zNkl| z0hzMtfM`59_rjQ7)MaqI-#sC_49Hd_{xvE5UWf+yB1)aZGPneB4$IJLbEB1#6lM)W zqfay-DK%>t)$*#Tmd|*2G;0`MJluLQeL-#3Fubq~T!&?BMd7;+%Xn?OH`if*;XVBL rbRG5==JD&>IqWYCKfiy@VSoJtZo3rS$Z*On6x3_e3bjiud(b3Vw#KghD!G3;zxw*O4*4DnhzPPx!adC0o-QB{% z!qwH)c6N5l%gejFyT8A`p`oE|ZEfS@$H&LKyu91n+q1K?wY9a%%F3XipxN2k zb#--caBz5dc)h*7(9qC%d3nst%(S$$;NakVe0+(CiQ3xQpP!$_#l@?utH{X6cXxNO zv9XAVh|kZ@*x1;vuCCP7)N*ois;a7Ub91AkqlbrweSLk`*VlV{d)(aI;^N|gfq}ZZ zx{Hg8Yinz*t*zhR-?Fl@ZfRz(h2`btYHDhRhK8r7r=+B$ zU|?W>e}A^Nwy&?R)6>(=&d$Tb!-9f>goK2prKRTP=74~Jz`($Yii&1tW@%|@Y;0_0 zWo6Cn&w~H}0P;yhK~#8N1potb1VOL|Ynx}=Mr_;m|38p|y3BV_&&Y&mvvvgBHgIky z022-s7wB4ozk_6{bbKnu=OQCqDYDsw8e5(#Egs`6ArpxyUa|mVYk>A{@WG(es0tu} z*vs|HDRP1%rf>!xg$r&jmDLpKM%Q$d(kc+$>cx9on(1sX)9hve%Hg9{Z7K7lF*2W~ zp$w{+(Vtae!8y*WRd