aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render/items
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/render/items')
-rw-r--r--src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java112
-rw-r--r--src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java15
-rw-r--r--src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java13
-rw-r--r--src/main/java/gregtech/common/render/items/InfinityRenderer.java148
-rw-r--r--src/main/java/gregtech/common/render/items/UniversiumRenderer.java302
5 files changed, 590 insertions, 0 deletions
diff --git a/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java b/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java
new file mode 100644
index 0000000000..5a9cda6559
--- /dev/null
+++ b/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java
@@ -0,0 +1,112 @@
+package gregtech.common.render.items;
+
+import static gregtech.common.render.GT_RenderUtil.colorGTItem;
+
+import com.gtnewhorizons.modularui.api.math.Pos2d;
+import gregtech.api.enums.Textures;
+import gregtech.common.render.GT_RenderUtil;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL12;
+
+public class CosmicNeutroniumRenderer extends GT_GeneratedMaterial_Renderer {
+
+ // spotless:off
+ private static final Pos2d point0 = new Pos2d(0 - 10, 0 - 10);
+ private static final Pos2d point1 = new Pos2d(17 + 10, 0 - 10);
+ private static final Pos2d point2 = new Pos2d(17 + 10, 17 + 10);
+ private static final Pos2d point3 = new Pos2d(0 - 10, 17 + 10);
+ // spotless:on
+
+ private void drawHalo(ItemRenderType type) {
+ // Because when this class is instantiated, making this a static field will cause it to set to null.
+ final IIcon haloFuzzy = Textures.ItemIcons.HALO_FUZZY.getIcon();
+
+ if (haloFuzzy == null) {
+ return;
+ }
+
+ GL11.glPushMatrix();
+
+ // Ideally this magic haloColour number should scale depending on the # of transparent pixels,
+ // but I'm not sure how to determine this with OpenGL.
+ // This is from Avaritia code, but modified to untangle the interfaces.
+ int haloColour = 0x4DFFFFFF;
+ float ca = (float) (haloColour >> 24 & 255) / 255.0F;
+ float cr = (float) (0x99FFFFFF >> 16 & 255) / 255.0F;
+ float cg = (float) (0x99FFFFFF >> 8 & 255) / 255.0F;
+ float cb = (float) (0x99FFFFFF & 255) / 255.0F;
+ GL11.glColor4f(cr, cg, cb, ca);
+
+ // spotless:off
+ // For those following in my footsteps, this may be of use - Colen 25th dec 2022.
+ // http://greyminecraftcoder.blogspot.com/2013/08/the-tessellator.html
+
+ Tessellator t = Tessellator.instance;
+
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ t.startDrawingQuads();
+ t.addVertexWithUV(point0.x, point0.y, 0, haloFuzzy.getMinU(), haloFuzzy.getMinV());
+ t.addVertexWithUV(point3.x, point3.y, 0, haloFuzzy.getMinU(), haloFuzzy.getMaxV());
+ t.addVertexWithUV(point2.x, point2.y, 0, haloFuzzy.getMaxU(), haloFuzzy.getMaxV());
+ t.addVertexWithUV(point1.x, point1.y, 0, haloFuzzy.getMaxU(), haloFuzzy.getMinV());
+ t.draw();
+ }
+
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public void renderRegularItem(ItemRenderType type, ItemStack item, IIcon icon, boolean shouldModulateColor) {
+
+ RenderItem r = RenderItem.getInstance();
+
+ GL11.glPushMatrix();
+
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ }
+
+ drawHalo(type);
+
+ //spotless:on
+ {
+ // Draw actual cosmic Nt item.
+ GL11.glPushMatrix();
+
+ colorGTItem(item);
+
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ ItemRenderer.renderItemIn2D(
+ Tessellator.instance,
+ icon.getMaxU(),
+ icon.getMinV(),
+ icon.getMinU(),
+ icon.getMaxV(),
+ icon.getIconWidth(),
+ icon.getIconHeight(),
+ 0.0625F);
+ }
+ GL11.glPopMatrix();
+ }
+
+ // GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+
+ r.renderWithColor = true;
+
+ GL11.glPopMatrix();
+ }
+}
diff --git a/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java b/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java
index 6a2535559e..b9419caa28 100644
--- a/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java
+++ b/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java
@@ -29,6 +29,20 @@ public class GT_GeneratedMaterial_Renderer implements IItemRenderer {
return type == ItemRenderType.ENTITY;
}
+ /**
+ * Handle special fluid display rendering. Return false if does not need such kind of handling.
+ * Note: annotations should not be rendered here. Only render the fluid
+ * texture.
+ * Parameters are values passed from {@link IItemRenderer#renderItem(ItemRenderType, ItemStack, Object...)}
+ * verbatim. Do not modify the argument.
+ *
+ * While this is called, BLEND and ALPHA_TEST is on. It is expected that these remain enabled while exit.
+ * @return true if did special fluid display rendering. false otherwise.
+ */
+ public boolean renderFluidDisplayItem(ItemRenderType type, ItemStack aStack, Object... data) {
+ return false;
+ }
+
@Override
public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) {
short aMetaData = (short) aStack.getItemDamage();
@@ -55,6 +69,7 @@ public class GT_GeneratedMaterial_Renderer implements IItemRenderer {
if (tOverlay != null && aFluid != null && aFluid.getFluid() != null) {
IIcon fluidIcon = aFluid.getFluid().getIcon(aFluid);
if (fluidIcon != null) {
+ // Adds colour to a cells fluid. Does not colour full fluid icons as shown in NEI etc.
renderContainedFluid(type, aFluid, fluidIcon);
}
}
diff --git a/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java b/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java
index 8e23a0005d..0133f21c8b 100644
--- a/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java
+++ b/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java
@@ -1,7 +1,11 @@
package gregtech.common.render.items;
+import static gregtech.api.util.GT_OreDictUnificator.getAssociation;
+
+import gregtech.api.enums.Materials;
import gregtech.api.items.GT_MetaGenerated_Item;
import gregtech.api.util.GT_Utility;
+import java.util.Objects;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.IItemRenderer;
@@ -58,6 +62,15 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer {
if (aMetaData < aItem.mOffset) {
IItemRenderer aMaterialRenderer = aItem.getMaterialRenderer(aMetaData);
+
+ // Handle fluid rendering.
+ if (aMaterialRenderer == null) {
+ Materials material = Objects.requireNonNull(getAssociation(aStack)).mMaterial.mMaterial;
+ if (material.renderer != null) {
+ aMaterialRenderer = material.renderer;
+ }
+ }
+
return aMaterialRenderer != null ? aMaterialRenderer : mMaterialRenderer;
}
diff --git a/src/main/java/gregtech/common/render/items/InfinityRenderer.java b/src/main/java/gregtech/common/render/items/InfinityRenderer.java
new file mode 100644
index 0000000000..4f1695bec0
--- /dev/null
+++ b/src/main/java/gregtech/common/render/items/InfinityRenderer.java
@@ -0,0 +1,148 @@
+package gregtech.common.render.items;
+
+import codechicken.lib.render.TextureUtils;
+import gregtech.api.enums.Textures;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Item;
+import gregtech.api.util.GT_Utility;
+import gregtech.common.render.GT_RenderUtil;
+import java.util.Random;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraftforge.client.IItemRenderer;
+import net.minecraftforge.fluids.FluidStack;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL12;
+
+public class InfinityRenderer extends GT_GeneratedMaterial_Renderer {
+ public Random rand = new Random();
+
+ @Override
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ return type == ItemRenderType.INVENTORY;
+ }
+
+ @Override
+ public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) {
+ short aMetaData = (short) aStack.getItemDamage();
+ GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem();
+
+ IIconContainer aIconContainer = aItem.getIconContainer(aMetaData);
+
+ if (aIconContainer == null) {
+ return;
+ }
+
+ IIcon tIcon = aIconContainer.getIcon();
+ IIcon tOverlay = aIconContainer.getOverlayIcon();
+ FluidStack aFluid = GT_Utility.getFluidForFilledItem(aStack, true);
+
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+
+ renderHalo();
+
+ if (tOverlay != null) {
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ TextureUtils.bindAtlas(aItem.getSpriteNumber());
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(
+ Tessellator.instance,
+ tOverlay.getMaxU(),
+ tOverlay.getMinV(),
+ tOverlay.getMinU(),
+ tOverlay.getMaxV(),
+ tOverlay.getIconWidth(),
+ tOverlay.getIconHeight(),
+ 0.0625F);
+ }
+ }
+
+ if (tIcon != null) {
+ renderRegularItem(type, aStack, tIcon, aFluid == null);
+ }
+ }
+
+ private void renderHalo() {
+ GL11.glPushMatrix();
+ IIcon halo = Textures.ItemIcons.HALO.getIcon();
+
+ int spread = 10;
+ int haloAlpha = 0xFF000000;
+
+ if (halo == null) {
+ return;
+ }
+
+ Tessellator t = Tessellator.instance;
+
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+
+ GL11.glColor4f(20 / 255.0f, 20 / 255.0f, 20 / 255.0f, (float) (haloAlpha >> 24 & 255) / 255.0F);
+
+ t.startDrawingQuads();
+ t.addVertexWithUV(-spread, -spread, 0, halo.getMinU(), halo.getMinV());
+ t.addVertexWithUV(-spread, 16 + spread, 0, halo.getMinU(), halo.getMaxV());
+ t.addVertexWithUV(16 + spread, 16 + spread, 0, halo.getMaxU(), halo.getMaxV());
+ t.addVertexWithUV(16 + spread, -spread, 0, halo.getMaxU(), halo.getMinV());
+ t.draw();
+ GL11.glPopMatrix();
+ }
+
+ @Override
+ public void renderRegularItem(ItemRenderType type, ItemStack item, IIcon icon, boolean shouldModulateColor) {
+
+ RenderItem r = RenderItem.getInstance();
+ Minecraft mc = Minecraft.getMinecraft();
+ Tessellator t = Tessellator.instance;
+
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ RenderHelper.enableGUIStandardItemLighting();
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+
+ GL11.glPushMatrix();
+ double scale = (rand.nextGaussian() * 0.15) + 0.95;
+ double offset = (1.0 - scale) / 2.0;
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glTranslated(offset * 16.0, offset * 16.0, 1.0);
+ GL11.glScaled(scale, scale, 1.0);
+
+ t.startDrawingQuads();
+ t.setColorRGBA_F(1.0f, 1.0f, 1.0f, 0.6f);
+ t.addVertexWithUV(0 - offset, 0 - offset, 0, icon.getMinU(), icon.getMinV());
+ t.addVertexWithUV(0 - offset, 16 + offset, 0, icon.getMinU(), icon.getMaxV());
+ t.addVertexWithUV(16 + offset, 16 + offset, 0, icon.getMaxU(), icon.getMaxV());
+ t.addVertexWithUV(16 + offset, 0 - offset, 0, icon.getMaxU(), icon.getMinV());
+ t.draw();
+
+ GL11.glPopMatrix();
+
+ r.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), item, 0, 0, true);
+
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+
+ r.renderWithColor = true;
+
+ GL11.glDisable(GL11.GL_BLEND);
+ RenderHelper.enableGUIStandardItemLighting();
+
+ GL11.glPopMatrix();
+ }
+}
diff --git a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
new file mode 100644
index 0000000000..baaf951ddc
--- /dev/null
+++ b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
@@ -0,0 +1,302 @@
+package gregtech.common.render.items;
+
+import codechicken.lib.render.TextureUtils;
+import gregtech.api.enums.ItemList;
+import gregtech.api.interfaces.IIconContainer;
+import gregtech.api.items.GT_MetaGenerated_Item;
+import gregtech.common.render.GT_RenderUtil;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.ItemRenderer;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.RenderItem;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.item.EntityItem;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.IIcon;
+import net.minecraft.util.MathHelper;
+import net.minecraftforge.client.IItemRenderer;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL12;
+import singulariteam.eternalsingularity.render.CosmicRenderStuffs;
+
+public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
+
+ private static final float cosmicOpacity = 2.5f;
+
+ @Override
+ public boolean handleRenderType(ItemStack item, ItemRenderType type) {
+ return true;
+ }
+
+ @Override
+ public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
+ return helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING;
+ }
+
+ @Override
+ public boolean renderFluidDisplayItem(ItemRenderType type, ItemStack aStack, Object... data) {
+ magicRenderMethod(
+ type, ItemList.Emitter_UEV.get(1), aStack.getItem().getIconFromDamage(aStack.getItemDamage()), data);
+ return true;
+ }
+
+ @Override
+ public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) {
+ short aMetaData = (short) aStack.getItemDamage();
+ GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem();
+
+ IIconContainer aIconContainer = aItem.getIconContainer(aMetaData);
+
+ if (aIconContainer == null) {
+ return;
+ }
+
+ IIcon tIcon = aIconContainer.getIcon();
+ IIcon tOverlay = aIconContainer.getOverlayIcon();
+
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+
+ if (tOverlay != null) {
+ GL11.glColor3f(1.0F, 1.0F, 1.0F);
+ TextureUtils.bindAtlas(aItem.getSpriteNumber());
+ if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) {
+ GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F);
+ } else {
+ ItemRenderer.renderItemIn2D(
+ Tessellator.instance,
+ tOverlay.getMaxU(),
+ tOverlay.getMinV(),
+ tOverlay.getMinU(),
+ tOverlay.getMaxV(),
+ tOverlay.getIconWidth(),
+ tOverlay.getIconHeight(),
+ 0.0625F);
+ }
+ }
+
+ GL11.glDisable(GL11.GL_BLEND);
+
+ if (tIcon != null) {
+ magicRenderMethod(type, aStack, getTrueIcon(aStack), data);
+ }
+ }
+
+ private void magicRenderMethod(ItemRenderType type, ItemStack tmpItem, IIcon tIcon, Object... data) {
+
+ RenderItem r = RenderItem.getInstance();
+ Minecraft mc = Minecraft.getMinecraft();
+ Tessellator t = Tessellator.instance;
+
+ this.processLightLevel(type, tmpItem, data);
+
+ switch (type) {
+ case ENTITY: {
+ GL11.glPushMatrix();
+ if (tmpItem.isOnItemFrame()) GL11.glTranslatef(0F, -0.3F, 0.01F);
+ render(tmpItem, null);
+ GL11.glPopMatrix();
+
+ break;
+ }
+ case EQUIPPED:
+ case EQUIPPED_FIRST_PERSON: {
+ render(tmpItem, data[1] instanceof EntityPlayer ? (EntityPlayer) data[1] : null);
+ break;
+ }
+ case INVENTORY: {
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ RenderHelper.enableGUIStandardItemLighting();
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+
+ r.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), tmpItem, 0, 0, true);
+
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+
+ r.renderWithColor = true;
+
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glPopMatrix();
+
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ RenderHelper.enableGUIStandardItemLighting();
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+
+ r.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), tmpItem, 0, 0, true);
+
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ RenderHelper.enableGUIStandardItemLighting();
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+
+ CosmicRenderStuffs.cosmicOpacity = cosmicOpacity;
+ CosmicRenderStuffs.inventoryRender = true;
+ CosmicRenderStuffs.useShader();
+
+ GL11.glColor4d(0, 1, 1, 1);
+
+ float minu = tIcon.getMinU();
+ float maxu = tIcon.getMaxU();
+ float minv = tIcon.getMinV();
+ float maxv = tIcon.getMaxV();
+
+ // Draw cosmic overlay
+ t.startDrawingQuads();
+ t.addVertexWithUV(0, 0, 0, minu, minv);
+ t.addVertexWithUV(0, 16, 0, minu, maxv);
+ t.addVertexWithUV(16, 16, 0, maxu, maxv);
+ t.addVertexWithUV(16, 0, 0, maxu, minv);
+ t.draw();
+
+ CosmicRenderStuffs.releaseShader();
+ CosmicRenderStuffs.inventoryRender = false;
+
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+
+ r.renderWithColor = true;
+
+ GL11.glPopMatrix();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ public void render(ItemStack item, EntityPlayer player) {
+ int passes = 1;
+ if (item.getItem().requiresMultipleRenderPasses()) {
+ passes = item.getItem().getRenderPasses(item.getItemDamage());
+ }
+
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+
+ IIcon icon;
+ float f, f1, f2, f3;
+ float scale = 1F / 16F;
+
+ for (int i = 0; i < passes; i++) {
+ icon = this.getStackIcon(item, player);
+
+ f = icon.getMinU();
+ f1 = icon.getMaxU();
+ f2 = icon.getMinV();
+ f3 = icon.getMaxV();
+
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+
+ // RENDER ITEM IN HAND
+ ItemRenderer.renderItemIn2D(
+ Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), scale);
+ }
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDepthFunc(GL11.GL_EQUAL);
+ CosmicRenderStuffs.cosmicOpacity = cosmicOpacity;
+ CosmicRenderStuffs.useShader();
+
+ IIcon cosmicIcon = getTrueIcon(item);
+
+ float minu = cosmicIcon.getMinU();
+ float maxu = cosmicIcon.getMaxU();
+ float minv = cosmicIcon.getMinV();
+ float maxv = cosmicIcon.getMaxV();
+
+ // RENDER COSMIC OVERLAY IN HAND
+ ItemRenderer.renderItemIn2D(
+ Tessellator.instance,
+ maxu,
+ minv,
+ minu,
+ maxv,
+ cosmicIcon.getIconWidth(),
+ cosmicIcon.getIconHeight(),
+ scale);
+ CosmicRenderStuffs.releaseShader();
+ GL11.glDepthFunc(GL11.GL_LEQUAL);
+ GL11.glEnable(GL11.GL_ALPHA_TEST);
+
+ GL11.glDisable(GL11.GL_BLEND);
+ GL11.glPopMatrix();
+
+ GL11.glColor4f(1F, 1F, 1F, 1F);
+ }
+
+ public void processLightLevel(ItemRenderType type, ItemStack item, Object... data) {
+ switch (type) {
+ case ENTITY: {
+ EntityItem ent = (EntityItem) (data[1]);
+ if (ent != null) {
+ CosmicRenderStuffs.setLightFromLocation(
+ ent.worldObj,
+ MathHelper.floor_double(ent.posX),
+ MathHelper.floor_double(ent.posY),
+ MathHelper.floor_double(ent.posZ));
+ }
+ break;
+ }
+ case EQUIPPED: {
+ EntityLivingBase ent = (EntityLivingBase) (data[1]);
+ if (ent != null) {
+ CosmicRenderStuffs.setLightFromLocation(
+ ent.worldObj,
+ MathHelper.floor_double(ent.posX),
+ MathHelper.floor_double(ent.posY),
+ MathHelper.floor_double(ent.posZ));
+ }
+ break;
+ }
+ case EQUIPPED_FIRST_PERSON: {
+ EntityLivingBase ent = (EntityLivingBase) (data[1]);
+ if (ent != null) {
+ CosmicRenderStuffs.setLightFromLocation(
+ ent.worldObj,
+ MathHelper.floor_double(ent.posX),
+ MathHelper.floor_double(ent.posY),
+ MathHelper.floor_double(ent.posZ));
+ }
+ break;
+ }
+ case INVENTORY: {
+ CosmicRenderStuffs.setLightLevel(10.2f);
+ return;
+ }
+ default: {
+ CosmicRenderStuffs.setLightLevel(1.0f);
+ }
+ }
+ }
+
+ public IIcon getStackIcon(ItemStack stack, EntityPlayer player) {
+ return getTrueIcon(stack);
+ }
+
+ public IIcon getTrueIcon(ItemStack stack) {
+ short aMetaData = (short) stack.getItemDamage();
+ GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) stack.getItem();
+
+ IIconContainer aIconContainer = aItem.getIconContainer(aMetaData);
+
+ return aIconContainer.getIcon();
+ }
+}