aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
diff options
context:
space:
mode:
authorMatthew William Noel <matthew.william.noel@gmail.com>2024-01-12 11:20:02 -0800
committerGitHub <noreply@github.com>2024-01-12 20:20:02 +0100
commita3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520 (patch)
treea66cdccad7f2d9eb370ff47059c9122441502ae6 /src/main/java/gregtech/common/render/items/UniversiumRenderer.java
parent78668b68e3020e06e2ff8dfcc1955987c4087288 (diff)
downloadGT5-Unofficial-a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520.tar.gz
GT5-Unofficial-a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520.tar.bz2
GT5-Unofficial-a3adb6c9e2b0093b3e6ed6f2d4ce9c0ae5fe3520.zip
Rework item renderers (#2424)
* Rework item renderers API breaking changes (minor): Subclasses of GT_GeneratedItem_Renderer may need updating Subclasses of GT_GeneratedMaterial_Renderer may need updating Subclasses of GT_DataStick_Renderer may need updating * Improve Universium shader compatibility still looks wrong, but won't screw up stuff rendered after it
Diffstat (limited to 'src/main/java/gregtech/common/render/items/UniversiumRenderer.java')
-rw-r--r--src/main/java/gregtech/common/render/items/UniversiumRenderer.java174
1 files changed, 60 insertions, 114 deletions
diff --git a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
index b0e2c39cb7..92b86071cf 100644
--- a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
+++ b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java
@@ -3,12 +3,12 @@ package gregtech.common.render.items;
import static gregtech.api.enums.Mods.Avaritia;
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.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
@@ -16,11 +16,13 @@ import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
+import org.lwjgl.opengl.GL20;
import codechicken.lib.render.TextureUtils;
import fox.spiteful.avaritia.render.CosmicRenderShenanigans;
import gregtech.api.enums.ItemList;
import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer;
+import gregtech.common.render.GT_RenderUtil;
@SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock")
public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
@@ -28,17 +30,14 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
private static final float cosmicOpacity = 2.5f;
@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) {
+ Item item = aStack.getItem();
+ if (item == null) return false;
+
magicRenderMethod(
type,
ItemList.Emitter_UEV.get(1), // hack to make it render correctly
- aStack.getItem()
- .getIconFromDamage(aStack.getItemDamage()),
+ item.getIconFromDamage(aStack.getItemDamage()),
true,
data);
return true;
@@ -89,133 +88,80 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer {
RenderItem r = RenderItem.getInstance();
Minecraft mc = Minecraft.getMinecraft();
Tessellator t = Tessellator.instance;
+ float minU = tIcon.getMinU();
+ float maxU = tIcon.getMaxU();
+ float minV = tIcon.getMinV();
+ float maxV = tIcon.getMaxV();
processLightLevel(type, data);
- switch (type) {
- case ENTITY -> {
- GL11.glPushMatrix();
- if (aStack.isOnItemFrame()) GL11.glTranslatef(0F, -0.3F, 0.01F);
- render(tIcon);
- GL11.glPopMatrix();
+ GL11.glPushMatrix();
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ if (type == ItemRenderType.INVENTORY) {
+ RenderHelper.enableGUIStandardItemLighting();
+
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+
+ if (fluidDisplay) {
+ // this somehow makes shader render correctly
+ ResourceLocation resourcelocation = mc.getTextureManager()
+ .getResourceLocation(aStack.getItemSpriteNumber());
+ mc.getTextureManager()
+ .bindTexture(resourcelocation);
+ } else {
+ GT_RenderUtil.renderItem(type, tIcon);
}
- case EQUIPPED, EQUIPPED_FIRST_PERSON -> {
- render(tIcon);
- }
- 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);
-
- 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.glEnable(GL11.GL_BLEND);
- GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
- RenderHelper.enableGUIStandardItemLighting();
+ 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.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
- if (fluidDisplay) {
- GL11.glDisable(GL11.GL_BLEND);
- }
+ if (fluidDisplay) {
+ GL11.glDisable(GL11.GL_BLEND);
+ }
- CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity;
- CosmicRenderShenanigans.inventoryRender = true;
- CosmicRenderShenanigans.useShader();
+ CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity;
+ CosmicRenderShenanigans.inventoryRender = true;
+ CosmicRenderShenanigans.useShader();
- GL11.glColor4d(1, 1, 1, 1);
+ GL11.glColor4d(1, 1, 1, 1);
- float minu = tIcon.getMinU();
- float maxu = tIcon.getMaxU();
- float minv = tIcon.getMinV();
- float maxv = tIcon.getMaxV();
+ // Draw cosmic overlay
+ GT_RenderUtil.renderItem(type, tIcon);
- // 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();
+ CosmicRenderShenanigans.releaseShader();
+ CosmicRenderShenanigans.inventoryRender = false;
- CosmicRenderShenanigans.releaseShader();
- CosmicRenderShenanigans.inventoryRender = false;
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+ } else {
+ // RENDER ITEM
+ GT_RenderUtil.renderItem(type, tIcon);
- GL11.glEnable(GL11.GL_ALPHA_TEST);
- GL11.glEnable(GL12.GL_RESCALE_NORMAL);
- GL11.glEnable(GL11.GL_DEPTH_TEST);
+ int program = GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM);
- r.renderWithColor = true;
+ GL11.glDisable(GL11.GL_ALPHA_TEST);
+ GL11.glDepthFunc(GL11.GL_EQUAL);
+ CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity;
+ CosmicRenderShenanigans.useShader();
- GL11.glDisable(GL11.GL_BLEND);
- GL11.glPopMatrix();
- }
- default -> {}
+ // RENDER COSMIC OVERLAY
+ GT_RenderUtil.renderItem(type, tIcon);
+ CosmicRenderShenanigans.releaseShader();
+ GL11.glDepthFunc(GL11.GL_LEQUAL);
+
+ GL20.glUseProgram(program);
}
- }
- 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);
-
- float f, f1, f2, f3;
- float scale = 1F / 16F;
-
- 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);
- CosmicRenderShenanigans.cosmicOpacity = cosmicOpacity;
- CosmicRenderShenanigans.useShader();
-
- float minu = icon.getMinU();
- float maxu = icon.getMaxU();
- float minv = icon.getMinV();
- float maxv = icon.getMaxV();
-
- // RENDER COSMIC OVERLAY IN HAND
- ItemRenderer.renderItemIn2D(
- Tessellator.instance,
- maxu,
- minv,
- minu,
- maxv,
- icon.getIconWidth(),
- icon.getIconHeight(),
- scale);
- CosmicRenderShenanigans.releaseShader();
- GL11.glDepthFunc(GL11.GL_LEQUAL);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_ALPHA_TEST);
-
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
-
- GL11.glColor4f(1F, 1F, 1F, 1F);
}
private void processLightLevel(ItemRenderType type, Object... data) {