package com.carpentersblocks.renderer; import static com.carpentersblocks.renderer.helper.VertexHelper.BOTTOM_LEFT; import static com.carpentersblocks.renderer.helper.VertexHelper.BOTTOM_RIGHT; import static com.carpentersblocks.renderer.helper.VertexHelper.NORTHEAST; import static com.carpentersblocks.renderer.helper.VertexHelper.NORTHWEST; import static com.carpentersblocks.renderer.helper.VertexHelper.SOUTHEAST; import static com.carpentersblocks.renderer.helper.VertexHelper.SOUTHWEST; import static com.carpentersblocks.renderer.helper.VertexHelper.TOP_LEFT; import static com.carpentersblocks.renderer.helper.VertexHelper.TOP_RIGHT; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; import com.carpentersblocks.data.Collapsible; import com.carpentersblocks.renderer.helper.RenderHelper; import com.carpentersblocks.renderer.helper.RenderHelperCollapsible; import com.carpentersblocks.renderer.helper.VertexHelper; import com.carpentersblocks.util.collapsible.CollapsibleUtil; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class BlockHandlerCarpentersCollapsibleBlock extends BlockHandlerSloped { /* RENDER IDS */ private static final int NORMAL_YN = 0; private static final int NORMAL_YP = 1; private static final int NORMAL_ZN = 2; private static final int NORMAL_ZP = 3; private static final int NORMAL_XN = 4; private static final int NORMAL_XP = 5; private static final int SLOPE_YZNN = 6; private static final int SLOPE_YZNP = 7; private static final int SLOPE_YZPN = 8; private static final int SLOPE_YZPP = 9; private static final int SLOPE_XYNN = 10; private static final int SLOPE_XYPN = 11; private static final int SLOPE_XYNP = 12; private static final int SLOPE_XYPP = 13; @Override public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderBlocks) { renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); super.renderInventoryBlock(block, metadata, modelID, renderBlocks); } @Override /** * Renders side. */ protected void renderBaseSide(int x, int y, int z, int side, IIcon icon) { switch (renderID) { case NORMAL_YN: RenderHelper.renderFaceYNeg(renderBlocks, x, y, z, icon); break; case NORMAL_YP: RenderHelper.renderFaceYPos(renderBlocks, x, y, z, icon); break; case NORMAL_ZN: RenderHelperCollapsible.renderFaceZNeg(renderBlocks, x, y, z, icon, Collapsible.INSTANCE.isPositive(TE)); break; case NORMAL_ZP: RenderHelperCollapsible.renderFaceZPos(renderBlocks, x, y, z, icon, Collapsible.INSTANCE.isPositive(TE)); break; case NORMAL_XN: RenderHelperCollapsible.renderFaceXNeg(renderBlocks, x, y, z, icon, Collapsible.INSTANCE.isPositive(TE)); break; case NORMAL_XP: RenderHelperCollapsible.renderFaceXPos(renderBlocks, x, y, z, icon, Collapsible.INSTANCE.isPositive(TE)); break; case SLOPE_YZNN: RenderHelperCollapsible.renderSlopeYNegZNeg(renderBlocks, x, y, z, icon); break; case SLOPE_YZNP: RenderHelperCollapsible.renderSlopeYNegZPos(renderBlocks, x, y, z, icon); break; case SLOPE_YZPN: RenderHelperCollapsible.renderSlopeYPosZNeg(renderBlocks, x, y, z, icon); break; case SLOPE_YZPP: RenderHelperCollapsible.renderSlopeYPosZPos(renderBlocks, x, y, z, icon); break; case SLOPE_XYNN: RenderHelperCollapsible.renderSlopeXNegYNeg(renderBlocks, x, y, z, icon); break; case SLOPE_XYPN: RenderHelperCollapsible.renderSlopeXPosYNeg(renderBlocks, x, y, z, icon); break; case SLOPE_XYNP: RenderHelperCollapsible.renderSlopeXNegYPos(renderBlocks, x, y, z, icon); break; case SLOPE_XYPP: RenderHelperCollapsible.renderSlopeXPosYPos(renderBlocks, x, y, z, icon); break; } } @Override /** * Renders base block. */ protected void renderBaseBlock(ItemStack itemStack, int x, int y, int z) { renderBlocks.enableAO = getEnableAO(itemStack); CollapsibleUtil.computeOffsets(TE); // Render sloped top or bottom face VertexHelper.startDrawing(GL11.GL_TRIANGLES); isSideSloped = true; if (Collapsible.INSTANCE.isPositive(TE)) { if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y + 1, z, UP) || !CollapsibleUtil.isMax(TE)) { prepareTopFace(itemStack, x, y, z); } } else { if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y - 1, z, DOWN) || !CollapsibleUtil.isMax(TE)) { prepareBottomFace(itemStack, x, y, z); } } isSideSloped = false; // Render all other faces VertexHelper.startDrawing(GL11.GL_QUADS); renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); prepareLighting(itemStack, x, y, z); // Render solid face at base of block if (Collapsible.INSTANCE.isPositive(TE)) { if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y - 1, z, DOWN)) { lightingHelper.setupLightingYNeg(itemStack, x, y, z); setIDAndRender(itemStack, NORMAL_YN, x, y, z, DOWN); } } else { if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y + 1, z, UP)) { lightingHelper.setupLightingYPos(itemStack, x, y, z); setIDAndRender(itemStack, NORMAL_YP, x, y, z, UP); } } // Render sides with depths double stepDepth = 1.0D / 16.0D; /* NORTH FACE */ if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y, z - 1, NORTH)) { if (CollapsibleUtil.offset_XZNN + CollapsibleUtil.offset_XZPN >= stepDepth) { prepareFaceZNeg(itemStack, x, y, z); } } /* SOUTH FACE */ if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y, z + 1, SOUTH)) { if (CollapsibleUtil.offset_XZNP + CollapsibleUtil.offset_XZPP >= stepDepth) { prepareFaceZPos(itemStack, x, y, z); } } /* WEST FACE */ if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x - 1, y, z, WEST)) { if (CollapsibleUtil.offset_XZNN + CollapsibleUtil.offset_XZNP >= stepDepth) { prepareFaceXNeg(itemStack, x, y, z); } } /* EAST FACE */ if (srcBlock.shouldSideBeRendered(TE.getWorldObj(), x + 1, y, z, EAST)) { if (CollapsibleUtil.offset_XZPN + CollapsibleUtil.offset_XZPP >= stepDepth) { prepareFaceXPos(itemStack, x, y, z); } } renderBlocks.enableAO = false; } /** * Returns lightness for sloped face on side. */ private float getInterpolatedLightness(ForgeDirection side, int facing) { if (facing == 0) { switch (side) { case NORTH: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.offset_XZNN - CollapsibleUtil.offset_XZPN); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZPN + CollapsibleUtil.offset_XZNN) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[0] + (lightness_WE + lightness_NS) / 2.0F); } case SOUTH: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.offset_XZNP - CollapsibleUtil.offset_XZPP); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZPP + CollapsibleUtil.offset_XZNP) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[0] + (lightness_WE + lightness_NS) / 2.0F); } case WEST: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.offset_XZNN - CollapsibleUtil.offset_XZNP); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZNP + CollapsibleUtil.offset_XZNN) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[0] + (lightness_WE + lightness_NS) / 2.0F); } case EAST: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.offset_XZPP - CollapsibleUtil.offset_XZPN); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZPP + CollapsibleUtil.offset_XZPN) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[0] + (lightness_WE + lightness_NS) / 2.0F); } default: return 0.5F; } } else { switch (side) { case NORTH: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.offset_XZNN - CollapsibleUtil.offset_XZPN); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZPN + CollapsibleUtil.offset_XZNN) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[1] - (lightness_WE + lightness_NS) / 2.0F); } case SOUTH: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.offset_XZNP - CollapsibleUtil.offset_XZPP); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZPP + CollapsibleUtil.offset_XZNP) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[1] - (lightness_WE + lightness_NS) / 2.0F); } case WEST: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.offset_XZNN - CollapsibleUtil.offset_XZNP); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZNP + CollapsibleUtil.offset_XZNN) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[1] - (lightness_WE + lightness_NS) / 2.0F); } case EAST: { double lightness_WE = (1.0F - lightingHelper.LIGHTNESS[2]) * Math.abs(CollapsibleUtil.offset_XZPP - CollapsibleUtil.offset_XZPN); double lightness_NS = (1.0F - lightingHelper.LIGHTNESS[4]) * Math.abs(CollapsibleUtil.CENTER_YMAX - (CollapsibleUtil.offset_XZPP + CollapsibleUtil.offset_XZPN) / 2.0F) * 2.0F; return (float) (lightingHelper.LIGHTNESS[1] - (lightness_WE + lightness_NS) / 2.0F); } default: return 1.0F; } } } /** * Draws the top face using four triangles. */ private void prepareTopFace(ItemStack itemStack, int x, int y, int z) { /* Compute CENTER_YMAX lighting. */ renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, CollapsibleUtil.CENTER_YMAX, 0.5D); lightingHelper.setupLightingYPos(itemStack, x, y, z); float aoCenter = lightingHelper.ao[SOUTHEAST]; int brightnessCenter = renderBlocks.brightnessTopLeft; /* Compute XZPP corner lighting. */ renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, CollapsibleUtil.offset_XZPP, 1.0D); lightingHelper.setupLightingYPos(itemStack, x, y, z); float aoXZPP = lightingHelper.ao[SOUTHEAST]; int brightnessXZPP = renderBlocks.brightnessTopLeft; /* Compute XZPN corner lighting. */ renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, CollapsibleUtil.offset_XZPN, 1.0D); lightingHelper.setupLightingYPos(itemStack, x, y, z); float aoXZPN = lightingHelper.ao[NORTHEAST]; int brightnessXZPN = renderBlocks.brightnessBottomLeft; /* Compute XZNN corner lighting. */ renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, CollapsibleUtil.offset_XZNN, 1.0D); lightingHelper.setupLightingYPos(itemStack, x, y, z); float aoXZNN = lightingHelper.ao[NORTHWEST]; int brightnessXZNN = renderBlocks.brightnessBottomRight; /* Compute XZNP corner lighting. */ renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, CollapsibleUtil.offset_XZNP, 1.0D); lightingHelper.setupLightingYPos(itemStack, x, y, z); float aoXZNP = lightingHelper.ao[SOUTHWEST]; int brightnessXZNP = renderBlocks.brightnessTopRight; /* Top North triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.NORTH, 1)); renderBlocks.setRenderBounds(0.0D, Math.min(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZPN), 0.0D, 1.0D, Math.max(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZPN), 0.5D); lightingHelper.ao[TOP_LEFT] = lightingHelper.ao[TOP_RIGHT] = aoCenter; renderBlocks.brightnessTopLeft = renderBlocks.brightnessTopRight = brightnessCenter; lightingHelper.ao[BOTTOM_LEFT] = aoXZPN; renderBlocks.brightnessBottomLeft = brightnessXZPN; lightingHelper.ao[BOTTOM_RIGHT] = aoXZNN; renderBlocks.brightnessBottomRight = brightnessXZNN; setIDAndRender(itemStack, SLOPE_YZPN, x, y, z, UP); /* Top South triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.SOUTH, 1)); renderBlocks.setRenderBounds(0.0D, Math.min(CollapsibleUtil.offset_XZNP, CollapsibleUtil.offset_XZPP), 0.5D, 1.0D, Math.max(CollapsibleUtil.offset_XZNP, CollapsibleUtil.offset_XZPP), 1.0D); lightingHelper.ao[BOTTOM_LEFT] = lightingHelper.ao[BOTTOM_RIGHT] = aoCenter; renderBlocks.brightnessBottomLeft = renderBlocks.brightnessBottomRight = brightnessCenter; lightingHelper.ao[TOP_LEFT] = aoXZPP; renderBlocks.brightnessTopLeft = brightnessXZPP; lightingHelper.ao[TOP_RIGHT] = aoXZNP; renderBlocks.brightnessTopRight = brightnessXZNP; setIDAndRender(itemStack, SLOPE_YZPP, x, y, z, UP); /* Top West triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.WEST, 1)); renderBlocks.setRenderBounds(0.0D, Math.min(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZNP), 0.0D, 0.5D, Math.max(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZNP), 1.0D); lightingHelper.ao[TOP_LEFT] = lightingHelper.ao[BOTTOM_LEFT] = aoCenter; renderBlocks.brightnessTopLeft = renderBlocks.brightnessBottomLeft = brightnessCenter; lightingHelper.ao[TOP_RIGHT] = aoXZNP; renderBlocks.brightnessTopRight = brightnessXZNP; lightingHelper.ao[BOTTOM_RIGHT] = aoXZNN; renderBlocks.brightnessBottomRight = brightnessXZNN; setIDAndRender(itemStack, SLOPE_XYNP, x, y, z, UP); /* Top East triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.EAST, 1)); renderBlocks.setRenderBounds(0.5D, Math.min(CollapsibleUtil.offset_XZPN, CollapsibleUtil.offset_XZPP), 0.0D, 1.0D, Math.max(CollapsibleUtil.offset_XZPN, CollapsibleUtil.offset_XZPP), 1.0D); lightingHelper.ao[TOP_RIGHT] = lightingHelper.ao[BOTTOM_RIGHT] = aoCenter; renderBlocks.brightnessTopRight = renderBlocks.brightnessBottomRight = brightnessCenter; lightingHelper.ao[TOP_LEFT] = aoXZPP; renderBlocks.brightnessTopLeft = brightnessXZPP; lightingHelper.ao[BOTTOM_LEFT] = aoXZPN; renderBlocks.brightnessBottomLeft = brightnessXZPN; setIDAndRender(itemStack, SLOPE_XYPP, x, y, z, UP); lightingHelper.clearLightnessOverride(); } /** * Draws the bottom face using four triangles. */ private void prepareBottomFace(ItemStack itemStack, int x, int y, int z) { /* Compute CENTER_YMAX lighting. */ renderBlocks.setRenderBounds(0.0D, 1.0D - CollapsibleUtil.CENTER_YMAX, 0.0D, 0.5D, 1.0D, 0.5D); lightingHelper.setupLightingYNeg(itemStack, x, y, z); float aoCenter = lightingHelper.ao[SOUTHEAST]; int brightnessCenter = renderBlocks.brightnessTopLeft; /* Compute XZPP corner lighting. */ renderBlocks.setRenderBounds(0.0D, 1.0D - CollapsibleUtil.offset_XZPP, 0.0D, 1.0D, 1.0D, 1.0D); lightingHelper.setupLightingYNeg(itemStack, x, y, z); float aoXZPP = lightingHelper.ao[SOUTHEAST]; int brightnessXZPP = renderBlocks.brightnessTopLeft; /* Compute XZPN corner lighting. */ renderBlocks.setRenderBounds(0.0D, 1.0D - CollapsibleUtil.offset_XZPN, 0.0D, 1.0D, 1.0D, 1.0D); lightingHelper.setupLightingYNeg(itemStack, x, y, z); float aoXZPN = lightingHelper.ao[NORTHEAST]; int brightnessXZPN = renderBlocks.brightnessBottomLeft; /* Compute XZNN corner lighting. */ renderBlocks.setRenderBounds(0.0D, 1.0D - CollapsibleUtil.offset_XZNN, 0.0D, 1.0D, 1.0D, 1.0D); lightingHelper.setupLightingYNeg(itemStack, x, y, z); float aoXZNN = lightingHelper.ao[NORTHWEST]; int brightnessXZNN = renderBlocks.brightnessBottomRight; /* Compute XZNP corner lighting. */ renderBlocks.setRenderBounds(0.0D, 1.0D - CollapsibleUtil.offset_XZNP, 0.0D, 1.0D, 1.0D, 1.0D); lightingHelper.setupLightingYNeg(itemStack, x, y, z); float aoXZNP = lightingHelper.ao[SOUTHWEST]; int brightnessXZNP = renderBlocks.brightnessTopRight; /* Top North triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.NORTH, 0)); renderBlocks.setRenderBounds(0.0D, Math.min(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZPN), 0.0D, 1.0D, Math.max(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZPN), 0.5D); lightingHelper.ao[TOP_LEFT] = lightingHelper.ao[TOP_RIGHT] = aoCenter; renderBlocks.brightnessTopLeft = renderBlocks.brightnessTopRight = brightnessCenter; lightingHelper.ao[BOTTOM_LEFT] = aoXZPN; renderBlocks.brightnessBottomLeft = brightnessXZPN; lightingHelper.ao[BOTTOM_RIGHT] = aoXZNN; renderBlocks.brightnessBottomRight = brightnessXZNN; setIDAndRender(itemStack, SLOPE_YZNN, x, y, z, DOWN); /* Top South triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.SOUTH, 0)); renderBlocks.setRenderBounds(0.0D, Math.min(CollapsibleUtil.offset_XZNP, CollapsibleUtil.offset_XZPP), 0.5D, 1.0D, Math.max(CollapsibleUtil.offset_XZNP, CollapsibleUtil.offset_XZPP), 1.0D); lightingHelper.ao[BOTTOM_LEFT] = lightingHelper.ao[BOTTOM_RIGHT] = aoCenter; renderBlocks.brightnessBottomLeft = renderBlocks.brightnessBottomRight = brightnessCenter; lightingHelper.ao[TOP_LEFT] = aoXZPP; renderBlocks.brightnessTopLeft = brightnessXZPP; lightingHelper.ao[TOP_RIGHT] = aoXZNP; renderBlocks.brightnessTopRight = brightnessXZNP; setIDAndRender(itemStack, SLOPE_YZNP, x, y, z, DOWN); /* Top West triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.WEST, 0)); renderBlocks.setRenderBounds(0.0D, Math.min(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZNP), 0.0D, 0.5D, Math.max(CollapsibleUtil.offset_XZNN, CollapsibleUtil.offset_XZNP), 1.0D); lightingHelper.ao[TOP_LEFT] = lightingHelper.ao[BOTTOM_LEFT] = aoCenter; renderBlocks.brightnessTopLeft = renderBlocks.brightnessBottomLeft = brightnessCenter; lightingHelper.ao[TOP_RIGHT] = aoXZNP; renderBlocks.brightnessTopRight = brightnessXZNP; lightingHelper.ao[BOTTOM_RIGHT] = aoXZNN; renderBlocks.brightnessBottomRight = brightnessXZNN; setIDAndRender(itemStack, SLOPE_XYNN, x, y, z, DOWN); /* Top East triangle. */ lightingHelper.setLightnessOverride(getInterpolatedLightness(ForgeDirection.EAST, 0)); renderBlocks.setRenderBounds(0.5D, Math.min(CollapsibleUtil.offset_XZPN, CollapsibleUtil.offset_XZPP), 0.0D, 1.0D, Math.max(CollapsibleUtil.offset_XZPN, CollapsibleUtil.offset_XZPP), 1.0D); lightingHelper.ao[TOP_RIGHT] = lightingHelper.ao[BOTTOM_RIGHT] = aoCenter; renderBlocks.brightnessTopRight = renderBlocks.brightnessBottomRight = brightnessCenter; lightingHelper.ao[TOP_LEFT] = aoXZPP; renderBlocks.brightnessTopLeft = brightnessXZPP; lightingHelper.ao[BOTTOM_LEFT] = aoXZPN; renderBlocks.brightnessBottomLeft = brightnessXZPN; setIDAndRender(itemStack, SLOPE_XYPN, x, y, z, DOWN); lightingHelper.clearLightnessOverride(); } /** * Prepare North face. */ private void prepareFaceZNeg(ItemStack itemStack, int x, int y, int z) { lightingHelper.setupLightingZNeg(itemStack, x, y, z); if (renderBlocks.enableAO) { if (Collapsible.INSTANCE.isPositive(TE)) { lightingHelper.ao[TOP_LEFT] = (float) (ao[NORTH][BOTTOM_LEFT] + (ao[NORTH][TOP_LEFT] - ao[NORTH][BOTTOM_LEFT]) * CollapsibleUtil.offset_XZPN); lightingHelper.ao[TOP_RIGHT] = (float) (ao[NORTH][BOTTOM_RIGHT] + (ao[NORTH][TOP_RIGHT] - ao[NORTH][BOTTOM_RIGHT]) * CollapsibleUtil.offset_XZNN); } else { lightingHelper.ao[BOTTOM_LEFT] = (float) (ao[NORTH][TOP_LEFT] + (ao[NORTH][BOTTOM_LEFT] - ao[NORTH][TOP_LEFT]) * CollapsibleUtil.offset_XZPN); lightingHelper.ao[BOTTOM_RIGHT] = (float) (ao[NORTH][TOP_RIGHT] + (ao[NORTH][BOTTOM_RIGHT] - ao[NORTH][TOP_RIGHT]) * CollapsibleUtil.offset_XZNN); } } setIDAndRender(itemStack, NORMAL_ZN, x, y, z, NORTH); } /** * Prepare South face. */ private void prepareFaceZPos(ItemStack itemStack, int x, int y, int z) { lightingHelper.setupLightingZPos(itemStack, x, y, z); if (renderBlocks.enableAO) { if (Collapsible.INSTANCE.isPositive(TE)) { lightingHelper.ao[TOP_LEFT] = (float) (ao[SOUTH][BOTTOM_LEFT] + (ao[SOUTH][TOP_LEFT] - ao[SOUTH][BOTTOM_LEFT]) * CollapsibleUtil.offset_XZNP); lightingHelper.ao[TOP_RIGHT] = (float) (ao[SOUTH][BOTTOM_RIGHT] + (ao[SOUTH][TOP_RIGHT] - ao[SOUTH][BOTTOM_RIGHT]) * CollapsibleUtil.offset_XZPP); } else { lightingHelper.ao[BOTTOM_LEFT] = (float) (ao[SOUTH][TOP_LEFT] + (ao[SOUTH][BOTTOM_LEFT] - ao[SOUTH][TOP_LEFT]) * CollapsibleUtil.offset_XZNP); lightingHelper.ao[BOTTOM_RIGHT] = (float) (ao[SOUTH][TOP_RIGHT] + (ao[SOUTH][BOTTOM_RIGHT] - ao[SOUTH][TOP_RIGHT]) * CollapsibleUtil.offset_XZPP); } } setIDAndRender(itemStack, NORMAL_ZP, x, y, z, SOUTH); } /** * Prepare West face. */ private void prepareFaceXNeg(ItemStack itemStack, int x, int y, int z) { lightingHelper.setupLightingXNeg(itemStack, x, y, z); if (renderBlocks.enableAO) { if (Collapsible.INSTANCE.isPositive(TE)) { lightingHelper.ao[TOP_LEFT] = (float) (ao[WEST][BOTTOM_LEFT] + (ao[WEST][TOP_LEFT] - ao[WEST][BOTTOM_LEFT]) * CollapsibleUtil.offset_XZNN); lightingHelper.ao[TOP_RIGHT] = (float) (ao[WEST][BOTTOM_RIGHT] + (ao[WEST][TOP_RIGHT] - ao[WEST][BOTTOM_RIGHT]) * CollapsibleUtil.offset_XZNP); } else { lightingHelper.ao[BOTTOM_LEFT] = (float) (ao[WEST][TOP_LEFT] + (ao[WEST][BOTTOM_LEFT] - ao[WEST][TOP_LEFT]) * CollapsibleUtil.offset_XZNN); lightingHelper.ao[BOTTOM_RIGHT] = (float) (ao[WEST][TOP_RIGHT] + (ao[WEST][BOTTOM_RIGHT] - ao[WEST][TOP_RIGHT]) * CollapsibleUtil.offset_XZNP); } } setIDAndRender(itemStack, NORMAL_XN, x, y, z, WEST); } /** * Prepare East face. */ private void prepareFaceXPos(ItemStack itemStack, int x, int y, int z) { lightingHelper.setupLightingXPos(itemStack, x, y, z); if (renderBlocks.enableAO) { if (Collapsible.INSTANCE.isPositive(TE)) { lightingHelper.ao[TOP_LEFT] = (float) (ao[EAST][BOTTOM_LEFT] + (ao[EAST][TOP_LEFT] - ao[EAST][BOTTOM_LEFT]) * CollapsibleUtil.offset_XZPP); lightingHelper.ao[TOP_RIGHT] = (float) (ao[EAST][BOTTOM_RIGHT] + (ao[EAST][TOP_RIGHT] - ao[EAST][BOTTOM_RIGHT]) * CollapsibleUtil.offset_XZPN); } else { lightingHelper.ao[BOTTOM_LEFT] = (float) (ao[EAST][TOP_LEFT] + (ao[EAST][BOTTOM_LEFT] - ao[EAST][TOP_LEFT]) * CollapsibleUtil.offset_XZPP); lightingHelper.ao[BOTTOM_RIGHT] = (float) (ao[EAST][TOP_RIGHT] + (ao[EAST][BOTTOM_RIGHT] - ao[EAST][TOP_RIGHT]) * CollapsibleUtil.offset_XZPN); } } setIDAndRender(itemStack, NORMAL_XP, x, y, z, EAST); } }