package gregtech.common.render.items; import java.util.Random; 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.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.fluids.FluidStack; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import codechicken.lib.render.TextureUtils; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; import gregtech.api.util.GT_Utility; import gregtech.common.render.GT_RenderUtil; public class InfinityRenderer extends GT_GeneratedMaterial_Renderer { public Random rand = new Random(); @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return type == ItemRenderType.INVENTORY; } @Override public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { short aMetaData = (short) aStack.getItemDamage(); if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer)) return; IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); int passes = 1; if (aItem.requiresMultipleRenderPasses()) { passes = aItem.getRenderPasses(aMetaData); } 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); 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); } } } private void renderHalo() { GL11.glPushMatrix(); IIcon halo = Textures.ItemIcons.HALO.getIcon(); int spread = 10; int haloAlpha = 0xFF000000; if (halo == null) { return; } Tessellator t = Tessellator.instance; GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_ALPHA_TEST); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glColor4f(20 / 255.0f, 20 / 255.0f, 20 / 255.0f, (float) (haloAlpha >> 24 & 255) / 255.0F); t.startDrawingQuads(); t.addVertexWithUV(-spread, -spread, 0, halo.getMinU(), halo.getMinV()); t.addVertexWithUV(-spread, 16 + spread, 0, halo.getMinU(), halo.getMaxV()); t.addVertexWithUV(16 + spread, 16 + spread, 0, halo.getMaxU(), halo.getMaxV()); t.addVertexWithUV(16 + spread, -spread, 0, halo.getMaxU(), halo.getMinV()); t.draw(); GL11.glPopMatrix(); } @Override public void renderRegularItem(ItemRenderType type, ItemStack item, IIcon icon, boolean shouldModulateColor) { RenderItem r = RenderItem.getInstance(); Minecraft mc = Minecraft.getMinecraft(); Tessellator t = Tessellator.instance; 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); GL11.glPushMatrix(); double scale = (rand.nextGaussian() * 0.15) + 0.95; double offset = (1.0 - scale) / 2.0; GL11.glEnable(GL11.GL_BLEND); GL11.glTranslated(offset * 16.0, offset * 16.0, 1.0); GL11.glScaled(scale, scale, 1.0); t.startDrawingQuads(); t.setColorRGBA_F(1.0f, 1.0f, 1.0f, 0.6f); t.addVertexWithUV(0 - offset, 0 - offset, 0, icon.getMinU(), icon.getMinV()); t.addVertexWithUV(0 - offset, 16 + offset, 0, icon.getMinU(), icon.getMaxV()); t.addVertexWithUV(16 + offset, 16 + offset, 0, icon.getMaxU(), icon.getMaxV()); t.addVertexWithUV(16 + offset, 0 - offset, 0, icon.getMaxU(), icon.getMinV()); t.draw(); GL11.glPopMatrix(); r.renderItemIntoGUI(mc.fontRenderer, mc.getTextureManager(), item, 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); RenderHelper.enableGUIStandardItemLighting(); GL11.glPopMatrix(); } }