diff options
Diffstat (limited to 'src/main/java/gregtech/common/render/GT_RenderedTexture.java')
-rw-r--r-- | src/main/java/gregtech/common/render/GT_RenderedTexture.java | 383 |
1 files changed, 271 insertions, 112 deletions
diff --git a/src/main/java/gregtech/common/render/GT_RenderedTexture.java b/src/main/java/gregtech/common/render/GT_RenderedTexture.java index 9e76634385..135ebf28c6 100644 --- a/src/main/java/gregtech/common/render/GT_RenderedTexture.java +++ b/src/main/java/gregtech/common/render/GT_RenderedTexture.java @@ -1,55 +1,92 @@ package gregtech.common.render; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; +import gregtech.GT_Mod; import gregtech.api.interfaces.IColorModulationContainer; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.LightingHelper; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.IconFlipped; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import static gregtech.api.util.LightingHelper.MAX_BRIGHTNESS; + class GT_RenderedTexture implements ITexture, IColorModulationContainer { protected final IIconContainer mIconContainer; private final short[] mRGBa; + private final boolean glow; + private final boolean stdOrient; + private final boolean useExtFacing; - GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha) { + GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha, boolean glow, boolean stdOrient, boolean extFacing) { if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); mIconContainer = aIcon; mRGBa = aRGBa; + this.glow = glow; + this.stdOrient = stdOrient; + this.useExtFacing = extFacing; } @Override public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - aRenderer.field_152631_f = true; // TODO: Uncomment this once all addons have migrated to the new Texture API //startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingXPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.EAST.ordinal(), mRGBa); - aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getIcon()); + if (glow) { + if (aRenderer.useInventoryTint) + return; // TODO: Remove this once all addons have migrated to the new Texture API + if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return; + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingXPos(aBlock, aX, aY, aZ).setupColor(ForgeDirection.EAST.ordinal(), mRGBa); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); if (mIconContainer.getOverlayIcon() != null) { lighting.setupColor(ForgeDirection.EAST.ordinal(), 0xffffff); - aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); } + aRenderer.enableAO = enableAO; // TODO: Uncomment this once all addons have migrated to the new Texture API //draw(aRenderer); - aRenderer.field_152631_f = false; } @Override public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { // TODO: Uncomment this once all addons have migrated to the new Texture API //startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingXNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.WEST.ordinal(), mRGBa); - aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon()); + if (glow) { + if (aRenderer.useInventoryTint) + return; // TODO: Remove this once all addons have migrated to the new Texture API + if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return; + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingXNeg(aBlock, aX, aY, aZ).setupColor(ForgeDirection.WEST.ordinal(), mRGBa); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); if (mIconContainer.getOverlayIcon() != null) { lighting.setupColor(ForgeDirection.WEST.ordinal(), 0xffffff); - aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); } + aRenderer.enableAO = enableAO; // TODO: Uncomment this once all addons have migrated to the new Texture API //draw(aRenderer); } @@ -58,14 +95,24 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer { public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { // TODO: Uncomment this once all addons have migrated to the new Texture API //startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingYPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.UP.ordinal(), mRGBa); - aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getIcon()); + if (glow) { + if (aRenderer.useInventoryTint) + return; // TODO: Remove this once all addons have migrated to the new Texture API + if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return; + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingYPos(aBlock, aX, aY, aZ).setupColor(ForgeDirection.UP.ordinal(), mRGBa); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); if (mIconContainer.getOverlayIcon() != null) { lighting.setupColor(ForgeDirection.UP.ordinal(), 0xffffff); - aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); } + aRenderer.enableAO = enableAO; // TODO: Uncomment this once all addons have migrated to the new Texture API //draw(aRenderer); } @@ -74,96 +121,24 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer { public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { // TODO: Uncomment this once all addons have migrated to the new Texture API //startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); - final Tessellator tessellator = Tessellator.instance; - IIcon aIcon = mIconContainer.getIcon(); - - float minU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D); - float maxU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D); - float minV = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); - float maxV = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); - - if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { - minU = 16.0F - aIcon.getMaxU(); - maxU = 16.0F - aIcon.getMinU(); - } - - if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { - minV = aIcon.getMinV(); - maxV = aIcon.getMaxV(); - } - - double minX = aX + aRenderer.renderMinX; - double maxX = aX + aRenderer.renderMaxX; - double minY = aY + aRenderer.renderMinY; - double minZ = aZ + aRenderer.renderMinZ; - double maxZ = aZ + aRenderer.renderMaxZ; - + final boolean enableAO = aRenderer.enableAO; LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingYNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.DOWN.ordinal(), mRGBa); - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - } else { - tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV); - tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV); - tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); - } - tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV); - + if (glow) { + if (aRenderer.useInventoryTint) + return; // TODO: Remove this once all addons have migrated to the new Texture API + if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return; + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingYNeg(aBlock, aX, aY, aZ).setupColor(ForgeDirection.DOWN.ordinal(), mRGBa); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); if (mIconContainer.getOverlayIcon() != null) { - minU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMaxX) * 16.0D); - maxU = aIcon.getInterpolatedU((1.0D - aRenderer.renderMinX) * 16.0D); - minV = aIcon.getInterpolatedV(aRenderer.renderMinZ * 16.0D); - maxV = aIcon.getInterpolatedV(aRenderer.renderMaxZ * 16.0D); - - if (aRenderer.renderMinX < 0.0D || aRenderer.renderMaxX > 1.0D) { - minU = 16.0F - aIcon.getMaxU(); - maxU = 16.0F - aIcon.getMinU(); - } - - if (aRenderer.renderMinZ < 0.0D || aRenderer.renderMaxZ > 1.0D) { - minV = aIcon.getMinV(); - maxV = aIcon.getMaxV(); - } - - minX = aX + (float)aRenderer.renderMinX; - maxX = aX + (float)aRenderer.renderMaxX; - minY = aY + (float)aRenderer.renderMinY; - minZ = aZ + (float)aRenderer.renderMinZ; - maxZ = aZ + (float)aRenderer.renderMaxZ; - - lighting.setupColor(ForgeDirection.DOWN.ordinal(), 0xffffff); - - if (aRenderer.enableAO) { - tessellator.setColorOpaque_F(aRenderer.colorRedTopLeft, aRenderer.colorGreenTopLeft, aRenderer.colorBlueTopLeft); - tessellator.setBrightness(aRenderer.brightnessTopLeft); - tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomLeft, aRenderer.colorGreenBottomLeft, aRenderer.colorBlueBottomLeft); - tessellator.setBrightness(aRenderer.brightnessBottomLeft); - tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV); - tessellator.setColorOpaque_F(aRenderer.colorRedBottomRight, aRenderer.colorGreenBottomRight, aRenderer.colorBlueBottomRight); - tessellator.setBrightness(aRenderer.brightnessBottomRight); - tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); - tessellator.setColorOpaque_F(aRenderer.colorRedTopRight, aRenderer.colorGreenTopRight, aRenderer.colorBlueTopRight); - tessellator.setBrightness(aRenderer.brightnessTopRight); - } else { - tessellator.addVertexWithUV(minX, minY, maxZ, maxU, maxV); - tessellator.addVertexWithUV(minX, minY, minZ, maxU, minV); - tessellator.addVertexWithUV(maxX, minY, minZ, minU, minV); - } - tessellator.addVertexWithUV(maxX, minY, maxZ, minU, maxV); + Tessellator.instance.setColorRGBA(255, 255, 255, 255); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); } + aRenderer.enableAO = enableAO; // TODO: Uncomment this once all addons have migrated to the new Texture API //draw(aRenderer); } @@ -172,14 +147,24 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer { public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { // TODO: Uncomment this once all addons have migrated to the new Texture API //startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); + final boolean enableAO = aRenderer.enableAO; LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingZPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.SOUTH.ordinal(), mRGBa); - aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getIcon()); + if (glow) { + if (aRenderer.useInventoryTint) + return; // TODO: Remove this once all addons have migrated to the new Texture API + if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return; + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingZPos(aBlock, aX, aY, aZ).setupColor(ForgeDirection.SOUTH.ordinal(), mRGBa); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); if (mIconContainer.getOverlayIcon() != null) { lighting.setupColor(ForgeDirection.SOUTH.ordinal(), 0xffffff); - aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); } + aRenderer.enableAO = enableAO; // TODO: Uncomment this once all addons have migrated to the new Texture API //draw(aRenderer); } @@ -188,18 +173,26 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer { public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { // TODO: Uncomment this once all addons have migrated to the new Texture API //startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); - aRenderer.field_152631_f = true; + final boolean enableAO = aRenderer.enableAO; LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingZNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.NORTH.ordinal(), mRGBa); - aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon()); + if (glow) { + if (aRenderer.useInventoryTint) + return; // TODO: Remove this once all addons have migrated to the new Texture API + if (!GT_Mod.gregtechproxy.mRenderGlowTextures) return; + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingZNeg(aBlock, aX, aY, aZ).setupColor(ForgeDirection.NORTH.ordinal(), mRGBa); + ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); if (mIconContainer.getOverlayIcon() != null) { lighting.setupColor(ForgeDirection.NORTH.ordinal(), 0xffffff); - aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); } + aRenderer.enableAO = enableAO; // TODO: Uncomment this once all addons have migrated to the new Texture API //draw(aRenderer); - aRenderer.field_152631_f = false; } @Override @@ -211,4 +204,170 @@ class GT_RenderedTexture implements ITexture, IColorModulationContainer { public boolean isValidTexture() { return mIconContainer != null; } + + /** + * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) { + + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE: + aRenderer.uvRotateBottom = 2; + break; + case CLOCKWISE: + aRenderer.uvRotateBottom = 1; + break; + case UPSIDE_DOWN: + aRenderer.uvRotateBottom = 3; + break; + default: + aRenderer.uvRotateBottom = 0; + break; + } + + aRenderer.renderFaceYNeg(Blocks.air, x, y, z, new IconFlipped(icon, !stdOrient, false)); + aRenderer.uvRotateBottom = 0; + } + + /** + * Renders the given texture to the top face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) { + + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE: + aRenderer.uvRotateTop = 2; + break; + case CLOCKWISE: + aRenderer.uvRotateTop = 1; + break; + case UPSIDE_DOWN: + aRenderer.uvRotateTop = 3; + break; + default: + aRenderer.uvRotateTop = 0; + break; + } + + aRenderer.renderFaceYPos(Blocks.air, x, y, z, icon); + aRenderer.uvRotateTop = 0; + } + + /** + * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) { + aRenderer.field_152631_f = true; + // **NOT A BUG**: aRenderer.uvRotateEast REALLY CONTROLS THE ROTATION OF THE NORTH SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE: + aRenderer.uvRotateEast = 2; + break; + case CLOCKWISE: + aRenderer.uvRotateEast = 1; + break; + case UPSIDE_DOWN: + aRenderer.uvRotateEast = 3; + break; + default: + aRenderer.uvRotateEast = 0; + break; + } + + aRenderer.renderFaceZNeg(Blocks.air, x, y, z, icon); + aRenderer.uvRotateEast = 0; + aRenderer.field_152631_f = false; + } + + /** + * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) { + // **NOT A BUG**: aRenderer.uvRotateWest REALLY CONTROLS THE ROTATION OF THE SOUTH SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE: + aRenderer.uvRotateWest = 2; + break; + case CLOCKWISE: + aRenderer.uvRotateWest = 1; + break; + case UPSIDE_DOWN: + aRenderer.uvRotateWest = 3; + break; + default: + aRenderer.uvRotateWest = 0; + break; + } + + aRenderer.renderFaceZPos(Blocks.air, x, y, z, icon); + aRenderer.uvRotateWest = 0; + } + + /** + * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) { + // **NOT A BUG**: aRenderer.uvRotateNorth REALLY CONTROLS THE ROTATION OF THE WEST SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE: + aRenderer.uvRotateNorth = 2; + break; + case CLOCKWISE: + aRenderer.uvRotateNorth = 1; + break; + case UPSIDE_DOWN: + aRenderer.uvRotateNorth = 3; + break; + default: + aRenderer.uvRotateNorth = 0; + break; + } + + aRenderer.renderFaceXNeg(Blocks.air, x, y, z, icon); + aRenderer.uvRotateNorth = 0; + } + + /** + * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, ExtendedFacing extendedFacing) { + aRenderer.field_152631_f = true; + // **NOT A BUG**: aRenderer.uvRotateSouth REALLY CONTROLS THE ROTATION OF THE EAST SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE: + aRenderer.uvRotateSouth = 2; + break; + case CLOCKWISE: + aRenderer.uvRotateSouth = 1; + break; + case UPSIDE_DOWN: + aRenderer.uvRotateSouth = 3; + break; + default: + aRenderer.uvRotateSouth = 0; + break; + } + + aRenderer.renderFaceXPos(Blocks.air, x, y, z, icon); + aRenderer.uvRotateSouth = 0; + aRenderer.field_152631_f = false; + } + + private ExtendedFacing getExtendedFacing(int x, int y, int z) { + if (stdOrient) return ExtendedFacing.DEFAULT; + World w = Minecraft.getMinecraft().theWorld; + if (w == null) return ExtendedFacing.DEFAULT; + TileEntity te = w.getTileEntity(x, y, z); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IAlignmentProvider) { + return ((IAlignmentProvider) meta).getAlignment().getExtendedFacing(); + } else if (meta != null) { + return ExtendedFacing.of(ForgeDirection.getOrientation(meta.getBaseMetaTileEntity().getFrontFacing())); + } + } else if (te instanceof IAlignmentProvider) { + return ((IAlignmentProvider) te).getAlignment().getExtendedFacing(); + } + return ExtendedFacing.DEFAULT; + } } |