package openmods.gui.component; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ItemRenderer; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer.ItemRenderType; import net.minecraftforge.client.MinecraftForgeClient; import openmods.utils.TextureUtils; import org.lwjgl.opengl.GL11; public class GuiComponentItemStackSpinner extends BaseComponent { private ItemStack stack; private float rotationY = 0f; private static ItemRenderer itemRenderer; private static RenderBlocks blockRenderer = new RenderBlocks(); public GuiComponentItemStackSpinner(int x, int y, ItemStack stack) { super(x, y); if (itemRenderer == null) { itemRenderer = new ItemRenderer(Minecraft.getMinecraft()); } this.stack = stack; } @Override public int getWidth() { return 64; } @Override public int getHeight() { return 64; } @Override public void render(Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) {} @Override public void renderOverlay(Minecraft minecraft, int offsetX, int offsetY, int mouseX, int mouseY) { GL11.glPushMatrix(); GL11.glEnable(GL11.GL_DEPTH_TEST); float scale = 30.0f; GL11.glTranslated(offsetX + x + (scale / 2), offsetY + y + (scale / 2), scale); GL11.glScaled(scale, -scale, scale); rotationY += 0.6f; GL11.glRotatef(20, 1, 0, 0); GL11.glRotatef(rotationY, 0, 1, 0); GL11.glColor3f(1, 1, 1); renderItem(stack); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glPopMatrix(); } public void renderItem(ItemStack itemStack) { GL11.glPushMatrix(); Minecraft mc = Minecraft.getMinecraft(); EntityLivingBase player = mc.thePlayer; Item item = itemStack.getItem(); Block block = null; if (item instanceof ItemBlock) block = Block.getBlockFromItem(item); TextureUtils.bindItemStackTexture(itemStack); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glDisable(GL11.GL_LIGHTING); IItemRenderer customRenderer = MinecraftForgeClient.getItemRenderer(itemStack, ItemRenderType.ENTITY); if (customRenderer != null) { ForgeHooksClient.renderEquippedItem(ItemRenderType.EQUIPPED, customRenderer, blockRenderer, player, itemStack); } else if (block != null && itemStack.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(block.getRenderType())) { blockRenderer.renderBlockAsItem(block, itemStack.getItemDamage(), 1.0F); } else { renderItem(itemStack, player); } GL11.glEnable(GL11.GL_LIGHTING); GL11.glPopMatrix(); } private static void renderItem(ItemStack itemStack, EntityLivingBase player) { IIcon icon = player.getItemIcon(itemStack, 0); if (icon != null) { Tessellator tessellator = Tessellator.instance; GL11.glTranslatef(-0.5f, -0.5f, 0); ItemRenderer.renderItemIn2D( tessellator, icon.getMaxU(), icon.getMinV(), icon.getMinU(), icon.getMaxV(), icon.getIconWidth(), icon.getIconHeight(), 0.0625F); } } }