diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index f19230eab..87170c2e5 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -196,6 +196,7 @@ public class ClientProxy extends CommonProxy } else { ItemStack stack = entityplayer.getCurrentEquippedItem(); + if(stack != null && stack.getItem() instanceof IElectricChest && ((IElectricChest)stack.getItem()).isElectricChest(stack)) { FMLClientHandler.instance().displayGuiScreen(entityplayer, new GuiPasswordEnter(stack)); @@ -210,6 +211,7 @@ public class ClientProxy extends CommonProxy } else { ItemStack stack = entityplayer.getCurrentEquippedItem(); + if(stack != null && stack.getItem() instanceof IElectricChest && ((IElectricChest)stack.getItem()).isElectricChest(stack)) { FMLClientHandler.instance().displayGuiScreen(entityplayer, new GuiPasswordModify(stack)); @@ -255,12 +257,15 @@ public class ClientProxy extends CommonProxy RenderingRegistry.registerEntityRenderingHandler(EntityRobit.class, new RenderRobit()); //Register item handler - MinecraftForgeClient.registerItemRenderer(Mekanism.energyCubeID, new ItemRenderingHandler()); - MinecraftForgeClient.registerItemRenderer(Mekanism.machineBlockID, new ItemRenderingHandler()); - MinecraftForgeClient.registerItemRenderer(Mekanism.Robit.itemID, new ItemRenderingHandler()); - MinecraftForgeClient.registerItemRenderer(Mekanism.WalkieTalkie.itemID, new ItemRenderingHandler()); - MinecraftForgeClient.registerItemRenderer(Mekanism.gasTankID, new ItemRenderingHandler()); - MinecraftForgeClient.registerItemRenderer(Mekanism.obsidianTNTID, new ItemRenderingHandler()); + ItemRenderingHandler handler = new ItemRenderingHandler(); + + MinecraftForgeClient.registerItemRenderer(Mekanism.energyCubeID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.machineBlockID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.Robit.itemID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.WalkieTalkie.itemID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.gasTankID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.obsidianTNTID, handler); + MinecraftForgeClient.registerItemRenderer(Mekanism.basicBlockID, handler); //Register block handlers RenderingRegistry.registerBlockHandler(new MachineRenderingHandler()); diff --git a/common/mekanism/client/render/MekanismRenderer.java b/common/mekanism/client/render/MekanismRenderer.java index 84ab1b381..a4a4acd42 100644 --- a/common/mekanism/client/render/MekanismRenderer.java +++ b/common/mekanism/client/render/MekanismRenderer.java @@ -418,7 +418,7 @@ public class MekanismRenderer } } - public static float getPartialTicks() + public static float getPartialTick() { try { Timer t = (Timer)MekanismUtils.getPrivateValue(Minecraft.getMinecraft(), Minecraft.class, ObfuscatedNames.Minecraft_timer); diff --git a/common/mekanism/client/render/item/ItemRenderingHandler.java b/common/mekanism/client/render/item/ItemRenderingHandler.java index 6394d1320..50ce018e7 100644 --- a/common/mekanism/client/render/item/ItemRenderingHandler.java +++ b/common/mekanism/client/render/item/ItemRenderingHandler.java @@ -1,6 +1,7 @@ package mekanism.client.render.item; import mekanism.api.EnumColor; +import mekanism.api.Object3D; import mekanism.api.energy.IEnergizedItem; import mekanism.client.ClientProxy; import mekanism.client.MekanismClient; @@ -10,22 +11,35 @@ import mekanism.client.model.ModelGasTank; import mekanism.client.model.ModelObsidianTNT; import mekanism.client.model.ModelRobit; import mekanism.client.render.MekanismRenderer; +import mekanism.client.render.tileentity.RenderBin; import mekanism.common.IElectricChest; import mekanism.common.IEnergyCube; import mekanism.common.Mekanism; import mekanism.common.Tier.EnergyCubeTier; import mekanism.common.block.BlockMachine.MachineType; +import mekanism.common.inventory.InventoryBin; +import mekanism.common.item.ItemBlockBasic; import mekanism.common.item.ItemBlockMachine; import mekanism.common.item.ItemRobit; import mekanism.common.item.ItemWalkieTalkie; +import mekanism.common.tileentity.TileEntityBin; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.model.ModelChest; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; +import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.ForgeDirection; import org.lwjgl.opengl.GL11; @@ -43,6 +57,9 @@ public class ItemRenderingHandler implements IItemRenderer public ModelGasTank gasTank = new ModelGasTank(); public ModelObsidianTNT obsidianTNT = new ModelObsidianTNT(); + public RenderBin binRenderer = (RenderBin)TileEntityRenderer.instance.specialRendererMap.get(TileEntityBin.class); + private final RenderItem renderItem = (RenderItem)RenderManager.instance.getEntityClassRenderObject(EntityItem.class); + @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { @@ -63,6 +80,8 @@ public class ItemRenderingHandler implements IItemRenderer @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + RenderBlocks renderBlocks = (RenderBlocks)data[0]; + if(type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) { GL11.glTranslatef(0.5F, 0.5F, 0.5F); @@ -95,9 +114,9 @@ public class ItemRenderingHandler implements IItemRenderer GL11.glPushMatrix(); GL11.glScalef(0.4F, 0.4F, 0.4F); GL11.glColor4f(c.getColor(0), c.getColor(1), c.getColor(2), (float)(energized.getEnergy(item)/energized.getMaxEnergy(item))); - GL11.glTranslatef(0, (float)Math.sin(Math.toRadians((MekanismClient.ticksPassed + MekanismRenderer.getPartialTicks()) * 3)) / 7, 0); - GL11.glRotatef((MekanismClient.ticksPassed + MekanismRenderer.getPartialTicks()) * 4, 0, 1, 0); - GL11.glRotatef(36F + (MekanismClient.ticksPassed + MekanismRenderer.getPartialTicks()) * 4, 0, 1, 1); + GL11.glTranslatef(0, (float)Math.sin(Math.toRadians((MekanismClient.ticksPassed + MekanismRenderer.getPartialTick()) * 3)) / 7, 0); + GL11.glRotatef((MekanismClient.ticksPassed + MekanismRenderer.getPartialTick()) * 4, 0, 1, 0); + GL11.glRotatef(36F + (MekanismClient.ticksPassed + MekanismRenderer.getPartialTick()) * 4, 0, 1, 1); energyCore.render(0.0625F); GL11.glPopMatrix(); @@ -109,6 +128,121 @@ public class ItemRenderingHandler implements IItemRenderer GL11.glDisable(GL11.GL_BLEND); GL11.glPopMatrix(); + } + else if(item.getItem() instanceof ItemBlockBasic && item.getItemDamage() == 6) + { + RenderingRegistry.instance().renderInventoryBlock((RenderBlocks)data[0], Block.blocksList[Mekanism.basicBlockID], item.getItemDamage(), ClientProxy.BASIC_RENDER_ID); + + if(binRenderer == null || binRenderer.getFontRenderer() == null) + { + return; + } + + InventoryBin inv = new InventoryBin(item); + ForgeDirection side = ForgeDirection.getOrientation(2); + + String amount = ""; + ItemStack itemStack = inv.getStack(); + + if(itemStack != null) + { + amount = Integer.toString(inv.getItemCount()); + } + + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); + + if(itemStack != null) + { + GL11.glPushMatrix(); + + if(type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) + { + GL11.glTranslated(-0.2, 0, -0.4); + } + + //TODO + GL11.glTranslated(0.73, 0.53, -0.01); + GL11.glRotatef(90, 0, 1, 0); + + float scale = 0.03125F; + float scaler = 0.9F; + + GL11.glScalef(scale*scaler, scale*scaler, 0); + GL11.glRotatef(180, 0, 0, 1); + + TextureManager renderEngine = Minecraft.getMinecraft().renderEngine; + + GL11.glDisable(2896); + GL11.glEnable(GL11.GL_CULL_FACE); + if(!ForgeHooksClient.renderInventoryItem(renderBlocks, renderEngine, itemStack, true, 0.0F, 0.0F, 0.0F)) + { + renderItem.renderItemIntoGUI(binRenderer.getFontRenderer(), renderEngine, itemStack, 0, 0); + } + + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(2896); + GL11.glPopMatrix(); + } + + if(amount != "") + { + float maxScale = 0.02F; + + GL11.glPushMatrix(); + + GL11.glPolygonOffset(-10, -10); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + + float displayWidth = 1 - (2 / 16); + float displayHeight = 1 - (2 / 16); + GL11.glTranslatef(0, -0.31F, 0); + + if(type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) + { + GL11.glTranslated(-0.4, 0, -0.4); + } + + //TODO + GL11.glTranslatef(0, 0.9F, 1); + GL11.glRotatef(90, 0, 1, 0); + GL11.glRotatef(90, 1, 0, 0); + + GL11.glTranslatef(displayWidth / 2, 1F, displayHeight / 2); + GL11.glRotatef(-90, 1, 0, 0); + + FontRenderer fontRenderer = binRenderer.getFontRenderer(); + + int requiredWidth = Math.max(fontRenderer.getStringWidth(amount), 1); + int lineHeight = fontRenderer.FONT_HEIGHT + 2; + int requiredHeight = lineHeight * 1; + float scaler = 0.4F; + float scaleX = (displayWidth / requiredWidth); + float scale = scaleX * scaler; + + if(maxScale > 0) + { + scale = Math.min(scale, maxScale); + } + + GL11.glScalef(scale, -scale, scale); + GL11.glDepthMask(false); + + int offsetX; + int offsetY; + int realHeight = (int)Math.floor(displayHeight / scale); + int realWidth = (int)Math.floor(displayWidth / scale); + + offsetX = (realWidth - requiredWidth) / 2; + offsetY = (realHeight - requiredHeight) / 2; + + GL11.glDisable(GL11.GL_LIGHTING); + fontRenderer.drawString("\u00a7f" + amount, offsetX - (realWidth / 2), 1 + offsetY - (realHeight / 2), 1); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + + GL11.glPopMatrix(); + } } else if(item.itemID == Mekanism.gasTankID) { @@ -151,7 +285,7 @@ public class ItemRenderingHandler implements IItemRenderer Minecraft.getMinecraft().renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ElectricChest.png")); - float lidangle = chest.getPrevLidAngle(item) + (chest.getLidAngle(item) - chest.getPrevLidAngle(item)) * MekanismRenderer.getPartialTicks(); + float lidangle = chest.getPrevLidAngle(item) + (chest.getLidAngle(item) - chest.getPrevLidAngle(item)) * MekanismRenderer.getPartialTick(); lidangle = 1.0F - lidangle; lidangle = 1.0F - lidangle * lidangle * lidangle; electricChest.chestLid.rotateAngleX = -((lidangle * 3.141593F) / 2.0F); @@ -167,7 +301,14 @@ public class ItemRenderingHandler implements IItemRenderer robit.render(0.08F); } else { - RenderingRegistry.instance().renderInventoryBlock((RenderBlocks)data[0], Block.blocksList[Mekanism.machineBlockID], item.getItemDamage(), ClientProxy.MACHINE_RENDER_ID); + if(item.getItem() instanceof ItemBlockMachine) + { + RenderingRegistry.instance().renderInventoryBlock((RenderBlocks)data[0], Block.blocksList[Mekanism.machineBlockID], item.getItemDamage(), ClientProxy.MACHINE_RENDER_ID); + } + else if(item.getItem() instanceof ItemBlockBasic) + { + RenderingRegistry.instance().renderInventoryBlock((RenderBlocks)data[0], Block.blocksList[Mekanism.basicBlockID], item.getItemDamage(), ClientProxy.BASIC_RENDER_ID); + } } } }