From 7f13f59ccf6821f874f6515da5982cc932574770 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Fri, 2 Nov 2018 21:10:53 +0100 Subject: [PATCH] made the eye work anywhere in the hotbar and fixed some minor visual issues with player rendering --- .../naturesaura/events/ClientEvents.java | 178 +++++++++--------- .../naturesaura/items/ItemAuraCache.java | 9 +- .../de/ellpeck/naturesaura/items/ItemEye.java | 4 +- .../naturesaura/renderers/ITrinketItem.java | 2 +- .../renderers/PlayerLayerTrinkets.java | 16 +- .../book/en_us/entries/items/eye.json | 2 +- 6 files changed, 111 insertions(+), 100 deletions(-) diff --git a/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java b/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java index ba58d7b5..7f343881 100644 --- a/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java +++ b/src/main/java/de/ellpeck/naturesaura/events/ClientEvents.java @@ -1,6 +1,5 @@ package de.ellpeck.naturesaura.events; -import baubles.api.BaubleType; import baubles.api.BaublesApi; import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.aura.Capabilities; @@ -31,6 +30,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import net.minecraftforge.items.IItemHandler; import org.apache.commons.lang3.mutable.MutableInt; import java.util.List; @@ -90,105 +90,113 @@ public class ClientEvents { if (event.getType() == ElementType.ALL) { ScaledResolution res = event.getResolution(); if (mc.player != null) { - ItemStack stack = mc.player.getHeldItemMainhand(); - if (mc.currentScreen == null) { - if (!stack.isEmpty() && stack.getItem() == ModItems.EYE || Compat.baubles && BaublesApi.isBaubleEquipped(mc.player, ModItems.EYE) >= 0) { - GlStateManager.pushMatrix(); - mc.getTextureManager().bindTexture(OVERLAYS); + ItemStack cache = ItemStack.EMPTY; + ItemStack eye = ItemStack.EMPTY; - GlStateManager.color(0.8F, 0.25F, 0.25F); - float totalPercentage = AuraChunk.getAuraInArea(mc.world, mc.player.getPosition(), 15) / (AuraChunk.DEFAULT_AURA * 2F); - int tHeight = MathHelper.ceil(MathHelper.clamp(totalPercentage, 0F, 1F) * 50); - if (tHeight < 50) - Gui.drawModalRectWithCustomSizedTexture(3, 10, 6, 12, 6, 50 - tHeight, 256, 256); - if (tHeight > 0) - Gui.drawModalRectWithCustomSizedTexture(3, 10 + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256); + if (Compat.baubles) { + IItemHandler baubles = BaublesApi.getBaublesHandler(mc.player); + for (int i = 0; i < baubles.getSlots(); i++) { + ItemStack slot = baubles.getStackInSlot(i); + if (!slot.isEmpty()) { + if (slot.getItem() == ModItems.AURA_CACHE) { + cache = slot; + break; + } else if (slot.getItem() == ModItems.EYE) { + eye = slot; + break; + } + } + } + } - if (mc.objectMouseOver != null) { - BlockPos pos = mc.objectMouseOver.getBlockPos(); - if (pos != null) { - TileEntity tile = mc.world.getTileEntity(pos); - if (tile != null && tile.hasCapability(Capabilities.auraContainer, null)) { - IAuraContainer container = tile.getCapability(Capabilities.auraContainer, null); + if (cache.isEmpty() || eye.isEmpty()) { + for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) { + ItemStack slot = mc.player.inventory.getStackInSlot(i); + if (!slot.isEmpty()) { + if (slot.getItem() == ModItems.AURA_CACHE) { + cache = slot; + break; + } else if (slot.getItem() == ModItems.EYE && i <= 8) { + eye = slot; + break; + } + } + } + } - IBlockState state = mc.world.getBlockState(pos); - ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player); - this.drawContainerInfo(container, mc, res, 25, blockStack.getDisplayName()); + if (!cache.isEmpty()) { + IAuraContainer container = cache.getCapability(Capabilities.auraContainer, null); + int width = MathHelper.ceil(container.getStoredAura() / (float) container.getMaxAura() * 80); + int x = res.getScaledWidth() / 2 - 173 - (mc.player.getHeldItemOffhand().isEmpty() ? 0 : 29); + int y = res.getScaledHeight() - 8; - if (tile instanceof TileEntityNatureAltar) { - ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0); - if (!tileStack.isEmpty() && tileStack.hasCapability(Capabilities.auraContainer, null)) { - IAuraContainer stackContainer = tileStack.getCapability(Capabilities.auraContainer, null); - this.drawContainerInfo(stackContainer, mc, res, 45, tileStack.getDisplayName()); - } + GlStateManager.pushMatrix(); + + int color = container.getAuraColor(); + GlStateManager.color((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F); + mc.getTextureManager().bindTexture(OVERLAYS); + if (width < 80) + Gui.drawModalRectWithCustomSizedTexture(x + width, y, width, 0, 80 - width, 6, 256, 256); + if (width > 0) + Gui.drawModalRectWithCustomSizedTexture(x, y, 0, 6, width, 6, 256, 256); + + float scale = 0.75F; + GlStateManager.scale(scale, scale, scale); + String s = cache.getDisplayName(); + mc.fontRenderer.drawString(s, (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color, true); + + GlStateManager.color(1F, 1F, 1F); + GlStateManager.popMatrix(); + } + + if (!eye.isEmpty()) { + GlStateManager.pushMatrix(); + mc.getTextureManager().bindTexture(OVERLAYS); + + GlStateManager.color(0.8F, 0.25F, 0.25F); + float totalPercentage = AuraChunk.getAuraInArea(mc.world, mc.player.getPosition(), 15) / (AuraChunk.DEFAULT_AURA * 2F); + int tHeight = MathHelper.ceil(MathHelper.clamp(totalPercentage, 0F, 1F) * 50); + if (tHeight < 50) + Gui.drawModalRectWithCustomSizedTexture(3, 10, 6, 12, 6, 50 - tHeight, 256, 256); + if (tHeight > 0) + Gui.drawModalRectWithCustomSizedTexture(3, 10 + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256); + + if (mc.objectMouseOver != null) { + BlockPos pos = mc.objectMouseOver.getBlockPos(); + if (pos != null) { + TileEntity tile = mc.world.getTileEntity(pos); + if (tile != null && tile.hasCapability(Capabilities.auraContainer, null)) { + IAuraContainer container = tile.getCapability(Capabilities.auraContainer, null); + + IBlockState state = mc.world.getBlockState(pos); + ItemStack blockStack = state.getBlock().getPickBlock(state, mc.objectMouseOver, mc.world, pos, mc.player); + this.drawContainerInfo(container, mc, res, 25, blockStack.getDisplayName()); + + if (tile instanceof TileEntityNatureAltar) { + ItemStack tileStack = ((TileEntityNatureAltar) tile).getItemHandler(null).getStackInSlot(0); + if (!tileStack.isEmpty() && tileStack.hasCapability(Capabilities.auraContainer, null)) { + IAuraContainer stackContainer = tileStack.getCapability(Capabilities.auraContainer, null); + this.drawContainerInfo(stackContainer, mc, res, 45, tileStack.getDisplayName()); } } } } - - if (totalPercentage > 1F) - mc.fontRenderer.drawString("+", 10F, 9.5F, 0xBB3333, true); - if (totalPercentage < 0F) - mc.fontRenderer.drawString("-", 10F, 53.5F, 0xBB3333, true); - - float scale = 0.75F; - GlStateManager.scale(scale, scale, scale); - mc.fontRenderer.drawString(I18n.format("info." + NaturesAura.MOD_ID + ".aura_in_area"), 3 / scale, 3 / scale, 0xBB3333, true); - - GlStateManager.color(1F, 1F, 1F); - GlStateManager.popMatrix(); } - } - this.displayAuraCache(mc, res); - } - } - } + if (totalPercentage > 1F) + mc.fontRenderer.drawString("+", 10F, 9.5F, 0xBB3333, true); + if (totalPercentage < 0F) + mc.fontRenderer.drawString("-", 10F, 53.5F, 0xBB3333, true); - private void displayAuraCache(Minecraft mc, ScaledResolution res) { - ItemStack stack = ItemStack.EMPTY; + float scale = 0.75F; + GlStateManager.scale(scale, scale, scale); + mc.fontRenderer.drawString(I18n.format("info." + NaturesAura.MOD_ID + ".aura_in_area"), 3 / scale, 3 / scale, 0xBB3333, true); - if (Compat.baubles) { - ItemStack slot = BaublesApi.getBaublesHandler(mc.player).getStackInSlot(BaubleType.BELT.getValidSlots()[0]); - if (!slot.isEmpty() && slot.getItem() == ModItems.AURA_CACHE) { - stack = slot; - } - } - - if (stack.isEmpty()) { - for (int i = 0; i < mc.player.inventory.getSizeInventory(); i++) { - ItemStack slot = mc.player.inventory.getStackInSlot(i); - if (!slot.isEmpty() && slot.getItem() == ModItems.AURA_CACHE) { - stack = slot; - break; + GlStateManager.color(1F, 1F, 1F); + GlStateManager.popMatrix(); } } } - - if (!stack.isEmpty()) { - IAuraContainer container = stack.getCapability(Capabilities.auraContainer, null); - int width = MathHelper.ceil(container.getStoredAura() / (float) container.getMaxAura() * 80); - int x = res.getScaledWidth() / 2 - 173 - (mc.player.getHeldItemOffhand().isEmpty() ? 0 : 29); - int y = res.getScaledHeight() - 8; - - GlStateManager.pushMatrix(); - - int color = container.getAuraColor(); - GlStateManager.color((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F); - mc.getTextureManager().bindTexture(OVERLAYS); - if (width < 80) - Gui.drawModalRectWithCustomSizedTexture(x + width, y, width, 0, 80 - width, 6, 256, 256); - if (width > 0) - Gui.drawModalRectWithCustomSizedTexture(x, y, 0, 6, width, 6, 256, 256); - - float scale = 0.75F; - GlStateManager.scale(scale, scale, scale); - String s = stack.getDisplayName(); - mc.fontRenderer.drawString(s, (x + 80) / scale - mc.fontRenderer.getStringWidth(s), (y - 7) / scale, color, true); - - GlStateManager.color(1F, 1F, 1F); - GlStateManager.popMatrix(); - } } private void drawContainerInfo(IAuraContainer container, Minecraft mc, ScaledResolution res, int yOffset, String name) { diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java index 0e9efd6b..5c73fb94 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemAuraCache.java @@ -97,10 +97,11 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem { @Override @SideOnly(Side.CLIENT) - public void render(ItemStack stack, EntityPlayer player, RenderType type) { - if (type == RenderType.BODY) { - boolean armor = !player.inventory.armorInventory.get(EntityEquipmentSlot.CHEST.getIndex()).isEmpty(); - GlStateManager.translate(-0.15F, 0.65F, armor ? -0.195F : -0.13F); + public void render(ItemStack stack, EntityPlayer player, RenderType type, boolean isHolding) { + if (type == RenderType.BODY && !isHolding) { + boolean chest = !player.inventory.armorInventory.get(EntityEquipmentSlot.CHEST.getIndex()).isEmpty(); + boolean legs = !player.inventory.armorInventory.get(EntityEquipmentSlot.LEGS.getIndex()).isEmpty(); + GlStateManager.translate(-0.15F, 0.65F, chest ? -0.195F : (legs ? -0.165F : -0.13F)); GlStateManager.scale(0.25F, 0.25F, 0.25F); GlStateManager.rotate(180F, 1F, 0F, 0F); Helper.renderItemInWorld(stack); diff --git a/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java b/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java index 79f3798f..ad7a39a4 100644 --- a/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java +++ b/src/main/java/de/ellpeck/naturesaura/items/ItemEye.java @@ -19,8 +19,8 @@ public class ItemEye extends ItemImpl implements ITrinketItem { @Override @SideOnly(Side.CLIENT) - public void render(ItemStack stack, EntityPlayer player, RenderType type) { - if (type == RenderType.BODY) { + public void render(ItemStack stack, EntityPlayer player, RenderType type, boolean isHolding) { + if (type == RenderType.BODY && !isHolding) { boolean armor = !player.inventory.armorInventory.get(EntityEquipmentSlot.CHEST.getIndex()).isEmpty(); GlStateManager.translate(0.1F, 0.19F, armor ? -0.195F : -0.13F); GlStateManager.scale(0.15F, 0.15F, 0.15F); diff --git a/src/main/java/de/ellpeck/naturesaura/renderers/ITrinketItem.java b/src/main/java/de/ellpeck/naturesaura/renderers/ITrinketItem.java index 3532fa01..d239f085 100644 --- a/src/main/java/de/ellpeck/naturesaura/renderers/ITrinketItem.java +++ b/src/main/java/de/ellpeck/naturesaura/renderers/ITrinketItem.java @@ -9,5 +9,5 @@ import net.minecraftforge.fml.relauncher.SideOnly; public interface ITrinketItem { @SideOnly(Side.CLIENT) - void render(ItemStack stack, EntityPlayer player, RenderType type); + void render(ItemStack stack, EntityPlayer player, RenderType type, boolean isHolding); } diff --git a/src/main/java/de/ellpeck/naturesaura/renderers/PlayerLayerTrinkets.java b/src/main/java/de/ellpeck/naturesaura/renderers/PlayerLayerTrinkets.java index 2f464f3e..be28ea61 100644 --- a/src/main/java/de/ellpeck/naturesaura/renderers/PlayerLayerTrinkets.java +++ b/src/main/java/de/ellpeck/naturesaura/renderers/PlayerLayerTrinkets.java @@ -25,36 +25,38 @@ public class PlayerLayerTrinkets implements LayerRenderer { public void doRenderLayer(@Nonnull EntityPlayer player, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { if (player.getActivePotionEffect(MobEffects.INVISIBILITY) != null) return; + ItemStack main = player.getHeldItemMainhand(); + ItemStack second = player.getHeldItemOffhand(); this.alreadyRendered.clear(); GlStateManager.pushMatrix(); GlStateManager.color(1F, 1F, 1F, 1F); - this.render(player, RenderType.BODY); + this.render(player, RenderType.BODY, main, second); float yaw = player.prevRotationYawHead + (player.rotationYawHead - player.prevRotationYawHead) * partialTicks; float yawOffset = player.prevRenderYawOffset + (player.renderYawOffset - player.prevRenderYawOffset) * partialTicks; float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * partialTicks; GlStateManager.rotate(yawOffset, 0, -1, 0); GlStateManager.rotate(yaw - 270, 0, 1, 0); GlStateManager.rotate(pitch, 0, 0, 1); - this.render(player, RenderType.HEAD); + this.render(player, RenderType.HEAD, main, second); GlStateManager.popMatrix(); } - private void render(EntityPlayer player, RenderType type) { + private void render(EntityPlayer player, RenderType type, ItemStack main, ItemStack second) { for (int i = 0; i < player.inventory.getSizeInventory(); i++) { - this.renderStack(player.inventory.getStackInSlot(i), player, type); + this.renderStack(player.inventory.getStackInSlot(i), player, type, main, second); } if (Compat.baubles) { IItemHandler baubles = BaublesApi.getBaublesHandler(player); for (int i = 0; i < baubles.getSlots(); i++) { - this.renderStack(baubles.getStackInSlot(i), player, type); + this.renderStack(baubles.getStackInSlot(i), player, type, main, second); } } } - private void renderStack(ItemStack stack, EntityPlayer player, RenderType type) { + private void renderStack(ItemStack stack, EntityPlayer player, RenderType type, ItemStack main, ItemStack second) { if (!stack.isEmpty()) { Item item = stack.getItem(); if (item instanceof ITrinketItem && !this.alreadyRendered.contains(item)) { @@ -63,7 +65,7 @@ public class PlayerLayerTrinkets implements LayerRenderer { GlStateManager.translate(0F, 0.2F, 0F); GlStateManager.rotate(90F / (float) Math.PI, 1.0F, 0.0F, 0.0F); } - ((ITrinketItem) item).render(stack, player, type); + ((ITrinketItem) item).render(stack, player, type, stack == main || stack == second); GlStateManager.popMatrix(); this.alreadyRendered.add(item); } diff --git a/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/items/eye.json b/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/items/eye.json index bea6f7cc..77d89440 100644 --- a/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/items/eye.json +++ b/src/main/resources/assets/naturesaura/patchouli_books/book/en_us/entries/items/eye.json @@ -6,7 +6,7 @@ "pages": [ { "type": "text", - "text": "When working with $(aura), by nature, it will be hard to grasp just how much there is in any given area or storage device. The $(item)Environmental Eye$() has the powers to display this information to botanists though: Once created, merely holding it in your hand will display several pieces of information:" + "text": "When working with $(aura), by nature, it will be hard to grasp just how much there is in any given area or storage device. The $(item)Environmental Eye$() has the powers to display this information to botanists though: Once created, merely holding it anywhere in one's hotbar will display several pieces of information:" }, { "type": "text",