diff --git a/src/main/java/com/pahimar/ee3/client/handler/HUDTickHandler.java b/src/main/java/com/pahimar/ee3/client/handler/HUDTickHandler.java index 46de9f83..87199c09 100644 --- a/src/main/java/com/pahimar/ee3/client/handler/HUDTickHandler.java +++ b/src/main/java/com/pahimar/ee3/client/handler/HUDTickHandler.java @@ -83,5 +83,9 @@ public class HUDTickHandler { GL11.glDisable(GL11.GL_LIGHTING); GL11.glPopMatrix(); GL11.glPopMatrix(); + + ((IOverlayItem) itemStack.getItem()) + .getOverlayItemRenderer() + .renderOverlayItem(entityPlayer, itemStack); } } diff --git a/src/main/java/com/pahimar/ee3/client/renderer/IOverlayItemRenderer.java b/src/main/java/com/pahimar/ee3/client/renderer/IOverlayItemRenderer.java new file mode 100644 index 00000000..4be6bd39 --- /dev/null +++ b/src/main/java/com/pahimar/ee3/client/renderer/IOverlayItemRenderer.java @@ -0,0 +1,11 @@ +package com.pahimar.ee3.client.renderer; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * A renderer to render IOverlayItems in the HUD. + */ +public interface IOverlayItemRenderer { + void renderOverlayItem(EntityPlayer player, ItemStack stack); +} diff --git a/src/main/java/com/pahimar/ee3/client/renderer/overlay_item/MiniumStoneOverlayItemRenderer.java b/src/main/java/com/pahimar/ee3/client/renderer/overlay_item/MiniumStoneOverlayItemRenderer.java new file mode 100644 index 00000000..54ff477a --- /dev/null +++ b/src/main/java/com/pahimar/ee3/client/renderer/overlay_item/MiniumStoneOverlayItemRenderer.java @@ -0,0 +1,73 @@ +package com.pahimar.ee3.client.renderer.overlay_item; + +import com.pahimar.ee3.client.renderer.IOverlayItemRenderer; +import com.pahimar.ee3.client.util.RenderUtils; +import com.pahimar.ee3.util.TransmutationHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import org.lwjgl.opengl.GL11; + +public class MiniumStoneOverlayItemRenderer implements IOverlayItemRenderer { + public static final MiniumStoneOverlayItemRenderer INSTANCE + = new MiniumStoneOverlayItemRenderer(); + + @Override + public void renderOverlayItem(EntityPlayer player, ItemStack stack) { + Minecraft minecraft = Minecraft.getMinecraft(); + //float overlayScale = ConfigurationSettings.TARGET_BLOCK_OVERLAY_SCALE; + float overlayScale = 2.0f; + float blockScale = overlayScale / 2.0F; + //float overlayOpacity = ConfigurationSettings.TARGET_BLOCK_OVERLAY_OPACITY; + float overlayOpacity = 1.0f; + GL11.glPushMatrix(); + ScaledResolution sr = new ScaledResolution( + minecraft, minecraft.displayWidth, minecraft.displayHeight + ); + GL11.glClear(256); + GL11.glMatrixMode(5889); + GL11.glLoadIdentity(); + GL11.glOrtho( + 0.0, + sr.getScaledWidth_double(), + sr.getScaledHeight_double(), + 0.0, + 1000.0, + 3000.0 + ); + GL11.glMatrixMode(5888); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -2000.0F); + GL11.glPushMatrix(); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(2896); + GL11.glEnable(32826); + GL11.glEnable(2903); + GL11.glEnable(2896); + int hudBlockX = 0; + int hudBlockY = 0; + hudBlockX + = (int) ((float) sr.getScaledWidth() - 16.0F * overlayScale / 2.0F - 8.0F); + hudBlockY + = (int) ((float) sr.getScaledHeight() - 16.0F * overlayScale / 2.0F - 8.0F); + + if (TransmutationHelper.targetBlockStack != null + && TransmutationHelper.targetBlockStack.getItem() instanceof ItemBlock) { + RenderUtils.renderRotatingBlockIntoGUI( + minecraft.fontRenderer, + TransmutationHelper.targetBlockStack, + hudBlockX, + hudBlockY, + -90.0F, + blockScale + ); + } + + GL11.glDisable(2896); + GL11.glPopMatrix(); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/pahimar/ee3/client/util/RenderUtils.java b/src/main/java/com/pahimar/ee3/client/util/RenderUtils.java index 0f448c57..0f4c0fa1 100644 --- a/src/main/java/com/pahimar/ee3/client/util/RenderUtils.java +++ b/src/main/java/com/pahimar/ee3/client/util/RenderUtils.java @@ -1,7 +1,10 @@ package com.pahimar.ee3.client.util; import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.item.ItemStack; @@ -11,6 +14,8 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; public class RenderUtils { + private static int rotationAngle = 0; + public static void bindTexture(ResourceLocation texture) { FMLClientHandler.instance().getClient().getTextureManager().bindTexture(texture); } @@ -95,4 +100,36 @@ public class RenderUtils { private static double getPulseValue() { return (Math.sin(System.nanoTime() / 100f) + 1) / 2; } + + public static void renderRotatingBlockIntoGUI( + FontRenderer fontRenderer, + ItemStack stack, + int x, + int y, + float zLevel, + float scale + ) { + RenderBlocks renderBlocks = new RenderBlocks(); + Block block = Block.getBlockFromItem(stack.getItem()); + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture + ); + GL11.glPushMatrix(); + GL11.glTranslatef((float) (x - 2), (float) (y + 3), -3.0F + zLevel); + GL11.glScalef(10.0F, 10.0F, 10.0F); + GL11.glTranslatef(1.0F, 0.5F, 1.0F); + GL11.glScalef(1.0F * scale, 1.0F * scale, -1.0F); + GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(0.0F + (float) (1 * rotationAngle), 0.0F, 1.0F, 0.0F); + rotationAngle = (rotationAngle + 1) % 360; + int var10 = stack.getItem().getColorFromItemStack(stack, 0); + float var16 = (float) (var10 >> 16 & 255) / 255.0F; + float var12 = (float) (var10 >> 8 & 255) / 255.0F; + float var13 = (float) (var10 & 255) / 255.0F; + GL11.glColor4f(var16, var12, var13, 1.0F); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + renderBlocks.useInventoryTint = true; + renderBlocks.renderBlockAsItem(block, stack.getItemDamage(), 1.0F); + renderBlocks.useInventoryTint = true; + GL11.glPopMatrix(); + } } diff --git a/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java b/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java index 1c982767..376f1780 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java +++ b/src/main/java/com/pahimar/ee3/item/ItemMiniumStone.java @@ -1,6 +1,8 @@ package com.pahimar.ee3.item; import com.pahimar.ee3.EquivalentExchange3; +import com.pahimar.ee3.client.renderer.IOverlayItemRenderer; +import com.pahimar.ee3.client.renderer.overlay_item.MiniumStoneOverlayItemRenderer; import com.pahimar.ee3.reference.GUIs; import com.pahimar.ee3.reference.Key; import com.pahimar.ee3.reference.Names; @@ -134,4 +136,10 @@ public class ItemMiniumStone //thePlayer.openGui((Object)EquivalentExchange3.instance, 1, thePlayer.worldObj, //(int)thePlayer.posX, (int)thePlayer.posY, (int)thePlayer.posZ); } + + @Override + @SideOnly(Side.CLIENT) + public IOverlayItemRenderer getOverlayItemRenderer() { + return MiniumStoneOverlayItemRenderer.INSTANCE; + } } diff --git a/src/main/java/com/pahimar/ee3/item/ItemPhilosophersStone.java b/src/main/java/com/pahimar/ee3/item/ItemPhilosophersStone.java index 21b1be5c..81c13553 100644 --- a/src/main/java/com/pahimar/ee3/item/ItemPhilosophersStone.java +++ b/src/main/java/com/pahimar/ee3/item/ItemPhilosophersStone.java @@ -1,10 +1,14 @@ package com.pahimar.ee3.item; +import com.pahimar.ee3.client.renderer.IOverlayItemRenderer; import com.pahimar.ee3.reference.Key; import com.pahimar.ee3.reference.Names; import com.pahimar.ee3.util.IKeyBound; import com.pahimar.ee3.util.IOverlayItem; import com.pahimar.ee3.util.LogHelper; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -58,4 +62,10 @@ public class ItemPhilosophersStone public void transmuteBlock( ItemStack p0, EntityPlayer p1, World p2, int p3, int p4, int p5, int p6 ) {} + + @Override + @SideOnly(Side.CLIENT) + public IOverlayItemRenderer getOverlayItemRenderer() { + return (e, s) -> {}; + } } diff --git a/src/main/java/com/pahimar/ee3/util/IOverlayItem.java b/src/main/java/com/pahimar/ee3/util/IOverlayItem.java index ace9409a..a0704393 100644 --- a/src/main/java/com/pahimar/ee3/util/IOverlayItem.java +++ b/src/main/java/com/pahimar/ee3/util/IOverlayItem.java @@ -1,3 +1,10 @@ package com.pahimar.ee3.util; -public interface IOverlayItem {} +import com.pahimar.ee3.client.renderer.IOverlayItemRenderer; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public interface IOverlayItem { + @SideOnly(Side.CLIENT) + IOverlayItemRenderer getOverlayItemRenderer(); +}