aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
diff options
context:
space:
mode:
authormiozune <miozune@gmail.com>2023-02-21 16:39:47 +0900
committerGitHub <noreply@github.com>2023-02-21 08:39:47 +0100
commita732473a538106963f0b56bc02a3e58a0db2bbc3 (patch)
treefd04d750ff485cc87598589c93af32ea3a673cca /src/main/java/gregtech/common/render/items/UniversiumRenderer.java
parenta4141b9f20b854f7c0ae3bfe6f4ef886780e9631 (diff)
downloadGT5-Unofficial-a732473a538106963f0b56bc02a3e58a0db2bbc3.tar.gz
GT5-Unofficial-a732473a538106963f0b56bc02a3e58a0db2bbc3.tar.bz2
GT5-Unofficial-a732473a538106963f0b56bc02a3e58a0db2bbc3.zip
Fix some issues with custom material renderers (#1755)
Diffstat (limited to 'src/main/java/gregtech/common/render/items/UniversiumRenderer.java')
-rw-r--r--src/main/java/gregtech/common/render/items/UniversiumRenderer.java145
1 files changed, 49 insertions, 96 deletions
diff --git a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
index 8a88e580eb..b5caa6f59e 100644
--- a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
+++ b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
@@ -7,11 +7,10 @@ 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 net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
@@ -21,18 +20,12 @@ import codechicken.lib.render.TextureUtils;
import gregtech.api.GregTech_API;
import gregtech.api.enums.ItemList;
import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer;
-import gregtech.common.render.GT_RenderUtil;
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;
}
@@ -41,8 +34,9 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
public boolean renderFluidDisplayItem(ItemRenderType type, ItemStack aStack, Object... data) {
magicRenderMethod(
type,
- ItemList.Emitter_UEV.get(1),
+ ItemList.Emitter_UEV.get(1), // hack to make it render correctly
aStack.getItem().getIconFromDamage(aStack.getItemDamage()),
+ true,
data);
return true;
}
@@ -66,53 +60,46 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glEnable(GL11.GL_ALPHA_TEST);
+ if (tIcon != null) {
+ markNeedsAnimationUpdate(tIcon);
+ magicRenderMethod(type, aStack, tIcon, false, data);
+ }
+
+ GL11.glDisable(GL11.GL_LIGHTING);
+
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);
- }
+ markNeedsAnimationUpdate(tOverlay);
+ renderItemOverlay(type, tOverlay);
}
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) {
+ private void magicRenderMethod(ItemRenderType type, ItemStack aStack, IIcon tIcon, boolean fluidDisplay,
+ Object... data) {
if (!GregTech_API.mEternalSingularity) return;
RenderItem r = RenderItem.getInstance();
Minecraft mc = Minecraft.getMinecraft();
Tessellator t = Tessellator.instance;
- this.processLightLevel(type, tmpItem, data);
+ processLightLevel(type, data);
switch (type) {
case ENTITY: {
GL11.glPushMatrix();
- if (tmpItem.isOnItemFrame()) GL11.glTranslatef(0F, -0.3F, 0.01F);
- render(tmpItem, null);
+ if (aStack.isOnItemFrame()) GL11.glTranslatef(0F, -0.3F, 0.01F);
+ render(tIcon);
GL11.glPopMatrix();
break;
}
case EQUIPPED:
case EQUIPPED_FIRST_PERSON: {
- render(tmpItem, data[1] instanceof EntityPlayer ? (EntityPlayer) data[1] : null);
+ render(tIcon);
break;
}
case INVENTORY: {
@@ -124,18 +111,15 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
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();
+ if (fluidDisplay) {
+ // this somehow makes shader render correctly
+ ResourceLocation resourcelocation = mc.getTextureManager()
+ .getResourceLocation(aStack.getItemSpriteNumber());
+ mc.getTextureManager().bindTexture(resourcelocation);
+ } else {
+ r.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), aStack, 0, 0, true);
+ }
- GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
RenderHelper.enableGUIStandardItemLighting();
@@ -143,20 +127,15 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
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);
+ if (fluidDisplay) {
+ GL11.glDisable(GL11.GL_BLEND);
+ }
CosmicRenderStuffs.cosmicOpacity = cosmicOpacity;
CosmicRenderStuffs.inventoryRender = true;
CosmicRenderStuffs.useShader();
- GL11.glColor4d(0, 1, 1, 1);
+ GL11.glColor4d(1, 1, 1, 1);
float minu = tIcon.getMinU();
float maxu = tIcon.getMaxU();
@@ -180,6 +159,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
r.renderWithColor = true;
+ GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
break;
}
@@ -188,54 +168,35 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
}
}
- public void render(ItemStack item, EntityPlayer player) {
- int passes = 1;
- if (item.getItem().requiresMultipleRenderPasses()) {
- passes = item.getItem().getRenderPasses(item.getItemDamage());
- }
-
+ private void render(IIcon icon) {
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.getTrueIcon(item, i);
-
- 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);
- }
+ 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();
+ float minu = icon.getMinU();
+ float maxu = icon.getMaxU();
+ float minv = icon.getMinV();
+ float maxv = icon.getMaxV();
// RENDER COSMIC OVERLAY IN HAND
ItemRenderer.renderItemIn2D(
@@ -244,8 +205,8 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
minv,
minu,
maxv,
- cosmicIcon.getIconWidth(),
- cosmicIcon.getIconHeight(),
+ icon.getIconWidth(),
+ icon.getIconHeight(),
scale);
CosmicRenderStuffs.releaseShader();
GL11.glDepthFunc(GL11.GL_LEQUAL);
@@ -257,7 +218,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
GL11.glColor4f(1F, 1F, 1F, 1F);
}
- public void processLightLevel(ItemRenderType type, ItemStack item, Object... data) {
+ private void processLightLevel(ItemRenderType type, Object... data) {
switch (type) {
case ENTITY: {
EntityItem ent = (EntityItem) (data[1]);
@@ -291,12 +252,4 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
}
}
}
-
- public IIcon getTrueIcon(ItemStack stack, int pass) {
- return ((IGT_ItemWithMaterialRenderer) stack.getItem()).getIcon(stack.getItemDamage(), pass);
- }
-
- public IIcon getTrueIcon(ItemStack stack) {
- return getTrueIcon(stack, 0);
- }
}