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 java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDirectional;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import com.carpentersblocks.block.BlockCarpentersSlope;
import com.carpentersblocks.block.BlockCoverable;
import com.carpentersblocks.data.Slope;
import com.carpentersblocks.data.Slope.Type;
import com.carpentersblocks.renderer.helper.RenderHelper;
import com.carpentersblocks.renderer.helper.VertexHelper;
import com.carpentersblocks.renderer.helper.slope.oblique.HelperCorner;
import com.carpentersblocks.renderer.helper.slope.oblique.HelperOblWedge;
import com.carpentersblocks.renderer.helper.slope.oblique.HelperOblique;
import com.carpentersblocks.renderer.helper.slope.oblique.HelperPrism;
import com.carpentersblocks.renderer.helper.slope.orthogonal.HelperOrthoWedge;
import com.carpentersblocks.renderer.helper.slope.orthogonal.HelperTriangle;
import com.carpentersblocks.util.BlockProperties;
import com.carpentersblocks.util.registry.IconRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class BlockHandlerCarpentersSlope extends BlockHandlerSloped {
/** Currently rendering slope. */
private int slopeID;
/* Lightness values. */
private float LIGHTNESS_XYNN = 0.6F;
private float LIGHTNESS_XYPN = 0.55F;
private float LIGHTNESS_ZYNN = 0.7F;
private float LIGHTNESS_ZYPN = 0.65F;
private float LIGHTNESS_XYNP = 0.85F;
private float LIGHTNESS_XYPP = 0.8F;
private float LIGHTNESS_ZYNP = 0.95F;
private float LIGHTNESS_ZYPP = 0.9F;
private float LIGHTNESS_XZPP = 0.7F;
private float LIGHTNESS_XYZPPP = 0.9F;
private float LIGHTNESS_XYZPNP = 0.65F;
/* Render Ids used for RenderHelper designation. */
private final int NORMAL_YN = 0;
private final int NORMAL_YP = 1;
private final int NORMAL_ZN = 2;
private final int NORMAL_ZP = 3;
private final int NORMAL_XN = 4;
private final int NORMAL_XP = 5;
private final int TRIANGLE_XZNN = 6;
private final int TRIANGLE_XZNP = 7;
private final int TRIANGLE_XZPP = 8;
private final int TRIANGLE_XZPN = 9;
private final int TRIANGLE_ZXNP = 10;
private final int TRIANGLE_ZXNN = 11;
private final int TRIANGLE_ZXPN = 12;
private final int TRIANGLE_ZXPP = 13;
private final int WEDGE_YN = 14;
private final int WEDGE_YP = 15;
private final int WEDGE_SLOPED_ZN = 16;
private final int WEDGE_ZN = 17;
private final int WEDGE_SLOPED_ZP = 18;
private final int WEDGE_ZP = 19;
private final int WEDGE_SLOPED_XN = 20;
private final int WEDGE_XN = 21;
private final int WEDGE_SLOPED_XP = 22;
private final int WEDGE_XP = 23;
private final int WEDGE_CORNER_SLOPED_ZN = 24;
private final int WEDGE_CORNER_SLOPED_ZP = 25;
private final int WEDGE_CORNER_SLOPED_XN = 26;
private final int WEDGE_CORNER_SLOPED_XP = 27;
private final int OBL_INT_YN = 28;
private final int OBL_INT_YP = 29;
private final int OBL_EXT_LEFT_YP = 30;
private final int OBL_EXT_RIGHT_YP = 31;
private final int OBL_EXT_LEFT_YN = 32;
private final int OBL_EXT_RIGHT_YN = 33;
private final int PRISM_YZNN = 34;
private final int PRISM_YZNP = 35;
private final int PRISM_YXNN = 36;
private final int PRISM_YXNP = 37;
private final int PRISM_YZPN = 38;
private final int PRISM_YZPP = 39;
private final int PRISM_YXPN = 40;
private final int PRISM_YXPP = 41;
private final int PRISM_NORTH_XN = 42;
private final int PRISM_NORTH_XP = 43;
private final int PRISM_SOUTH_XN = 44;
private final int PRISM_SOUTH_XP = 45;
private final int PRISM_WEST_ZN = 46;
private final int PRISM_WEST_ZP = 47;
private final int PRISM_EAST_ZN = 48;
private final int PRISM_EAST_ZP = 49;
private final int PRISM_WEDGE_ZN = 50;
private final int PRISM_WEDGE_ZP = 51;
private final int PRISM_WEDGE_XN = 52;
private final int PRISM_WEDGE_XP = 53;
@Override
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderBlocks)
{
Tessellator tessellator = Tessellator.instance;
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
IIcon icon = renderBlocks.getIconSafe(((BlockCoverable)block).getIcon());
renderBlocks.setRenderBounds(0, 0, 0, 1.0D, 1.0D, 1.0D);
switch (metadata) {
case BlockCarpentersSlope.META_PRISM_SLOPE:
tessellator.startDrawing(GL11.GL_TRIANGLES);
tessellator.setNormal(-1.0F, 0.0F, 0.0F);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
HelperTriangle.renderFaceXNegZNeg(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
HelperTriangle.renderFaceXNegZPos(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(0.0F, 0.5F, -1.0F);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D);
HelperPrism.renderWestPointSlopeZNeg(renderBlocks, 0.0D, 0.0D, 0.0D, IconRegistry.icon_uncovered_quartered);
tessellator.setNormal(0.0F, 0.5F, 1.0F);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D);
HelperPrism.renderWestPointSlopeZPos(renderBlocks, 0.0D, 0.0D, 0.0D, IconRegistry.icon_uncovered_quartered);
tessellator.draw();
renderBlocks.setRenderBounds(0, 0, 0, 1.0D, 1.0D, 1.0D);
// Do not break here, render the wedge below as well.
case BlockCarpentersSlope.META_WEDGE:
tessellator.startDrawing(GL11.GL_TRIANGLES);
tessellator.setNormal(0.0F, 0.0F, -1.0F);
HelperOrthoWedge.renderFaceZNeg(renderBlocks, Slope.ID_WEDGE_POS_W, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(0.0F, 0.0F, 1.0F);
HelperOrthoWedge.renderFaceZPos(renderBlocks, Slope.ID_WEDGE_POS_W, 0.0D, 0.0D, 0.0D, icon);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1.0F, 0.0F);
RenderHelper.renderFaceYNeg(renderBlocks, 0.0D, 0.0D, 0.0D, block.getIcon(0, 16));
tessellator.setNormal(1.0F, 0.0F, 0.0F);
RenderHelper.renderFaceXPos(renderBlocks, 0.0D, 0.0D, 0.0D, block.getIcon(2, 16));
tessellator.setNormal(-1.0F, 0.5F, 0.0F);
HelperOblWedge.renderSlopeXNeg(renderBlocks, Slope.ID_WEDGE_POS_W, 0.0D, 0.0D, 0.0D, icon);
break;
case BlockCarpentersSlope.META_OBLIQUE_INT:
tessellator.startDrawing(GL11.GL_TRIANGLES);
tessellator.setNormal(0.0F, 1.0F, 0.0F);
HelperOrthoWedge.renderFaceYPos(renderBlocks, Slope.ID_OBL_INT_POS_SW, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(0.0F, 0.0F, 1.0F);
HelperOrthoWedge.renderFaceZPos(renderBlocks, Slope.ID_OBL_INT_POS_SW, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(-1.0F, 0.0F, 0.0F);
HelperOrthoWedge.renderFaceXNeg(renderBlocks, Slope.ID_OBL_INT_POS_SW, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(-1.0F, 0.5F, 1.0F);
HelperOblique.renderIntObliqueYPos(renderBlocks, Slope.ID_OBL_INT_POS_SW, 0.0D, 0.0D, 0.0D, IconRegistry.icon_uncovered_oblique_pos);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, 0.0F, -1.0F);
RenderHelper.renderFaceZNeg(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(1.0F, 0.0F, 0.0F);
RenderHelper.renderFaceXPos(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(0.0F, -1.0F, 0.0F);
RenderHelper.renderFaceYNeg(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
break;
case BlockCarpentersSlope.META_OBLIQUE_EXT:
tessellator.startDrawing(GL11.GL_TRIANGLES);
tessellator.setNormal(0.0F, -1.0F, 0.0F);
HelperOrthoWedge.renderFaceYNeg(renderBlocks, Slope.ID_OBL_EXT_POS_SW, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(0.0F, 0.0F, 1.0F);
HelperOrthoWedge.renderFaceZNeg(renderBlocks, Slope.ID_OBL_EXT_POS_SW, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(1.0F, 0.0F, 0.0F);
HelperOrthoWedge.renderFaceXPos(renderBlocks, Slope.ID_OBL_EXT_POS_SW, 0.0D, 0.0D, 0.0D, icon);
tessellator.setNormal(-1.0F, 0.5F, 1.0F);
HelperOblique.renderExtObliqueYPosLeft(renderBlocks, Slope.ID_OBL_EXT_POS_SW, 0.0D, 0.0D, 0.0D, IconRegistry.icon_uncovered_oblique_pos);
HelperOblique.renderExtObliqueYPosRight(renderBlocks, Slope.ID_OBL_EXT_POS_SW, 0.0D, 0.0D, 0.0D, IconRegistry.icon_uncovered_oblique_pos);
break;
case BlockCarpentersSlope.META_PRISM:
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D);
tessellator.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
tessellator.setNormal(-1.0F, 0.5F, 0.0F);
HelperPrism.renderSlopeYPosZNeg(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
tessellator.setNormal(1.0F, 0.5F, 0.0F);
HelperPrism.renderSlopeYPosZPos(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 1.0D);
tessellator.setNormal(0.0F, 0.5F, -1.0F);
HelperPrism.renderSlopeYPosXNeg(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D);
tessellator.setNormal(0.0F, 0.5F, 1.0F);
HelperPrism.renderSlopeYPosXPos(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setNormal(0.0F, -1.0F, 0.0F);
RenderHelper.renderFaceYNeg(renderBlocks, 0.0D, 0.0D, 0.0D, icon);
break;
default:
return;
}
tessellator.draw();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
}
private boolean forceFullFrame = false;
@Override
/**
* Override to provide custom icons.
*/
protected IIcon getUniqueIcon(ItemStack itemStack, int side, IIcon icon)
{
if (isSideSloped)
{
Block block = BlockProperties.toBlock(itemStack);
Slope slope = Slope.getSlope(TE);
int metadata = itemStack.getItemDamage();
if (!TE.hasAttribute(TE.ATTR_COVER[6])) {
switch (slope.type) {
case OBLIQUE_EXT:
case OBLIQUE_INT:
icon = slope.isPositive ? IconRegistry.icon_uncovered_oblique_pos : IconRegistry.icon_uncovered_oblique_neg;
break;
case PRISM:
case PRISM_1P:
case PRISM_2P:
case PRISM_3P:
case PRISM_4P:
case PRISM_WEDGE:
if (forceFullFrame) {
icon = IconRegistry.icon_uncovered_full;
} else {
icon = IconRegistry.icon_uncovered_quartered;
}
break;
default:
break;
}
} else {
/* For directional blocks, make sure sloped icons match regardless of side. */
if (BlockProperties.blockRotates(itemStack)) {
if (metadata % 8 == 0) {
icon = block.getIcon(slope.isPositive ? 1 : 0, metadata);
} else {
icon = block.getIcon(2, metadata);
}
} else if (block instanceof BlockDirectional && !slope.type.equals(Type.WEDGE)) {
icon = block.getBlockTextureFromSide(1);
}
/* Grass-type blocks have unique top faces that we must force on positive sloped sides. */
if (slope.isPositive) {
if (block.getMaterial().equals(Material.grass)) {
icon = block.getIcon(1, metadata);
}
}
}
}
return icon;
}
@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:
RenderHelper.renderFaceZNeg(renderBlocks, x, y, z, icon);
break;
case NORMAL_ZP:
RenderHelper.renderFaceZPos(renderBlocks, x, y, z, icon);
break;
case NORMAL_XN:
RenderHelper.renderFaceXNeg(renderBlocks, x, y, z, icon);
break;
case NORMAL_XP:
RenderHelper.renderFaceXPos(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_XZNN:
HelperTriangle.renderFaceXNegZNeg(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_XZNP:
HelperTriangle.renderFaceXNegZPos(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_XZPP:
HelperTriangle.renderFaceXPosZPos(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_XZPN:
HelperTriangle.renderFaceXPosZNeg(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_ZXNP:
HelperTriangle.renderFaceZNegXPos(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_ZXNN:
HelperTriangle.renderFaceZNegXNeg(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_ZXPN:
HelperTriangle.renderFaceZPosXNeg(renderBlocks, x, y, z, icon);
break;
case TRIANGLE_ZXPP:
HelperTriangle.renderFaceZPosXPos(renderBlocks, x, y, z, icon);
break;
case WEDGE_YN:
HelperOrthoWedge.renderFaceYNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_YP:
HelperOrthoWedge.renderFaceYPos(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_SLOPED_ZN:
HelperOblWedge.renderSlopeZNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_ZN:
HelperOrthoWedge.renderFaceZNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_SLOPED_ZP:
HelperOblWedge.renderSlopeZPos(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_ZP:
HelperOrthoWedge.renderFaceZPos(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_SLOPED_XN:
HelperOblWedge.renderSlopeXNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_XN:
HelperOrthoWedge.renderFaceXNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_SLOPED_XP:
HelperOblWedge.renderSlopeXPos(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_XP:
HelperOrthoWedge.renderFaceXPos(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_CORNER_SLOPED_ZN:
HelperCorner.renderSlopeZNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_CORNER_SLOPED_ZP:
HelperCorner.renderSlopeZPos(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_CORNER_SLOPED_XN:
HelperCorner.renderSlopeXNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case WEDGE_CORNER_SLOPED_XP:
HelperCorner.renderSlopeXPos(renderBlocks, slopeID, x, y, z, icon);
break;
case OBL_INT_YN:
HelperOblique.renderIntObliqueYNeg(renderBlocks, slopeID, x, y, z, icon);
break;
case OBL_INT_YP:
HelperOblique.renderIntObliqueYPos(renderBlocks, slopeID, x, y, z, icon);
break;
case OBL_EXT_LEFT_YP:
HelperOblique.renderExtObliqueYPosLeft(renderBlocks, slopeID, x, y, z, icon);
break;
case OBL_EXT_RIGHT_YP:
HelperOblique.renderExtObliqueYPosRight(renderBlocks, slopeID, x, y, z, icon);
break;
case OBL_EXT_LEFT_YN:
HelperOblique.renderExtObliqueYNegLeft(renderBlocks, slopeID, x, y, z, icon);
break;
case OBL_EXT_RIGHT_YN:
HelperOblique.renderExtObliqueYNegRight(renderBlocks, slopeID, x, y, z, icon);
break;
case PRISM_YZNN:
HelperPrism.renderSlopeYNegZNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_YZNP:
HelperPrism.renderSlopeYNegZPos(renderBlocks, x, y, z, icon);
break;
case PRISM_YXNN:
HelperPrism.renderSlopeYNegXNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_YXNP:
HelperPrism.renderSlopeYNegXPos(renderBlocks, x, y, z, icon);
break;
case PRISM_YZPN:
HelperPrism.renderSlopeYPosZNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_YZPP:
HelperPrism.renderSlopeYPosZPos(renderBlocks, x, y, z, icon);
break;
case PRISM_YXPN:
HelperPrism.renderSlopeYPosXNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_YXPP:
HelperPrism.renderSlopeYPosXPos(renderBlocks, x, y, z, icon);
break;
case PRISM_NORTH_XN:
HelperPrism.renderNorthPointSlopeXNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_NORTH_XP:
HelperPrism.renderNorthPointSlopeXPos(renderBlocks, x, y, z, icon);
break;
case PRISM_SOUTH_XN:
HelperPrism.renderSouthPointSlopeXNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_SOUTH_XP:
HelperPrism.renderSouthPointSlopeXPos(renderBlocks, x, y, z, icon);
break;
case PRISM_WEST_ZN:
HelperPrism.renderWestPointSlopeZNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_WEST_ZP:
HelperPrism.renderWestPointSlopeZPos(renderBlocks, x, y, z, icon);
break;
case PRISM_EAST_ZN:
HelperPrism.renderEastPointSlopeZNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_EAST_ZP:
HelperPrism.renderEastPointSlopeZPos(renderBlocks, x, y, z, icon);
break;
case PRISM_WEDGE_ZN:
HelperPrism.renderWedgeSlopeZNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_WEDGE_ZP:
HelperPrism.renderWedgeSlopeZPos(renderBlocks, x, y, z, icon);
break;
case PRISM_WEDGE_XN:
HelperPrism.renderWedgeSlopeXNeg(renderBlocks, x, y, z, icon);
break;
case PRISM_WEDGE_XP:
HelperPrism.renderWedgeSlopeXPos(renderBlocks, x, y, z, icon);
break;
}
}
/**
* Renders slope manually.
*/
public void renderSlope(ItemStack itemStack, Slope slope, int x, int y, int z, boolean ignoreSideRenderChecks)
{
slopeID = slope.slopeID;
renderBlocks.enableAO = getEnableAO(itemStack);
/* Render sloped faces. */
isSideSloped = true;
switch (slope.getPrimaryType()) {
case WEDGE_SIDE:
prepareHorizontalWedge(itemStack, slope, x, y, z);
break;
case WEDGE:
prepareVerticalWedge(itemStack, slope, x, y, z);
break;
case WEDGE_INT:
prepareWedgeIntCorner(itemStack, slope, x, y, z);
break;
case WEDGE_EXT:
prepareWedgeExtCorner(itemStack, slope, x, y, z);
break;
case OBLIQUE_INT:
prepareObliqueIntCorner(itemStack, slope, x, y, z);
break;
case OBLIQUE_EXT:
prepareObliqueExtCorner(itemStack, slope, x, y, z);
break;
case PRISM:
preparePrism(itemStack, slope, x, y, z);
break;
case PRISM_WEDGE:
preparePrismWedge(itemStack, slope, x, y, z);
break;
default:
break;
}
isSideSloped = false;
lightingHelper.clearLightnessOverride();
/* Render non-sloped faces. */
if (slope.hasSide(ForgeDirection.DOWN) && (ignoreSideRenderChecks || srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y - 1, z, DOWN))) {
prepareFaceYNeg(itemStack, slope, x, y, z);
}
if (slope.hasSide(ForgeDirection.UP) && (ignoreSideRenderChecks || srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y + 1, z, UP))) {
prepareFaceYPos(itemStack, slope, x, y, z);
}
if (slope.hasSide(ForgeDirection.NORTH) && (ignoreSideRenderChecks || srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y, z - 1, NORTH))) {
prepareFaceZNeg(itemStack, slope, x, y, z);
}
if (slope.hasSide(ForgeDirection.SOUTH) && (ignoreSideRenderChecks || srcBlock.shouldSideBeRendered(TE.getWorldObj(), x, y, z + 1, SOUTH))) {
prepareFaceZPos(itemStack, slope, x, y, z);
}
if (slope.hasSide(ForgeDirection.WEST) && (ignoreSideRenderChecks || srcBlock.shouldSideBeRendered(TE.getWorldObj(), x - 1, y, z, WEST))) {
prepareFaceXNeg(itemStack, slope, x, y, z);
}
if (slope.hasSide(ForgeDirection.EAST) && (ignoreSideRenderChecks || srcBlock.shouldSideBeRendered(TE.getWorldObj(), x + 1, y, z, EAST))) {
prepareFaceXPos(itemStack, slope, x, y, z);
}
VertexHelper.startDrawing(GL11.GL_QUADS);
renderBlocks.enableAO = false;
}
@Override
/**
* Renders slope.
*/
public void renderBaseBlock(ItemStack itemStack, int x, int y, int z)
{
Slope slope = Slope.getSlope(TE);
renderSlope(itemStack, slope, x, y, z, false);
}
@Override
protected boolean isPositiveFace(int side)
{
return super.isPositiveFace(side) || isSideSloped && Slope.getSlope(TE).isPositive;
}
/**
* Will set lighting and render prism sloped faces.
*/
private void preparePrism(ItemStack itemStack, Slope slope, int x, int y, int z)
{
int POINT_N = 0;
int POINT_S = 1;
int POINT_W = 2;
int POINT_E = 3;
List<Integer> pieceList = new ArrayList<Integer>();
/* Add prism pieces. */
if (slope.facings.contains(ForgeDirection.NORTH)) {
pieceList.add(POINT_N);
}
if (slope.facings.contains(ForgeDirection.SOUTH)) {
pieceList.add(POINT_S);
}
if (slope.facings.contains(ForgeDirection.WEST)) {
pieceList.add(POINT_W);
}
if (slope.facings.contains(ForgeDirection.EAST)) {
pieceList.add(POINT_E);
}
/* Begin rendering sloped pieces. */
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
if (pieceList.contains(POINT_N)) {
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_W, x, y, z);
setIDAndRender(itemStack, PRISM_NORTH_XN, x, y, z, WEST);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_E, x, y, z);
setIDAndRender(itemStack, PRISM_NORTH_XP, x, y, z, EAST);
} else {
if (slope.isPositive) {
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_N, x, y, z);
setIDAndRender(itemStack, PRISM_YZPN, x, y, z, NORTH);
} else {
renderBlocks.setRenderBounds(0.0D, 0.5D, 0.0D, 1.0D, 1.0D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_NEG_N, x, y, z);
setIDAndRender(itemStack, PRISM_YZNN, x, y, z, NORTH);
}
}
if (pieceList.contains(POINT_S)) {
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_W, x, y, z);
setIDAndRender(itemStack, PRISM_SOUTH_XN, x, y, z, WEST);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_E, x, y, z);
setIDAndRender(itemStack, PRISM_SOUTH_XP, x, y, z, EAST);
} else {
if (slope.isPositive) {
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_S, x, y, z);
setIDAndRender(itemStack, PRISM_YZPP, x, y, z, SOUTH);
} else {
renderBlocks.setRenderBounds(0.0D, 0.5D, 0.5D, 1.0D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_NEG_S, x, y, z);
setIDAndRender(itemStack, PRISM_YZNP, x, y, z, SOUTH);
}
}
if (pieceList.contains(POINT_W)) {
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_N, x, y, z);
setIDAndRender(itemStack, PRISM_WEST_ZN, x, y, z, NORTH);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_S, x, y, z);
setIDAndRender(itemStack, PRISM_WEST_ZP, x, y, z, SOUTH);
} else {
if (slope.isPositive) {
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_W, x, y, z);
setIDAndRender(itemStack, PRISM_YXPN, x, y, z, WEST);
} else {
renderBlocks.setRenderBounds(0.0D, 0.5D, 0.0D, 0.5D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_NEG_W, x, y, z);
setIDAndRender(itemStack, PRISM_YXNN, x, y, z, WEST);
}
}
if (pieceList.contains(POINT_E)) {
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_N, x, y, z);
setIDAndRender(itemStack, PRISM_EAST_ZN, x, y, z, NORTH);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_S, x, y, z);
setIDAndRender(itemStack, PRISM_EAST_ZP, x, y, z, SOUTH);
} else {
if (slope.isPositive) {
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_E, x, y, z);
setIDAndRender(itemStack, PRISM_YXPP, x, y, z, EAST);
} else {
renderBlocks.setRenderBounds(0.5D, 0.5D, 0.0D, 1.0D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_NEG_E, x, y, z);
setIDAndRender(itemStack, PRISM_YXNP, x, y, z, EAST);
}
}
}
/**
* Will set lighting and render prism wedge sloped faces.
*/
private void preparePrismWedge(ItemStack itemStack, Slope slope, int x, int y, int z)
{
switch (slope.slopeID) {
case Slope.ID_PRISM_WEDGE_POS_N:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_W, x, y, z);
setIDAndRender(itemStack, PRISM_NORTH_XN, x, y, z, WEST);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_E, x, y, z);
setIDAndRender(itemStack, PRISM_NORTH_XP, x, y, z, EAST);
VertexHelper.startDrawing(GL11.GL_QUADS);
forceFullFrame = true;
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_N, x, y, z);
setIDAndRender(itemStack, PRISM_WEDGE_ZN, x, y, z, NORTH);
forceFullFrame = false;
break;
case Slope.ID_PRISM_WEDGE_POS_S:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_W, x, y, z);
setIDAndRender(itemStack, PRISM_SOUTH_XN, x, y, z, WEST);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_E, x, y, z);
setIDAndRender(itemStack, PRISM_SOUTH_XP, x, y, z, EAST);
VertexHelper.startDrawing(GL11.GL_QUADS);
forceFullFrame = true;
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_S, x, y, z);
setIDAndRender(itemStack, PRISM_WEDGE_ZP, x, y, z, SOUTH);
forceFullFrame = false;
break;
case Slope.ID_PRISM_WEDGE_POS_W:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_N, x, y, z);
setIDAndRender(itemStack, PRISM_WEST_ZN, x, y, z, NORTH);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 0.5D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_S, x, y, z);
setIDAndRender(itemStack, PRISM_WEST_ZP, x, y, z, SOUTH);
VertexHelper.startDrawing(GL11.GL_QUADS);
forceFullFrame = true;
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_W, x, y, z);
setIDAndRender(itemStack, PRISM_WEDGE_XN, x, y, z, WEST);
forceFullFrame = false;
break;
case Slope.ID_PRISM_WEDGE_POS_E:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_N, x, y, z);
setIDAndRender(itemStack, PRISM_EAST_ZN, x, y, z, NORTH);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_S, x, y, z);
setIDAndRender(itemStack, PRISM_EAST_ZP, x, y, z, SOUTH);
VertexHelper.startDrawing(GL11.GL_QUADS);
forceFullFrame = true;
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
setWedgeLighting(itemStack, Slope.WEDGE_POS_E, x, y, z);
setIDAndRender(itemStack, PRISM_WEDGE_XP, x, y, z, EAST);
forceFullFrame = false;
break;
}
}
/**
* Will set lighting for wedge sloped faces. Many slope types
* make use of these lighting parameters in addition to wedges.
*/
private void setWedgeLighting(ItemStack itemStack, Slope slope, int x, int y, int z)
{
prepareLighting(itemStack, x, y, z);
World world = TE.getWorldObj();
boolean solid_YP = world.isSideSolid(TE.xCoord, TE.yCoord + 1, TE.zCoord, ForgeDirection.DOWN);
boolean solid_YN = world.isSideSolid(TE.xCoord, TE.yCoord - 1, TE.zCoord, ForgeDirection.UP);
switch (slope.slopeID) {
case Slope.ID_WEDGE_NW:
lightingHelper.setLightnessOverride(LIGHTNESS_XZPP);
if (renderBlocks.enableAO) {
lightingHelper.ao[TOP_LEFT] = offset_ao[WEST][TOP_LEFT];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[WEST][BOTTOM_LEFT];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[NORTH][BOTTOM_RIGHT];
lightingHelper.ao[TOP_RIGHT] = offset_ao[NORTH][TOP_RIGHT];
renderBlocks.brightnessTopLeft = offset_brightness[WEST][TOP_LEFT];
renderBlocks.brightnessBottomLeft = offset_brightness[WEST][BOTTOM_LEFT];
renderBlocks.brightnessBottomRight = offset_brightness[NORTH][BOTTOM_RIGHT];
renderBlocks.brightnessTopRight = offset_brightness[NORTH][TOP_RIGHT];
}
break;
case Slope.ID_WEDGE_NE:
lightingHelper.setLightnessOverride(LIGHTNESS_XZPP);
if (renderBlocks.enableAO) {
lightingHelper.ao[TOP_LEFT] = offset_ao[NORTH][TOP_LEFT];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[NORTH][BOTTOM_LEFT];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[EAST][BOTTOM_RIGHT];
lightingHelper.ao[TOP_RIGHT] = offset_ao[EAST][TOP_RIGHT];
renderBlocks.brightnessTopLeft = offset_brightness[NORTH][TOP_LEFT];
renderBlocks.brightnessBottomLeft = offset_brightness[NORTH][BOTTOM_LEFT];
renderBlocks.brightnessBottomRight = offset_brightness[EAST][BOTTOM_RIGHT];
renderBlocks.brightnessTopRight = offset_brightness[EAST][TOP_RIGHT];
}
break;
case Slope.ID_WEDGE_SW:
lightingHelper.setLightnessOverride(LIGHTNESS_XZPP);
if (renderBlocks.enableAO) {
lightingHelper.ao[TOP_LEFT] = offset_ao[SOUTH][TOP_LEFT];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[SOUTH][BOTTOM_LEFT];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[WEST][BOTTOM_RIGHT];
lightingHelper.ao[TOP_RIGHT] = offset_ao[WEST][TOP_RIGHT];
renderBlocks.brightnessTopLeft = offset_brightness[SOUTH][TOP_LEFT];
renderBlocks.brightnessBottomLeft = offset_brightness[SOUTH][BOTTOM_LEFT];
renderBlocks.brightnessBottomRight = offset_brightness[WEST][BOTTOM_RIGHT];
renderBlocks.brightnessTopRight = offset_brightness[WEST][TOP_RIGHT];
}
break;
case Slope.ID_WEDGE_SE:
lightingHelper.setLightnessOverride(LIGHTNESS_XZPP);
if (renderBlocks.enableAO) {
lightingHelper.ao[TOP_LEFT] = offset_ao[EAST][TOP_LEFT];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[EAST][BOTTOM_LEFT];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[SOUTH][BOTTOM_RIGHT];
lightingHelper.ao[TOP_RIGHT] = offset_ao[SOUTH][TOP_RIGHT];
renderBlocks.brightnessTopLeft = offset_brightness[EAST][TOP_LEFT];
renderBlocks.brightnessBottomLeft = offset_brightness[EAST][BOTTOM_LEFT];
renderBlocks.brightnessBottomRight = offset_brightness[SOUTH][BOTTOM_RIGHT];
renderBlocks.brightnessTopRight = offset_brightness[SOUTH][TOP_RIGHT];
}
break;
case Slope.ID_WEDGE_NEG_N:
lightingHelper.setLightnessOverride(LIGHTNESS_ZYNN);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = solid_YN ? offset_ao[UP][SOUTHEAST] : ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = offset_ao[DOWN][NORTHEAST];
lightingHelper.ao[NORTHWEST] = offset_ao[DOWN][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = solid_YN ? offset_ao[UP][SOUTHWEST] : ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YN ? offset_brightness[UP][SOUTHEAST] : brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = solid_YN ? offset_brightness[UP][SOUTHWEST] : brightness[DOWN][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_POS_N:
lightingHelper.setLightnessOverride(LIGHTNESS_ZYNP);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = solid_YP ? offset_ao[DOWN][SOUTHEAST] : ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = offset_ao[UP][NORTHEAST];
lightingHelper.ao[NORTHWEST] = offset_ao[UP][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = solid_YP ? offset_ao[DOWN][SOUTHWEST] : ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][SOUTHEAST] : brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][NORTHWEST];
renderBlocks.brightnessTopRight = solid_YP ? offset_brightness[DOWN][SOUTHWEST] : brightness[UP][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_NEG_S:
lightingHelper.setLightnessOverride(LIGHTNESS_ZYPN);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = offset_ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = solid_YN ? offset_ao[UP][NORTHEAST] : ao[DOWN][NORTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YN ? offset_ao[UP][NORTHWEST] : ao[DOWN][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = offset_ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][NORTHEAST] : brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomRight = solid_YN ? offset_brightness[UP][NORTHWEST] : brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_POS_S:
lightingHelper.setLightnessOverride(LIGHTNESS_ZYPP);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = offset_ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = solid_YP ? offset_ao[DOWN][NORTHEAST] : ao[UP][NORTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YP ? offset_ao[DOWN][NORTHWEST] : ao[UP][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = offset_ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YP ? offset_brightness[DOWN][NORTHEAST] : brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = solid_YP ? offset_brightness[DOWN][NORTHWEST] : brightness[UP][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[UP][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_NEG_W:
lightingHelper.setLightnessOverride(LIGHTNESS_XYNN);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = solid_YN ? offset_ao[UP][SOUTHEAST] : ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = solid_YN ? offset_ao[UP][NORTHEAST] : ao[DOWN][NORTHEAST];
lightingHelper.ao[NORTHWEST] = offset_ao[DOWN][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = offset_ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YN ? offset_brightness[UP][SOUTHEAST] : brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][NORTHEAST] : brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_POS_W:
lightingHelper.setLightnessOverride(LIGHTNESS_XYNP);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = solid_YP ? offset_ao[DOWN][SOUTHEAST] : ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = solid_YP ? offset_ao[DOWN][NORTHEAST] : ao[UP][NORTHEAST];
lightingHelper.ao[NORTHWEST] = offset_ao[UP][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = offset_ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][SOUTHEAST] : brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YP ? offset_brightness[DOWN][NORTHEAST] : brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[UP][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_NEG_E:
lightingHelper.setLightnessOverride(LIGHTNESS_XYPN);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = offset_ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = offset_ao[DOWN][NORTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YN ? offset_ao[UP][NORTHWEST] : ao[DOWN][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = solid_YN ? offset_ao[UP][SOUTHWEST] : ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomRight = solid_YN ? offset_brightness[UP][NORTHWEST] : brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = solid_YN ? offset_brightness[UP][SOUTHWEST] : brightness[DOWN][SOUTHWEST];
}
break;
case Slope.ID_WEDGE_POS_E:
lightingHelper.setLightnessOverride(LIGHTNESS_XYPP);
if (renderBlocks.enableAO) {
lightingHelper.ao[SOUTHEAST] = offset_ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = offset_ao[UP][NORTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YP ? offset_ao[DOWN][NORTHWEST] : ao[UP][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = solid_YP ? offset_ao[DOWN][SOUTHWEST] : ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = solid_YP ? offset_brightness[DOWN][NORTHWEST] : brightness[UP][NORTHWEST];
renderBlocks.brightnessTopRight = solid_YP ? offset_brightness[DOWN][SOUTHWEST] : brightness[UP][SOUTHWEST];
}
break;
}
}
private void prepareHorizontalWedge(ItemStack itemStack, Slope slope, int x, int y, int z)
{
VertexHelper.startDrawing(GL11.GL_QUADS);
setWedgeLighting(itemStack, slope, x, y, z);
if (slope.facings.contains(ForgeDirection.NORTH)) {
setIDAndRender(itemStack, WEDGE_SLOPED_ZN, x, y, z, EAST);
} else {
setIDAndRender(itemStack, WEDGE_SLOPED_ZP, x, y, z, WEST);
}
}
private void prepareVerticalWedge(ItemStack itemStack, Slope slope, int x, int y, int z)
{
VertexHelper.startDrawing(GL11.GL_QUADS);
setWedgeLighting(itemStack, slope, x, y, z);
if (slope.facings.contains(ForgeDirection.NORTH)) {
setIDAndRender(itemStack, WEDGE_SLOPED_ZN, x, y, z, NORTH);
} else if (slope.facings.contains(ForgeDirection.SOUTH)) {
setIDAndRender(itemStack, WEDGE_SLOPED_ZP, x, y, z, SOUTH);
} else if (slope.facings.contains(ForgeDirection.WEST)) {
setIDAndRender(itemStack, WEDGE_SLOPED_XN, x, y, z, WEST);
} else { // ForgeDirection.EAST
setIDAndRender(itemStack, WEDGE_SLOPED_XP, x, y, z, EAST);
}
}
private void prepareWedgeIntCorner(ItemStack itemStack, Slope slope, int x, int y, int z)
{
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
Slope slopeX = slope.facings.contains(ForgeDirection.WEST) ? slope.isPositive ? Slope.WEDGE_POS_W : Slope.WEDGE_NEG_W : slope.isPositive ? Slope.WEDGE_POS_E : Slope.WEDGE_NEG_E;
setWedgeLighting(itemStack, slopeX, x, y, z);
if (slopeX.facings.contains(ForgeDirection.WEST)) {
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_XN, x, y, z, WEST);
} else { // ForgeDirection.EAST
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_XP, x, y, z, EAST);
}
Slope slopeZ = slope.facings.contains(ForgeDirection.NORTH) ? slope.isPositive ? Slope.WEDGE_POS_N : Slope.WEDGE_NEG_N : slope.isPositive ? Slope.WEDGE_POS_S : Slope.WEDGE_NEG_S;
setWedgeLighting(itemStack, slopeZ, x, y, z);
if (slope.facings.contains(ForgeDirection.NORTH)) {
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_ZN, x, y, z, NORTH);
} else {
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_ZP, x, y, z, SOUTH);
}
}
private void prepareWedgeExtCorner(ItemStack itemStack, Slope slope, int x, int y, int z)
{
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
Slope slopeX = slope.facings.contains(ForgeDirection.WEST) ? slope.isPositive ? Slope.WEDGE_POS_W : Slope.WEDGE_NEG_W : slope.isPositive ? Slope.WEDGE_POS_E : Slope.WEDGE_NEG_E;
setWedgeLighting(itemStack, slopeX, x, y, z);
if (slopeX.facings.contains(ForgeDirection.WEST)) {
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_XN, x, y, z, WEST);
} else { // ForgeDirection.EAST
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_XP, x, y, z, EAST);
}
Slope slopeZ = slope.facings.contains(ForgeDirection.NORTH) ? slope.isPositive ? Slope.WEDGE_POS_N : Slope.WEDGE_NEG_N : slope.isPositive ? Slope.WEDGE_POS_S : Slope.WEDGE_NEG_S;
setWedgeLighting(itemStack, slopeZ, x, y, z);
if (slope.facings.contains(ForgeDirection.NORTH)) {
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_ZN, x, y, z, NORTH);
} else {
setIDAndRender(itemStack, WEDGE_CORNER_SLOPED_ZP, x, y, z, SOUTH);
}
}
private void prepareObliqueIntCorner(ItemStack itemStack, Slope slope, int x, int y, int z)
{
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
prepareLighting(itemStack, x, y, z);
World world = TE.getWorldObj();
boolean solid_YP = world.isSideSolid(TE.xCoord, TE.yCoord + 1, TE.zCoord, ForgeDirection.DOWN);
boolean solid_YN = world.isSideSolid(TE.xCoord, TE.yCoord - 1, TE.zCoord, ForgeDirection.UP);
if (renderBlocks.enableAO) {
switch (slope.slopeID) {
case Slope.ID_OBL_INT_NEG_NW:
lightingHelper.ao[NORTHEAST] = solid_YN ? offset_ao[UP][NORTHEAST] : ao[DOWN][NORTHEAST];
lightingHelper.ao[NORTHWEST] = offset_ao[DOWN][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = solid_YN ? offset_ao[UP][SOUTHWEST] : ao[DOWN][SOUTHWEST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][NORTHEAST] : brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = solid_YN ? offset_brightness[UP][SOUTHWEST] : brightness[DOWN][SOUTHWEST];
break;
case Slope.ID_OBL_INT_NEG_NE:
lightingHelper.ao[SOUTHEAST] = solid_YN ? offset_ao[UP][SOUTHEAST] : ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = offset_ao[DOWN][NORTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YN ? offset_ao[UP][NORTHWEST] : ao[DOWN][NORTHWEST];
renderBlocks.brightnessTopLeft = solid_YN ? offset_brightness[UP][SOUTHEAST] : brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomRight = solid_YN ? offset_brightness[UP][NORTHWEST] : brightness[DOWN][NORTHWEST];
break;
case Slope.ID_OBL_INT_NEG_SW:
lightingHelper.ao[SOUTHEAST] = solid_YN ? offset_ao[UP][SOUTHEAST] : ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YN ? offset_ao[UP][NORTHWEST] : ao[DOWN][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = offset_ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YN ? offset_brightness[UP][SOUTHEAST] : brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomRight = solid_YN ? offset_brightness[UP][NORTHWEST] : brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][SOUTHWEST];
break;
case Slope.ID_OBL_INT_NEG_SE:
lightingHelper.ao[SOUTHEAST] = offset_ao[DOWN][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = solid_YN ? offset_ao[UP][NORTHEAST] : ao[DOWN][NORTHEAST];
lightingHelper.ao[SOUTHWEST] = solid_YN ? offset_ao[UP][SOUTHWEST] : ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][NORTHEAST] : brightness[DOWN][NORTHEAST];
renderBlocks.brightnessTopRight = solid_YN ? offset_brightness[UP][SOUTHWEST] : brightness[DOWN][SOUTHWEST];
break;
case Slope.ID_OBL_INT_POS_NW:
lightingHelper.ao[NORTHEAST] = solid_YP ? offset_ao[DOWN][NORTHEAST] : ao[UP][NORTHEAST];
lightingHelper.ao[NORTHWEST] = offset_ao[UP][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = solid_YP ? offset_ao[DOWN][SOUTHWEST] : ao[UP][SOUTHWEST];
renderBlocks.brightnessBottomLeft = solid_YP ? offset_brightness[DOWN][NORTHEAST] : brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][NORTHWEST];
renderBlocks.brightnessTopRight = solid_YP ? offset_brightness[DOWN][SOUTHWEST] : brightness[UP][SOUTHWEST];
break;
case Slope.ID_OBL_INT_POS_NE:
lightingHelper.ao[SOUTHEAST] = solid_YP ? offset_ao[DOWN][SOUTHEAST] : ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = offset_ao[UP][NORTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YP ? offset_ao[DOWN][NORTHWEST] : ao[UP][NORTHWEST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][SOUTHEAST] : brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = solid_YP ? offset_brightness[DOWN][NORTHWEST] : brightness[UP][NORTHWEST];
break;
case Slope.ID_OBL_INT_POS_SW:
lightingHelper.ao[SOUTHEAST] = solid_YP ? offset_ao[DOWN][SOUTHEAST] : ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHWEST] = solid_YP ? offset_ao[DOWN][NORTHWEST] : ao[UP][NORTHWEST];
lightingHelper.ao[SOUTHWEST] = offset_ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][SOUTHEAST] : brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomRight = solid_YP ? offset_brightness[DOWN][NORTHWEST] : brightness[UP][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[UP][SOUTHWEST];
break;
case Slope.ID_OBL_INT_POS_SE:
lightingHelper.ao[SOUTHEAST] = offset_ao[UP][SOUTHEAST];
lightingHelper.ao[NORTHEAST] = solid_YP ? offset_ao[DOWN][NORTHEAST] : ao[UP][NORTHEAST];
lightingHelper.ao[SOUTHWEST] = solid_YP ? offset_ao[DOWN][SOUTHWEST] : ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YP ? offset_brightness[DOWN][NORTHEAST] : brightness[UP][NORTHEAST];
renderBlocks.brightnessTopRight = solid_YP ? offset_brightness[DOWN][SOUTHWEST] : brightness[UP][SOUTHWEST];
break;
}
}
if (slope.isPositive) {
lightingHelper.setLightnessOverride(LIGHTNESS_XYZPPP);
setIDAndRender(itemStack, OBL_INT_YP, x, y, z, NORTH);
} else {
lightingHelper.setLightnessOverride(LIGHTNESS_XYZPNP);
setIDAndRender(itemStack, OBL_INT_YN, x, y, z, NORTH);
}
}
private void prepareObliqueExtCorner(ItemStack itemStack, Slope slope, int x, int y, int z)
{
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
prepareLighting(itemStack, x, y, z);
World world = TE.getWorldObj();
boolean solid_YP = world.isSideSolid(TE.xCoord, TE.yCoord + 1, TE.zCoord, ForgeDirection.DOWN);
boolean solid_YN = world.isSideSolid(TE.xCoord, TE.yCoord - 1, TE.zCoord, ForgeDirection.UP);
if (renderBlocks.enableAO) {
switch (slope.slopeID) {
case Slope.ID_OBL_EXT_NEG_NW:
lightingHelper.ao[TOP_LEFT] = offset_ao[DOWN][NORTHEAST];
lightingHelper.ao[BOTTOM_LEFT] = solid_YN ? offset_ao[UP][SOUTHEAST] : ao[DOWN][SOUTHEAST];
lightingHelper.ao[TOP_RIGHT] = offset_ao[DOWN][SOUTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][NORTHEAST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][SOUTHEAST] : brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][SOUTHWEST];
break;
case Slope.ID_OBL_EXT_NEG_NE:
lightingHelper.ao[TOP_LEFT] = offset_ao[DOWN][SOUTHEAST];
lightingHelper.ao[BOTTOM_LEFT] = solid_YN ? offset_ao[UP][SOUTHWEST] : ao[DOWN][SOUTHWEST];
lightingHelper.ao[TOP_RIGHT] = offset_ao[DOWN][NORTHWEST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][SOUTHEAST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][SOUTHWEST] : brightness[DOWN][SOUTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][NORTHWEST];
break;
case Slope.ID_OBL_EXT_NEG_SW:
lightingHelper.ao[TOP_LEFT] = offset_ao[DOWN][NORTHWEST];
lightingHelper.ao[BOTTOM_LEFT] = solid_YN ? offset_ao[UP][NORTHEAST] : ao[DOWN][NORTHEAST];
lightingHelper.ao[TOP_RIGHT] = offset_ao[DOWN][SOUTHEAST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][NORTHWEST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][NORTHEAST] : brightness[DOWN][NORTHEAST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][SOUTHEAST];
break;
case Slope.ID_OBL_EXT_NEG_SE:
lightingHelper.ao[TOP_LEFT] = offset_ao[DOWN][SOUTHWEST];
lightingHelper.ao[BOTTOM_LEFT] = solid_YN ? offset_ao[UP][NORTHWEST] : ao[DOWN][NORTHWEST];
lightingHelper.ao[TOP_RIGHT] = offset_ao[DOWN][NORTHEAST];
renderBlocks.brightnessTopLeft = offset_brightness[DOWN][SOUTHWEST];
renderBlocks.brightnessBottomLeft = solid_YN ? offset_brightness[UP][NORTHWEST] : brightness[DOWN][NORTHWEST];
renderBlocks.brightnessTopRight = offset_brightness[DOWN][NORTHEAST];
break;
case Slope.ID_OBL_EXT_POS_NW:
lightingHelper.ao[TOP_LEFT] = solid_YP ? offset_ao[DOWN][SOUTHEAST] : ao[UP][SOUTHEAST];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[UP][NORTHEAST];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[UP][SOUTHWEST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][SOUTHEAST] : brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][SOUTHWEST];
break;
case Slope.ID_OBL_EXT_POS_NE:
lightingHelper.ao[TOP_LEFT] = solid_YP ? offset_ao[DOWN][SOUTHWEST] : ao[UP][SOUTHWEST];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[UP][SOUTHEAST];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[UP][NORTHWEST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][SOUTHWEST] : brightness[UP][SOUTHWEST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][SOUTHEAST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][NORTHWEST];
break;
case Slope.ID_OBL_EXT_POS_SW:
lightingHelper.ao[TOP_LEFT] = solid_YP ? offset_ao[DOWN][NORTHEAST] : ao[UP][NORTHEAST];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[UP][NORTHWEST];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[UP][SOUTHEAST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][NORTHEAST] : brightness[UP][NORTHEAST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][NORTHWEST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][SOUTHEAST];
break;
case Slope.ID_OBL_EXT_POS_SE:
lightingHelper.ao[TOP_LEFT] = solid_YP ? offset_ao[DOWN][NORTHWEST] : ao[UP][NORTHWEST];
lightingHelper.ao[BOTTOM_LEFT] = offset_ao[UP][SOUTHWEST];
lightingHelper.ao[BOTTOM_RIGHT] = offset_ao[UP][NORTHEAST];
renderBlocks.brightnessTopLeft = solid_YP ? offset_brightness[DOWN][NORTHWEST] : brightness[UP][NORTHWEST];
renderBlocks.brightnessBottomLeft = offset_brightness[UP][SOUTHWEST];
renderBlocks.brightnessBottomRight = offset_brightness[UP][NORTHEAST];
break;
}
}
if (slope.isPositive) {
lightingHelper.setLightnessOverride(LIGHTNESS_XYZPPP);
setIDAndRender(itemStack, OBL_EXT_LEFT_YP, x, y, z, NORTH);
setIDAndRender(itemStack, OBL_EXT_RIGHT_YP, x, y, z, NORTH);
} else {
lightingHelper.setLightnessOverride(LIGHTNESS_XYZPNP);
setIDAndRender(itemStack, OBL_EXT_LEFT_YN, x, y, z, NORTH);
setIDAndRender(itemStack, OBL_EXT_RIGHT_YN, x, y, z, NORTH);
}
}
/**
* Prepare bottom face.
*/
private void prepareFaceYNeg(ItemStack itemStack, Slope slope, int x, int y, int z)
{
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
lightingHelper.setupLightingYNeg(itemStack, x, y, z);
switch (slope.getFace(ForgeDirection.DOWN)) {
case WEDGE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
setIDAndRender(itemStack, WEDGE_YN, x, y, z, DOWN);
break;
default:
VertexHelper.startDrawing(GL11.GL_QUADS);
setIDAndRender(itemStack, NORMAL_YN, x, y, z, DOWN);
break;
}
}
/**
* Prepare top face.
*/
private void prepareFaceYPos(ItemStack itemStack, Slope slope, int x, int y, int z)
{
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
lightingHelper.setupLightingYPos(itemStack, x, y, z);
switch (slope.getFace(ForgeDirection.UP)) {
case WEDGE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
setIDAndRender(itemStack, WEDGE_YP, x, y, z, UP);
break;
default:
VertexHelper.startDrawing(GL11.GL_QUADS);
setIDAndRender(itemStack, NORMAL_YP, x, y, z, UP);
break;
}
}
/**
* Prepare North face.
*/
private void prepareFaceZNeg(ItemStack itemStack, Slope slope, int x, int y, int z)
{
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
lightingHelper.setupLightingZNeg(itemStack, x, y, z);
switch (slope.getFace(ForgeDirection.NORTH)) {
case WEDGE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
setIDAndRender(itemStack, WEDGE_ZN, x, y, z, NORTH);
break;
case TRIANGLE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D);
lightingHelper.setupLightingZNeg(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_ZXNP, x, y, z, NORTH);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 1.0D);
lightingHelper.setupLightingZNeg(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_ZXNN, x, y, z, NORTH);
break;
default:
VertexHelper.startDrawing(GL11.GL_QUADS);
setIDAndRender(itemStack, NORMAL_ZN, x, y, z, NORTH);
break;
}
}
/**
* Prepare South face.
*/
private void prepareFaceZPos(ItemStack itemStack, Slope slope, int x, int y, int z)
{
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
lightingHelper.setupLightingZPos(itemStack, x, y, z);
switch (slope.getFace(ForgeDirection.SOUTH)) {
case WEDGE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
setIDAndRender(itemStack, WEDGE_ZP, x, y, z, SOUTH);
break;
case TRIANGLE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 0.5D, 0.5D, 1.0D);
lightingHelper.setupLightingZPos(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_ZXPN, x, y, z, SOUTH);
renderBlocks.setRenderBounds(0.5D, 0.0D, 0.0D, 1.0D, 0.5D, 1.0D);
lightingHelper.setupLightingZPos(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_ZXPP, x, y, z, SOUTH);
break;
default:
VertexHelper.startDrawing(GL11.GL_QUADS);
setIDAndRender(itemStack, NORMAL_ZP, x, y, z, SOUTH);
break;
}
}
/**
* Prepare West face.
*/
private void prepareFaceXNeg(ItemStack itemStack, Slope slope, int x, int y, int z)
{
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
lightingHelper.setupLightingXNeg(itemStack, x, y, z);
switch (slope.getFace(ForgeDirection.WEST)) {
case WEDGE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
setIDAndRender(itemStack, WEDGE_XN, x, y, z, WEST);
break;
case TRIANGLE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
lightingHelper.setupLightingXNeg(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_XZNN, x, y, z, WEST);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
lightingHelper.setupLightingXNeg(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_XZNP, x, y, z, WEST);
break;
default:
VertexHelper.startDrawing(GL11.GL_QUADS);
setIDAndRender(itemStack, NORMAL_XN, x, y, z, WEST);
break;
}
}
/**
* Prepare East face.
*/
private void prepareFaceXPos(ItemStack itemStack, Slope slope, int x, int y, int z)
{
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D);
lightingHelper.setupLightingXPos(itemStack, x, y, z);
switch (slope.getFace(ForgeDirection.EAST)) {
case WEDGE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
setIDAndRender(itemStack, WEDGE_XP, x, y, z, EAST);
break;
case TRIANGLE:
VertexHelper.startDrawing(GL11.GL_TRIANGLES);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D);
lightingHelper.setupLightingXPos(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_XZPP, x, y, z, EAST);
renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.5D, 0.5D);
lightingHelper.setupLightingXPos(itemStack, x, y, z);
setIDAndRender(itemStack, TRIANGLE_XZPN, x, y, z, EAST);
break;
default:
VertexHelper.startDrawing(GL11.GL_QUADS);
setIDAndRender(itemStack, NORMAL_XP, x, y, z, EAST);
break;
}
}
}