From eceb0eab6e8028681dbbfabdd4e47d07c042c413 Mon Sep 17 00:00:00 2001 From: Nicholas Ignoffo Date: Wed, 15 Jun 2016 20:23:15 -0700 Subject: [PATCH] HUD element for Sigil of Holding Needs cleaning and configurability still TODO: Move to HUDElement system that Hemomancy had. --- .../bloodmagic/client/gui/GuiHolding.java | 16 ++-- .../util/handler/event/ClientHandler.java | 88 ++++++++++++++++-- .../bloodmagic/textures/gui/widgets.png | Bin 0 -> 22017 bytes 3 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/assets/bloodmagic/textures/gui/widgets.png diff --git a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java b/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java index ceac8eaf..84dfcc7d 100644 --- a/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java +++ b/src/main/java/WayofTime/bloodmagic/client/gui/GuiHolding.java @@ -4,6 +4,7 @@ import WayofTime.bloodmagic.api.Constants; import WayofTime.bloodmagic.item.inventory.ContainerHolding; import WayofTime.bloodmagic.item.inventory.InventoryHolding; import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; +import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.util.helper.TextHelper; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; @@ -27,14 +28,14 @@ public class GuiHolding extends GuiContainer } @Override - protected void drawGuiContainerForegroundLayer(int param1, int param2) + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { //the parameters for drawString are: string, x, y, color fontRendererObj.drawString(TextHelper.localize("item.BloodMagic.sigil.holding.name"), 53, 4, 4210752); } @Override - protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) + protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouse) { //draw your Gui here, only thing you need to change is the path GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -42,15 +43,10 @@ public class GuiHolding extends GuiContainer int x = (width - xSize) / 2; int y = (height - ySize) / 2; this.drawTexturedModalRect(x, y, 0, 0, xSize, ySize); - - if (player != null && player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() instanceof ItemSigilHolding) + if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() == ModItems.sigilHolding) { - if (ItemSigilHolding.getCurrentSigil(player.getHeldItemMainhand()) != null) - { - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(texture); - this.drawTexturedModalRect(4 + x + 36 * ItemSigilHolding.getCurrentItemOrdinal(player.getHeldItemMainhand()), y + 13, 0, 123, 24, 24); - } + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(4 + x + 36 * ItemSigilHolding.getCurrentItemOrdinal(player.getHeldItemMainhand()), y + 13, 0, 123, 24, 24); } } } diff --git a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java index 1345faa3..c02ed0de 100644 --- a/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java +++ b/src/main/java/WayofTime/bloodmagic/util/handler/event/ClientHandler.java @@ -13,13 +13,17 @@ import WayofTime.bloodmagic.item.ItemRitualReader; import WayofTime.bloodmagic.item.sigil.ItemSigilHolding; import WayofTime.bloodmagic.network.BloodMagicPacketHandler; import WayofTime.bloodmagic.network.SigilHoldingPacketProcessor; +import WayofTime.bloodmagic.registry.ModItems; import WayofTime.bloodmagic.tile.TileMasterRitualStone; import WayofTime.bloodmagic.util.GhostItemHelper; import WayofTime.bloodmagic.util.handler.BMKeyBinding; import WayofTime.bloodmagic.util.helper.TextHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.player.EntityPlayer; @@ -31,6 +35,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; import net.minecraft.world.World; import net.minecraftforge.client.event.MouseEvent; +import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent; @@ -41,6 +46,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; @@ -138,6 +144,61 @@ public class ClientHandler } } + @SubscribeEvent + public void onKey(InputEvent event) + { + if (!minecraft.inGameHasFocus) + return; + + for (BMKeyBinding key : keyBindings) + { + if (key.isPressed()) + key.handleKeyPress(); + } + } + + @SubscribeEvent + public void onGuiRender(RenderGameOverlayEvent.Pre event) + { + if (event.getType() == RenderGameOverlayEvent.ElementType.HOTBAR) + { + ItemStack sigilHolding = minecraft.thePlayer.getHeldItemMainhand(); + // TODO - Clean this mess + // Check mainhand for Sigil of Holding + if (sigilHolding == null) + return; + if (sigilHolding.getItem() != ModItems.sigilHolding) + sigilHolding = minecraft.thePlayer.getHeldItemOffhand(); + // Check offhand for Sigil of Holding + if (sigilHolding == null) + return; + if (sigilHolding.getItem() != ModItems.sigilHolding) + return; + + Gui ingameGui = minecraft.ingameGUI; + + minecraft.getTextureManager().bindTexture(new ResourceLocation(Constants.Mod.MODID, "textures/gui/widgets.png")); + GlStateManager.color(1.0F, 1.0F, 1.0F); + ingameGui.drawTexturedModalRect(event.getResolution().getScaledWidth() / 2 + 100, event.getResolution().getScaledHeight() - 22, 0, 0, 102, 22); + int currentSlot = ItemSigilHolding.getCurrentItemOrdinal(sigilHolding); + ingameGui.drawTexturedModalRect(event.getResolution().getScaledWidth() / 2 + 99 + (currentSlot * 20), event.getResolution().getScaledHeight() - 23, 0, 22, 24, 24); + + RenderHelper.enableGUIStandardItemLighting(); + ItemStack[] holdingInv = ItemSigilHolding.getInternalInventory(sigilHolding); + int xOffset = 0; + if (holdingInv != null) + { + for (ItemStack sigil : holdingInv) + { + renderHotbarItem(event.getResolution().getScaledWidth() / 2 + 103 + xOffset, event.getResolution().getScaledHeight() - 18, event.getPartialTicks(), minecraft.thePlayer, sigil); + xOffset += 20; + } + } + + RenderHelper.disableStandardItemLighting(); + } + } + private void cycleSigil(ItemStack stack, EntityPlayer player, int dWheel) { int mode = ItemSigilHolding.getCurrentItemOrdinal(stack); @@ -232,16 +293,27 @@ public class ClientHandler GlStateManager.popMatrix(); } - @SubscribeEvent - public void onKey(InputEvent event) + protected void renderHotbarItem(int x, int y, float partialTicks, EntityPlayer player, @Nullable ItemStack stack) { - if (!minecraft.inGameHasFocus) - return; - - for (BMKeyBinding key : keyBindings) + if (stack != null) { - if (key.isPressed()) - key.handleKeyPress(); + float animation = (float) stack.animationsToGo - partialTicks; + + if (animation > 0.0F) + { + GlStateManager.pushMatrix(); + float f1 = 1.0F + animation / 5.0F; + GlStateManager.translate((float) (x + 8), (float) (y + 12), 0.0F); + GlStateManager.scale(1.0F / f1, (f1 + 1.0F) / 2.0F, 1.0F); + GlStateManager.translate((float) (-(x + 8)), (float) (-(y + 12)), 0.0F); + } + + minecraft.getRenderItem().renderItemAndEffectIntoGUI(player, stack, x, y); + + if (animation > 0.0F) + GlStateManager.popMatrix(); + + minecraft.getRenderItem().renderItemOverlays(minecraft.fontRendererObj, stack, x, y); } } } diff --git a/src/main/resources/assets/bloodmagic/textures/gui/widgets.png b/src/main/resources/assets/bloodmagic/textures/gui/widgets.png new file mode 100644 index 0000000000000000000000000000000000000000..456166c9145b8337c66386ce688b5ec30a2eb1dd GIT binary patch literal 22017 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 WD@FAW;_m_Sp`og+lCE^&>i+?*!SN9Q literal 0 HcmV?d00001