diff options
Diffstat (limited to 'src')
15 files changed, 297 insertions, 161 deletions
diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java index 33c02f37dd..7a8236c7b3 100644 --- a/src/main/java/gregtech/GT_Mod.java +++ b/src/main/java/gregtech/GT_Mod.java @@ -329,7 +329,9 @@ public class GT_Mod implements IGT_Mod { gregtechproxy.registerUnificationEntries(); new GT_FuelLoader().run(); } - Waila.init(); + if (Loader.isModLoaded("Waila")) { + Waila.init(); + } IMCForNEI.IMCSender(); GregTech_API.sLoadFinished = true; GT_Log.out.println("GT_Mod: Load-Phase finished!"); diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java index 39a39d4f0f..30f8961d0b 100644 --- a/src/main/java/gregtech/api/GregTech_API.java +++ b/src/main/java/gregtech/api/GregTech_API.java @@ -280,7 +280,7 @@ public class GregTech_API { sMachineWireFire = true, mOutputRF = false, mInputRF = false, meIOLoaded = false, mRFExplosions = false, mServerStarted = false, mIC2Classic = false, mMagneticraft = false, mImmersiveEngineering = false, mGTPlusPlus = false, mTranslocator = false, mTConstruct = false, mGalacticraft = false, mAE2 = false, - mHodgepodge = false; + mHodgepodge = false, mEternalSingularity = false; public static int mEUtoRF = 360, mRFtoEU = 20; diff --git a/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java b/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java new file mode 100644 index 0000000000..4bf0311544 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java @@ -0,0 +1,68 @@ +package gregtech.api.interfaces; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; + +public interface IGT_ItemWithMaterialRenderer { + + /** + * @return If allow using {@link gregtech.common.render.items.GT_MetaGenerated_Item_Renderer} to render item + */ + boolean shouldUseCustomRenderer(int aMetaData); + + /** + * @return Custom renderer of the Material with offset < 32000 + */ + GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData); + + /** + * If this returns false, renderer falls back to {@link gregtech.common.render.items.GT_GeneratedItem_Renderer} + */ + boolean allowMaterialRenderer(int aMetaData); + + /** + * @return Icon the Material is going to be rendered with + */ + IIcon getIcon(int aMetaData, int pass); + + /** + * @return Icon of the Overlay (or null if there is no Icon) + */ + IIcon getOverlayIcon(int aMetaData, int pass); + + /** + * @return Color Modulation the Material is going to be rendered with. + */ + short[] getRGBa(ItemStack aStack); + + @SideOnly(Side.CLIENT) + default int getSpriteNumber() { + if (this instanceof Item) { + return ((Item) this).getSpriteNumber(); + } else { + throw new RuntimeException(String.format("Class %s does not extend Item!", getClass())); + } + } + + @SideOnly(Side.CLIENT) + default boolean requiresMultipleRenderPasses() { + if (this instanceof Item) { + return ((Item) this).requiresMultipleRenderPasses(); + } else { + throw new RuntimeException(String.format("Class %s does not extend Item!", getClass())); + } + } + + default int getRenderPasses(int metadata) { + if (this instanceof Item) { + return ((Item) this).getRenderPasses(metadata); + } else { + throw new RuntimeException(String.format("Class %s does not extend Item!", getClass())); + } + } +} diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java index 3e81c102f4..32a46c8641 100644 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java +++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java @@ -30,6 +30,7 @@ import gregtech.api.enums.Materials; import gregtech.api.enums.SubTag; import gregtech.api.enums.TC_Aspects.TC_AspectStack; import gregtech.api.interfaces.IFoodStat; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.IItemBehaviour; import gregtech.api.interfaces.IItemContainer; @@ -56,7 +57,7 @@ import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; * Item. */ @Optional.Interface(iface = "squeek.applecore.api.food.IEdible", modid = MOD_ID_APC) -public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements IEdible { +public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements IGT_ItemWithMaterialRenderer, IEdible { /** * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this @@ -256,9 +257,7 @@ public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements return true; } - /** - * @return the Color Modulation the Material is going to be rendered with. - */ + @Override public short[] getRGBa(ItemStack aStack) { return Materials._NULL.getRGBA(); } @@ -270,13 +269,33 @@ public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements return null; } - /** - * @return the Custom renderer of the Material with offset < 32000 - */ + @Override + public IIcon getIcon(int aMetaData, int pass) { + IIconContainer iconContainer = getIconContainer(aMetaData); + return iconContainer != null ? iconContainer.getIcon() : null; + } + + @Override + public IIcon getOverlayIcon(int aMetaData, int pass) { + IIconContainer iconContainer = getIconContainer(aMetaData); + return iconContainer != null ? iconContainer.getOverlayIcon() : null; + } + + @Override + public boolean shouldUseCustomRenderer(int aMetaData) { + return true; + } + + @Override public GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData) { return null; } + @Override + public boolean allowMaterialRenderer(int aMetaData) { + return aMetaData < this.mOffset; + } + /* ---------- INTERNAL OVERRIDES ---------- */ @Override diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index 327aeb5b23..e7189811a0 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -49,6 +49,7 @@ import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; import cpw.mods.fml.client.event.ConfigChangedEvent; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.network.FMLNetworkEvent; @@ -60,6 +61,7 @@ import gregtech.api.interfaces.IHasFluidDisplayItem; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.ITurnable; +import gregtech.api.items.GT_MetaGenerated_Item; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.net.GT_Packet_ClientPreference; import gregtech.api.objects.GT_ItemStack; @@ -80,6 +82,7 @@ import gregtech.common.render.*; import gregtech.common.render.items.GT_MetaGenerated_Item_Renderer; import gregtech.common.tileentities.debug.GT_MetaTileEntity_AdvDebugStructureWriter; import gregtech.loaders.ExtraIcons; +import gregtech.loaders.misc.GT_Bees; import gregtech.loaders.preload.GT_PreLoad; import ic2.api.tile.IWrenchable; @@ -162,6 +165,7 @@ public class GT_Client extends GT_Proxy implements Runnable { public static final int ROTATION_MARKER_RESOLUTION = 120; private int mReloadCount; private float renderTickTime; + public static GT_MetaGenerated_Item_Renderer metaGeneratedItemRenderer; public GT_Client() { mCapeRenderer = new GT_CapeRenderer(mCapeList); @@ -553,7 +557,13 @@ public class GT_Client extends GT_Proxy implements Runnable { public void onLoad() { super.onLoad(); new GT_Renderer_Block(); - new GT_MetaGenerated_Item_Renderer(); + metaGeneratedItemRenderer = new GT_MetaGenerated_Item_Renderer(); + for (GT_MetaGenerated_Item item : GT_MetaGenerated_Item.sInstances.values()) { + metaGeneratedItemRenderer.registerItem(item); + } + if (Loader.isModLoaded(GT_Values.MOD_ID_FR)) { + metaGeneratedItemRenderer.registerItem(GT_Bees.combs); + } new GT_MetaGenerated_Tool_Renderer(); new GT_Renderer_Entity_Arrow(GT_Entity_Arrow.class, "arrow"); new GT_Renderer_Entity_Arrow(GT_Entity_Arrow_Potion.class, "arrow_potions"); diff --git a/src/main/java/gregtech/common/items/CombType.java b/src/main/java/gregtech/common/items/CombType.java index ff08fde695..479f6fe82f 100644 --- a/src/main/java/gregtech/common/items/CombType.java +++ b/src/main/java/gregtech/common/items/CombType.java @@ -149,9 +149,11 @@ public enum CombType { VEGA(116, "vega", true, Materials._NULL, 10, 0x1A2036, 0xB5C0DE, ItemComb.Voltage.ZPM), // Infinity - COSMICNEUTRONIUM(117, "cosmicneutronium", true, Materials._NULL, 5, 0x484848, 0x323232, ItemComb.Voltage.UV), - INFINITYCATALYST(118, "infinitycatalyst", true, Materials._NULL, 2, 0xFFFFFF, 0xFFFFFF, ItemComb.Voltage.UHV), - INFINITY(119, "infinity", true, Materials._NULL, 1, 0xFFFFFF, 0xFFFFFF, ItemComb.Voltage.UEV), + COSMICNEUTRONIUM(117, "cosmicneutronium", true, Materials.CosmicNeutronium, 5, 0x484848, 0x323232, + ItemComb.Voltage.UV), + INFINITYCATALYST(118, "infinitycatalyst", true, Materials.InfinityCatalyst, 2, 0xFFFFFF, 0xFFFFFF, + ItemComb.Voltage.UHV), + INFINITY(119, "infinity", true, Materials.Infinity, 1, 0xFFFFFF, 0xFFFFFF, ItemComb.Voltage.UEV), // HEE ENDDUST(120, "enddust", true, Materials._NULL, 50, 0x003A7D, 0xCC00FA, ItemComb.Voltage.HV), @@ -219,17 +221,7 @@ public enum CombType { private final int[] color; CombType(int id, String pName, boolean show, Materials material, int chance, int color1, int color2) { - if (id < 0 && !"INVALIDCOMB".equals(pName)) throw new IllegalArgumentException(); - this.id = id; - this.name = pName; - this.voltage = null; - this.material = material; - this.chance = chance; - this.showInList = show; - this.color = new int[] { color1, color2 }; - this.localizedName = GT_LanguageManager.addStringLocalization( - "comb." + this.name, - this.name.substring(0, 1).toUpperCase() + this.name.substring(1) + " Comb"); + this(id, pName, show, material, chance, color1, color2, null); } CombType(int id, String pName, boolean show, Materials material, int chance, int color1, int color2, diff --git a/src/main/java/gregtech/common/items/ItemComb.java b/src/main/java/gregtech/common/items/ItemComb.java index 29e206d5b9..d7f009dd38 100644 --- a/src/main/java/gregtech/common/items/ItemComb.java +++ b/src/main/java/gregtech/common/items/ItemComb.java @@ -27,13 +27,15 @@ import gregtech.GT_Mod; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; +import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; import gregtech.loaders.materialprocessing.ProcessingModSupport; import gregtech.loaders.misc.GT_Bees; -public class ItemComb extends Item { +public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { @SideOnly(Side.CLIENT) private IIcon secondIcon; @@ -99,6 +101,36 @@ public class ItemComb extends Item { return CombType.valueOf(stack.getItemDamage()).getName(); } + @Override + public boolean shouldUseCustomRenderer(int aMetaData) { + return CombType.valueOf(aMetaData).material.renderer != null; + } + + @Override + public GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData) { + return CombType.valueOf(aMetaData).material.renderer; + } + + @Override + public boolean allowMaterialRenderer(int aMetaData) { + return true; + } + + @Override + public IIcon getIcon(int aMetaData, int pass) { + return (pass == 0) ? itemIcon : secondIcon; + } + + @Override + public IIcon getOverlayIcon(int aMetaData, int pass) { + return null; + } + + @Override + public short[] getRGBa(ItemStack aStack) { + return CombType.valueOf(aStack.getItemDamage()).material.mRGBa; + } + public void initCombsRecipes() { // Organic @@ -1538,7 +1570,7 @@ public class ItemComb extends Item { /** * Currently only used for CombType.MOLYBDENUM - * + * * @param circuitNumber should not conflict with addProcessGT * **/ @@ -1569,7 +1601,7 @@ public class ItemComb extends Item { /** * this only adds Chemical and AutoClave process. If you need Centrifuge recipe. use addCentrifugeToMaterial or * addCentrifugeToItemStack - * + * * @param volt This determine the required Tier of process for this recipes. This decide the required aEU/t, * progress time, required additional UU-Matter, requirement of cleanRoom, needed fluid stack for * Chemical. @@ -1644,7 +1676,7 @@ public class ItemComb extends Item { /** * this method only adds Centrifuge based on Material. If volt is lower than MV than it will also adds forestry * centrifuge recipe. - * + * * @param comb BeeComb * @param aMaterial resulting Material of processing. can be more than 6. but over 6 will be ignored in Gregtech * Centrifuge. diff --git a/src/main/java/gregtech/common/render/GT_RenderUtil.java b/src/main/java/gregtech/common/render/GT_RenderUtil.java index be0e0ac0b6..ffa6e359d8 100644 --- a/src/main/java/gregtech/common/render/GT_RenderUtil.java +++ b/src/main/java/gregtech/common/render/GT_RenderUtil.java @@ -8,13 +8,13 @@ import net.minecraft.util.IIcon; import org.lwjgl.opengl.GL11; -import gregtech.api.items.GT_MetaGenerated_Item; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; public class GT_RenderUtil { public static void colorGTItem(ItemStack aStack) { - if (aStack.getItem() instanceof GT_MetaGenerated_Item) { - GT_MetaGenerated_Item aItem = (GT_MetaGenerated_Item) aStack.getItem(); + if (aStack.getItem() instanceof IGT_ItemWithMaterialRenderer) { + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); short[] tModulation = aItem.getRGBa(aStack); GL11.glColor4f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F, 255.0f); 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); } } diff --git a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java index 0c813d002a..a9e6f80da7 100644 --- a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java +++ b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java @@ -126,6 +126,7 @@ public class GT_PreLoad { GregTech_API.mGalacticraft = Loader.isModLoaded("GalacticraftCore"); GregTech_API.mAE2 = Loader.isModLoaded(MOD_ID_AE); GregTech_API.mHodgepodge = Loader.isModLoaded("hodgepodge"); + GregTech_API.mEternalSingularity = Loader.isModLoaded("eternalsingularity"); } public static void createLogFiles(File parentFile, Configuration tMainConfig) { |