diff options
author | miozune <miozune@gmail.com> | 2023-02-19 19:00:32 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-19 11:00:32 +0100 |
commit | 0a8f536e279897630cb5a938c7eeb9bf162dab7f (patch) | |
tree | 981fd1491e1b10c5db475c4381cfe2173677f285 /src/main/java/gregtech/common/render/items | |
parent | e64166c670b7f4e2c37e3cfffb3b4d0a0e7b9f79 (diff) | |
download | GT5-Unofficial-0a8f536e279897630cb5a938c7eeb9bf162dab7f.tar.gz GT5-Unofficial-0a8f536e279897630cb5a938c7eeb9bf162dab7f.tar.bz2 GT5-Unofficial-0a8f536e279897630cb5a938c7eeb9bf162dab7f.zip |
Make material renderer available for arbitrary item (#1753)
* Make material renderer available for arbitrary item
* pass render pass
Diffstat (limited to 'src/main/java/gregtech/common/render/items')
6 files changed, 142 insertions, 130 deletions
diff --git a/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java b/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java index 125c692353..c4d82efda3 100644 --- a/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java +++ b/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java @@ -66,8 +66,7 @@ public class CosmicNeutroniumRenderer extends GT_GeneratedMaterial_Renderer { } @Override - public void renderRegularItem(ItemRenderType type, ItemStack item, IIcon icon, boolean shouldModulateColor) { - + public void renderRegularItem(ItemRenderType type, ItemStack item, IIcon icon, boolean shouldModulateColor, int pass) { RenderItem r = RenderItem.getInstance(); GL11.glPushMatrix(); @@ -79,7 +78,9 @@ public class CosmicNeutroniumRenderer extends GT_GeneratedMaterial_Renderer { GL11.glDisable(GL11.GL_DEPTH_TEST); } - drawHalo(type); + if (pass == 0) { + drawHalo(type); + } //spotless:on { diff --git a/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java b/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java index 436b9c4422..2484cf1c1f 100644 --- a/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java +++ b/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java @@ -43,6 +43,7 @@ public class GT_GeneratedItem_Renderer implements IItemRenderer { @Override public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { short aMetaData = (short) aStack.getItemDamage(); + if (!(aStack.getItem() instanceof GT_MetaGenerated_Item)) return; GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); GL11.glEnable(GL11.GL_BLEND); 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 e0ff69e216..e01df95f05 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 @@ -15,8 +15,7 @@ import codechicken.lib.render.TextureUtils; import com.mitchej123.hodgepodge.textures.IPatchedTextureAtlasSprite; import gregtech.api.GregTech_API; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Item; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.util.GT_Utility; import gregtech.common.render.GT_RenderUtil; @@ -50,60 +49,68 @@ public class GT_GeneratedMaterial_Renderer implements IItemRenderer { @Override public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { short aMetaData = (short) aStack.getItemDamage(); - GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); + if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer)) return; + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); - IIconContainer aIconContainer = aItem.getIconContainer(aMetaData); - - if (aIconContainer == null) { - return; + int passes = 1; + if (aItem.requiresMultipleRenderPasses()) { + passes = aItem.getRenderPasses(aMetaData); } - IIcon tIcon = aIconContainer.getIcon(); - IIcon tOverlay = aIconContainer.getOverlayIcon(); - FluidStack aFluid = GT_Utility.getFluidForFilledItem(aStack, true); + for (int pass = 0; pass < passes; pass++) { + IIcon tIcon = aItem.getIcon(aMetaData, pass); + IIcon tOverlay = aItem.getOverlayIcon(aMetaData, pass); + FluidStack aFluid = GT_Utility.getFluidForFilledItem(aStack, true); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_ALPHA_TEST); - if (tIcon != null) { - markNeedsAnimationUpdate(tIcon); - renderRegularItem(type, aStack, tIcon, aFluid == null); - } + if (tIcon != null) { + markNeedsAnimationUpdate(tIcon); + renderRegularItem(type, aStack, tIcon, aFluid == null, pass); + } - if (tOverlay != null && aFluid != null && aFluid.getFluid() != null) { - IIcon fluidIcon = aFluid.getFluid().getIcon(aFluid); - if (fluidIcon != null) { - markNeedsAnimationUpdate(fluidIcon); - // Adds colour to a cells fluid. Does not colour full fluid icons as shown in NEI etc. - renderContainedFluid(type, aFluid, fluidIcon); + if (tOverlay != null && aFluid != null && aFluid.getFluid() != null) { + IIcon fluidIcon = aFluid.getFluid().getIcon(aFluid); + if (fluidIcon != null) { + markNeedsAnimationUpdate(fluidIcon); + // Adds colour to a cells fluid. Does not colour full fluid icons as shown in NEI etc. + renderContainedFluid(type, aFluid, fluidIcon); + } } - } - if (tOverlay != null) { - GL11.glColor3f(1.0F, 1.0F, 1.0F); - TextureUtils.bindAtlas(aItem.getSpriteNumber()); - markNeedsAnimationUpdate(tOverlay); - 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 (tOverlay != null) { + GL11.glColor3f(1.0F, 1.0F, 1.0F); + TextureUtils.bindAtlas(aItem.getSpriteNumber()); + markNeedsAnimationUpdate(tOverlay); + 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); } + } - GL11.glDisable(GL11.GL_BLEND); + public void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor, + int pass) { + renderRegularItem(type, aStack, icon, shouldModulateColor); } public void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor) { - GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); + if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer)) return; + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); if (shouldModulateColor) { short[] tModulation = aItem.getRGBa(aStack); 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 19b14e7d6d..8dac142cb1 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,8 +1,7 @@ package gregtech.common.render.items; -import static gregtech.api.util.GT_OreDictUnificator.getAssociation; - import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.MinecraftForgeClient; @@ -10,8 +9,9 @@ import net.minecraftforge.client.MinecraftForgeClient; import org.lwjgl.opengl.GL11; import gregtech.api.enums.Materials; -import gregtech.api.items.GT_MetaGenerated_Item; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.objects.ItemData; +import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; public class GT_MetaGenerated_Item_Renderer implements IItemRenderer { @@ -19,15 +19,17 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer { private final IItemRenderer mItemRenderer = new GT_GeneratedItem_Renderer(); private final IItemRenderer mMaterialRenderer = new GT_GeneratedMaterial_Renderer(); - public GT_MetaGenerated_Item_Renderer() { - for (GT_MetaGenerated_Item item : GT_MetaGenerated_Item.sInstances.values()) { - MinecraftForgeClient.registerItemRenderer(item, this); - } + public GT_MetaGenerated_Item_Renderer() {} + + public <T extends Item & IGT_ItemWithMaterialRenderer> void registerItem(T item) { + MinecraftForgeClient.registerItemRenderer(item, this); } @Override public boolean handleRenderType(ItemStack aStack, ItemRenderType aType) { - if ((GT_Utility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0)) { + if ((GT_Utility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0) + || !(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer) + || !((IGT_ItemWithMaterialRenderer) aStack.getItem()).shouldUseCustomRenderer(aStack.getItemDamage())) { return false; } return getRendererForItemStack(aStack).handleRenderType(aStack, aType); @@ -59,14 +61,14 @@ public class GT_MetaGenerated_Item_Renderer implements IItemRenderer { private IItemRenderer getRendererForItemStack(ItemStack aStack) { short aMetaData = (short) aStack.getItemDamage(); - GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); - if (aMetaData < aItem.mOffset) { + if (aItem != null && aItem.allowMaterialRenderer(aMetaData)) { IItemRenderer aMaterialRenderer = aItem.getMaterialRenderer(aMetaData); // Handle fluid rendering. if (aMaterialRenderer == null) { - ItemData itemData = getAssociation(aStack); + ItemData itemData = GT_OreDictUnificator.getAssociation(aStack); if (itemData != null) { Materials material = itemData.mMaterial.mMaterial; if (material.renderer != null) { diff --git a/src/main/java/gregtech/common/render/items/InfinityRenderer.java b/src/main/java/gregtech/common/render/items/InfinityRenderer.java index 5733501d95..6a5bea393d 100644 --- a/src/main/java/gregtech/common/render/items/InfinityRenderer.java +++ b/src/main/java/gregtech/common/render/items/InfinityRenderer.java @@ -17,8 +17,7 @@ import org.lwjgl.opengl.GL12; 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.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.util.GT_Utility; import gregtech.common.render.GT_RenderUtil; @@ -34,43 +33,47 @@ public class InfinityRenderer extends GT_GeneratedMaterial_Renderer { @Override public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { short aMetaData = (short) aStack.getItemDamage(); - GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); + if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer)) return; + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); - IIconContainer aIconContainer = aItem.getIconContainer(aMetaData); - - if (aIconContainer == null) { - return; + int passes = 1; + if (aItem.requiresMultipleRenderPasses()) { + passes = aItem.getRenderPasses(aMetaData); } - IIcon tIcon = aIconContainer.getIcon(); - IIcon tOverlay = aIconContainer.getOverlayIcon(); - FluidStack aFluid = GT_Utility.getFluidForFilledItem(aStack, true); + for (int pass = 0; pass < passes; pass++) { + IIcon tIcon = aItem.getIcon(aMetaData, pass); + IIcon tOverlay = aItem.getOverlayIcon(aMetaData, pass); + 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); + 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 (pass == 0) { + 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); + if (tIcon != null) { + renderRegularItem(type, aStack, tIcon, aFluid == null); + } } } diff --git a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java index ff5171b998..8a88e580eb 100644 --- a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java +++ b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java @@ -18,9 +18,9 @@ import org.lwjgl.opengl.GL12; import singulariteam.eternalsingularity.render.CosmicRenderStuffs; import codechicken.lib.render.TextureUtils; +import gregtech.api.GregTech_API; import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Item; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.common.render.GT_RenderUtil; public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { @@ -50,47 +50,50 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { @Override public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { short aMetaData = (short) aStack.getItemDamage(); - GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); + if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer)) return; + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); - IIconContainer aIconContainer = aItem.getIconContainer(aMetaData); - - if (aIconContainer == null) { - return; + int passes = 1; + if (aItem.requiresMultipleRenderPasses()) { + passes = aItem.getRenderPasses(aMetaData); } - 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); + for (int pass = 0; pass < passes; pass++) { + IIcon tIcon = aItem.getIcon(aMetaData, pass); + IIcon tOverlay = aItem.getOverlayIcon(aMetaData, pass); + + 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); + GL11.glDisable(GL11.GL_BLEND); - if (tIcon != null) { - magicRenderMethod(type, aStack, getTrueIcon(aStack), data); + if (tIcon != null) { + magicRenderMethod(type, aStack, getTrueIcon(aStack), data); + } } } private void magicRenderMethod(ItemRenderType type, ItemStack tmpItem, IIcon tIcon, Object... data) { + if (!GregTech_API.mEternalSingularity) return; RenderItem r = RenderItem.getInstance(); Minecraft mc = Minecraft.getMinecraft(); @@ -201,7 +204,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { float scale = 1F / 16F; for (int i = 0; i < passes; i++) { - icon = this.getStackIcon(item, player); + icon = this.getTrueIcon(item, i); f = icon.getMinU(); f1 = icon.getMaxU(); @@ -289,16 +292,11 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { } } - public IIcon getStackIcon(ItemStack stack, EntityPlayer player) { - return getTrueIcon(stack); + public IIcon getTrueIcon(ItemStack stack, int pass) { + return ((IGT_ItemWithMaterialRenderer) stack.getItem()).getIcon(stack.getItemDamage(), pass); } 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(); + return getTrueIcon(stack, 0); } } |