diff options
author | ThatGravyBoat <thatgravyboat@gmail.com> | 2021-07-06 15:10:29 -0230 |
---|---|---|
committer | ThatGravyBoat <thatgravyboat@gmail.com> | 2021-07-06 15:10:29 -0230 |
commit | 6d8e1e5659f64a4f9ba86d6ab5bbc8e688faf22a (patch) | |
tree | 7451e53ceeae3c324d83a7faba83ce80005e6f23 /src/main/java/com/thatgravyboat/skyblockhud/overlay | |
download | SkyblockHud-Death-Defied-6d8e1e5659f64a4f9ba86d6ab5bbc8e688faf22a.tar.gz SkyblockHud-Death-Defied-6d8e1e5659f64a4f9ba86d6ab5bbc8e688faf22a.tar.bz2 SkyblockHud-Death-Defied-6d8e1e5659f64a4f9ba86d6ab5bbc8e688faf22a.zip |
Initial Commit
Diffstat (limited to 'src/main/java/com/thatgravyboat/skyblockhud/overlay')
4 files changed, 582 insertions, 0 deletions
diff --git a/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java b/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java new file mode 100644 index 0000000..4a3b36f --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java @@ -0,0 +1,150 @@ +package com.thatgravyboat.skyblockhud.overlay; + +import com.thatgravyboat.skyblockhud.GuiTextures; +import com.thatgravyboat.skyblockhud.SkyblockHud; +import com.thatgravyboat.skyblockhud.SpecialColour; +import com.thatgravyboat.skyblockhud.Utils; +import com.thatgravyboat.skyblockhud.config.SBHConfig; +import com.thatgravyboat.skyblockhud.core.config.Position; +import com.thatgravyboat.skyblockhud.dungeons.Classes; +import com.thatgravyboat.skyblockhud.dungeons.DungeonHandler; +import com.thatgravyboat.skyblockhud.dungeons.DungeonPlayer; +import com.thatgravyboat.skyblockhud.handlers.BossbarHandler; +import com.thatgravyboat.skyblockhud.location.LocationHandler; +import com.thatgravyboat.skyblockhud.location.Locations; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.boss.BossStatus; +import net.minecraftforge.client.GuiIngameForge; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +public class DungeonOverlay extends Gui { + private static final FontRenderer font = Minecraft.getMinecraft().fontRendererObj; + private static boolean bossBarVisible = false; + + public void drawDungeonPlayer(String name, int health, boolean isDead, Classes dungeonClass, int x, int y) { + if (!SkyblockHud.config.dungeon.hideDeadDungeonPlayers || !isDead) { + GlStateManager.enableBlend(); + Minecraft mc = Minecraft.getMinecraft(); + mc.renderEngine.bindTexture(GuiTextures.dungeon); + + String healthString = isDead ? "DEAD" : Integer.toString(health); + GlStateManager.color(1.0F, 1.0F, 1.0F, (float) SkyblockHud.config.dungeon.dungeonPlayerOpacity / 100); + drawTexturedModalRect(x, y, 0, dungeonClass.getTextureY(), 120, 32); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + drawString(font, name, x + 50, y + 6, 0xFFFFFF); + drawString(font, healthString, x + 50, y + font.FONT_HEIGHT + 9, 0xFF2B2B); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + public void drawDungeonClock(int width, int offset, Minecraft mc){ + GlStateManager.enableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int dungeonTime = DungeonHandler.getDungeonTime(); + int dungeonTimeMin = dungeonTime /60; + int dungeonTimeSec = dungeonTime - dungeonTimeMin * 60; + drawTexturedModalRect((width/ 2) - 17, offset + (bossBarVisible ? 17 : 0), 0, 0, 34, 34); + mc.renderEngine.bindTexture(GuiTextures.dungeon); + drawTexturedModalRect((width/ 2) - 7, offset + (bossBarVisible ? 20 : 3), 16, 50, 3, 8); + drawTexturedModalRect((width/ 2) - 7, offset + (bossBarVisible ? 30 : 13), 19, 50, 3, 8); + String dungeonTimeElapsed = (dungeonTimeMin > 9 ? String.valueOf(dungeonTimeMin) : "0" + dungeonTimeMin) + ":" + (dungeonTimeSec > 9 ? String.valueOf(dungeonTimeSec) : "0" + dungeonTimeSec); + drawCenteredString(font, dungeonTimeElapsed, (width/ 2), offset + (bossBarVisible ? 40 : 23), 0xFFFF55); + //KEYS + drawString(font, (DungeonHandler.hasBloodkey() ? "\u2714" : "x"), (width/ 2), offset + (bossBarVisible ? 19 : 2), (DungeonHandler.hasBloodkey() ? 0x55FF55 : 0xAA0000)); + drawString(font, DungeonHandler.getWitherKeys()+"x", (width/ 2), offset + (bossBarVisible ? 30 : 13), 0x555555); + //CLEARED PERCENTAGE + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int clearPercent = DungeonHandler.getDungeonCleared(); + String clearPercentage = "Dungeon Cleared: \u00A7" + (clearPercent <= 20 ? "4" : clearPercent <= 50 ? "6" : clearPercent <= 80 ? "e" : "a") + clearPercent + "%"; + drawTexturedModalRect((width / 2) + 17, offset + (bossBarVisible ? 20 : 3), 2, 34, font.getStringWidth(clearPercentage) + 3, 14); + drawTexturedModalRect(((width / 2) + 17) + font.getStringWidth(clearPercentage) + 3, offset + (bossBarVisible ? 20 : 3), 252, 34, 4, 14); + drawString(font, clearPercentage, (width / 2) + 18, offset + (bossBarVisible ? 23 : 6), 0xAAAAAA); + + //DEATHS + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int deaths = DungeonHandler.getDeaths(); + String deathText = "Deaths: " + deaths; + drawTexturedModalRect((width / 2) + 17, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(deathText) + 3, 14); + drawTexturedModalRect(((width / 2) + 17) + font.getStringWidth(deathText) + 3, offset + (bossBarVisible ? 35 : 18), 252, 34, 4, 14); + drawString(font, deathText, (width / 2) + 18, offset + (bossBarVisible ? 38 : 21), 0xAAAAAA); + + //SECRETS + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int maxSecrets = DungeonHandler.getMaxSecrets(); + int secrets = DungeonHandler.getSecrets(); + int totalSecrets = DungeonHandler.getTotalSecrets(); + String secretsText = "Secrets: " + secrets + "/" + maxSecrets + " (" + totalSecrets + ")"; + drawTexturedModalRect((width/ 2) - 17 - (font.getStringWidth(secretsText)) - 4, offset + (bossBarVisible ? 20 : 3), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 17 - (font.getStringWidth(secretsText))) - 2, offset + (bossBarVisible ? 20 : 3), 2, 34, font.getStringWidth(secretsText) + 2, 14); + drawString(font, secretsText, (width/ 2) - 17 - (font.getStringWidth(secretsText)) , offset + (bossBarVisible ? 23 : 6), 0xAAAAAA); + + //CRYPTS + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int crypts = DungeonHandler.getCrypts(); + String cryptText = "Crypts: " + crypts; + drawTexturedModalRect((width/ 2) - 17 - (font.getStringWidth(cryptText)) - 4, offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 17 - (font.getStringWidth(cryptText))) - 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(cryptText) + 2, 14); + drawString(font, cryptText, (width/ 2) - 17 - (font.getStringWidth(cryptText)) , offset + (bossBarVisible ? 38 : 21), 0xAAAAAA); + } + + public void drawUltimateBar(Minecraft mc, ScaledResolution resolution){ + if (!SkyblockHud.config.dungeon.hideUltimateBar) { + float percentage = mc.thePlayer.experience; + SBHConfig.DungeonHud dungeonHud = SkyblockHud.config.dungeon; + Position position = dungeonHud.barPosition; + + int x = position.getAbsX(resolution, 182); + int y = position.getAbsY(resolution, 5); + + GenericOverlays.drawLargeBar(mc, + x - 91, y, + percentage, 0.999f, + SpecialColour.specialToChromaRGB(dungeonHud.barLoadColor), + SpecialColour.specialToChromaRGB(dungeonHud.barFullColor), + dungeonHud.barStyle); + } + } + + @SubscribeEvent + public void renderOverlay(RenderGameOverlayEvent.Post event) { + Minecraft mc = Minecraft.getMinecraft(); + if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard(), LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS))) { + bossBarVisible = BossStatus.statusBarTime > 0 && GuiIngameForge.renderBossHealth && BossbarHandler.bossBarRendered; + GlStateManager.enableBlend(); + drawUltimateBar(mc, event.resolution); + + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + if (!SkyblockHud.config.dungeon.hideDungeonPlayers) { + int[] hardCodedPos = new int[]{5, 42, 79, 116}; + Position[] positions = new Position[]{SkyblockHud.config.dungeon.dungeonPlayer1, SkyblockHud.config.dungeon.dungeonPlayer2, SkyblockHud.config.dungeon.dungeonPlayer3, SkyblockHud.config.dungeon.dungeonPlayer4}; + for (int i = 0; i < Math.min(DungeonHandler.getDungeonPlayers().values().size(), 4); i++) { + DungeonPlayer player = (DungeonPlayer) DungeonHandler.getDungeonPlayers().values().toArray()[i]; + int posX; + int posY; + try { + posX = positions[i].getAbsX(event.resolution, 120); + } catch (ArrayIndexOutOfBoundsException ignored) { + posX = hardCodedPos[i]; + } + try { + posY = positions[i].getAbsY(event.resolution, 120); + } catch (ArrayIndexOutOfBoundsException ignored) { + posY = 0; + } + drawDungeonPlayer(player.getName(), player.getHealth(), player.isDead(), player.getDungeonClass(), posX, posY); + } + } + drawDungeonClock(event.resolution.getScaledWidth(), SkyblockHud.config.main.mainHudPos.getAbsY(event.resolution, 34), mc); + } + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/overlay/GenericOverlays.java b/src/main/java/com/thatgravyboat/skyblockhud/overlay/GenericOverlays.java new file mode 100644 index 0000000..d987c86 --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/GenericOverlays.java @@ -0,0 +1,44 @@ +package com.thatgravyboat.skyblockhud.overlay; + +import com.thatgravyboat.skyblockhud.GuiTextures; +import com.thatgravyboat.skyblockhud.SkyblockHud; +import com.thatgravyboat.skyblockhud.core.util.render.RenderUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; + +import java.awt.Color; + + +public class GenericOverlays extends Gui { + + public static void drawLargeBar(Minecraft mc, int x, int y, float percentage, float max, int fullColor, int loadingColor, int barStyle){ + if (SkyblockHud.hasSkyblockScoreboard()) { + mc.renderEngine.bindTexture(GuiTextures.bars); + Color color = new Color(percentage == max ? fullColor : loadingColor); + + RenderUtils.drawTexturedModalRect(x, y, 0, 0, 182, 5); + GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); + RenderUtils.drawTexturedModalRect(x, y, 0, 30, 182, 5); + RenderUtils.drawTexturedModalRect(x, y, 0, 5, (int) (182 * percentage), 5); + if (barStyle != 0) { + RenderUtils.drawTexturedModalRect(x, y, 0, 5 + (barStyle * 5), 182, 5); + } + } + } + + public static void drawSmallBar(Minecraft mc, int x, int y, double percentage, double max, int fullColor, int loadingColor, int barStyle){ + if (SkyblockHud.hasSkyblockScoreboard()) { + mc.renderEngine.bindTexture(GuiTextures.bars); + Color color = new Color(percentage == max ? fullColor : loadingColor); + GlStateManager.enableBlend(); + RenderUtils.drawTexturedModalRect(x, y, 0, 35, 62, 5); + GlStateManager.color(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f); + RenderUtils.drawTexturedModalRect(x, y, 0, 65, 62, 5); + RenderUtils.drawTexturedModalRect(x, y, 0, 40, (int) (62 * percentage), 5); + if (barStyle != 0) { + RenderUtils.drawTexturedModalRect(x, y, 0, 45 + (barStyle * 5), 62, 5); + } + } + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/overlay/OverlayHud.java b/src/main/java/com/thatgravyboat/skyblockhud/overlay/OverlayHud.java new file mode 100644 index 0000000..8cdd44c --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/OverlayHud.java @@ -0,0 +1,286 @@ +package com.thatgravyboat.skyblockhud.overlay; + +import com.thatgravyboat.skyblockhud.GuiTextures; +import com.thatgravyboat.skyblockhud.SkyblockHud; +import com.thatgravyboat.skyblockhud.Utils; +import com.thatgravyboat.skyblockhud.handlers.BossbarHandler; +import com.thatgravyboat.skyblockhud.handlers.CurrencyHandler; +import com.thatgravyboat.skyblockhud.handlers.SlayerHandler; +import com.thatgravyboat.skyblockhud.handlers.TimeHandler; +import com.thatgravyboat.skyblockhud.location.*; +import com.thatgravyboat.skyblockhud.seasons.SeasonDateHandler; +import com.thatgravyboat.skyblockhud.seasons.Season; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.entity.boss.BossStatus; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.client.GuiIngameForge; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; + +public class OverlayHud extends Gui { + private static final FontRenderer font = Minecraft.getMinecraft().fontRendererObj; + + //STATS + private static boolean eventToggle; + + public static boolean bossBarVisible = false; + + public void drawClock(int width, int offset, Minecraft mc){ + GlStateManager.enableBlend(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + //CLOCK + int timeMin = (int) (TimeHandler.time / 60); + int timeHour = timeMin / 60; + timeMin = timeMin - (timeHour * 60); + String militaryTime = timeHour + ":" + (timeMin == 0 ? timeMin + "0" : timeMin); + int time12Hour = timeHour >= 12 ? timeHour - 12 : timeHour; + String normalTime = (time12Hour == 0 ? "00" : String.valueOf(time12Hour)) + ":" + (timeMin == 0 ? "00" : timeMin) + (timeHour >= 12 ? "pm" : "am"); + + drawTexturedModalRect((width/ 2) - 17, offset + (bossBarVisible ? 17 : 0), 0, 0, 34, 34); + drawTexturedModalRect((width/ 2) - 4, offset + (bossBarVisible ? 24 : 7), (timeHour > 19 || timeHour < 4) ? 43 : 43 + 8, 0, 8, 8); + if (SkyblockHud.config.main.twelveHourClock) drawScaledString(0.8f, width/ 2, offset + (bossBarVisible ? 38 : 21), normalTime, (timeHour > 19 || timeHour < 4) ? 0xAFB8CC : 0xFFFF55); + else drawCenteredString(font, militaryTime, (width/ 2), offset + (bossBarVisible ? 38 : 21), (timeHour > 19 || timeHour < 4) ? 0xAFB8CC : 0xFFFF55); + + //PURSE + drawPurseAndBits(width, offset, mc); + + //SEASON/DATE + drawSeasonAndDate(width, offset, mc); + + //REDSTONE PERCENT + drawRedstone(width, offset, mc); + + // LOCATION + drawLocation(width, offset, mc); + + //EXTRA SLOT + if (LocationHandler.getCurrentLocation().equals(Locations.YOURISLAND)) { + if (IslandHandler.flightTime > 0) drawFlightDuration(width, offset, mc); + } + else if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.MUSHROOMDESERT)){ + drawTrapperOrPelts(width, offset, mc); + } + else if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.DWARVENMINES)) { + if (DwarvenMineHandler.currentEvent != DwarvenMineHandler.Event.NONE){ + drawDwarvenEvent(width, offset, mc); + }else { + drawMithril(width, offset, mc); + } + } + else if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.PARK) && ParkIslandHandler.isRaining()){ + if (LocationHandler.getCurrentLocation().equals(Locations.HOWLINGCAVE)){ + drawSlayer(width, offset, mc); + }else drawRainDuration(width, offset, mc); + }else if (SlayerHandler.isDoingSlayer){ + drawSlayer(width, offset, mc); + } + } + + public void drawSeasonAndDate(int width, int offset, Minecraft mc){ + if (SeasonDateHandler.getCurrentSeason() != Season.ERROR) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + if (mc.thePlayer.ticksExisted % 100 == 0 && eventToggle) eventToggle = false; + if (mc.thePlayer.ticksExisted % 600 == 0) eventToggle = true; + mc.renderEngine.bindTexture(GuiTextures.overlay); + String dateText = SeasonDateHandler.getFancySeasonAndDate(); + if (eventToggle && !SeasonDateHandler.getCurrentEvent().isEmpty() && !SeasonDateHandler.getCurrentEventTime().isEmpty()) dateText = SeasonDateHandler.getCurrentEvent().trim() + " " + SeasonDateHandler.getCurrentEventTime().trim(); + drawTexturedModalRect((width / 2) + 17, offset + (bossBarVisible ? 20 : 3), 2, 34, font.getStringWidth(dateText) + 9, 14); + drawTexturedModalRect(((width / 2) + 17) + font.getStringWidth(dateText) + 9, offset + (bossBarVisible ? 20 : 3), 252, 34, 4, 14); + drawTexturedModalRect(((width / 2) + 17) + font.getStringWidth(dateText) + 2, offset + (bossBarVisible ? 23 : 6), SeasonDateHandler.getCurrentSeason().getTextureX(), 16, 8, 8); + drawString(font, dateText, (width / 2) + 18, offset + (bossBarVisible ? 23 : 6), 0xffffff); + } + } + + public void drawLocation(int width, int offset, Minecraft mc){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + drawTexturedModalRect((width/ 2) - 33 - (font.getStringWidth(LocationHandler.getCurrentLocation().getDisplayName())), offset + (bossBarVisible ? 20 : 3), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(LocationHandler.getCurrentLocation().getDisplayName()))) + 2, offset + (bossBarVisible ? 20 : 3), 2, 34, font.getStringWidth(LocationHandler.getCurrentLocation().getDisplayName()) + 14, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(LocationHandler.getCurrentLocation().getDisplayName()))) + 4, offset + (bossBarVisible ? 23 : 6), LocationHandler.getCurrentLocation().getCategory().getTexturePos(), 8, 8, 8); + drawString(font, + LocationHandler.getCurrentLocation().getDisplayName(), + (width/ 2) - 19 - (font.getStringWidth(LocationHandler.getCurrentLocation().getDisplayName())) , + offset + (bossBarVisible ? 23 : 6), + 0xFFFFFF + ); + } + + public void drawRedstone(int width, int offset, Minecraft mc){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int redstoneColor = IslandHandler.redstone > 90 ? 0xFF0000 : IslandHandler.redstone > 75 ? 0xC45B00 : IslandHandler.redstone > 50 ? 0xFFFF55 : 0x55FF55; + if (IslandHandler.redstone > 0 && Utils.isPlayerHoldingRedstone(mc.thePlayer)) { + drawTexturedModalRect((width/ 2) - 15, offset + (bossBarVisible ? 51 : 34), 0, 48, 30, 18); + drawTexturedModalRect((width/ 2) - 4, offset + (bossBarVisible ? 51 : 34), 59, 0, 8, 8); + drawCenteredString(mc.fontRendererObj, IslandHandler.redstone+"%", (width/ 2), offset + (bossBarVisible ? 58 : 41), redstoneColor); + } + } + + public void drawPurseAndBits(int width, int offset, Minecraft mc){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + int xPos = (width/ 2) + 17; + + //COINS + drawTexturedModalRect(xPos, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(CurrencyHandler.getCoinsFormatted()) + 11, 14); + drawTexturedModalRect(xPos + 1, offset + (bossBarVisible ? 37 : 20), 34, 0, 8, 8); + drawString(font, CurrencyHandler.getCoinsFormatted(), xPos + 10, offset + (bossBarVisible ? 38 : 21), 0xFFAA00); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + xPos += font.getStringWidth(CurrencyHandler.getCoinsFormatted()) + 11; + + //BITS + if (CurrencyHandler.getBits() > 0) { + drawTexturedModalRect(xPos, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(CurrencyHandler.getBitsFormatted()) + 11, 14); + drawTexturedModalRect(xPos + 1, offset + (bossBarVisible ? 37 : 20), 75, 0, 8, 8); + drawString(font, CurrencyHandler.getBitsFormatted(), xPos + 10, offset + (bossBarVisible ? 38 : 21), 0x55FFFF); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + xPos += font.getStringWidth(CurrencyHandler.getBitsFormatted()) + 11; + } + + drawTexturedModalRect(xPos, offset + (bossBarVisible ? 35 : 18), 252, 34, 4, 14); + } + + public void drawFlightDuration(int width, int offset, Minecraft mc ){ + if (LocationHandler.getCurrentLocation().equals(Locations.YOURISLAND)){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + DecimalFormat flightFormat = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance(Locale.CANADA)); + String duration; + if (IslandHandler.flightTime < 60) duration = IslandHandler.flightTime + "s"; + else if (IslandHandler.flightTime < 3600) duration = flightFormat.format((double)IslandHandler.flightTime / 60) + "m"; + else if (IslandHandler.flightTime < 86400) duration = flightFormat.format((double)IslandHandler.flightTime / 3600) + "hr"; + else if (IslandHandler.flightTime < 86460) duration = flightFormat.format((double)IslandHandler.flightTime / 86400) + "day"; + else duration = flightFormat.format((double)IslandHandler.flightTime / 86400) + "days"; + mc.renderEngine.bindTexture(GuiTextures.overlay); + drawTexturedModalRect((width/ 2) - 33 - (font.getStringWidth(duration)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(duration))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(duration) + 14, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(duration))) + 4, offset + (bossBarVisible ? 38 : 21), 67, 0, 8, 8); + drawString(font, duration, (width/ 2) - 19 - (font.getStringWidth(duration)) , offset + (bossBarVisible ? 38 : 21), 0xFFFFFF); + } + } + + public void drawRainDuration(int width, int offset, Minecraft mc ){ + if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.PARK)){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + String duration = "Rain: " + ParkIslandHandler.getRainTime(); + drawTexturedModalRect((width/ 2) - 33 - (font.getStringWidth(duration)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(duration))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(duration) + 14, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(duration))) + 4, offset + (bossBarVisible ? 38 : 21), 83, 0, 8, 8); + drawString(font, duration, (width/ 2) - 19 - (font.getStringWidth(duration)) , offset + (bossBarVisible ? 38 : 21), 0xFFFFFF); + } + } + + public void drawSlayer(int width, int offset, Minecraft mc){ + if (SlayerHandler.isDoingSlayer){ + int kills = SlayerHandler.progress; + int maxKills = SlayerHandler.maxKills; + int tier = SlayerHandler.slayerTier; + SlayerHandler.slayerTypes slayerType = SlayerHandler.currentSlayer; + if (slayerType != SlayerHandler.slayerTypes.NONE) { + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(EnumChatFormatting.GREEN); + stringBuilder.append(Utils.intToRomanNumeral(tier)); + stringBuilder.append(" "); + if (SlayerHandler.isKillingBoss){ + stringBuilder.append(EnumChatFormatting.RED); + stringBuilder.append("Slay Boss!"); + } else if (SlayerHandler.bossSlain){ + stringBuilder.append(EnumChatFormatting.RED); + stringBuilder.append("Boss Slain!"); + } else if (kills == 0 && maxKills == 0){ + stringBuilder.append(EnumChatFormatting.RED); + stringBuilder.append("Not Slaying!"); + } else { + stringBuilder.append(EnumChatFormatting.YELLOW); + stringBuilder.append(kills); + stringBuilder.append(EnumChatFormatting.GRAY); + stringBuilder.append("/"); + stringBuilder.append(EnumChatFormatting.RED); + stringBuilder.append(maxKills); + } + String text = stringBuilder.toString(); + drawTexturedModalRect((width / 2) - 33 - (font.getStringWidth(text)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width / 2) - 33 - (font.getStringWidth(text))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(text) + 14, 14); + drawTexturedModalRect(((width / 2) - 33 - (font.getStringWidth(text))) + 4, offset + (bossBarVisible ? 38 : 21), slayerType.getX(), 24, 8, 8); + drawString(font, text, (width / 2) - 19 - (font.getStringWidth(text)), offset + (bossBarVisible ? 38 : 21), 0xFFFFFF); + + } + } + } + + public void drawMithril(int width, int offset, Minecraft mc){ + if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.DWARVENMINES)){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + String mithril = DwarvenMineHandler.getMithrilFormatted(); + drawTexturedModalRect((width/ 2) - 33 - (font.getStringWidth(mithril)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(mithril))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(mithril) + 14, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(mithril))) + 4, offset + (bossBarVisible ? 38 : 21), 91, 0, 8, 8); + drawString(font, mithril, (width/ 2) - 19 - (font.getStringWidth(mithril)) , offset + (bossBarVisible ? 38 : 21), 0x00C896); + } + } + + public void drawTrapperOrPelts(int width, int offset, Minecraft mc){ + if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.MUSHROOMDESERT)){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + String duration = FarmingIslandHandler.location != Locations.NONE ? FarmingIslandHandler.location.getDisplayName() : ""+FarmingIslandHandler.pelts; + drawTexturedModalRect((width/ 2) - 33 - (font.getStringWidth(duration)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(duration))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(duration) + 14, 14); + drawTexturedModalRect(((width/ 2) - 33 - (font.getStringWidth(duration))) + 4, offset + (bossBarVisible ? 38 : 21), FarmingIslandHandler.location != Locations.NONE ? 123 : 115, 0, 8, 8); + drawString(font, duration, (width/ 2) - 19 - (font.getStringWidth(duration)) , offset + (bossBarVisible ? 38 : 21), 0xFFFFFF); + } + } + + public void drawDwarvenEvent(int width, int offset, Minecraft mc){ + if (LocationHandler.getCurrentLocation().getCategory().equals(LocationCategory.DWARVENMINES)){ + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + mc.renderEngine.bindTexture(GuiTextures.overlay); + if (DwarvenMineHandler.eventMax > 0) { + String duration = DwarvenMineHandler.eventProgress + "/" + DwarvenMineHandler.eventMax; + drawTexturedModalRect((width / 2) - 33 - (font.getStringWidth(duration)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width / 2) - 33 - (font.getStringWidth(duration))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(duration) + 14, 14); + drawTexturedModalRect(((width / 2) - 33 - (font.getStringWidth(duration))) + 4, offset + (bossBarVisible ? 38 : 21), DwarvenMineHandler.currentEvent.x, 0, 8, 8); + drawString(font, duration, (width / 2) - 19 - (font.getStringWidth(duration)), offset + (bossBarVisible ? 38 : 21), 0xFFFFFF); + }else { + String text = DwarvenMineHandler.currentEvent.displayName; + drawTexturedModalRect((width / 2) - 33 - (font.getStringWidth(text)), offset + (bossBarVisible ? 35 : 18), 0, 34, 2, 14); + drawTexturedModalRect(((width / 2) - 33 - (font.getStringWidth(text))) + 2, offset + (bossBarVisible ? 35 : 18), 2, 34, font.getStringWidth(text) + 14, 14); + drawTexturedModalRect(((width / 2) - 33 - (font.getStringWidth(text))) + 4, offset + (bossBarVisible ? 38 : 21), DwarvenMineHandler.currentEvent.x, 0, 8, 8); + drawString(font, text, (width / 2) - 19 - (font.getStringWidth(text)), offset + (bossBarVisible ? 38 : 21), 0xFFFFFF); + } + } + } + + @SubscribeEvent + public void renderOverlay(RenderGameOverlayEvent.Post event) { + if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard())) { + bossBarVisible = BossStatus.statusBarTime > 0 && GuiIngameForge.renderBossHealth && BossbarHandler.bossBarRendered; + Minecraft mc = Minecraft.getMinecraft(); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + if (LocationHandler.getCurrentLocation() != Locations.CATACOMBS){ + drawClock(event.resolution.getScaledWidth(), SkyblockHud.config.main.mainHudPos.getAbsY(event.resolution, 34), mc); + } + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + + public void drawScaledString(float factor, int x, int y, String text, int color){ + GlStateManager.scale(factor, factor, 1); + drawCenteredString(font, text, (int)(x/factor), (int)(y/factor), color); + GlStateManager.scale(1/factor, 1/factor, 1); + } +} diff --git a/src/main/java/com/thatgravyboat/skyblockhud/overlay/RPGHud.java b/src/main/java/com/thatgravyboat/skyblockhud/overlay/RPGHud.java new file mode 100644 index 0000000..06cf94a --- /dev/null +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/RPGHud.java @@ -0,0 +1,102 @@ +package com.thatgravyboat.skyblockhud.overlay; + +import com.mojang.realmsclient.gui.ChatFormatting; +import com.thatgravyboat.skyblockhud.GuiTextures; +import com.thatgravyboat.skyblockhud.SkyblockHud; +import com.thatgravyboat.skyblockhud.Utils; +import com.thatgravyboat.skyblockhud.core.config.Position; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.text.DecimalFormat; +import java.text.NumberFormat; + +public class RPGHud extends Gui { + private static int mana, maxMana, overflow = 0; + private static int health, maxHealth = 0; + private static int defense = 0; + + public static void updateMana(int current, int max){ + mana = current; + maxMana = max; + } + + public static void updateOverflow(int current){ + overflow = current; + } + + public static void updateHealth(int current, int max){ + health = current; + maxHealth = max; + } + public static void updateDefense(int input){ defense = input; } + + public static void manaPredictionUpdate(boolean isIncrease, int decrease){ + mana = isIncrease ? Math.min(mana + (maxMana / 50), maxMana) : mana - decrease; + } + + private static final DecimalFormat decimalFormat = new DecimalFormat("#.##"); + + static { + decimalFormat.setGroupingUsed(true); + decimalFormat.setGroupingSize(3); + } + + @SubscribeEvent + public void renderOverlay(RenderGameOverlayEvent.Post event) { + if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard(), SkyblockHud.config.renderer.hideXpBar)) + MinecraftForge.EVENT_BUS.post(new RenderGameOverlayEvent.Post(new RenderGameOverlayEvent(event.partialTicks, event.resolution), RenderGameOverlayEvent.ElementType.EXPERIENCE)); + if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard(), SkyblockHud.config.rpg.showRpgHud)) { + Minecraft mc = Minecraft.getMinecraft(); + GlStateManager.enableBlend(); + GlStateManager.color(1.0f,1.0f,1.0f,1.0f); + FontRenderer font = mc.fontRendererObj; + if (mc.thePlayer.getHealth() < mc.thePlayer.getMaxHealth()){ + health = Math.max((int) (maxHealth * (mc.thePlayer.getHealth() / mc.thePlayer.getMaxHealth())), health); + } + + mc.renderEngine.bindTexture(GuiTextures.playerStat); + Position position = SkyblockHud.config.rpg.rpgHudPosition; + + int x = position.getAbsX(event.resolution, 120); + int y = position.getAbsY(event.resolution, 47); + + boolean rightAligned = position.rightAligned(event.resolution, 120); + + drawTexturedModalRect(x,y,rightAligned ? 131 : 5,6,120,47); + float manaWidth = Math.min(57 * ((float)mana/(float)maxMana), 57); + drawTexturedModalRect(rightAligned ? x + 16 : 47 + x,17 + y,rightAligned ? 199 : 0,64,(int)manaWidth,4); + float healthWidth = Math.min(70 * ((float)health/(float)maxHealth), 70); + drawTexturedModalRect(rightAligned ? x + 3 : 47+ x,22+ y,rightAligned ? 186 : 0,68,(int)healthWidth,5); + + if (health > maxHealth) { + float absorptionWidth = Math.min(70 * ((float) (health - maxHealth) / (float) maxHealth), 70); + drawTexturedModalRect(rightAligned ? x + 3 : 47 + x, 22 + y, rightAligned ? 186 : 0, 77, (int) absorptionWidth, 5); + } + + float xpWidth = 67 * mc.thePlayer.experience; + drawTexturedModalRect(rightAligned ? x + 7 : 45+ x,28+ y,rightAligned ? 189 : 0,73,(int)xpWidth,4); + //Air in water + NumberFormat myFormat = NumberFormat.getInstance(); + myFormat.setGroupingUsed(true); + if (mc.thePlayer.getAir() < 300){ + float airWidth = 60 * ((float)mc.thePlayer.getAir() / 300); + drawTexturedModalRect(rightAligned ? x + 17 : 39 + x,33+ y,rightAligned ? 192 : 0,82,64,6); + drawTexturedModalRect(rightAligned ? x + 19 : 41+ x,33+ y,rightAligned ? 196 : 0,88,(int)airWidth,4); + } + GlStateManager.scale(0.75f, 0.75f, 1); + drawCenteredString(mc.fontRendererObj, ""+mc.thePlayer.experienceLevel, (rightAligned ? 130 : 0) + (int)(15+ x/0.75f), (int)(45+ y/0.75f), 8453920); + GlStateManager.scale(1/0.75f, 1/0.75f, 1); + GlStateManager.scale(0.75f, 0.75f, 1); + font.drawString( ChatFormatting.RED + " \u2764 " + health +"/"+maxHealth,(rightAligned ? -40 : 0) + (int)(64+ x/0.75f), (int)(8+ y/0.75f), 0xffffff, false); + GlStateManager.scale(1/0.75f, 1/0.75f, 1); + GlStateManager.color(255,255,255); + GlStateManager.disableBlend(); + } + } +} |