aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/render')
-rw-r--r--src/main/java/gregtech/common/render/GT_CapeRenderer.java148
-rw-r--r--src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java112
-rw-r--r--src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java118
-rw-r--r--src/main/java/gregtech/common/render/GT_FlaskRenderer.java71
-rw-r--r--src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java98
-rw-r--r--src/main/java/gregtech/common/render/GT_IconFlipped.java91
-rw-r--r--src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java130
-rw-r--r--src/main/java/gregtech/common/render/GT_MultiTexture.java69
-rw-r--r--src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java181
-rw-r--r--src/main/java/gregtech/common/render/GT_PollutionRenderer.java251
-rw-r--r--src/main/java/gregtech/common/render/GT_RenderDrone.java93
-rw-r--r--src/main/java/gregtech/common/render/GT_RenderUtil.java141
-rw-r--r--src/main/java/gregtech/common/render/GT_RenderedTexture.java395
-rw-r--r--src/main/java/gregtech/common/render/GT_Renderer_Block.java747
-rw-r--r--src/main/java/gregtech/common/render/GT_Renderer_Entity_Arrow.java23
-rw-r--r--src/main/java/gregtech/common/render/GT_SidedTexture.java78
-rw-r--r--src/main/java/gregtech/common/render/GT_TextureBase.java31
-rw-r--r--src/main/java/gregtech/common/render/GT_TextureBuilder.java151
-rw-r--r--src/main/java/gregtech/common/render/IRenderedBlock.java114
-rw-r--r--src/main/java/gregtech/common/render/IRenderedBlockSideCheck.java15
-rw-r--r--src/main/java/gregtech/common/render/MultiTileBasicRender.java10
-rw-r--r--src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java109
-rw-r--r--src/main/java/gregtech/common/render/items/GT_DataStick_Renderer.java42
-rw-r--r--src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java166
-rw-r--r--src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java130
-rw-r--r--src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java85
-rw-r--r--src/main/java/gregtech/common/render/items/GaiaSpiritRenderer.java27
-rw-r--r--src/main/java/gregtech/common/render/items/InfinityRenderer.java139
-rw-r--r--src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java145
-rw-r--r--src/main/java/gregtech/common/render/items/UniversiumRenderer.java197
30 files changed, 4107 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/render/GT_CapeRenderer.java b/src/main/java/gregtech/common/render/GT_CapeRenderer.java
new file mode 100644
index 0000000000..ec9ef2880c
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_CapeRenderer.java
@@ -0,0 +1,148 @@
+package gregtech.common.render;
+
+import java.util.Collection;
+
+import net.minecraft.client.entity.AbstractClientPlayer;
+import net.minecraft.client.model.ModelBiped;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.entity.RenderPlayer;
+import net.minecraft.potion.Potion;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.client.event.RenderPlayerEvent;
+
+import org.lwjgl.opengl.GL11;
+
+import gregtech.api.enums.GT_Values;
+import gregtech.api.util.GT_Log;
+import gregtech.api.util.GT_Utility;
+
+public class GT_CapeRenderer extends RenderPlayer {
+
+ private final ResourceLocation[] mCapes = { new ResourceLocation("gregtech:textures/BrainTechCape.png"),
+ new ResourceLocation("gregtech:textures/GregTechCape.png"),
+ new ResourceLocation("gregtech:textures/MrBrainCape.png"),
+ new ResourceLocation("gregtech:textures/GregoriusCape.png"),
+ new ResourceLocation("gregtech:textures/DonorCape.png"), new ResourceLocation("gregtech:textures/DevCape.png"),
+ new ResourceLocation("gregtech:textures/Steam.png"), new ResourceLocation("gregtech:textures/Titanium.png"),
+ new ResourceLocation("gregtech:textures/Neutronium.png"),
+ new ResourceLocation("gregtech:textures/Stargate.png") };
+ private final Collection<String> mCapeList;
+
+ public GT_CapeRenderer(Collection<String> aCapeList) {
+ this.mCapeList = aCapeList;
+ setRenderManager(RenderManager.instance);
+ }
+
+ public void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) {
+ AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.entityPlayer;
+ if (GT_Utility.getFullInvisibility(aPlayer)) {
+ aEvent.setCanceled(true);
+ return;
+ }
+ float aPartialTicks = aEvent.partialRenderTick;
+ if (aPlayer.isInvisible()) {
+ return;
+ }
+ if (GT_Utility.getPotion(aPlayer, Potion.invisibility.id)) {
+ return;
+ }
+ try {
+ ResourceLocation tResource = aPlayer.getLocationCape();
+ if (aPlayer.getDisplayName()
+ .equalsIgnoreCase("Friedi4321")) {
+ tResource = this.mCapes[0];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase())) {
+ tResource = this.mCapes[1];
+ }
+ if (aPlayer.getDisplayName()
+ .equalsIgnoreCase("Mr_Brain")) {
+ tResource = this.mCapes[2];
+ }
+ if (aPlayer.getDisplayName()
+ .equalsIgnoreCase("GregoriusT")) {
+ tResource = this.mCapes[3];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase() + ":capedonor")) {
+ tResource = this.mCapes[4];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase() + ":capedev")) {
+ tResource = this.mCapes[5];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase() + ":cape_steam")) {
+ tResource = this.mCapes[6];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase() + ":cape_titanium")) {
+ tResource = this.mCapes[7];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase() + ":cape_neutronium")) {
+ tResource = this.mCapes[8];
+ }
+ if (this.mCapeList.contains(
+ aPlayer.getDisplayName()
+ .toLowerCase() + ":cape_stargate")) {
+ tResource = this.mCapes[9];
+ }
+
+ if ((tResource != null) && (!aPlayer.getHideCape())) {
+ bindTexture(tResource);
+ GL11.glPushMatrix();
+ GL11.glTranslatef(0.0F, 0.0F, 0.125F);
+ double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks
+ - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks);
+ double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks
+ - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks);
+ double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks
+ - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks);
+ float f6 = aPlayer.prevRenderYawOffset
+ + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks;
+ double d3 = MathHelper.sin(f6 * (float) Math.PI / 180.0F);
+ double d4 = -MathHelper.cos(f6 * (float) Math.PI / 180.0F);
+ float f7 = (float) d1 * 10.0F;
+ float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F;
+ float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F;
+ if (f7 < -6.0F) {
+ f7 = -6.0F;
+ }
+ if (f7 > 32.0F) {
+ f7 = 32.0F;
+ }
+ if (f8 < 0.0F) {
+ f8 = 0.0F;
+ }
+ float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks;
+ f7 += MathHelper.sin(
+ (aPlayer.prevDistanceWalkedModified
+ + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F)
+ * 32.0F
+ * f10;
+ if (aPlayer.isSneaking()) {
+ f7 += 25.0F;
+ }
+ GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F);
+ GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F);
+ GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
+ ((ModelBiped) this.mainModel).renderCloak(0.0625F);
+ GL11.glPopMatrix();
+ }
+ } catch (Throwable e) {
+ if (GT_Values.D1) {
+ e.printStackTrace(GT_Log.err);
+ }
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java b/src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java
new file mode 100644
index 0000000000..937c1a994f
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java
@@ -0,0 +1,112 @@
+package gregtech.common.render;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.interfaces.IBlockContainer;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.util.LightingHelper;
+
+public class GT_CopiedBlockTexture extends GT_TextureBase implements ITexture, IBlockContainer {
+
+ private final Block mBlock;
+ private final byte mSide, mMeta;
+
+ protected GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean allowAlpha) {
+ if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedBlockTexture");
+ mBlock = aBlock;
+ mSide = (byte) ordinalSide;
+ mMeta = (byte) aMeta;
+ }
+
+ @Override
+ public boolean isOldTexture() {
+ return false;
+ }
+
+ private IIcon getIcon(int ordinalSide) {
+ if (mSide == 6) return mBlock.getIcon(ordinalSide, mMeta);
+ return mBlock.getIcon(mSide, mMeta);
+ }
+
+ @Override
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ final IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal());
+ aRenderer.field_152631_f = true;
+ startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
+ new LightingHelper(aRenderer).setupLightingXPos(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.EAST, 0xffffff);
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ aRenderer.field_152631_f = false;
+ }
+
+ @Override
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal());
+ new LightingHelper(aRenderer).setupLightingXNeg(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.WEST, 0xffffff);
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.UP.ordinal());
+ new LightingHelper(aRenderer).setupLightingYPos(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.UP, 0xffffff);
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal());
+ new LightingHelper(aRenderer).setupLightingYNeg(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.DOWN, 0xffffff);
+ aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal());
+ new LightingHelper(aRenderer).setupLightingZPos(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.SOUTH, 0xffffff);
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal());
+ aRenderer.field_152631_f = true;
+ new LightingHelper(aRenderer).setupLightingZNeg(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.NORTH, 0xffffff);
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ aRenderer.field_152631_f = false;
+ }
+
+ @Override
+ public boolean isValidTexture() {
+ return mBlock != null;
+ }
+
+ @Override
+ public Block getBlock() {
+ return mBlock;
+ }
+
+ @Override
+ public byte getMeta() {
+ return mMeta;
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java b/src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java
new file mode 100644
index 0000000000..17fa9ac8ff
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java
@@ -0,0 +1,118 @@
+package gregtech.common.render;
+
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.RenderBlocks;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.common.util.ForgeDirection;
+
+import gregtech.api.interfaces.IBlockContainer;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.util.GT_RenderingWorld;
+import gregtech.api.util.LightingHelper;
+
+class GT_CopiedCTMBlockTexture extends GT_TextureBase implements ITexture, IBlockContainer {
+
+ private final Block mBlock;
+ private final byte mSide, mMeta;
+
+ GT_CopiedCTMBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean allowAlpha) {
+ if (aRGBa.length != 4)
+ throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedCTMBlockTexture");
+ mBlock = aBlock;
+ mSide = (byte) ordinalSide;
+ mMeta = (byte) aMeta;
+ }
+
+ @Override
+ public boolean isOldTexture() {
+ return false;
+ }
+
+ private IIcon getIcon(int ordinalSide, int aX, int aY, int aZ, RenderBlocks aRenderer) {
+ final int tSide = mSide == 6 ? ordinalSide : mSide;
+ return mBlock.getIcon(getBlockAccess(aRenderer), aX, aY, aZ, tSide);
+ }
+
+ private GT_RenderingWorld getBlockAccess(RenderBlocks aRenderer) {
+ return GT_RenderingWorld.getInstance(aRenderer.blockAccess);
+ }
+
+ @Override
+ public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ final IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal(), aX, aY, aZ, aRenderer);
+ aRenderer.field_152631_f = true;
+ startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f);
+ new LightingHelper(aRenderer).setupLightingXPos(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.EAST, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ));
+ aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ aRenderer.field_152631_f = false;
+ }
+
+ @Override
+ public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal(), aX, aY, aZ, aRenderer);
+ new LightingHelper(aRenderer).setupLightingXNeg(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.WEST, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ));
+ aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.UP.ordinal(), aX, aY, aZ, aRenderer);
+ new LightingHelper(aRenderer).setupLightingYPos(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.UP, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ));
+ aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal(), aX, aY, aZ, aRenderer);
+ new LightingHelper(aRenderer).setupLightingYNeg(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.DOWN, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ));
+ aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal(), aX, aY, aZ, aRenderer);
+ new LightingHelper(aRenderer).setupLightingZPos(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.SOUTH, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ));
+ aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ }
+
+ @Override
+ public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) {
+ startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f);
+ final IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal(), aX, aY, aZ, aRenderer);
+ aRenderer.field_152631_f = true;
+ new LightingHelper(aRenderer).setupLightingZNeg(aBlock, aX, aY, aZ)
+ .setupColor(ForgeDirection.NORTH, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ));
+ aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon);
+ draw(aRenderer);
+ aRenderer.field_152631_f = false;
+ }
+
+ @Override
+ public boolean isValidTexture() {
+ return mBlock != null;
+ }
+
+ @Override
+ public Block getBlock() {
+ return mBlock;
+ }
+
+ @Override
+ public byte getMeta() {
+ return mMeta;
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java
new file mode 100644
index 0000000000..addcb1cf70
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java
@@ -0,0 +1,71 @@
+package gregtech.common.render;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.texture.TextureMap;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.MinecraftForgeClient;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidStack;
+
+import org.lwjgl.opengl.GL11;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.ItemList;
+import gregtech.common.items.GT_VolumetricFlask;
+
+@SideOnly(Side.CLIENT)
+public final class GT_FlaskRenderer implements IItemRenderer {
+
+ public GT_FlaskRenderer() {
+ MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this);
+ }
+
+ @Override
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ return type != ItemRenderType.FIRST_PERSON_MAP;
+ }
+
+ @Override
+ public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
+ return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING
+ || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics);
+ }
+
+ @Override
+ public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
+ GT_VolumetricFlask cell = (GT_VolumetricFlask) item.getItem();
+ IIcon icon = item.getIconIndex();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GT_RenderUtil.applyStandardItemTransform(type);
+
+ FluidStack fs = cell != null ? cell.getFluid(item) : null;
+ if (fs != null) {
+ IIcon iconWindow = cell.iconWindow;
+ Fluid fluid = fs.getFluid();
+ IIcon fluidIcon = fluid.getIcon(fs);
+ int fluidColor = fluid.getColor(fs);
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE);
+ GT_RenderUtil.renderItem(type, iconWindow);
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glDepthFunc(GL11.GL_EQUAL);
+ GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor);
+ GT_RenderUtil.renderItem(type, fluidIcon);
+ GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1);
+ GL11.glDepthFunc(GL11.GL_LEQUAL);
+ }
+
+ Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GT_RenderUtil.renderItem(type, icon);
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_BLEND);
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java
new file mode 100644
index 0000000000..9a35f6bc57
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java
@@ -0,0 +1,98 @@
+package gregtech.common.render;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.client.MinecraftForgeClient;
+
+import org.lwjgl.opengl.GL11;
+
+import appeng.util.ReadableNumberConverter;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.common.items.GT_FluidDisplayItem;
+
+@SideOnly(Side.CLIENT)
+public class GT_FluidDisplayStackRenderer implements IItemRenderer {
+
+ public GT_FluidDisplayStackRenderer() {
+ MinecraftForgeClient.registerItemRenderer(ItemList.Display_Fluid.getItem(), this);
+ }
+
+ @Override
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ if (!item.hasTagCompound()) return false;
+ return type == ItemRenderType.INVENTORY;
+ }
+
+ @Override
+ public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
+ // not sure what this does.
+ return false;
+ }
+
+ @Override
+ public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
+ if (item == null || item.getItem() == null || !(item.getItem() instanceof GT_FluidDisplayItem)) return;
+
+ OpenGlHelper.glBlendFunc(770, 771, 1, 0);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+
+ Materials associatedFluidMaterial = Materials.get(item.stackTagCompound.getString("mFluidMaterialName"));
+ if (associatedFluidMaterial.renderer == null
+ || !associatedFluidMaterial.renderer.renderFluidDisplayItem(type, item, data)) {
+ IIcon icon = item.getItem()
+ .getIconFromDamage(item.getItemDamage());
+ Tessellator tess = Tessellator.instance;
+ tess.startDrawingQuads();
+ // draw a simple rectangle for the inventory icon
+ final float x_min = icon.getMinU();
+ final float x_max = icon.getMaxU();
+ final float y_min = icon.getMinV();
+ final float y_max = icon.getMaxV();
+ tess.addVertexWithUV(0, 16, 0, x_min, y_max);
+ tess.addVertexWithUV(16, 16, 0, x_max, y_max);
+ tess.addVertexWithUV(16, 0, 0, x_max, y_min);
+ tess.addVertexWithUV(0, 0, 0, x_min, y_min);
+ tess.draw();
+ }
+
+ if (item.getTagCompound() == null) {
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ return;
+ }
+
+ // Render Fluid amount text
+ long fluidAmount = item.getTagCompound()
+ .getLong("mFluidDisplayAmount");
+ if (fluidAmount > 0L && !item.getTagCompound()
+ .getBoolean("mHideStackSize")) {
+ String amountString;
+
+ if (fluidAmount < 10_000) {
+ amountString = "" + fluidAmount + "L";
+ } else {
+ amountString = ReadableNumberConverter.INSTANCE.toWideReadableForm(fluidAmount) + "L";
+ }
+
+ FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer;
+ float smallTextScale = fontRender.getUnicodeFlag() ? 3F / 4F : 1F / 2F;
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glPushMatrix();
+ GL11.glScalef(smallTextScale, smallTextScale, 1.0f);
+
+ fontRender
+ .drawString(amountString, 0, (int) (16 / smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true);
+ GL11.glPopMatrix();
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ }
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_IconFlipped.java b/src/main/java/gregtech/common/render/GT_IconFlipped.java
new file mode 100644
index 0000000000..8258e74ffa
--- /dev/null
+++ b/src/main/java/gregtech/common/render/GT_IconFlipped.java
@@ -0,0 +1,91 @@
+package gregtech.common.render;
+
+import net.minecraft.util.IIcon;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+
+@SideOnly(Side.CLIENT)
+public class GT_IconFlipped implements IIcon {
+
+ private final IIcon baseIcon;
+ private final boolean flipU;
+ private final boolean flipV;
+
+ public GT_IconFlipped(IIcon baseIcon, boolean flipU, boolean flipV) {
+ this.baseIcon = baseIcon;
+ this.flipU = flipU;
+ this.flipV = flipV;
+ }
+
+ /**
+ * Returns the width of the icon, in pixels.
+ */
+ @Override
+ public int getIconWidth() {
+ return this.baseIcon.getIconWidth();
+ }
+
+ /**
+ * Returns the height of the icon, in pixels.
+ */
+ @Override
+ public int getIconHeight() {
+ return this.baseIcon.getIconHeight();
+ }
+
+ /**
+ * Returns the minimum U coordinate to use when rendering with this icon.
+ */
+ @Override
+ public float getMinU() {
+ return this.flipU ? this.baseIcon.getMaxU() : this.baseIcon.getMinU();
+ }
+
+ /**
+ * Returns the maximum U coordinate to use when rendering with this icon.
+ */
+ @Override
+ public float getMaxU() {
+ return this.flipU ? this.baseIcon.getMinU() : this.baseIcon.getMaxU();
+ }
+
+ /**
+ * Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values.
+ */
+ @Override
+ public float getInterpolatedU(double p_94214_1_) {
+ final float f = this.getMaxU() - this.getMinU();
+ return this.getMinU() + f * ((float) p_94214_1_ / 16.0F);
+ }
+
+ /**
+ * Returns the minimum V coordinate to use when rendering with this icon.
+ */
+ @Override
+ public float getMinV() {
+ return this.flipV ? this.baseIcon.getMaxV() : this.baseIcon.getMinV();
+ }
+
+ /**
+ * Returns the maximum V coordinate to use when rendering with this icon.
+ */
+ @Override
+ public float getMaxV() {
+ return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMaxV();
+ }
+
+ /**
+ * Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values.
+ */
+ @Override
+ public float getInterpolatedV(double p_94207_1_) {
+ final float f = this.getMaxV() - this.getMinV();
+ return this.getMinV() + f * ((float) p_94207_1_ / 16.0F);
+ }
+
+ @Override
+ public String getIconName() {
+ return this.baseIcon.getIconName();
+ }
+}
diff --git a/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java b/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_R