diff options
author | miozune <miozune@gmail.com> | 2023-02-21 16:39:47 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-21 08:39:47 +0100 |
commit | a732473a538106963f0b56bc02a3e58a0db2bbc3 (patch) | |
tree | fd04d750ff485cc87598589c93af32ea3a673cca /src/main/java/gregtech/common/render/items/UniversiumRenderer.java | |
parent | a4141b9f20b854f7c0ae3bfe6f4ef886780e9631 (diff) | |
download | GT5-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.java | 145 |
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); - } } |