diff options
Diffstat (limited to 'src/main/java/com/thatgravyboat/skyblockhud')
89 files changed, 11642 insertions, 10878 deletions
diff --git a/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java b/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java index 4e6f398..28c5485 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/ComponentBuilder.java @@ -2,58 +2,58 @@ package com.thatgravyboat.skyblockhud; public class ComponentBuilder { - public StringBuilder builder; - - public ComponentBuilder() { - this.builder = new StringBuilder(); - } - - public ComponentBuilder apd(String text) { - return apd(text, '7'); - } - - public ComponentBuilder apd(String text, char[] colors) { - for (char color : colors) { - builder.append("\u00A7").append(color); - } - builder.append(text).append("\u00A7").append('r'); - return this; - } - - public ComponentBuilder apd(String text, char color) { - builder - .append("\u00A7") - .append(color) - .append(text) - .append("\u00A7") - .append('r'); - return this; - } - - public ComponentBuilder nl() { - builder.append("\n"); - return this; - } - - public ComponentBuilder nl(String text, char color) { - apd(text, color); - builder.append("\n"); - return this; - } - - public ComponentBuilder nl(String text, char[] colors) { - apd(text, colors); - builder.append("\n"); - return this; - } - - public ComponentBuilder nl(String text) { - apd(text); - builder.append("\n"); - return this; - } - - public String build() { - return builder.toString(); - } + public StringBuilder builder; + + public ComponentBuilder() { + this.builder = new StringBuilder(); + } + + public ComponentBuilder apd(String text) { + return apd(text, '7'); + } + + public ComponentBuilder apd(String text, char[] colors) { + for (char color : colors) { + builder.append("\u00A7").append(color); + } + builder.append(text).append("\u00A7").append('r'); + return this; + } + + public ComponentBuilder apd(String text, char color) { + builder + .append("\u00A7") + .append(color) + .append(text) + .append("\u00A7") + .append('r'); + return this; + } + + public ComponentBuilder nl() { + builder.append("\n"); + return this; + } + + public ComponentBuilder nl(String text, char color) { + apd(text, color); + builder.append("\n"); + return this; + } + + public ComponentBuilder nl(String text, char[] colors) { + apd(text, colors); + builder.append("\n"); + return this; + } + + public ComponentBuilder nl(String text) { + apd(text); + builder.append("\n"); + return this; + } + + public String build() { + return builder.toString(); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java index 03bfe04..ef2028d 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/ComponentHandler.java @@ -22,193 +22,243 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class ComponentHandler { - public static final Pattern SCOREBOARD_CHARACTERS = Pattern.compile( - "[^]\\[a-z A-Z:0-9/'.()+\\d-§?]" - ); - private static final Ordering<NetworkPlayerInfo> sortingList = Ordering.from( - new PlayerComparator() - ); - private static int ticksExisted = 0; + public static final Pattern SCOREBOARD_CHARACTERS = Pattern.compile( + "[^]\\[a-z A-Z:0-9/'.()+\\d-§?]" + ); + private static final Ordering<NetworkPlayerInfo> sortingList = Ordering.from( + new PlayerComparator() + ); + private static int ticksExisted = 0; - @SubscribeEvent - public void onClientTick(TickEvent.ClientTickEvent event) { - Minecraft mc = Minecraft.getMinecraft(); - ticksExisted++; - boolean eventPass = false; - if (mc.theWorld != null) { - List<NetworkPlayerInfo> players = sortingList.sortedCopy( - mc.thePlayer.sendQueue.getPlayerInfoMap() - ); - GuiIngameForge.renderObjective = - !SkyblockHud.hasSkyblockScoreboard() || - !SkyblockHud.config.misc.hideScoreboard; - if (players != null && SkyblockHud.hasSkyblockScoreboard()) { - if (ticksExisted % 60 == 0) { - for (NetworkPlayerInfo player : players) { - if (player.getDisplayName() != null) { - String formattedTabListPlayer = SCOREBOARD_CHARACTERS - .matcher( - Utils.removeColor(player.getDisplayName().getFormattedText()) - ) - .replaceAll(""); - if ( - LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS) - ) { - if ( - formattedTabListPlayer - .toLowerCase() - .contains("secrets found:") - ) DungeonHandler.parseTotalSecrets(formattedTabListPlayer); - if ( - formattedTabListPlayer.toLowerCase().contains("deaths:") - ) DungeonHandler.parseDeaths(formattedTabListPlayer); - if ( - formattedTabListPlayer.toLowerCase().contains("crypts:") - ) DungeonHandler.parseCrypts(formattedTabListPlayer); - } else if ( - LocationHandler - .getCurrentLocation() - .getCategory() - .equals(LocationCategory.DWARVENMINES) - ) { - if ( - formattedTabListPlayer - .toLowerCase() - .contains("mithril powder:") - ) { - DwarvenMineHandler.parseMithril(formattedTabListPlayer); - } - } else if ( - LocationHandler - .getCurrentLocation() - .getCategory() - .equals(LocationCategory.MUSHROOMDESERT) - ) { - if (formattedTabListPlayer.toLowerCase().contains("pelts:")) { - try { - FarmingIslandHandler.pelts = - Integer.parseInt( - formattedTabListPlayer - .toLowerCase() - .replace("pelts:", "") - .trim() - ); - } catch (Exception ignored) {} - } - } - } - } - if (players.size() > 80) { - for (int i = 61; i <= 80; i++) { - if (players.get(i).getDisplayName() != null) { - String formattedTabListPlayer = SCOREBOARD_CHARACTERS - .matcher( - Utils.removeColor( - players.get(i).getDisplayName().getFormattedText() - ) - ) - .replaceAll(""); - if (formattedTabListPlayer.toLowerCase().contains("event:")) { - if (i < 80) { - if (players.get(i + 1).getDisplayName() != null) { - String secondLine = SCOREBOARD_CHARACTERS - .matcher( - Utils.removeColor( - players - .get(i + 1) - .getDisplayName() - .getFormattedText() - ) - ) - .replaceAll(""); - SeasonDateHandler.setCurrentEvent( - formattedTabListPlayer.replace("Event:", ""), - secondLine - ); - eventPass = true; + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event) { + Minecraft mc = Minecraft.getMinecraft(); + ticksExisted++; + boolean eventPass = false; + if (mc.theWorld != null) { + List<NetworkPlayerInfo> players = sortingList.sortedCopy( + mc.thePlayer.sendQueue.getPlayerInfoMap() + ); + GuiIngameForge.renderObjective = + !SkyblockHud.hasSkyblockScoreboard() || + !SkyblockHud.config.misc.hideScoreboard; + if (players != null && SkyblockHud.hasSkyblockScoreboard()) { + if (ticksExisted % 60 == 0) { + for (NetworkPlayerInfo player : players) { + if (player.getDisplayName() != null) { + String formattedTabListPlayer = SCOREBOARD_CHARACTERS + .matcher( + Utils.removeColor( + player + .getDisplayName() + .getFormattedText() + ) + ) + .replaceAll(""); + if ( + LocationHandler + .getCurrentLocation() + .equals(Locations.CATACOMBS) + ) { + if ( + formattedTabListPlayer + .toLowerCase() + .contains("secrets found:") + ) DungeonHandler.parseTotalSecrets( + formattedTabListPlayer + ); + if ( + formattedTabListPlayer + .toLowerCase() + .contains("deaths:") + ) DungeonHandler.parseDeaths( + formattedTabListPlayer + ); + if ( + formattedTabListPlayer + .toLowerCase() + .contains("crypts:") + ) DungeonHandler.parseCrypts( + formattedTabListPlayer + ); + } else if ( + LocationHandler + .getCurrentLocation() + .getCategory() + .equals(LocationCategory.DWARVENMINES) + ) { + if ( + formattedTabListPlayer + .toLowerCase() + .contains("mithril powder:") + ) { + DwarvenMineHandler.parseMithril( + formattedTabListPlayer + ); + } + } else if ( + LocationHandler + .getCurrentLocation() + .getCategory() + .equals(LocationCategory.MUSHROOMDESERT) + ) { + if ( + formattedTabListPlayer + .toLowerCase() + .contains("pelts:") + ) { + try { + FarmingIslandHandler.pelts = + Integer.parseInt( + formattedTabListPlayer + .toLowerCase() + .replace("pelts:", "") + .trim() + ); + } catch (Exception ignored) {} + } + } + } + } + if (players.size() > 80) { + for (int i = 61; i <= 80; i++) { + if (players.get(i).getDisplayName() != null) { + String formattedTabListPlayer = SCOREBOARD_CHARACTERS + .matcher( + Utils.removeColor( + players + .get(i) + .getDisplayName() + .getFormattedText() + ) + ) + .replaceAll(""); + if ( + formattedTabListPlayer + .toLowerCase() + .contains("event:") + ) { + if (i < 80) { + if ( + players + .get(i + 1) + .getDisplayName() != + null + ) { + String secondLine = SCOREBOARD_CHARACTERS + .matcher( + Utils.removeColor( + players + .get(i + 1) + .getDisplayName() + .getFormattedText() + ) + ) + .replaceAll(""); + SeasonDateHandler.setCurrentEvent( + formattedTabListPlayer.replace( + "Event:", + "" + ), + secondLine + ); + eventPass = true; + } + } + } + } + if (i == 80 && !eventPass) { + SeasonDateHandler.setCurrentEvent("", ""); + } + } } - } } - } - if (i == 80 && !eventPass) { - SeasonDateHandler.setCurrentEvent("", ""); - } - } - } - } - if ( - LocationHandler - .getCurrentLocation() - .getCategory() - .equals(LocationCategory.PARK) - ) { - if (players.size() >= 80) { - for (int i = 41; i <= 60; i++) { - if (players.get(i).getDisplayName() != null) { - String formattedTabListPlayer = SCOREBOARD_CHARACTERS - .matcher( - Utils.removeColor( - players.get(i).getDisplayName().getFormattedText() - ) - ) - .replaceAll(""); if ( - LocationHandler - .getCurrentLocation() - .getCategory() - .equals(LocationCategory.PARK) + LocationHandler + .getCurrentLocation() + .getCategory() + .equals(LocationCategory.PARK) ) { - if (formattedTabListPlayer.toLowerCase().contains("rain:")) { - ParkIslandHandler.parseRain( - formattedTabListPlayer.toLowerCase() - ); - } + if (players.size() >= 80) { + for (int i = 41; i <= 60; i++) { + if (players.get(i).getDisplayName() != null) { + String formattedTabListPlayer = SCOREBOARD_CHARACTERS + .matcher( + Utils.removeColor( + players + .get(i) + .getDisplayName() + .getFormattedText() + ) + ) + .replaceAll(""); + if ( + LocationHandler + .getCurrentLocation() + .getCategory() + .equals(LocationCategory.PARK) + ) { + if ( + formattedTabListPlayer + .toLowerCase() + .contains("rain:") + ) { + ParkIslandHandler.parseRain( + formattedTabListPlayer.toLowerCase() + ); + } + } + } + } + } + } else if (ParkIslandHandler.isRaining()) { + ParkIslandHandler.parseRain(null); } - } } - } - } else if (ParkIslandHandler.isRaining()) { - ParkIslandHandler.parseRain(null); } - } } - } - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onStatusBar(ClientChatReceivedEvent event) { - if (event.type == 2) { - if ( - LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS) - ) DungeonHandler.parseSecrets(event.message.getFormattedText()); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onStatusBar(ClientChatReceivedEvent event) { + if (event.type == 2) { + if ( + LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS) + ) DungeonHandler.parseSecrets(event.message.getFormattedText()); + } } - } - @SideOnly(Side.CLIENT) - static class PlayerComparator implements Comparator<NetworkPlayerInfo> { + @SideOnly(Side.CLIENT) + static class PlayerComparator implements Comparator<NetworkPlayerInfo> { - private PlayerComparator() {} + private PlayerComparator() {} - public int compare( - NetworkPlayerInfo p_compare_1_, - NetworkPlayerInfo p_compare_2_ - ) { - ScorePlayerTeam scoreplayerteam = p_compare_1_.getPlayerTeam(); - ScorePlayerTeam scoreplayerteam1 = p_compare_2_.getPlayerTeam(); - return ComparisonChain - .start() - .compareTrueFirst( - p_compare_1_.getGameType() != WorldSettings.GameType.SPECTATOR, - p_compare_2_.getGameType() != WorldSettings.GameType.SPECTATOR - ) - .compare( - scoreplayerteam != null ? scoreplayerteam.getRegisteredName() : "", - scoreplayerteam1 != null ? scoreplayerteam1.getRegisteredName() : "" - ) - .compare( - p_compare_1_.getGameProfile().getName(), - p_compare_2_.getGameProfile().getName() - ) - .result(); + public int compare( + NetworkPlayerInfo p_compare_1_, + NetworkPlayerInfo p_compare_2_ + ) { + ScorePlayerTeam scoreplayerteam = p_compare_1_.getPlayerTeam(); + ScorePlayerTeam scoreplayerteam1 = p_compare_2_.getPlayerTeam(); + return ComparisonChain + .start() + .compareTrueFirst( + p_compare_1_.getGameType() != + WorldSettings.GameType.SPECTATOR, + p_compare_2_.getGameType() != + WorldSettings.GameType.SPECTATOR + ) + .compare( + scoreplayerteam != null + ? scoreplayerteam.getRegisteredName() + : "", + scoreplayerteam1 != null + ? scoreplayerteam1.getRegisteredName() + : "" + ) + .compare( + p_compare_1_.getGameProfile().getName(), + p_compare_2_.getGameProfile().getName() + ) + .result(); + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java b/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java index 927b7c0..d7c2513 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/GuiTextures.java @@ -4,82 +4,82 @@ import net.minecraft.util.ResourceLocation; public class GuiTextures { - private GuiTextures() {} + private GuiTextures() {} - public static final ResourceLocation DISCORD = new ResourceLocation( - "skyblockhud:discord.png" - ); - public static final ResourceLocation TWITTER = new ResourceLocation( - "skyblockhud:twitter.png" - ); + public static final ResourceLocation DISCORD = new ResourceLocation( + "skyblockhud:discord.png" + ); + public static final ResourceLocation TWITTER = new ResourceLocation( + "skyblockhud:twitter.png" + ); - public static final ResourceLocation button_tex = new ResourceLocation( - "skyblockhud:button.png" - ); + public static final ResourceLocation button_tex = new ResourceLocation( + "skyblockhud:button.png" + ); - public static final ResourceLocation button_white = new ResourceLocation( - "skyblockhud:button_white.png" - ); + public static final ResourceLocation button_white = new ResourceLocation( + "skyblockhud:button_white.png" + ); - public static final ResourceLocation BAR = new ResourceLocation( - "skyblockhud:core/bar.png" - ); - public static final ResourceLocation OFF = new ResourceLocation( - "skyblockhud:core/toggle_off.png" - ); - public static final ResourceLocation ONE = new ResourceLocation( - "skyblockhud:core/toggle_1.png" - ); - public static final ResourceLocation TWO = new ResourceLocation( - "skyblockhud:core/toggle_2.png" - ); - public static final ResourceLocation THREE = new ResourceLocation( - "skyblockhud:core/toggle_3.png" - ); - public static final ResourceLocation ON = new ResourceLocation( - "skyblockhud:core/toggle_on.png" - ); + public static final ResourceLocation BAR = new ResourceLocation( + "skyblockhud:core/bar.png" + ); + public static final ResourceLocation OFF = new ResourceLocation( + "skyblockhud:core/toggle_off.png" + ); + public static final ResourceLocation ONE = new ResourceLocation( + "skyblockhud:core/toggle_1.png" + ); + public static final ResourceLocation TWO = new ResourceLocation( + "skyblockhud:core/toggle_2.png" + ); + public static final ResourceLocation THREE = new ResourceLocation( + "skyblockhud:core/toggle_3.png" + ); + public static final ResourceLocation ON = new ResourceLocation( + "skyblockhud:core/toggle_on.png" + ); - public static final ResourceLocation slider_off_cap = new ResourceLocation( - "skyblockhud:core/slider/slider_off_cap.png" - ); - public static final ResourceLocation slider_off_notch = new ResourceLocation( - "skyblockhud:core/slider/slider_off_notch.png" - ); - public static final ResourceLocation slider_off_segment = new ResourceLocation( - "skyblockhud:core/slider/slider_off_segment.png" - ); - public static final ResourceLocation slider_on_cap = new ResourceLocation( - "skyblockhud:core/slider/slider_on_cap.png" - ); - public static final ResourceLocation slider_on_notch = new ResourceLocation( - "skyblockhud:core/slider/slider_on_notch.png" - ); - public static final ResourceLocation slider_on_segment = new ResourceLocation( - "skyblockhud:core/slider/slider_on_segment.png" - ); - public static final ResourceLocation slider_button_new = new ResourceLocation( - "skyblockhud:core/slider/slider_button.png" - ); + public static final ResourceLocation slider_off_cap = new ResourceLocation( + "skyblockhud:core/slider/slider_off_cap.png" + ); + public static final ResourceLocation slider_off_notch = new ResourceLocation( + "skyblockhud:core/slider/slider_off_notch.png" + ); + public static final ResourceLocation slider_off_segment = new ResourceLocation( + "skyblockhud:core/slider/slider_off_segment.png" + ); + public static final ResourceLocation slider_on_cap = new ResourceLocation( + "skyblockhud:core/slider/slider_on_cap.png" + ); + public static final ResourceLocation slider_on_notch = new ResourceLocation( + "skyblockhud:core/slider/slider_on_notch.png" + ); + public static final ResourceLocation slider_on_segment = new ResourceLocation( + "skyblockhud:core/slider/slider_on_segment.png" + ); + public static final ResourceLocation slider_button_new = new ResourceLocation( + "skyblockhud:core/slider/slider_button.png" + ); - public static final ResourceLocation overlay = new ResourceLocation( - "skyblockhud", - "stats.png" - ); - public static final ResourceLocation dungeon = new ResourceLocation( - "skyblockhud", - "dungeon.png" - ); - public static final ResourceLocation playerStat = new ResourceLocation( - "skyblockhud", - "playerstats.png" - ); - public static final ResourceLocation bars = new ResourceLocation( - "skyblockhud", - "bars.png" - ); - public static final ResourceLocation mapOverlay = new ResourceLocation( - "skyblockhud", - "maps/map_overlay.png" - ); + public static final ResourceLocation overlay = new ResourceLocation( + "skyblockhud", + "stats.png" + ); + public static final ResourceLocation dungeon = new ResourceLocation( + "skyblockhud", + "dungeon.png" + ); + public static final ResourceLocation playerStat = new ResourceLocation( + "skyblockhud", + "playerstats.png" + ); + public static final ResourceLocation bars = new ResourceLocation( + "skyblockhud", + "bars.png" + ); + public static final ResourceLocation mapOverlay = new ResourceLocation( + "skyblockhud", + "maps/map_overlay.png" + ); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java b/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java index 7d06d99..dae040c 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/SkyblockHud.java @@ -44,105 +44,105 @@ import org.lwjgl.input.Keyboard; @Mod(modid = SkyblockHud.MODID, version = SkyblockHud.VERSION) public class SkyblockHud { - public static final String MODID = "skyblockhud"; - public static final String VERSION = "1.12"; - - public static SBHConfig config; - - private File configFile; - - private static final Set<String> SKYBLOCK_IN_ALL_LANGUAGES = Sets.newHashSet( - "SKYBLOCK", - "\u7A7A\u5C9B\u751F\u5B58" - ); - - private final Gson gson = new GsonBuilder() - .setPrettyPrinting() - .excludeFieldsWithoutExposeAnnotation() - .create(); - - private static File configDirectory; - - @EventHandler - public void preInit(FMLPreInitializationEvent event) { - MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.EVENT_BUS.register(new LeaderboardGetter()); - MinecraftForge.EVENT_BUS.register(new SeasonDateHandler()); - MinecraftForge.EVENT_BUS.register(new LocationHandler()); - MinecraftForge.EVENT_BUS.register(new IslandHandler()); - MinecraftForge.EVENT_BUS.register(new TimeHandler()); - MinecraftForge.EVENT_BUS.register(new CurrencyHandler()); - MinecraftForge.EVENT_BUS.register(new SlayerHandler()); - MinecraftForge.EVENT_BUS.register(new DungeonHandler()); - MinecraftForge.EVENT_BUS.register(new DwarvenMineHandler()); - MinecraftForge.EVENT_BUS.register(new FarmingIslandHandler()); + public static final String MODID = "skyblockhud"; + public static final String VERSION = "1.12"; - /* DISABLE UNTIL NEW SYSTEM + public static SBHConfig config; + + private File configFile; + + private static final Set<String> SKYBLOCK_IN_ALL_LANGUAGES = Sets.newHashSet( + "SKYBLOCK", + "\u7A7A\u5C9B\u751F\u5B58" + ); + + private final Gson gson = new GsonBuilder() + .setPrettyPrinting() + .excludeFieldsWithoutExposeAnnotation() + .create(); + + private static File configDirectory; + + @EventHandler + public void preInit(FMLPreInitializationEvent event) { + MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.EVENT_BUS.register(new LeaderboardGetter()); + MinecraftForge.EVENT_BUS.register(new SeasonDateHandler()); + MinecraftForge.EVENT_BUS.register(new LocationHandler()); + MinecraftForge.EVENT_BUS.register(new IslandHandler()); + MinecraftForge.EVENT_BUS.register(new TimeHandler()); + MinecraftForge.EVENT_BUS.register(new CurrencyHandler()); + MinecraftForge.EVENT_BUS.register(new SlayerHandler()); + MinecraftForge.EVENT_BUS.register(new DungeonHandler()); + MinecraftForge.EVENT_BUS.register(new DwarvenMineHandler()); + MinecraftForge.EVENT_BUS.register(new FarmingIslandHandler()); + + /* DISABLE UNTIL NEW SYSTEM MinecraftForge.EVENT_BUS.register(new TrackerHandler()); MinecraftForge.EVENT_BUS.register(new KillTrackerHandler()); */ - MinecraftForge.EVENT_BUS.register(new HeldItemHandler()); - - ClientRegistry.registerKeyBinding(KeyBindings.map); - - MinecraftForge.EVENT_BUS.register(new ComponentHandler()); - MinecraftForge.EVENT_BUS.register(new ActionBarParsing()); - Commands.init(); - - configFile = - new File(event.getModConfigurationDirectory(), "sbh-config.json"); - - if (configFile.exists()) { - try ( - BufferedReader reader = new BufferedReader( - new InputStreamReader( - new FileInputStream(configFile), - StandardCharsets.UTF_8 - ) - ) - ) { - config = gson.fromJson(reader, SBHConfig.class); - } catch (Exception ignored) {} + MinecraftForge.EVENT_BUS.register(new HeldItemHandler()); + + ClientRegistry.registerKeyBinding(KeyBindings.map); + + MinecraftForge.EVENT_BUS.register(new ComponentHandler()); + MinecraftForge.EVENT_BUS.register(new ActionBarParsing()); + Commands.init(); + + configFile = + new File(event.getModConfigurationDirectory(), "sbh-config.json"); + + if (configFile.exists()) { + try ( + BufferedReader reader = new BufferedReader( + new InputStreamReader( + new FileInputStream(configFile), + StandardCharsets.UTF_8 + ) + ) + ) { + config = gson.fromJson(reader, SBHConfig.class); + } catch (Exception ignored) {} + } + + if (config == null) { + config = new SBHConfig(); + saveConfig(); + } + + configDirectory = event.getModConfigurationDirectory(); + + Runtime.getRuntime().addShutdownHook(new Thread(this::saveConfig)); + //Runtime.getRuntime().addShutdownHook(new Thread(() -> TrackerFileLoader.saveTrackerStatsFile(event.getModConfigurationDirectory()))); } - if (config == null) { - config = new SBHConfig(); - saveConfig(); + public void saveConfig() { + try { + configFile.createNewFile(); + + try ( + BufferedWriter writer = new BufferedWriter( + new OutputStreamWriter( + new FileOutputStream(configFile), + StandardCharsets.UTF_8 + ) + ) + ) { + writer.write(gson.toJson(config)); + } + } catch (IOException ignored) {} } - configDirectory = event.getModConfigurationDirectory(); - - Runtime.getRuntime().addShutdownHook(new Thread(this::saveConfig)); - //Runtime.getRuntime().addShutdownHook(new Thread(() -> TrackerFileLoader.saveTrackerStatsFile(event.getModConfigurationDirectory()))); - } - - public void saveConfig() { - try { - configFile.createNewFile(); - - try ( - BufferedWriter writer = new BufferedWriter( - new OutputStreamWriter( - new FileOutputStream(configFile), - StandardCharsets.UTF_8 - ) - ) - ) { - writer.write(gson.toJson(config)); - } - } catch (IOException ignored) {} - } - - @EventHandler - public void postInit(FMLPostInitializationEvent event) { - MinecraftForge.EVENT_BUS.register(new OverlayHud()); - MinecraftForge.EVENT_BUS.register(new RPGHud()); - MinecraftForge.EVENT_BUS.register(new DungeonOverlay()); - MinecraftForge.EVENT_BUS.register(new BossbarHandler()); - MinecraftForge.EVENT_BUS.register(new MapHandler()); - } - - /* DISABLE UNTIL NEW SYSTEM + @EventHandler + public void postInit(FMLPostInitializationEvent event) { + MinecraftForge.EVENT_BUS.register(new OverlayHud()); + MinecraftForge.EVENT_BUS.register(new RPGHud()); + MinecraftForge.EVENT_BUS.register(new DungeonOverlay()); + MinecraftForge.EVENT_BUS.register(new BossbarHandler()); + MinecraftForge.EVENT_BUS.register(new MapHandler()); + } + + /* DISABLE UNTIL NEW SYSTEM @EventHandler public void loadComplete(FMLLoadCompleteEvent event){ @@ -160,67 +160,72 @@ public class SkyblockHud { */ - public static boolean hasSkyblockScoreboard() { - Minecraft mc = Minecraft.getMinecraft(); - - if (mc != null && mc.theWorld != null) { - Scoreboard scoreboard = mc.theWorld.getScoreboard(); - ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1); - if (sidebarObjective != null) { - String objectiveName = sidebarObjective - .getDisplayName() - .replaceAll("(?i)\\u00A7.", ""); - for (String skyblock : SKYBLOCK_IN_ALL_LANGUAGES) { - if (objectiveName.startsWith(skyblock)) { - return true; - } + public static boolean hasSkyblockScoreboard() { + Minecraft mc = Minecraft.getMinecraft(); + + if (mc != null && mc.theWorld != null) { + Scoreboard scoreboard = mc.theWorld.getScoreboard(); + ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot( + 1 + ); + if (sidebarObjective != null) { + String objectiveName = sidebarObjective + .getDisplayName() + .replaceAll("(?i)\\u00A7.", ""); + for (String skyblock : SKYBLOCK_IN_ALL_LANGUAGES) { + if (objectiveName.startsWith(skyblock)) { + return true; + } + } + } } - } + + return false; } - return false; - } - - @SubscribeEvent - public void onTooltip(ItemTooltipEvent event) { - if (event.itemStack != null && Keyboard.isKeyDown(Keyboard.KEY_BACKSLASH)) { - try { - StringSelection clipboard = new StringSelection( - event.itemStack.serializeNBT().toString() - ); - Toolkit - .getDefaultToolkit() - .getSystemClipboard() - .setContents(clipboard, clipboard); - } catch (Exception ignored) {} + @SubscribeEvent + public void onTooltip(ItemTooltipEvent event) { + if ( + event.itemStack != null && + Keyboard.isKeyDown(Keyboard.KEY_BACKSLASH) + ) { + try { + StringSelection clipboard = new StringSelection( + event.itemStack.serializeNBT().toString() + ); + Toolkit + .getDefaultToolkit() + .getSystemClipboard() + .setContents(clipboard, clipboard); + } catch (Exception ignored) {} + } } - } - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onStatusBar(ClientChatReceivedEvent event) { - if ( - Utils - .removeColor(event.message.getUnformattedText()) - .toLowerCase() - .trim() - .startsWith("your profile was changed to:") - ) { - MinecraftForge.EVENT_BUS.post(new ProfileSwitchedEvent()); + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onStatusBar(ClientChatReceivedEvent event) { + if ( + Utils + .removeColor(event.message.getUnformattedText()) + .toLowerCase() + .trim() + .startsWith("your profile was changed to:") + ) { + MinecraftForge.EVENT_BUS.post(new ProfileSwitchedEvent()); + } } - } - - public static GuiScreen screenToOpen = null; - private static int screenTicks = 0; - - @SubscribeEvent - public void onClientTick(TickEvent.ClientTickEvent event) { - if (screenToOpen != null) { - screenTicks++; - if (screenTicks == 5) { - Minecraft.getMinecraft().displayGuiScreen(screenToOpen); - screenTicks = 0; - screenToOpen = null; - } + + public static GuiScreen screenToOpen = null; + private static int screenTicks = 0; + + @SubscribeEvent + public void onClientTick(TickEvent.ClientTickEvent event) { + if (screenToOpen != null) { + screenTicks++; + if (screenTicks == 5) { + Minecraft.getMinecraft().displayGuiScreen(screenToOpen); + screenTicks = 0; + screenToOpen = null; + } + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java b/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java index 06dd70c..f675778 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/SpecialColour.java @@ -4,111 +4,116 @@ import java.awt.*; public class SpecialColour { - public static String special(int chromaSpeed, int alpha, int rgb) { - return special( - chromaSpeed, - alpha, - (rgb & 0xFF0000) >> 16, - (rgb & 0x00FF00) >> 8, - (rgb & 0x0000FF) - ); - } - - private static final int RADIX = 10; - - public static String special( - int chromaSpeed, - int alpha, - int r, - int g, - int b - ) { - StringBuilder sb = new StringBuilder(); - sb.append(Integer.toString(chromaSpeed, RADIX)).append(":"); - sb.append(Integer.toString(alpha, RADIX)).append(":"); - sb.append(Integer.toString(r, RADIX)).append(":"); - sb.append(Integer.toString(g, RADIX)).append(":"); - sb.append(Integer.toString(b, RADIX)); - return sb.toString(); - } - - private static int[] decompose(String csv) { - String[] split = csv.split(":"); - - int[] arr = new int[split.length]; - - for (int i = 0; i < split.length; i++) { - arr[i] = Integer.parseInt(split[split.length - 1 - i], RADIX); + public static String special(int chromaSpeed, int alpha, int rgb) { + return special( + chromaSpeed, + alpha, + (rgb & 0xFF0000) >> 16, + (rgb & 0x00FF00) >> 8, + (rgb & 0x0000FF) + ); } - return arr; - } - - public static int specialToSimpleRGB(String special) { - int[] d = decompose(special); - int r = d[2]; - int g = d[1]; - int b = d[0]; - int a = d[3]; - int chr = d[4]; - - return (a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF); - } - - public static int getSpeed(String special) { - return decompose(special)[4]; - } - - public static float getSecondsForSpeed(int speed) { - return ( - (255 - speed) / - 254f * - (MAX_CHROMA_SECS - MIN_CHROMA_SECS) + - MIN_CHROMA_SECS - ); - } - - private static final int MIN_CHROMA_SECS = 1; - private static final int MAX_CHROMA_SECS = 60; - - public static long startTime = -1; - - public static int specialToChromaRGB(String special) { - if (startTime < 0) startTime = System.currentTimeMillis(); - - int[] d = decompose(special); - int chr = d[4]; - int a = d[3]; - int r = d[2]; - int g = d[1]; - int b = d[0]; - - float[] hsv = Color.RGBtoHSB(r, g, b, null); - - if (chr > 0) { - float seconds = getSecondsForSpeed(chr); - hsv[0] += (System.currentTimeMillis() - startTime) / 1000f / seconds; - hsv[0] %= 1; - if (hsv[0] < 0) hsv[0] += 1; + + private static final int RADIX = 10; + + public static String special( + int chromaSpeed, + int alpha, + int r, + int g, + int b + ) { + StringBuilder sb = new StringBuilder(); + sb.append(Integer.toString(chromaSpeed, RADIX)).append(":"); + sb.append(Integer.toString(alpha, RADIX)).append(":"); + sb.append(Integer.toString(r, RADIX)).append(":"); + sb.append(Integer.toString(g, RADIX)).append(":"); + sb.append(Integer.toString(b, RADIX)); + return sb.toString(); + } + + private static int[] decompose(String csv) { + String[] split = csv.split(":"); + + int[] arr = new int[split.length]; + + for (int i = 0; i < split.length; i++) { + arr[i] = Integer.parseInt(split[split.length - 1 - i], RADIX); + } + return arr; } - return ( - (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) - ); - } + public static int specialToSimpleRGB(String special) { + int[] d = decompose(special); + int r = d[2]; + int g = d[1]; + int b = d[0]; + int a = d[3]; + int chr = d[4]; + + return ( + (a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF) + ); + } + + public static int getSpeed(String special) { + return decompose(special)[4]; + } + + public static float getSecondsForSpeed(int speed) { + return ( + (255 - speed) / + 254f * + (MAX_CHROMA_SECS - MIN_CHROMA_SECS) + + MIN_CHROMA_SECS + ); + } - public static int rotateHue(int argb, int degrees) { - int a = (argb >> 24) & 0xFF; - int r = (argb >> 16) & 0xFF; - int g = (argb >> 8) & 0xFF; - int b = (argb) & 0xFF; + private static final int MIN_CHROMA_SECS = 1; + private static final int MAX_CHROMA_SECS = 60; - float[] hsv = Color.RGBtoHSB(r, g, b, null); + public static long startTime = -1; - hsv[0] += degrees / 360f; - hsv[0] %= 1; + public static int specialToChromaRGB(String special) { + if (startTime < 0) startTime = System.currentTimeMillis(); - return ( - (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) - ); - } + int[] d = decompose(special); + int chr = d[4]; + int a = d[3]; + int r = d[2]; + int g = d[1]; + int b = d[0]; + + float[] hsv = Color.RGBtoHSB(r, g, b, null); + + if (chr > 0) { + float seconds = getSecondsForSpeed(chr); + hsv[0] += + (System.currentTimeMillis() - startTime) / 1000f / seconds; + hsv[0] %= 1; + if (hsv[0] < 0) hsv[0] += 1; + } + + return ( + (a & 0xFF) << 24 | + (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) + ); + } + + public static int rotateHue(int argb, int degrees) { + int a = (argb >> 24) & 0xFF; + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = (argb) & 0xFF; + + float[] hsv = Color.RGBtoHSB(r, g, b, null); + + hsv[0] += degrees / 360f; + hsv[0] %= 1; + + return ( + (a & 0xFF) << 24 | + (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/Utils.java b/src/main/java/com/thatgravyboat/skyblockhud/Utils.java index c52af7c..9f6712c 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/Utils.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/Utils.java @@ -22,404 +22,410 @@ import org.lwjgl.opengl.GL14; public class Utils { - private static LinkedList<Integer> guiScales = new LinkedList<>(); - private static ScaledResolution lastScale = new ScaledResolution( - Minecraft.getMinecraft() - ); - //Labymod compatibility - private static FloatBuffer projectionMatrixOld = BufferUtils.createFloatBuffer( - 16 - ); - private static FloatBuffer modelviewMatrixOld = BufferUtils.createFloatBuffer( - 16 - ); - - public static String removeColor(String input) { - return input.replaceAll("(?i)\\u00A7.", ""); - } - - public static String removeWhiteSpaceAndRemoveWord( - String input, - String replace - ) { - return input.toLowerCase().replace(" ", "").replace(replace, ""); - } - - public static boolean isPlayerHoldingRedstone(EntityPlayerSP player) { - if (!SkyblockHud.config.main.requireRedstone) return true; - ArrayList<Item> redstoneItems = new ArrayList<>( - Arrays.asList( - Items.redstone, - Items.repeater, - Items.comparator, - Item.getByNameOrId("minecraft:redstone_torch") - ) + private static LinkedList<Integer> guiScales = new LinkedList<>(); + private static ScaledResolution lastScale = new ScaledResolution( + Minecraft.getMinecraft() ); - if (player.getHeldItem() != null) return redstoneItems.contains( - player.getHeldItem().getItem() + //Labymod compatibility + private static FloatBuffer projectionMatrixOld = BufferUtils.createFloatBuffer( + 16 ); - return false; - } - - public static boolean inRangeInclusive(int value, int min, int max) { - return value <= max && value >= min; - } - - public static int whatRomanNumeral(String roman) { - switch (roman.toLowerCase()) { - case "i": - return 1; - case "ii": - return 2; - case "iii": - return 3; - case "iv": - return 4; - case "v": - return 5; - case "vi": - return 6; - case "vii": - return 7; - case "viii": - return 8; - case "ix": - return 9; - case "x": - return 10; - default: - return 0; + private static FloatBuffer modelviewMatrixOld = BufferUtils.createFloatBuffer( + 16 + ); + + public static String removeColor(String input) { + return input.replaceAll("(?i)\\u00A7.", ""); } - } - - public static String intToRomanNumeral(int i) { - switch (i) { - case 1: - return "I"; - case 2: - return "II"; - case 3: - return "III"; - case 4: - return "IV"; - case 5: - return "V"; - case 6: - return "VI"; - case 7: - return "VII"; - case 8: - return "VIII"; - case 9: - return "IX"; - case 10: - return "X"; - default: - return ""; + + public static String removeWhiteSpaceAndRemoveWord( + String input, + String replace + ) { + return input.toLowerCase().replace(" ", "").replace(replace, ""); } - } - - public static boolean overlayShouldRender( - RenderGameOverlayEvent.ElementType type, - boolean... booleans - ) { - return overlayShouldRender( - false, - type, - RenderGameOverlayEvent.ElementType.HOTBAR, - booleans - ); - } - - public static boolean overlayShouldRender( - boolean hideOnf3, - RenderGameOverlayEvent.ElementType type, - RenderGameOverlayEvent.ElementType checkType, - boolean... booleans - ) { - Minecraft mc = Minecraft.getMinecraft(); - boolean shouldRender; - if (booleans.length > 1) { - for (boolean aBoolean : booleans) if (!aBoolean) return false; - shouldRender = true; - } else shouldRender = booleans.length != 1 || booleans[0]; - if (hideOnf3) { - if ( - mc.gameSettings.showDebugInfo || - ( - mc.gameSettings.keyBindPlayerList.isKeyDown() && - ( - !mc.isIntegratedServerRunning() || - mc.thePlayer.sendQueue.getPlayerInfoMap().size() > 1 - ) - ) - ) { + + public static boolean isPlayerHoldingRedstone(EntityPlayerSP player) { + if (!SkyblockHud.config.main.requireRedstone) return true; + ArrayList<Item> redstoneItems = new ArrayList<>( + Arrays.asList( + Items.redstone, + Items.repeater, + Items.comparator, + Item.getByNameOrId("minecraft:redstone_torch") + ) + ); + if (player.getHeldItem() != null) return redstoneItems.contains( + player.getHeldItem().getItem() + ); return false; - } } - return ( - shouldRender && - ((type == null && Loader.isModLoaded("labymod")) || type == checkType) - ); - } - - public static void drawStringScaledMaxWidth( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int len, - int colour - ) { - int strLen = fr.getStringWidth(str); - float factor = len / (float) strLen; - factor = Math.min(1, factor); - - drawStringScaled(str, fr, x, y, shadow, colour, factor); - } - - public static void drawStringScaled( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int colour, - float factor - ) { - GlStateManager.scale(factor, factor, 1); - fr.drawString(str, x / factor, y / factor, colour, shadow); - GlStateManager.scale(1 / factor, 1 / factor, 1); - } - - public static void drawStringCenteredScaled( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int len, - int colour - ) { - int strLen = fr.getStringWidth(str); - float factor = len / (float) strLen; - float fontHeight = 8 * factor; - - drawStringScaled( - str, - fr, - x - len / 2f, - y - fontHeight / 2f, - shadow, - colour, - factor - ); - } - - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax, - int filter - ) { - GlStateManager.enableTexture2D(); - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate( - GL11.GL_SRC_ALPHA, - GL11.GL_ONE_MINUS_SRC_ALPHA, - GL11.GL_ONE, - GL11.GL_ONE_MINUS_SRC_ALPHA - ); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MIN_FILTER, - filter - ); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MAG_FILTER, - filter - ); + public static boolean inRangeInclusive(int value, int min, int max) { + return value <= max && value >= min; + } - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(x, y + height, 0.0D).tex(uMin, vMax).endVertex(); - worldrenderer.pos(x + width, y + height, 0.0D).tex(uMax, vMax).endVertex(); - worldrenderer.pos(x + width, y, 0.0D).tex(uMax, vMin).endVertex(); - worldrenderer.pos(x, y, 0.0D).tex(uMin, vMin).endVertex(); - tessellator.draw(); - - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MIN_FILTER, - GL11.GL_NEAREST - ); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MAG_FILTER, - GL11.GL_NEAREST - ); + public static int whatRomanNumeral(String roman) { + switch (roman.toLowerCase()) { + case "i": + return 1; + case "ii": + return 2; + case "iii": + return 3; + case "iv": + return 4; + case "v": + return 5; + case "vi": + return 6; + case "vii": + return 7; + case "viii": + return 8; + case "ix": + return 9; + case "x": + return 10; + default: + return 0; + } + } - GlStateManager.disableBlend(); - } - - public static void drawTexturedRect( - float x, - float y, - float width, - float height - ) { - drawTexturedRect(x, y, width, height, 0, 1, 0, 1); - } - - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - int filter - ) { - drawTexturedRect(x, y, width, height, 0, 1, 0, 1, filter); - } - - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax - ) { - drawTexturedRect( - x, - y, - width, - height, - uMin, - uMax, - vMin, - vMax, - GL11.GL_LINEAR - ); - } - - public static void resetGuiScale() { - guiScales.clear(); - } - - public static ScaledResolution peekGuiScale() { - return lastScale; - } - - public static ScaledResolution pushGuiScale(int scale) { - if (guiScales.size() == 0) { - if (Loader.isModLoaded("labymod")) { - GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projectionMatrixOld); - GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelviewMatrixOld); - } + public static String intToRomanNumeral(int i) { + switch (i) { + case 1: + return "I"; + case 2: + return "II"; + case 3: + return "III"; + case 4: + return "IV"; + case 5: + return "V"; + case 6: + return "VI"; + case 7: + return "VII"; + case 8: + return "VIII"; + case 9: + return "IX"; + case 10: + return "X"; + default: + return ""; + } + } + + public static boolean overlayShouldRender( + RenderGameOverlayEvent.ElementType type, + boolean... booleans + ) { + return overlayShouldRender( + false, + type, + RenderGameOverlayEvent.ElementType.HOTBAR, + booleans + ); + } + + public static boolean overlayShouldRender( + boolean hideOnf3, + RenderGameOverlayEvent.ElementType type, + RenderGameOverlayEvent.ElementType checkType, + boolean... booleans + ) { + Minecraft mc = Minecraft.getMinecraft(); + boolean shouldRender; + if (booleans.length > 1) { + for (boolean aBoolean : booleans) if (!aBoolean) return false; + shouldRender = true; + } else shouldRender = booleans.length != 1 || booleans[0]; + if (hideOnf3) { + if ( + mc.gameSettings.showDebugInfo || + ( + mc.gameSettings.keyBindPlayerList.isKeyDown() && + ( + !mc.isIntegratedServerRunning() || + mc.thePlayer.sendQueue.getPlayerInfoMap().size() > 1 + ) + ) + ) { + return false; + } + } + return ( + shouldRender && + ( + (type == null && Loader.isModLoaded("labymod")) || + type == checkType + ) + ); } - if (scale < 0) { - if (guiScales.size() > 0) { - guiScales.pop(); - } - } else { - if (scale == 0) { - guiScales.push(Minecraft.getMinecraft().gameSettings.guiScale); - } else { - guiScales.push(scale); - } + public static void drawStringScaledMaxWidth( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int len, + int colour + ) { + int strLen = fr.getStringWidth(str); + float factor = len / (float) strLen; + factor = Math.min(1, factor); + + drawStringScaled(str, fr, x, y, shadow, colour, factor); } - int newScale = guiScales.size() > 0 - ? Math.max(0, Math.min(4, guiScales.peek())) - : Minecraft.getMinecraft().gameSettings.guiScale; - if (newScale == 0) newScale = - Minecraft.getMinecraft().gameSettings.guiScale; + public static void drawStringScaled( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int colour, + float factor + ) { + GlStateManager.scale(factor, factor, 1); + fr.drawString(str, x / factor, y / factor, colour, shadow); + GlStateManager.scale(1 / factor, 1 / factor, 1); + } - int oldScale = Minecraft.getMinecraft().gameSettings.guiScale; - Minecraft.getMinecraft().gameSettings.guiScale = newScale; - ScaledResolution scaledresolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - Minecraft.getMinecraft().gameSettings.guiScale = oldScale; - - if (guiScales.size() > 0) { - GlStateManager.viewport( - 0, - 0, - Minecraft.getMinecraft().displayWidth, - Minecraft.getMinecraft().displayHeight - ); - GlStateManager.matrixMode(GL11.GL_PROJECTION); - GlStateManager.loadIdentity(); - GlStateManager.ortho( - 0.0D, - scaledresolution.getScaledWidth_double(), - scaledresolution.getScaledHeight_double(), - 0.0D, - 1000.0D, - 3000.0D - ); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - GlStateManager.loadIdentity(); - GlStateManager.translate(0.0F, 0.0F, -2000.0F); - } else { - if ( - Loader.isModLoaded("labymod") && - projectionMatrixOld.limit() > 0 && - modelviewMatrixOld.limit() > 0 - ) { - GlStateManager.matrixMode(GL11.GL_PROJECTION); - GL11.glLoadMatrix(projectionMatrixOld); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - GL11.glLoadMatrix(modelviewMatrixOld); - } else { - GlStateManager.matrixMode(GL11.GL_PROJECTION); - GlStateManager.loadIdentity(); - GlStateManager.ortho( - 0.0D, - scaledresolution.getScaledWidth_double(), - scaledresolution.getScaledHeight_double(), - 0.0D, - 1000.0D, - 3000.0D + public static void drawStringCenteredScaled( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int len, + int colour + ) { + int strLen = fr.getStringWidth(str); + float factor = len / (float) strLen; + float fontHeight = 8 * factor; + + drawStringScaled( + str, + fr, + x - len / 2f, + y - fontHeight / 2f, + shadow, + colour, + factor ); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - GlStateManager.loadIdentity(); - GlStateManager.translate(0.0F, 0.0F, -2000.0F); - } } - lastScale = scaledresolution; - return scaledresolution; - } - - public static void drawStringCentered( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int colour - ) { - int strLen = fr.getStringWidth(str); - - float x2 = x - strLen / 2f; - float y2 = y - fr.FONT_HEIGHT / 2f; - - GL11.glTranslatef(x2, y2, 0); - fr.drawString(str, 0, 0, colour, shadow); - GL11.glTranslatef(-x2, -y2, 0); - } + public static void drawTexturedRect( + float x, + float y, + float width, + float height, + float uMin, + float uMax, + float vMin, + float vMax, + int filter + ) { + GlStateManager.enableTexture2D(); + GlStateManager.enableBlend(); + GL14.glBlendFuncSeparate( + GL11.GL_SRC_ALPHA, + GL11.GL_ONE_MINUS_SRC_ALPHA, + GL11.GL_ONE, + GL11.GL_ONE_MINUS_SRC_ALPHA + ); + + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MIN_FILTER, + filter + ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MAG_FILTER, + filter + ); + + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos(x, y + height, 0.0D).tex(uMin, vMax).endVertex(); + worldrenderer + .pos(x + width, y + height, 0.0D) + .tex(uMax, vMax) + .endVertex(); + worldrenderer.pos(x + width, y, 0.0D).tex(uMax, vMin).endVertex(); + worldrenderer.pos(x, y, 0.0D).tex(uMin, vMin).endVertex(); + tessellator.draw(); + + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MIN_FILTER, + GL11.GL_NEAREST + ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MAG_FILTER, + GL11.GL_NEAREST + ); + + GlStateManager.disableBlend(); + } + + public static void drawTexturedRect( + float x, + float y, + float width, + float height + ) { + drawTexturedRect(x, y, width, height, 0, 1, 0, 1); + } + + public static void drawTexturedRect( + float x, + float y, + float width, + float height, + int filter + ) { + drawTexturedRect(x, y, width, height, 0, 1, 0, 1, filter); + } + + public static void drawTexturedRect( + float x, + float y, + float width, + float height, + float uMin, + float uMax, + float vMin, + float vMax + ) { + drawTexturedRect( + x, + y, + width, + height, + uMin, + uMax, + vMin, + vMax, + GL11.GL_LINEAR + ); + } + + public static void resetGuiScale() { + guiScales.clear(); + } + + public static ScaledResolution peekGuiScale() { + return lastScale; + } + + public static ScaledResolution pushGuiScale(int scale) { + if (guiScales.size() == 0) { + if (Loader.isModLoaded("labymod")) { + GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projectionMatrixOld); + GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelviewMatrixOld); + } + } + + if (scale < 0) { + if (guiScales.size() > 0) { + guiScales.pop(); + } + } else { + if (scale == 0) { + guiScales.push(Minecraft.getMinecraft().gameSettings.guiScale); + } else { + guiScales.push(scale); + } + } + + int newScale = guiScales.size() > 0 + ? Math.max(0, Math.min(4, guiScales.peek())) + : Minecraft.getMinecraft().gameSettings.guiScale; + if (newScale == 0) newScale = + Minecraft.getMinecraft().gameSettings.guiScale; + + int oldScale = Minecraft.getMinecraft().gameSettings.guiScale; + Minecraft.getMinecraft().gameSettings.guiScale = newScale; + ScaledResolution scaledresolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + Minecraft.getMinecraft().gameSettings.guiScale = oldScale; + + if (guiScales.size() > 0) { + GlStateManager.viewport( + 0, + 0, + Minecraft.getMinecraft().displayWidth, + Minecraft.getMinecraft().displayHeight + ); + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GlStateManager.loadIdentity(); + GlStateManager.ortho( + 0.0D, + scaledresolution.getScaledWidth_double(), + scaledresolution.getScaledHeight_double(), + 0.0D, + 1000.0D, + 3000.0D + ); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + } else { + if ( + Loader.isModLoaded("labymod") && + projectionMatrixOld.limit() > 0 && + modelviewMatrixOld.limit() > 0 + ) { + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GL11.glLoadMatrix(projectionMatrixOld); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GL11.glLoadMatrix(modelviewMatrixOld); + } else { + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GlStateManager.loadIdentity(); + GlStateManager.ortho( + 0.0D, + scaledresolution.getScaledWidth_double(), + scaledresolution.getScaledHeight_double(), + 0.0D, + 1000.0D, + 3000.0D + ); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + } + } + + lastScale = scaledresolution; + return scaledresolution; + } + + public static void drawStringCentered( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int colour + ) { + int strLen = fr.getStringWidth(str); + + float x2 = x - strLen / 2f; + float y2 = y - fr.FONT_HEIGHT / 2f; + + GL11.glTranslatef(x2, y2, 0); + fr.drawString(str, 0, 0, colour, shadow); + GL11.glTranslatef(-x2, -y2, 0); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java b/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java index 0833a0d..b722df1 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/LeaderboardGetter.java @@ -19,79 +19,96 @@ import net.minecraftforge.fml.common.gameevent.TickEvent; public class LeaderboardGetter { - private static Map<Integer, String> cachedScores = new HashMap<>(); - private static List<String> cachedScoresList = new ArrayList<>(); + private static Map<Integer, String> cachedScores = new HashMap<>(); + private static List<String> cachedScoresList = new ArrayList<>(); - private static int ticks = 0; + private static int ticks = 0; - @SubscribeEvent - public void onClientUpdate(TickEvent.ClientTickEvent event) { - if (event.phase.equals(TickEvent.Phase.START)) return; - ticks++; - if (ticks % 5 != 0) return; + @SubscribeEvent + public void onClientUpdate(TickEvent.ClientTickEvent event) { + if (event.phase.equals(TickEvent.Phase.START)) return; + ticks++; + if (ticks % 5 != 0) return; - Minecraft mc = Minecraft.getMinecraft(); - if (mc.theWorld != null) { - Scoreboard scoreboard = mc.theWorld.getScoreboard(); - ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot(1); + Minecraft mc = Minecraft.getMinecraft(); + if (mc.theWorld != null) { + Scoreboard scoreboard = mc.theWorld.getScoreboard(); + ScoreObjective sidebarObjective = scoreboard.getObjectiveInDisplaySlot( + 1 + ); - if ( - sidebarObjective != null && - !MinecraftForge.EVENT_BUS.post( - new SidebarPreGetEvent(scoreboard, sidebarObjective) - ) - ) { - Collection<Score> scoreList = sidebarObjective - .getScoreboard() - .getSortedScores(sidebarObjective); - Map<Integer, String> scores = scoreList - .stream() - .collect(Collectors.toMap(Score::getScorePoints, this::getLine)); + if ( + sidebarObjective != null && + !MinecraftForge.EVENT_BUS.post( + new SidebarPreGetEvent(scoreboard, sidebarObjective) + ) + ) { + Collection<Score> scoreList = sidebarObjective + .getScoreboard() + .getSortedScores(sidebarObjective); + Map<Integer, String> scores = scoreList + .stream() + .collect( + Collectors.toMap(Score::getScorePoints, this::getLine) + ); - if (!cachedScores.equals(scores)) { - scores.forEach( - (score, name) -> { - if ( - cachedScores.get(score) == null || - !cachedScores.get(score).equals(name) - ) { + if (!cachedScores.equals(scores)) { + scores.forEach( + (score, name) -> { + if ( + cachedScores.get(score) == null || + !cachedScores.get(score).equals(name) + ) { + MinecraftForge.EVENT_BUS.post( + new SidebarLineUpdateEvent( + name, + SCOREBOARD_CHARACTERS + .matcher(name) + .replaceAll("") + .trim(), + score, + scores.size(), + scoreboard, + sidebarObjective + ) + ); + } + } + ); + cachedScores = scores; + cachedScoresList = + scores + .values() + .stream() + .map( + name -> + SCOREBOARD_CHARACTERS + .matcher(name) + .replaceAll("") + .trim() + ) + .collect(Collectors.toList()); + } MinecraftForge.EVENT_BUS.post( - new SidebarLineUpdateEvent( - name, - SCOREBOARD_CHARACTERS.matcher(name).replaceAll("").trim(), - score, - scores.size(), - scoreboard, - sidebarObjective - ) + new SidebarPostEvent( + scoreboard, + sidebarObjective, + cachedScoresList + ) ); - } } - ); - cachedScores = scores; - cachedScoresList = - scores - .values() - .stream() - .map( - name -> - SCOREBOARD_CHARACTERS.matcher(name).replaceAll("").trim() - ) - .collect(Collectors.toList()); } - MinecraftForge.EVENT_BUS.post( - new SidebarPostEvent(scoreboard, sidebarObjective, cachedScoresList) - ); - } } - } - public String getLine(Score score) { - ScorePlayerTeam scorePlayerTeam = score - .getScoreScoreboard() - .getPlayersTeam(score.getPlayerName()); - return Utils.removeColor( - ScorePlayerTeam.formatPlayerName(scorePlayerTeam, score.getPlayerName()) - ); - } + public String getLine(Score score) { + ScorePlayerTeam scorePlayerTeam = score + .getScoreScoreboard() + .getPlayersTeam(score.getPlayerName()); + return Utils.removeColor( + ScorePlayerTeam.formatPlayerName( + scorePlayerTeam, + score.getPlayerName() + ) + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java index 843ad05..8a7aa39 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarLineUpdateEvent.java @@ -6,24 +6,24 @@ import net.minecraftforge.fml.common.eventhandler.Event; public class SidebarLineUpdateEvent extends Event { - public String rawLine; - public String formattedLine; - public int position; - public Scoreboard scoreboard; - public ScoreObjective objective; + public String rawLine; + public String formattedLine; + public int position; + public Scoreboard scoreboard; + public ScoreObjective objective; - public SidebarLineUpdateEvent( - String rawLine, - String formattedLine, - int score, - int max, - Scoreboard scoreboard, - ScoreObjective objective - ) { - this.rawLine = rawLine; - this.formattedLine = formattedLine; - this.position = max - score; - this.scoreboard = scoreboard; - this.objective = objective; - } + public SidebarLineUpdateEvent( + String rawLine, + String formattedLine, + int score, + int max, + Scoreboard scoreboard, + ScoreObjective objective + ) { + this.rawLine = rawLine; + this.formattedLine = formattedLine; + this.position = max - score; + this.scoreboard = scoreboard; + this.objective = objective; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java index b020e12..92ed25e 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPostEvent.java @@ -7,19 +7,19 @@ import net.minecraftforge.fml.common.eventhandler.Event; public class SidebarPostEvent extends Event { - public Scoreboard scoreboard; - public ScoreObjective objective; - public List<String> scores; - public String[] arrayScores; + public Scoreboard scoreboard; + public ScoreObjective objective; + public List<String> scores; + public String[] arrayScores; - public SidebarPostEvent( - Scoreboard scoreboard, - ScoreObjective objective, - List<String> scores - ) { - this.scoreboard = scoreboard; - this.objective = objective; - this.scores = scores; - this.arrayScores = scores.toArray(new String[] {}); - } + public SidebarPostEvent( + Scoreboard scoreboard, + ScoreObjective objective, + List<String> scores + ) { + this.scoreboard = scoreboard; + this.objective = objective; + this.scores = scores; + this.arrayScores = scores.toArray(new String[] {}); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java index 1176b9a..0db1895 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/api/events/SidebarPreGetEvent.java @@ -8,11 +8,11 @@ import net.minecraftforge.fml.common.eventhandler.Event; @Cancelable public class SidebarPreGetEvent extends Event { - public Scoreboard scoreboard; - public ScoreObjective objective; + public Scoreboard scoreboard; + public ScoreObjective objective; - public SidebarPreGetEvent(Scoreboard scoreboard, ScoreObjective objective) { - this.scoreboard = scoreboard; - this.objective = objective; - } + public SidebarPreGetEvent(Scoreboard scoreboard, ScoreObjective objective) { + this.scoreboard = scoreboard; + this.objective = objective; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java b/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java index 3e1c995..e09f324 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/commands/Commands.java @@ -12,48 +12,57 @@ import org.apache.commons.lang3.StringUtils; public class Commands { - private static final SimpleCommand.ProcessCommandRunnable settingsRunnable = new SimpleCommand.ProcessCommandRunnable() { - public void processCommand(ICommandSender sender, String[] args) { - if (args.length > 0) { - SkyblockHud.screenToOpen = - new GuiScreenElementWrapper( - new SBHConfigEditor(SkyblockHud.config, StringUtils.join(args, " ")) - ); - } else { - SkyblockHud.screenToOpen = - new GuiScreenElementWrapper(new SBHConfigEditor(SkyblockHud.config)); - } - } - }; + private static final SimpleCommand.ProcessCommandRunnable settingsRunnable = new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + if (args.length > 0) { + SkyblockHud.screenToOpen = + new GuiScreenElementWrapper( + new SBHConfigEditor( + SkyblockHud.config, + StringUtils.join(args, " ") + ) + ); + } else { + SkyblockHud.screenToOpen = + new GuiScreenElementWrapper( + new SBHConfigEditor(SkyblockHud.config) + ); + } + } + }; - private static final SimpleCommand settingsCommand = new SimpleCommand( - "sbh", - settingsRunnable - ); - private static final SimpleCommand settingsCommand2 = new SimpleCommand( - "sbhsettings", - settingsRunnable - ); - private static final SimpleCommand settingsCommand3 = new SimpleCommand( - "sbhud", - settingsRunnable - ); + private static final SimpleCommand settingsCommand = new SimpleCommand( + "sbh", + settingsRunnable + ); + private static final SimpleCommand settingsCommand2 = new SimpleCommand( + "sbhsettings", + settingsRunnable + ); + private static final SimpleCommand settingsCommand3 = new SimpleCommand( + "sbhud", + settingsRunnable + ); - private static final SimpleCommand mapCommand = new SimpleCommand( - "sbhmap", - new SimpleCommand.ProcessCommandRunnable() { - public void processCommand(ICommandSender sender, String[] args) { - if ( - LocationHandler.getCurrentLocation().getCategory().getMap() != null - ) SkyblockHud.screenToOpen = new MapHandler.MapScreen(); - } - } - ); + private static final SimpleCommand mapCommand = new SimpleCommand( + "sbhmap", + new SimpleCommand.ProcessCommandRunnable() { + public void processCommand(ICommandSender sender, String[] args) { + if ( + LocationHandler + .getCurrentLocation() + .getCategory() + .getMap() != + null + ) SkyblockHud.screenToOpen = new MapHandler.MapScreen(); + } + } + ); - public static void init() { - ClientCommandHandler.instance.registerCommand(settingsCommand); - ClientCommandHandler.instance.registerCommand(settingsCommand2); - ClientCommandHandler.instance.registerCommand(settingsCommand3); - ClientCommandHandler.instance.registerCommand(mapCommand); - } + public static void init() { + ClientCommandHandler.instance.registerCommand(settingsCommand); + ClientCommandHandler.instance.registerCommand(settingsCommand2); + ClientCommandHandler.instance.registerCommand(settingsCommand3); + ClientCommandHandler.instance.registerCommand(mapCommand); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java b/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java index 49a02a8..358ebe0 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/commands/SimpleCommand.java @@ -11,62 +11,69 @@ import net.minecraft.util.BlockPos; **/ public class SimpleCommand extends CommandBase { - private String commandName; - private ProcessCommandRunnable runnable; - private TabCompleteRunnable tabRunnable; + private String commandName; + private ProcessCommandRunnable runnable; + private TabCompleteRunnable tabRunnable; - public SimpleCommand(String commandName, ProcessCommandRunnable runnable) { - this.commandName = commandName; - this.runnable = runnable; - } + public SimpleCommand(String commandName, ProcessCommandRunnable runnable) { + this.commandName = commandName; + this.runnable = runnable; + } - public SimpleCommand( - String commandName, - ProcessCommandRunnable runnable, - TabCompleteRunnable tabRunnable - ) { - this.commandName = commandName; - this.runnable = runnable; - this.tabRunnable = tabRunnable; - } + public SimpleCommand( + String commandName, + ProcessCommandRunnable runnable, + TabCompleteRunnable tabRunnable + ) { + this.commandName = commandName; + this.runnable = runnable; + this.tabRunnable = tabRunnable; + } - public abstract static class ProcessCommandRunnable { + public abstract static class ProcessCommandRunnable { - public abstract void processCommand(ICommandSender sender, String[] args); - } + public abstract void processCommand( + ICommandSender sender, + String[] args + ); + } - public abstract static class TabCompleteRunnable { + public abstract static class TabCompleteRunnable { - public abstract List<String> tabComplete( - ICommandSender sender, - String[] args, - BlockPos pos - ); - } + public abstract List<String> tabComplete( + ICommandSender sender, + String[] args, + BlockPos pos + ); + } - public boolean canCommandSenderUseCommand(ICommandSender sender) { - return true; - } + public boolean canCommandSenderUseCommand(ICommandSender sender) { + return true; + } - public String getCommandName() { - return commandName; - } + public String getCommandName() { + return commandName; + } - public String getCommandUsage(ICommandSender sender) { - return "/" + commandName; - } + public String getCommandUsage(ICommandSender sender) { + return "/" + commandName; + } - public void processCommand(ICommandSender sender, String[] args) - throws CommandException { - runnable.processCommand(sender, args); - } + public void processCommand(ICommandSender sender, String[] args) + throws CommandException { + runnable.processCommand(sender, args); + } - public List<String> addTabCompletionOptions( - ICommandSender sender, - String[] args, - BlockPos pos - ) { - if (tabRunnable != null) return tabRunnable.tabComplete(sender, args, pos); - return null; - } + public List<String> addTabCompletionOptions( + ICommandSender sender, + String[] args, + BlockPos pos + ) { + if (tabRunnable != null) return tabRunnable.tabComplete( + sender, + args, + pos + ); + return null; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/config/KeyBindings.java b/src/main/java/com/thatgravyboat/skyblockhud/config/KeyBindings.java index 511ab86..044bab9 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/config/KeyBindings.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/config/KeyBindings.java @@ -4,9 +4,9 @@ import net.minecraft.client.settings.KeyBinding; public class KeyBindings { - public static KeyBinding map = new KeyBinding( - "Opens the big map.", - 50, - "SkyblockHud" - ); + public static KeyBinding map = new KeyBinding( + "Opens the big map.", + 50, + "SkyblockHud" + ); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfig.java b/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfig.java index 031f2b7..52272b7 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfig.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfig.java @@ -11,404 +11,440 @@ import net.minecraft.client.Minecraft; public class SBHConfig extends Config { - private void editOverlay( - String activeConfig, - int width, - int height, - Position position - ) { - Minecraft - .getMinecraft() - .displayGuiScreen( - new GuiPositionEditor( - position, - width, - height, - () -> {}, - () -> {}, - () -> - SkyblockHud.screenToOpen = - new GuiScreenElementWrapper( - new SBHConfigEditor(SkyblockHud.config, activeConfig) - ) - ) - ); - } - - @Override - public void executeRunnable(String runnableId) { - String activeConfigCategory = null; - if ( - Minecraft.getMinecraft().currentScreen instanceof GuiScreenElementWrapper + private void editOverlay( + String activeConfig, + int width, + int height, + Position position ) { - GuiScreenElementWrapper wrapper = (GuiScreenElementWrapper) Minecraft.getMinecraft() - .currentScreen; - if (wrapper.element instanceof SBHConfigEditor) { - activeConfigCategory = - ((SBHConfigEditor) wrapper.element).getSelectedCategoryName(); - } + Minecraft + .getMinecraft() + .displayGuiScreen( + new GuiPositionEditor( + position, + width, + height, + () -> {}, + () -> {}, + () -> + SkyblockHud.screenToOpen = + new GuiScreenElementWrapper( + new SBHConfigEditor( + SkyblockHud.config, + activeConfig + ) + ) + ) + ); } - switch (runnableId) { - case "rpg": - editOverlay(activeConfigCategory, 120, 47, rpg.rpgHudPosition); - return; - case "d1": - editOverlay(activeConfigCategory, 120, 32, dungeon.dungeonPlayer1); - return; - case "d2": - editOverlay(activeConfigCategory, 120, 32, dungeon.dungeonPlayer2); - return; - case "d3": - editOverlay(activeConfigCategory, 120, 32, dungeon.dungeonPlayer3); - return; - case "d4": - editOverlay(activeConfigCategory, 120, 32, dungeon.dungeonPlayer4); - return; - case "main": - editOverlay(activeConfigCategory, 1000, 34, main.mainHudPos); - return; - case "ultimate": - editOverlay(activeConfigCategory, 182, 5, dungeon.barPosition); - return; - case "map": - editOverlay(activeConfigCategory, 72, 72, map.miniMapPosition); - return; - case "tracker": - editOverlay(activeConfigCategory, 120, 70, trackers.trackerPosition); - return; + @Override + public void executeRunnable(String runnableId) { + String activeConfigCategory = null; + if ( + Minecraft.getMinecraft() + .currentScreen instanceof GuiScreenElementWrapper + ) { + GuiScreenElementWrapper wrapper = (GuiScreenElementWrapper) Minecraft.getMinecraft() + .currentScreen; + if (wrapper.element instanceof SBHConfigEditor) { + activeConfigCategory = + ( + (SBHConfigEditor) wrapper.element + ).getSelectedCategoryName(); + } + } + + switch (runnableId) { + case "rpg": + editOverlay(activeConfigCategory, 120, 47, rpg.rpgHudPosition); + return; + case "d1": + editOverlay( + activeConfigCategory, + 120, + 32, + dungeon.dungeonPlayer1 + ); + return; + case "d2": + editOverlay( + activeConfigCategory, + 120, + 32, + dungeon.dungeonPlayer2 + ); + return; + case "d3": + editOverlay( + activeConfigCategory, + 120, + 32, + dungeon.dungeonPlayer3 + ); + return; + case "d4": + editOverlay( + activeConfigCategory, + 120, + 32, + dungeon.dungeonPlayer4 + ); + return; + case "main": + editOverlay(activeConfigCategory, 1000, 34, main.mainHudPos); + return; + case "ultimate": + editOverlay(activeConfigCategory, 182, 5, dungeon.barPosition); + return; + case "map": + editOverlay(activeConfigCategory, 72, 72, map.miniMapPosition); + return; + case "tracker": + editOverlay( + activeConfigCategory, + 120, + 70, + trackers.trackerPosition + ); + return; + } } - } - - @Expose - @Category(name = "Misc Options", desc = "Just a bunch of random options.") - public Misc misc = new Misc(); - - @Expose - @Category(name = "Main Hud", desc = "All Options for the main hud.") - public MainHud main = new MainHud(); - - @Expose - @Category(name = "RPG Hud", desc = "All Options for the RPG hud.") - public RPGHud rpg = new RPGHud(); - - @Expose - @Category(name = "Dungeon Hud", desc = "All Options for the Dungeon hud.") - public DungeonHud dungeon = new DungeonHud(); - - @Expose - @Category(name = "Renderer", desc = "All Options for rendering.") - public Renderer renderer = new Renderer(); - - @Expose - @Category(name = "Map", desc = "All Options for the Map.") - public Map map = new Map(); - - @Expose - @Category(name = "Tracker", desc = "All Options for the Trackers.") - public Trackers trackers = new Trackers(); - - public static class Misc { @Expose - @ConfigOption( - name = "Hide Scoreboard", - desc = "Hides the scoreboard when in skyblock." - ) - @ConfigEditorBoolean - public boolean hideScoreboard = false; - } - - public static class MainHud { + @Category(name = "Misc Options", desc = "Just a bunch of random options.") + public Misc misc = new Misc(); @Expose - @ConfigOption(name = "Main Hud Position", desc = "") - @ConfigEditorButton(runnableId = "main", buttonText = "Edit") - public Position mainHudPos = new Position(0, 1, true, false); + @Category(name = "Main Hud", desc = "All Options for the main hud.") + public MainHud main = new MainHud(); @Expose - @ConfigOption( - name = "Twelve Hour Clock", - desc = "Allows you to change the clock to be 12 hour instead of 24 hour." - ) - @ConfigEditorBoolean - public boolean twelveHourClock = false; + @Category(name = "RPG Hud", desc = "All Options for the RPG hud.") + public RPGHud rpg = new RPGHud(); @Expose - @ConfigOption( - name = "Shift hud with boss", - desc = "Shifts the hud when bossbar is visible." - ) - @ConfigEditorBoolean - public boolean bossShiftHud = true; + @Category(name = "Dungeon Hud", desc = "All Options for the Dungeon hud.") + public DungeonHud dungeon = new DungeonHud(); @Expose - @ConfigOption( - name = "Require Redstone", - desc = "Allows to make it so that the redstone percentage requires you to hold a redstone item to show." - ) - @ConfigEditorBoolean - public boolean requireRedstone = true; - } - - public static class RPGHud { + @Category(name = "Renderer", desc = "All Options for rendering.") + public Renderer renderer = new Renderer(); @Expose - @ConfigOption( - name = "Show RPG Hud", - desc = "Allows you to show or hide the RPG Hud." - ) - @ConfigEditorBoolean - public boolean showRpgHud = true; + @Category(name = "Map", desc = "All Options for the Map.") + public Map map = new Map(); @Expose - @ConfigOption( - name = "RPG Hud Position", - desc = "Allows you to change the position of the RPG Hud." - ) - @ConfigEditorButton(runnableId = "rpg", buttonText = "Edit") - public Position rpgHudPosition = new Position(1, 1); - } - - public static class DungeonHud { + @Category(name = "Tracker", desc = "All Options for the Trackers.") + public Trackers trackers = new Trackers(); - @Expose - @ConfigOption(name = "Dungeon Ultimate Bar", desc = "") - @ConfigEditorAccordion(id = 2) - public boolean ultimateBar = false; - - @Expose - @ConfigOption( - name = "Hide Ultimate Bar", - desc = "Hides the custom ultimate bar." - ) - @ConfigEditorBoolean - @ConfigAccordionId(id = 2) - public boolean hideUltimateBar = false; - - @Expose - @ConfigOption( - name = "Bar Position", - desc = "Change the position of the bar." - ) - @ConfigEditorButton(runnableId = "ultimate", buttonText = "Edit") - @ConfigAccordionId(id = 2) - public Position barPosition = new Position(0, 50, true, false); - - @Expose - @ConfigOption( - name = "Bar Loading Color", - desc = "The color of the bar when its loading." - ) - @ConfigEditorColour - @ConfigAccordionId(id = 2) - public String barLoadColor = "159:0:0:0:255"; - - @Expose - @ConfigOption( - name = "Bar Full Color", - desc = "The color of the bar when its full." - ) - @ConfigEditorColour - @ConfigAccordionId(id = 2) - public String barFullColor = "255:0:0:0:255"; - - @Expose - @ConfigOption(name = "Bar Style", desc = "Change the style of the bar") - @ConfigEditorDropdown( - values = { "No Notch", "6 Notch", "10 Notch", "12 Notch", "20 Notch" } - ) - @ConfigAccordionId(id = 2) - public int barStyle = 2; + public static class Misc { - @Expose - @ConfigOption(name = "Dungeon Players", desc = "") - @ConfigEditorAccordion(id = 1) - public boolean dungeonPlayerAccordion = false; - - @Expose - @ConfigOption( - name = "Hide Dungeon Players", - desc = "Allows you to hide the dungeon player hud" - ) - @ConfigEditorBoolean - @ConfigAccordionId(id = 1) - public boolean hideDungeonPlayers = false; - - @Expose - @ConfigOption( - name = "Dungeon Player Opacity", - desc = "Allows you to change the opacity of the dungeon players." - ) - @ConfigEditorSlider(minValue = 0, maxValue = 100, minStep = 1) - @ConfigAccordionId(id = 1) - public int dungeonPlayerOpacity = 0; - - @Expose - @ConfigOption( - name = "Hide Dead Players", - desc = "Allows you to hide players that are dead or have left." - ) - @ConfigEditorBoolean - @ConfigAccordionId(id = 1) - public boolean hideDeadDungeonPlayers = false; - - @Expose - @ConfigOption( - name = "Player Position 1", - desc = "Change the position of this dungeon player." - ) - @ConfigEditorButton(runnableId = "d1", buttonText = "Edit") - @ConfigAccordionId(id = 1) - public Position dungeonPlayer1 = new Position(5, 5); - - @Expose - @ConfigOption( - name = "Player Position 2", - desc = "Change the position of this dungeon player." - ) - @ConfigEditorButton(runnableId = "d2", buttonText = "Edit") - @ConfigAccordionId(id = 1) - public Position dungeonPlayer2 = new Position(5, 42); - - @Expose - @ConfigOption( - name = "Player Position 3", - desc = "Change the position of this dungeon player." - ) - @ConfigEditorButton(runnableId = "d3", buttonText = "Edit") - @ConfigAccordionId(id = 1) - public Position dungeonPlayer3 = new Position(5, 79); - - @Expose - @ConfigOption( - name = "Player Position 4", - desc = "Change the position of this dungeon player." - ) - @ConfigEditorButton(runnableId = "d4", buttonText = "Edit") - @ConfigAccordionId(id = 1) - public Position dungeonPlayer4 = new Position(5, 116); - } - - public static class Renderer { + @Expose + @ConfigOption( + name = "Hide Scoreboard", + desc = "Hides the scoreboard when in skyblock." + ) + @ConfigEditorBoolean + public boolean hideScoreboard = false; + } - @Expose - @ConfigOption( - name = "Hide Boss Bar", - desc = "Hides Boss Bar when certain conditions are met such as the name is just wither or it starts with objective:" - ) - @ConfigEditorBoolean - public boolean hideBossBar = true; + public static class MainHud { - @Expose - @ConfigOption(name = "Hide XP Bar", desc = "Hides xp bar.") - @ConfigEditorBoolean - public boolean hideXpBar = true; + @Expose + @ConfigOption(name = "Main Hud Position", desc = "") + @ConfigEditorButton(runnableId = "main", buttonText = "Edit") + public Position mainHudPos = new Position(0, 1, true, false); - @Expose - @ConfigOption(name = "Hide Food", desc = "Hides food.") - @ConfigEditorBoolean - public boolean hideFood = true; + @Expose + @ConfigOption( + name = "Twelve Hour Clock", + desc = "Allows you to change the clock to be 12 hour instead of 24 hour." + ) + @ConfigEditorBoolean + public boolean twelveHourClock = false; - @Expose - @ConfigOption(name = "Hide air", desc = "Hides air.") - @ConfigEditorBoolean - public boolean hideAir = true; + @Expose + @ConfigOption( + name = "Shift hud with boss", + desc = "Shifts the hud when bossbar is visible." + ) + @ConfigEditorBoolean + public boolean bossShiftHud = true; - @Expose - @ConfigOption(name = "Hide hearts", desc = "Hides hearts.") - @ConfigEditorBoolean - public boolean hideHearts = true; + @Expose + @ConfigOption( + name = "Require Redstone", + desc = "Allows to make it so that the redstone percentage requires you to hold a redstone item to show." + ) + @ConfigEditorBoolean + public boolean requireRedstone = true; + } - @Expose - @ConfigOption(name = "Hide armor", desc = "Hides armor.") - @ConfigEditorBoolean - public boolean hideArmor = true; + public static class RPGHud { - @Expose - @ConfigOption(name = "Hide Animal Hearts", desc = "Hides Animal Hearts.") - @ConfigEditorBoolean - public boolean hideAnimalHearts = true; - } + @Expose + @ConfigOption( + name = "Show RPG Hud", + desc = "Allows you to show or hide the RPG Hud." + ) + @ConfigEditorBoolean + public boolean showRpgHud = true; - public static class Map { + @Expose + @ConfigOption( + name = "RPG Hud Position", + desc = "Allows you to change the position of the RPG Hud." + ) + @ConfigEditorButton(runnableId = "rpg", buttonText = "Edit") + public Position rpgHudPosition = new Position(1, 1); + } - @Expose - @ConfigOption( - name = "Show Player Location", - desc = "This feature is off by default as Hypixel's rules are so vague that this would fall under their disallowed modifications." - ) - @ConfigEditorBoolean - public boolean showPlayerLocation = false; + public static class DungeonHud { - @Expose - @ConfigOption( - name = "Show Mini-Map", - desc = "Shows the Mini-Map on your overlay if turned off you can still use /sbhmap to see the map in fullscreen." - ) - @ConfigEditorBoolean - public boolean showMiniMap = false; + @Expose + @ConfigOption(name = "Dungeon Ultimate Bar", desc = "") + @ConfigEditorAccordion(id = 2) + public boolean ultimateBar = false; - @Expose - @ConfigOption( - name = "Mini-Map Position", - desc = "Allows you to change the position of the Mini-Map." - ) - @ConfigEditorButton(runnableId = "map", buttonText = "Edit") - public Position miniMapPosition = new Position(0, 100, false, false); + @Expose + @ConfigOption( + name = "Hide Ultimate Bar", + desc = "Hides the custom ultimate bar." + ) + @ConfigEditorBoolean + @ConfigAccordionId(id = 2) + public boolean hideUltimateBar = false; + + @Expose + @ConfigOption( + name = "Bar Position", + desc = "Change the position of the bar." + ) + @ConfigEditorButton(runnableId = "ultimate", buttonText = "Edit") + @ConfigAccordionId(id = 2) + public Position barPosition = new Position(0, 50, true, false); + + @Expose + @ConfigOption( + name = "Bar Loading Color", + desc = "The color of the bar when its loading." + ) + @ConfigEditorColour + @ConfigAccordionId(id = 2) + public String barLoadColor = "159:0:0:0:255"; + + @Expose + @ConfigOption( + name = "Bar Full Color", + desc = "The color of the bar when its full." + ) + @ConfigEditorColour + @ConfigAccordionId(id = 2) + public String barFullColor = "255:0:0:0:255"; + + @Expose + @ConfigOption(name = "Bar Style", desc = "Change the style of the bar") + @ConfigEditorDropdown( + values = { + "No Notch", "6 Notch", "10 Notch", "12 Notch", "20 Notch" + } + ) + @ConfigAccordionId(id = 2) + public int barStyle = 2; + + @Expose + @ConfigOption(name = "Dungeon Players", desc = "") + @ConfigEditorAccordion(id = 1) + public boolean dungeonPlayerAccordion = false; + + @Expose + @ConfigOption( + name = "Hide Dungeon Players", + desc = "Allows you to hide the dungeon player hud" + ) + @ConfigEditorBoolean + @ConfigAccordionId(id = 1) + public boolean hideDungeonPlayers = false; + + @Expose + @ConfigOption( + name = "Dungeon Player Opacity", + desc = "Allows you to change the opacity of the dungeon players." + ) + @ConfigEditorSlider(minValue = 0, maxValue = 100, minStep = 1) + @ConfigAccordionId(id = 1) + public int dungeonPlayerOpacity = 0; + + @Expose + @ConfigOption( + name = "Hide Dead Players", + desc = "Allows you to hide players that are dead or have left." + ) + @ConfigEditorBoolean + @ConfigAccordionId(id = 1) + public boolean hideDeadDungeonPlayers = false; + + @Expose + @ConfigOption( + name = "Player Position 1", + desc = "Change the position of this dungeon player." + ) + @ConfigEditorButton(runnableId = "d1", buttonText = "Edit") + @ConfigAccordionId(id = 1) + public Position dungeonPlayer1 = new Position(5, 5); + + @Expose + @ConfigOption( + name = "Player Position 2", + desc = "Change the position of this dungeon player." + ) + @ConfigEditorButton(runnableId = "d2", buttonText = "Edit") + @ConfigAccordionId(id = 1) + public Position dungeonPlayer2 = new Position(5, 42); + + @Expose + @ConfigOption( + name = "Player Position 3", + desc = "Change the position of this dungeon player." + ) + @ConfigEditorButton(runnableId = "d3", buttonText = "Edit") + @ConfigAccordionId(id = 1) + public Position dungeonPlayer3 = new Position(5, 79); + + @Expose + @ConfigOption( + name = "Player Position 4", + desc = "Change the position of this dungeon player." + ) + @ConfigEditorButton(runnableId = "d4", buttonText = "Edit") + @ConfigAccordionId(id = 1) + public Position dungeonPlayer4 = new Position(5, 116); + } - @Expose - @ConfigOption(name = "Icons", desc = "") - @ConfigEditorAccordion(id = 3) - public boolean icons = false; + public static class Renderer { - @Expose - @ConfigOption(name = "NPC", desc = "Show NPC Icons") - @ConfigEditorBoolean - @ConfigAccordionId(id = 3) - public boolean showNpcIcons = true; + @Expose + @ConfigOption( + name = "Hide Boss Bar", + desc = "Hides Boss Bar when certain conditions are met such as the name is just wither or it starts with objective:" + ) + @ConfigEditorBoolean + public boolean hideBossBar = true; + + @Expose + @ConfigOption(name = "Hide XP Bar", desc = "Hides xp bar.") + @ConfigEditorBoolean + public boolean hideXpBar = true; + + @Expose + @ConfigOption(name = "Hide Food", desc = "Hides food.") + @ConfigEditorBoolean + public boolean hideFood = true; + + @Expose + @ConfigOption(name = "Hide air", desc = "Hides air.") + @ConfigEditorBoolean + public boolean hideAir = true; + + @Expose + @ConfigOption(name = "Hide hearts", desc = "Hides hearts.") + @ConfigEditorBoolean + public boolean hideHearts = true; + + @Expose + @ConfigOption(name = "Hide armor", desc = "Hides armor.") + @ConfigEditorBoolean + public boolean hideArmor = true; + + @Expose + @ConfigOption( + name = "Hide Animal Hearts", + desc = "Hides Animal Hearts." + ) + @ConfigEditorBoolean + public boolean hideAnimalHearts = true; + } - @Expose - @ConfigOption(name = "Info", desc = "Show Info Icons") - @ConfigEditorBoolean - @ConfigAccordionId(id = 3) - public boolean showInfoIcons = true; + public static class Map { - @Expose - @ConfigOption(name = "Misc", desc = "Show Misc Icons") - @ConfigEditorBoolean - @ConfigAccordionId(id = 3) - public boolean showMiscIcons = true; + @Expose + @ConfigOption( + name = "Show Player Location", + desc = "This feature is off by default as Hypixel's rules are so vague that this would fall under their disallowed modifications." + ) + @ConfigEditorBoolean + public boolean showPlayerLocation = false; - @Expose - @ConfigOption(name = "Shops", desc = "Show Shop Icons") - @ConfigEditorBoolean - @ConfigAccordionId(id = 3) - public boolean showShopIcons = true; + @Expose + @ConfigOption( + name = "Show Mini-Map", + desc = "Shows the Mini-Map on your overlay if turned off you can still use /sbhmap to see the map in fullscreen." + ) + @ConfigEditorBoolean + public boolean showMiniMap = false; - @Expose - @ConfigOption(name = "Quests", desc = "Show Quest Icons") - @ConfigEditorBoolean - @ConfigAccordionId(id = 3) - public boolean showQuestIcons = false; - } + @Expose + @ConfigOption( + name = "Mini-Map Position", + desc = "Allows you to change the position of the Mini-Map." + ) + @ConfigEditorButton(runnableId = "map", buttonText = "Edit") + public Position miniMapPosition = new Position(0, 100, false, false); + + @Expose + @ConfigOption(name = "Icons", desc = "") + @ConfigEditorAccordion(id = 3) + public boolean icons = false; + + @Expose + @ConfigOption(name = "NPC", desc = "Show NPC Icons") + @ConfigEditorBoolean + @ConfigAccordionId(id = 3) + public boolean showNpcIcons = true; + + @Expose + @ConfigOption(name = "Info", desc = "Show Info Icons") + @ConfigEditorBoolean + @ConfigAccordionId(id = 3) + public boolean showInfoIcons = true; + + @Expose + @ConfigOption(name = "Misc", desc = "Show Misc Icons") + @ConfigEditorBoolean + @ConfigAccordionId(id = 3) + public boolean showMiscIcons = true; + + @Expose + @ConfigOption(name = "Shops", desc = "Show Shop Icons") + @ConfigEditorBoolean + @ConfigAccordionId(id = 3) + public boolean showShopIcons = true; + + @Expose + @ConfigOption(name = "Quests", desc = "Show Quest Icons") + @ConfigEditorBoolean + @ConfigAccordionId(id = 3) + public boolean showQuestIcons = false; + } - public static class Trackers { + public static class Trackers { - @Expose - @ConfigOption( - name = "Tracker Position", - desc = "Allows you to change the position of the Trackers." - ) - @ConfigEditorButton(runnableId = "tracker", buttonText = "Edit") - public Position trackerPosition = new Position(-1, 200); + @Expose + @ConfigOption( + name = "Tracker Position", + desc = "Allows you to change the position of the Trackers." + ) + @ConfigEditorButton(runnableId = "tracker", buttonText = "Edit") + public Position trackerPosition = new Position(-1, 200); - @Expose - @ConfigOption( - name = "Hide Tracker", - desc = "It will still track the data just in case." - ) - @ConfigEditorBoolean - public boolean hideTracker = false; - } + @Expose + @ConfigOption( + name = "Hide Tracker", + desc = "It will still track the data just in case." + ) + @ConfigEditorBoolean + public boolean hideTracker = false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfigEditor.java b/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfigEditor.java index dc0d8a0..0407607 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfigEditor.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/config/SBHConfigEditor.java @@ -29,906 +29,979 @@ import org.lwjgl.opengl.GL11; public class SBHConfigEditor extends GuiElement { - private static final ResourceLocation[] socialsIco = new ResourceLocation[] { - DISCORD, - TWITTER - }; - private static final String[] socialsLink = new String[] { - "https://discord.gg/moulberry", - "https://twitter.com/thatgravytboat/" - }; + private static final ResourceLocation[] socialsIco = new ResourceLocation[] { + DISCORD, + TWITTER + }; + private static final String[] socialsLink = new String[] { + "https://discord.gg/moulberry", + "https://twitter.com/thatgravytboat/" + }; - private final long openedMillis; + private final long openedMillis; - private String selectedCategory = null; + private String selectedCategory = null; - private final LerpingInteger optionsScroll = new LerpingInteger(0, 150); - private final LerpingInteger categoryScroll = new LerpingInteger(0, 150); + private final LerpingInteger optionsScroll = new LerpingInteger(0, 150); + private final LerpingInteger categoryScroll = new LerpingInteger(0, 150); - private LinkedHashMap<String, ConfigProcessor.ProcessedCategory> processedConfig; - private HashMap<ConfigProcessor.ProcessedOption, ConfigProcessor.ProcessedCategory> categoryForOption = new HashMap<>(); + private LinkedHashMap<String, ConfigProcessor.ProcessedCategory> processedConfig; + private HashMap<ConfigProcessor.ProcessedOption, ConfigProcessor.ProcessedCategory> categoryForOption = new HashMap<>(); - public SBHConfigEditor(Config config) { - this(config, null); - } - - public SBHConfigEditor(Config config, String categoryOpen) { - this.openedMillis = System.currentTimeMillis(); - this.processedConfig = ConfigProcessor.create(config); - - for (ConfigProcessor.ProcessedCategory category : processedConfig.values()) { - for (ConfigProcessor.ProcessedOption option : category.options.values()) { - categoryForOption.put(option, category); - } + public SBHConfigEditor(Config config) { + this(config, null); } - if (categoryOpen != null) { - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { - if (category.getValue().name.equalsIgnoreCase(categoryOpen)) { - selectedCategory = category.getKey(); - break; - } - } - if (selectedCategory == null) { - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { - if ( - category - .getValue() - .name.toLowerCase() - .startsWith(categoryOpen.toLowerCase()) - ) { - selectedCategory = category.getKey(); - break; - } + public SBHConfigEditor(Config config, String categoryOpen) { + this.openedMillis = System.currentTimeMillis(); + this.processedConfig = ConfigProcessor.create(config); + + for (ConfigProcessor.ProcessedCategory category : processedConfig.values()) { + for (ConfigProcessor.ProcessedOption option : category.options.values()) { + categoryForOption.put(option, category); + } } - } - if (selectedCategory == null) { - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { - if ( - category - .getValue() - .name.toLowerCase() - .contains(categoryOpen.toLowerCase()) - ) { - selectedCategory = category.getKey(); - break; - } + + if (categoryOpen != null) { + for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { + if (category.getValue().name.equalsIgnoreCase(categoryOpen)) { + selectedCategory = category.getKey(); + break; + } + } + if (selectedCategory == null) { + for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { + if ( + category + .getValue() + .name.toLowerCase() + .startsWith(categoryOpen.toLowerCase()) + ) { + selectedCategory = category.getKey(); + break; + } + } + } + if (selectedCategory == null) { + for (Map.Entry<String, ConfigProcessor.ProcessedCategory> category : processedConfig.entrySet()) { + if ( + category + .getValue() + .name.toLowerCase() + .contains(categoryOpen.toLowerCase()) + ) { + selectedCategory = category.getKey(); + break; + } + } + } } - } - } - } - - private LinkedHashMap<String, ConfigProcessor.ProcessedCategory> getCurrentConfigEditing() { - return new LinkedHashMap<>(processedConfig); - } - - private LinkedHashMap<String, ConfigProcessor.ProcessedOption> getOptionsInCategory( - ConfigProcessor.ProcessedCategory cat - ) { - return new LinkedHashMap<>(cat.options); - } - - public String getSelectedCategory() { - return selectedCategory; - } - - public String getSelectedCategoryName() { - return processedConfig.get(selectedCategory).name; - } - - private void setSelectedCategory(String category) { - selectedCategory = category; - optionsScroll.setValue(0); - } - - public void render() { - optionsScroll.tick(); - categoryScroll.tick(); - - List<String> tooltipToDisplay = null; - - long currentTime = System.currentTimeMillis(); - long delta = currentTime - openedMillis; - - ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; - int mouseY = - height - - Mouse.getY() * - height / - Minecraft.getMinecraft().displayHeight - - 1; - - float opacityFactor = LerpUtils.sigmoidZeroOne(delta / 500f); - RenderUtils.drawGradientRect( - 0, - 0, - 0, - width, - height, - (int) (0x80 * opacityFactor) << 24 | 0x101010, - (int) (0x90 * opacityFactor) << 24 | 0x101010 - ); - - int xSize = Math.min( - scaledResolution.getScaledWidth() - - 100 / - scaledResolution.getScaleFactor(), - 500 - ); - int ySize = Math.min( - scaledResolution.getScaledHeight() - - 100 / - scaledResolution.getScaleFactor(), - 400 - ); - - int x = (scaledResolution.getScaledWidth() - xSize) / 2; - int y = (scaledResolution.getScaledHeight() - ySize) / 2; - - int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); - - int openingXSize = xSize; - int openingYSize = ySize; - if (delta < 150) { - openingXSize = (int) (delta * xSize / 150); - openingYSize = 5; - } else if (delta < 300) { - openingYSize = 5 + (int) (delta - 150) * (ySize - 5) / 150; - } - RenderUtils.drawFloatingRectDark( - (scaledResolution.getScaledWidth() - openingXSize) / 2, - (scaledResolution.getScaledHeight() - openingYSize) / 2, - openingXSize, - openingYSize - ); - GlScissorStack.clear(); - GlScissorStack.push( - (scaledResolution.getScaledWidth() - openingXSize) / 2, - (scaledResolution.getScaledHeight() - openingYSize) / 2, - (scaledResolution.getScaledWidth() + openingXSize) / 2, - (scaledResolution.getScaledHeight() + openingYSize) / 2, - scaledResolution - ); - - RenderUtils.drawFloatingRectDark(x + 5, y + 5, xSize - 10, 20, false); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - TextRenderUtils.drawStringCenteredScaledMaxWidth( - "SkyBlockHud by " + - EnumChatFormatting.RED + - "ThatGravyBoat" + - EnumChatFormatting.RESET + - ", config by " + - EnumChatFormatting.DARK_PURPLE + - "Moulberry", - fr, - x + xSize / 2f, - y + 15, - false, - 200, - 0xa0a0a0 - ); - - RenderUtils.drawFloatingRectDark( - x + 4, - y + 49 - 20, - 140, - ySize - 54 + 20, - false - ); - - int innerPadding = 20 / adjScaleFactor; - int innerLeft = x + 4 + innerPadding; - int innerRight = x + 144 - innerPadding; - int innerTop = y + 49 + innerPadding; - int innerBottom = y + ySize - 5 - innerPadding; - Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left - Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top - Gui.drawRect( - innerRight - 1, - innerTop + 1, - innerRight, - innerBottom, - 0xff28282E - ); //Right - Gui.drawRect( - innerLeft + 1, - innerBottom - 1, - innerRight - 1, - innerBottom, - 0xff28282E - ); //Bottom - Gui.drawRect( - innerLeft + 1, - innerTop + 1, - innerRight - 1, - innerBottom - 1, - 0x6008080E - ); //Middle - - GlScissorStack.push( - 0, - innerTop + 1, - scaledResolution.getScaledWidth(), - innerBottom - 1, - scaledResolution - ); - - float catBarSize = 1; - int catY = -categoryScroll.getValue(); - - LinkedHashMap<String, ConfigProcessor.ProcessedCategory> currentConfigEditing = getCurrentConfigEditing(); - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : currentConfigEditing.entrySet()) { - String selectedCategory = getSelectedCategory(); - if ( - selectedCategory == null || - !currentConfigEditing.containsKey(selectedCategory) - ) { - setSelectedCategory(entry.getKey()); - } - String catName = entry.getValue().name; - if (entry.getKey().equals(getSelectedCategory())) { - catName = - EnumChatFormatting.DARK_AQUA.toString() + - EnumChatFormatting.UNDERLINE + - catName; - } else { - catName = EnumChatFormatting.GRAY + catName; - } - TextRenderUtils.drawStringCenteredScaledMaxWidth( - catName, - fr, - x + 75, - y + 70 + catY, - false, - 100, - -1 - ); - catY += 15; - if (catY > 0) { - catBarSize = - LerpUtils.clampZeroOne( - (float) (innerBottom - innerTop - 2) / - (catY + 5 + categoryScroll.getValue()) - ); - } } - float catBarStart = - categoryScroll.getValue() / (float) (catY + categoryScroll.getValue()); - float catBarEnd = catBarStart + catBarSize; - if (catBarEnd > 1) { - catBarEnd = 1; - if ( - categoryScroll.getTarget() / - (float) (catY + categoryScroll.getValue()) + - catBarSize < - 1 - ) { - int target = optionsScroll.getTarget(); - categoryScroll.setValue( - (int) Math.ceil( - (catY + 5 + categoryScroll.getValue()) - - catBarSize * - (catY + 5 + categoryScroll.getValue()) - ) - ); - categoryScroll.setTarget(target); - } else { - categoryScroll.setValue( - (int) Math.ceil( - (catY + 5 + categoryScroll.getValue()) - - catBarSize * - (catY + 5 + categoryScroll.getValue()) - ) - ); - } + private LinkedHashMap<String, ConfigProcessor.ProcessedCategory> getCurrentConfigEditing() { + return new LinkedHashMap<>(processedConfig); } - int catDist = innerBottom - innerTop - 12; - Gui.drawRect( - innerLeft + 2, - innerTop + 5, - innerLeft + 7, - innerBottom - 5, - 0xff101010 - ); - Gui.drawRect( - innerLeft + 3, - innerTop + 6 + (int) (catDist * catBarStart), - innerLeft + 6, - innerTop + 6 + (int) (catDist * catBarEnd), - 0xff303030 - ); - - GlScissorStack.pop(scaledResolution); - - TextRenderUtils.drawStringCenteredScaledMaxWidth( - "Categories", - fr, - x + 75, - y + 44, - false, - 120, - 0xa368ef - ); - - RenderUtils.drawFloatingRectDark( - x + 149, - y + 29, - xSize - 154, - ySize - 34, - false - ); - - innerLeft = x + 149 + innerPadding; - innerRight = x + xSize - 5 - innerPadding; - innerBottom = y + ySize - 5 - innerPadding; - - GlStateManager.color(1, 1, 1, 1); - int rightStuffLen = 20; - - if ( - getSelectedCategory() != null && - currentConfigEditing.containsKey(getSelectedCategory()) + + private LinkedHashMap<String, ConfigProcessor.ProcessedOption> getOptionsInCategory( + ConfigProcessor.ProcessedCategory cat ) { - ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get( - getSelectedCategory() - ); - - TextRenderUtils.drawStringScaledMaxWidth( - cat.desc, - fr, - innerLeft + 5, - y + 40, - true, - innerRight - innerLeft - rightStuffLen - 10, - 0xb0b0b0 - ); + return new LinkedHashMap<>(cat.options); } - Gui.drawRect(innerLeft, innerTop, innerLeft + 1, innerBottom, 0xff08080E); //Left - Gui.drawRect(innerLeft + 1, innerTop, innerRight, innerTop + 1, 0xff08080E); //Top - Gui.drawRect( - innerRight - 1, - innerTop + 1, - innerRight, - innerBottom, - 0xff303036 - ); //Right - Gui.drawRect( - innerLeft + 1, - innerBottom - 1, - innerRight - 1, - innerBottom, - 0xff303036 - ); //Bottom - Gui.drawRect( - innerLeft + 1, - innerTop + 1, - innerRight - 1, - innerBottom - 1, - 0x6008080E - ); //Middle - - GlScissorStack.push( - innerLeft + 1, - innerTop + 1, - innerRight - 1, - innerBottom - 1, - scaledResolution - ); - float barSize = 1; - int optionY = -optionsScroll.getValue(); - if ( - getSelectedCategory() != null && - currentConfigEditing.containsKey(getSelectedCategory()) - ) { - ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get( - getSelectedCategory() - ); - int optionWidthDefault = innerRight - innerLeft - 20; - GlStateManager.enableDepth(); - Set<Integer> activeAccordions = new HashSet<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat) - .values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.contains(option.accordionId)) { - continue; - } - optionWidth = optionWidthDefault - 2 * innerPadding; - } + public String getSelectedCategory() { + return selectedCategory; + } - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - activeAccordions.add(accordion.getAccordionId()); - } - } - int optionHeight = editor.getHeight(); - if ( - innerTop + 5 + optionY + optionHeight > innerTop + 1 && - innerTop + 5 + optionY < innerBottom - 1 - ) { - editor.render( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionY, - optionWidth - ); - } - optionY += optionHeight + 5; - } - GlStateManager.disableDepth(); - if (optionY > 0) { - barSize = - LerpUtils.clampZeroOne( - (float) (innerBottom - innerTop - 2) / - (optionY + 5 + optionsScroll.getValue()) - ); - } + public String getSelectedCategoryName() { + return processedConfig.get(selectedCategory).name; } - GlScissorStack.pop(scaledResolution); + private void setSelectedCategory(String category) { + selectedCategory = category; + optionsScroll.setValue(0); + } - GL11.glDisable(GL11.GL_SCISSOR_TEST); - if ( - getSelectedCategory() != null && - currentConfigEditing.containsKey(getSelectedCategory()) - ) { - int optionYOverlay = -optionsScroll.getValue(); - ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get( - getSelectedCategory() - ); - int optionWidthDefault = innerRight - innerLeft - 20; - - GlStateManager.translate(0, 0, 10); - GlStateManager.enableDepth(); - Set<Integer> activeAccordions = new HashSet<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat) - .values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.contains(option.accordionId)) { - continue; - } - optionWidth = optionWidthDefault - 2 * innerPadding; - } + public void render() { + optionsScroll.tick(); + categoryScroll.tick(); - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - activeAccordions.add(accordion.getAccordionId()); - } - } - int optionHeight = editor.getHeight(); - if ( - innerTop + 5 + optionYOverlay + optionHeight > innerTop + 1 && - innerTop + 5 + optionYOverlay < innerBottom - 1 - ) { - editor.renderOverlay( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionYOverlay, - optionWidth - ); - } - optionYOverlay += optionHeight + 5; - } - GlStateManager.disableDepth(); - GlStateManager.translate(0, 0, -10); - } - GL11.glEnable(GL11.GL_SCISSOR_TEST); - - float barStart = - optionsScroll.getValue() / (float) (optionY + optionsScroll.getValue()); - float barEnd = barStart + barSize; - if (barEnd > 1) { - barEnd = 1; - if ( - optionsScroll.getTarget() / - (float) (optionY + optionsScroll.getValue()) + - barSize < - 1 - ) { - int target = optionsScroll.getTarget(); - optionsScroll.setValue( - (int) Math.ceil( - (optionY + 5 + optionsScroll.getValue()) - - barSize * - (optionY + 5 + optionsScroll.getValue()) - ) + List<String> tooltipToDisplay = null; + + long currentTime = System.currentTimeMillis(); + long delta = currentTime - openedMillis; + + ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() ); - optionsScroll.setTarget(target); - } else { - optionsScroll.setValue( - (int) Math.ceil( - (optionY + 5 + optionsScroll.getValue()) - - barSize * - (optionY + 5 + optionsScroll.getValue()) - ) + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); + int mouseX = + Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + int mouseY = + height - + Mouse.getY() * + height / + Minecraft.getMinecraft().displayHeight - + 1; + + float opacityFactor = LerpUtils.sigmoidZeroOne(delta / 500f); + RenderUtils.drawGradientRect( + 0, + 0, + 0, + width, + height, + (int) (0x80 * opacityFactor) << 24 | 0x101010, + (int) (0x90 * opacityFactor) << 24 | 0x101010 ); - } - } - int dist = innerBottom - innerTop - 12; - Gui.drawRect( - innerRight - 10, - innerTop + 5, - innerRight - 5, - innerBottom - 5, - 0xff101010 - ); - Gui.drawRect( - innerRight - 9, - innerTop + 6 + (int) (dist * barStart), - innerRight - 6, - innerTop + 6 + (int) (dist * barEnd), - 0xff303030 - ); - - for (int socialIndex = 0; socialIndex < socialsIco.length; socialIndex++) { - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(socialsIco[socialIndex]); - GlStateManager.color(1, 1, 1, 1); - int socialLeft = x + xSize - 23 - 18 * socialIndex; - RenderUtils.drawTexturedRect(socialLeft, y + 7, 16, 16, GL11.GL_LINEAR); - - if ( - mouseX >= socialLeft && - mouseX <= socialLeft + 16 && - mouseY >= y + 6 && - mouseY <= y + 23 - ) { - tooltipToDisplay = - Lists.newArrayList( - EnumChatFormatting.YELLOW + - "Go to: " + - EnumChatFormatting.RESET + - socialsLink[socialIndex] - ); - } - } - GlScissorStack.clear(); - - if (tooltipToDisplay != null) { - TextRenderUtils.drawHoveringText( - tooltipToDisplay, - mouseX, - mouseY, - width, - height, - -1, - fr - ); - } + int xSize = Math.min( + scaledResolution.getScaledWidth() - + 100 / + scaledResolution.getScaleFactor(), + 500 + ); + int ySize = Math.min( + scaledResolution.getScaledHeight() - + 100 / + scaledResolution.getScaleFactor(), + 400 + ); - GlStateManager.translate(0, 0, -2); - } - - public boolean mouseInput(int mouseX, int mouseY) { - ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - int width = scaledResolution.getScaledWidth(); - int height = scaledResolution.getScaledHeight(); - - int xSize = Math.min(width - 100 / scaledResolution.getScaleFactor(), 500); - int ySize = Math.min(height - 100 / scaledResolution.getScaleFactor(), 400); - - int x = (scaledResolution.getScaledWidth() - xSize) / 2; - int y = (scaledResolution.getScaledHeight() - ySize) / 2; - - int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); - - int innerPadding = 20 / adjScaleFactor; - int innerTop = y + 49 + innerPadding; - int innerBottom = y + ySize - 5 - innerPadding; - int innerLeft = x + 149 + innerPadding; - int innerRight = x + xSize - 5 - innerPadding; - - int dWheel = Mouse.getEventDWheel(); - if (mouseY > innerTop && mouseY < innerBottom && dWheel != 0) { - if (dWheel < 0) { - dWheel = -1; - } - if (dWheel > 0) { - dWheel = 1; - } - if (mouseX < innerLeft) { - int newTarget = categoryScroll.getTarget() - dWheel * 30; - if (newTarget < 0) { - newTarget = 0; - } + int x = (scaledResolution.getScaledWidth() - xSize) / 2; + int y = (scaledResolution.getScaledHeight() - ySize) / 2; - float catBarSize = 1; - int catY = -newTarget; - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : getCurrentConfigEditing() - .entrySet()) { - if (getSelectedCategory() == null) { - setSelectedCategory(entry.getKey()); - } - - catY += 15; - if (catY > 0) { - catBarSize = - LerpUtils.clampZeroOne( - (float) (innerBottom - innerTop - 2) / (catY + 5 + newTarget) - ); - } + int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); + + int openingXSize = xSize; + int openingYSize = ySize; + if (delta < 150) { + openingXSize = (int) (delta * xSize / 150); + openingYSize = 5; + } else if (delta < 300) { + openingYSize = 5 + (int) (delta - 150) * (ySize - 5) / 150; } + RenderUtils.drawFloatingRectDark( + (scaledResolution.getScaledWidth() - openingXSize) / 2, + (scaledResolution.getScaledHeight() - openingYSize) / 2, + openingXSize, + openingYSize + ); + GlScissorStack.clear(); + GlScissorStack.push( + (scaledResolution.getScaledWidth() - openingXSize) / 2, + (scaledResolution.getScaledHeight() - openingYSize) / 2, + (scaledResolution.getScaledWidth() + openingXSize) / 2, + (scaledResolution.getScaledHeight() + openingYSize) / 2, + scaledResolution + ); + + RenderUtils.drawFloatingRectDark(x + 5, y + 5, xSize - 10, 20, false); - int barMax = (int) Math.floor( - (catY + 5 + newTarget) - catBarSize * (catY + 5 + newTarget) + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + TextRenderUtils.drawStringCenteredScaledMaxWidth( + "SkyBlockHud by " + + EnumChatFormatting.RED + + "ThatGravyBoat" + + EnumChatFormatting.RESET + + ", config by " + + EnumChatFormatting.DARK_PURPLE + + "Moulberry", + fr, + x + xSize / 2f, + y + 15, + false, + 200, + 0xa0a0a0 ); - if (newTarget > barMax) { - newTarget = barMax; - } - categoryScroll.resetTimer(); - categoryScroll.setTarget(newTarget); - } else { - int newTarget = optionsScroll.getTarget() - dWheel * 30; - if (newTarget < 0) { - newTarget = 0; - } - float barSize = 1; - int optionY = -newTarget; - if ( - getSelectedCategory() != null && - getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory()) - ) { - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() - .get(getSelectedCategory()); - Set<Integer> activeAccordions = new HashSet<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( - cat - ) - .values()) { - if (option.accordionId >= 0) { - if (!activeAccordions.contains(option.accordionId)) { - continue; - } - } + RenderUtils.drawFloatingRectDark( + x + 4, + y + 49 - 20, + 140, + ySize - 54 + 20, + false + ); - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; + int innerPadding = 20 / adjScaleFactor; + int innerLeft = x + 4 + innerPadding; + int innerRight = x + 144 - innerPadding; + int innerTop = y + 49 + innerPadding; + int innerBottom = y + ySize - 5 - innerPadding; + Gui.drawRect( + innerLeft, + innerTop, + innerLeft + 1, + innerBottom, + 0xff08080E + ); //Left + Gui.drawRect( + innerLeft + 1, + innerTop, + innerRight, + innerTop + 1, + 0xff08080E + ); //Top + Gui.drawRect( + innerRight - 1, + innerTop + 1, + innerRight, + innerBottom, + 0xff28282E + ); //Right + Gui.drawRect( + innerLeft + 1, + innerBottom - 1, + innerRight - 1, + innerBottom, + 0xff28282E + ); //Bottom + Gui.drawRect( + innerLeft + 1, + innerTop + 1, + innerRight - 1, + innerBottom - 1, + 0x6008080E + ); //Middle + + GlScissorStack.push( + 0, + innerTop + 1, + scaledResolution.getScaledWidth(), + innerBottom - 1, + scaledResolution + ); + + float catBarSize = 1; + int catY = -categoryScroll.getValue(); + + LinkedHashMap<String, ConfigProcessor.ProcessedCategory> currentConfigEditing = getCurrentConfigEditing(); + for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : currentConfigEditing.entrySet()) { + String selectedCategory = getSelectedCategory(); + if ( + selectedCategory == null || + !currentConfigEditing.containsKey(selectedCategory) + ) { + setSelectedCategory(entry.getKey()); } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - activeAccordions.add(accordion.getAccordionId()); - } + String catName = entry.getValue().name; + if (entry.getKey().equals(getSelectedCategory())) { + catName = + EnumChatFormatting.DARK_AQUA.toString() + + EnumChatFormatting.UNDERLINE + + catName; + } else { + catName = EnumChatFormatting.GRAY + catName; } - optionY += editor.getHeight() + 5; + TextRenderUtils.drawStringCenteredScaledMaxWidth( + catName, + fr, + x + 75, + y + 70 + catY, + false, + 100, + -1 + ); + catY += 15; + if (catY > 0) { + catBarSize = + LerpUtils.clampZeroOne( + (float) (innerBottom - innerTop - 2) / + (catY + 5 + categoryScroll.getValue()) + ); + } + } - if (optionY > 0) { - barSize = - LerpUtils.clampZeroOne( - (float) (innerBottom - innerTop - 2) / - (optionY + 5 + newTarget) + float catBarStart = + categoryScroll.getValue() / + (float) (catY + categoryScroll.getValue()); + float catBarEnd = catBarStart + catBarSize; + if (catBarEnd > 1) { + catBarEnd = 1; + if ( + categoryScroll.getTarget() / + (float) (catY + categoryScroll.getValue()) + + catBarSize < + 1 + ) { + int target = optionsScroll.getTarget(); + categoryScroll.setValue( + (int) Math.ceil( + (catY + 5 + categoryScroll.getValue()) - + catBarSize * + (catY + 5 + categoryScroll.getValue()) + ) + ); + categoryScroll.setTarget(target); + } else { + categoryScroll.setValue( + (int) Math.ceil( + (catY + 5 + categoryScroll.getValue()) - + catBarSize * + (catY + 5 + categoryScroll.getValue()) + ) ); } - } } + int catDist = innerBottom - innerTop - 12; + Gui.drawRect( + innerLeft + 2, + innerTop + 5, + innerLeft + 7, + innerBottom - 5, + 0xff101010 + ); + Gui.drawRect( + innerLeft + 3, + innerTop + 6 + (int) (catDist * catBarStart), + innerLeft + 6, + innerTop + 6 + (int) (catDist * catBarEnd), + 0xff303030 + ); - int barMax = (int) Math.floor( - (optionY + 5 + newTarget) - barSize * (optionY + 5 + newTarget) + GlScissorStack.pop(scaledResolution); + + TextRenderUtils.drawStringCenteredScaledMaxWidth( + "Categories", + fr, + x + 75, + y + 44, + false, + 120, + 0xa368ef ); - if (newTarget > barMax) { - newTarget = barMax; - } - optionsScroll.setTimeToReachTarget( - Math.min( - 150, - Math.max(10, 5 * Math.abs(newTarget - optionsScroll.getValue())) - ) + + RenderUtils.drawFloatingRectDark( + x + 149, + y + 29, + xSize - 154, + ySize - 34, + false ); - optionsScroll.resetTimer(); - optionsScroll.setTarget(newTarget); - } - } else if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if (getCurrentConfigEditing() != null) { - int catY = -categoryScroll.getValue(); - for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : getCurrentConfigEditing() - .entrySet()) { - if (getSelectedCategory() == null) { - setSelectedCategory(entry.getKey()); - } - if ( - mouseX >= x + 5 && - mouseX <= x + 145 && - mouseY >= y + 70 + catY - 7 && - mouseY <= y + 70 + catY + 7 - ) { - setSelectedCategory(entry.getKey()); - return true; - } - catY += 15; - } - } - for ( - int socialIndex = 0; - socialIndex < socialsLink.length; - socialIndex++ - ) { - int socialLeft = x + xSize - 23 - 18 * socialIndex; + innerLeft = x + 149 + innerPadding; + innerRight = x + xSize - 5 - innerPadding; + innerBottom = y + ySize - 5 - innerPadding; + + GlStateManager.color(1, 1, 1, 1); + int rightStuffLen = 20; if ( - mouseX >= socialLeft && - mouseX <= socialLeft + 16 && - mouseY >= y + 6 && - mouseY <= y + 23 + getSelectedCategory() != null && + currentConfigEditing.containsKey(getSelectedCategory()) ) { - try { - Desktop.getDesktop().browse(new URI(socialsLink[socialIndex])); - } catch (Exception ignored) {} - return true; + ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get( + getSelectedCategory() + ); + + TextRenderUtils.drawStringScaledMaxWidth( + cat.desc, + fr, + innerLeft + 5, + y + 40, + true, + innerRight - innerLeft - rightStuffLen - 10, + 0xb0b0b0 + ); } - } - } - int optionY = -optionsScroll.getValue(); - if ( - getSelectedCategory() != null && - getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory()) - ) { - int optionWidthDefault = innerRight - innerLeft - 20; - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() - .get(getSelectedCategory()); - Set<Integer> activeAccordions = new HashSet<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat) - .values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.contains(option.accordionId)) { - continue; - } - optionWidth = optionWidthDefault - 2 * innerPadding; + Gui.drawRect( + innerLeft, + innerTop, + innerLeft + 1, + innerBottom, + 0xff08080E + ); //Left + Gui.drawRect( + innerLeft + 1, + innerTop, + innerRight, + innerTop + 1, + 0xff08080E + ); //Top + Gui.drawRect( + innerRight - 1, + innerTop + 1, + innerRight, + innerBottom, + 0xff303036 + ); //Right + Gui.drawRect( + innerLeft + 1, + innerBottom - 1, + innerRight - 1, + innerBottom, + 0xff303036 + ); //Bottom + Gui.drawRect( + innerLeft + 1, + innerTop + 1, + innerRight - 1, + innerBottom - 1, + 0x6008080E + ); //Middle + + GlScissorStack.push( + innerLeft + 1, + innerTop + 1, + innerRight - 1, + innerBottom - 1, + scaledResolution + ); + float barSize = 1; + int optionY = -optionsScroll.getValue(); + if ( + getSelectedCategory() != null && + currentConfigEditing.containsKey(getSelectedCategory()) + ) { + ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get( + getSelectedCategory() + ); + int optionWidthDefault = innerRight - innerLeft - 20; + GlStateManager.enableDepth(); + Set<Integer> activeAccordions = new HashSet<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( + cat + ) + .values()) { + int optionWidth = optionWidthDefault; + if (option.accordionId >= 0) { + if (!activeAccordions.contains(option.accordionId)) { + continue; + } + optionWidth = optionWidthDefault - 2 * innerPadding; + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + activeAccordions.add(accordion.getAccordionId()); + } + } + int optionHeight = editor.getHeight(); + if ( + innerTop + 5 + optionY + optionHeight > innerTop + 1 && + innerTop + 5 + optionY < innerBottom - 1 + ) { + editor.render( + (innerLeft + innerRight - optionWidth) / 2 - 5, + innerTop + 5 + optionY, + optionWidth + ); + } + optionY += optionHeight + 5; + } + GlStateManager.disableDepth(); + if (optionY > 0) { + barSize = + LerpUtils.clampZeroOne( + (float) (innerBottom - innerTop - 2) / + (optionY + 5 + optionsScroll.getValue()) + ); + } } - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - activeAccordions.add(accordion.getAccordionId()); - } - } + GlScissorStack.pop(scaledResolution); + + GL11.glDisable(GL11.GL_SCISSOR_TEST); if ( - editor.mouseInputOverlay( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionY, - optionWidth, - mouseX, - mouseY - ) + getSelectedCategory() != null && + currentConfigEditing.containsKey(getSelectedCategory()) ) { - return true; + int optionYOverlay = -optionsScroll.getValue(); + ConfigProcessor.ProcessedCategory cat = currentConfigEditing.get( + getSelectedCategory() + ); + int optionWidthDefault = innerRight - innerLeft - 20; + + GlStateManager.translate(0, 0, 10); + GlStateManager.enableDepth(); + Set<Integer> activeAccordions = new HashSet<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( + cat + ) + .values()) { + int optionWidth = optionWidthDefault; + if (option.accordionId >= 0) { + if (!activeAccordions.contains(option.accordionId)) { + continue; + } + optionWidth = optionWidthDefault - 2 * innerPadding; + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + activeAccordions.add(accordion.getAccordionId()); + } + } + int optionHeight = editor.getHeight(); + if ( + innerTop + + 5 + + optionYOverlay + + optionHeight > + innerTop + + 1 && + innerTop + 5 + optionYOverlay < innerBottom - 1 + ) { + editor.renderOverlay( + (innerLeft + innerRight - optionWidth) / 2 - 5, + innerTop + 5 + optionYOverlay, + optionWidth + ); + } + optionYOverlay += optionHeight + 5; + } + GlStateManager.disableDepth(); + GlStateManager.translate(0, 0, -10); } - optionY += editor.getHeight() + 5; - } - } - - if ( - mouseX > innerLeft && - mouseX < innerRight && - mouseY > innerTop && - mouseY < innerBottom - ) { - optionY = -optionsScroll.getValue(); - if ( - getSelectedCategory() != null && - getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory()) - ) { - int optionWidthDefault = innerRight - innerLeft - 20; - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() - .get(getSelectedCategory()); - Set<Integer> activeAccordions = new HashSet<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat) - .values()) { - int optionWidth = optionWidthDefault; - if (option.accordionId >= 0) { - if (!activeAccordions.contains(option.accordionId)) { - continue; + GL11.glEnable(GL11.GL_SCISSOR_TEST); + + float barStart = + optionsScroll.getValue() / + (float) (optionY + optionsScroll.getValue()); + float barEnd = barStart + barSize; + if (barEnd > 1) { + barEnd = 1; + if ( + optionsScroll.getTarget() / + (float) (optionY + optionsScroll.getValue()) + + barSize < + 1 + ) { + int target = optionsScroll.getTarget(); + optionsScroll.setValue( + (int) Math.ceil( + (optionY + 5 + optionsScroll.getValue()) - + barSize * + (optionY + 5 + optionsScroll.getValue()) + ) + ); + optionsScroll.setTarget(target); + } else { + optionsScroll.setValue( + (int) Math.ceil( + (optionY + 5 + optionsScroll.getValue()) - + barSize * + (optionY + 5 + optionsScroll.getValue()) + ) + ); } - optionWidth = optionWidthDefault - 2 * innerPadding; - } - - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; - } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - activeAccordions.add(accordion.getAccordionId()); + } + int dist = innerBottom - innerTop - 12; + Gui.drawRect( + innerRight - 10, + innerTop + 5, + innerRight - 5, + innerBottom - 5, + 0xff101010 + ); + Gui.drawRect( + innerRight - 9, + innerTop + 6 + (int) (dist * barStart), + innerRight - 6, + innerTop + 6 + (int) (dist * barEnd), + 0xff303030 + ); + + for ( + int socialIndex = 0; + socialIndex < socialsIco.length; + socialIndex++ + ) { + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(socialsIco[socialIndex]); + GlStateManager.color(1, 1, 1, 1); + int socialLeft = x + xSize - 23 - 18 * socialIndex; + RenderUtils.drawTexturedRect( + socialLeft, + y + 7, + 16, + 16, + GL11.GL_LINEAR + ); + + if ( + mouseX >= socialLeft && + mouseX <= socialLeft + 16 && + mouseY >= y + 6 && + mouseY <= y + 23 + ) { + tooltipToDisplay = + Lists.newArrayList( + EnumChatFormatting.YELLOW + + "Go to: " + + EnumChatFormatting.RESET + + socialsLink[socialIndex] + ); } - } - if ( - editor.mouseInput( - (innerLeft + innerRight - optionWidth) / 2 - 5, - innerTop + 5 + optionY, - optionWidth, - mouseX, - mouseY - ) - ) { - return true; - } - optionY += editor.getHeight() + 5; } - } + + GlScissorStack.clear(); + + if (tooltipToDisplay != null) { + TextRenderUtils.drawHoveringText( + tooltipToDisplay, + mouseX, + mouseY, + width, + height, + -1, + fr + ); + } + + GlStateManager.translate(0, 0, -2); } - return true; - } + public boolean mouseInput(int mouseX, int mouseY) { + ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + int width = scaledResolution.getScaledWidth(); + int height = scaledResolution.getScaledHeight(); - public boolean keyboardInput() { - ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - int width = scaledResolution.getScaledWidth(); + int xSize = Math.min( + width - 100 / scaledResolution.getScaleFactor(), + 500 + ); + int ySize = Math.min( + height - 100 / scaledResolution.getScaleFactor(), + 400 + ); - int xSize = Math.min(width - 100 / scaledResolution.getScaleFactor(), 500); + int x = (scaledResolution.getScaledWidth() - xSize) / 2; + int y = (scaledResolution.getScaledHeight() - ySize) / 2; - int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); + int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); - int innerPadding = 20 / adjScaleFactor; - int innerWidth = xSize - 154 - innerPadding * 2; + int innerPadding = 20 / adjScaleFactor; + int innerTop = y + 49 + innerPadding; + int innerBottom = y + ySize - 5 - innerPadding; + int innerLeft = x + 149 + innerPadding; + int innerRight = x + xSize - 5 - innerPadding; - if ( - getSelectedCategory() != null && - getCurrentConfigEditing() != null && - getCurrentConfigEditing().containsKey(getSelectedCategory()) - ) { - ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() - .get(getSelectedCategory()); - Set<Integer> activeAccordions = new HashSet<>(); - for (ConfigProcessor.ProcessedOption option : getOptionsInCategory(cat) - .values()) { - if (option.accordionId >= 0) { - if (!activeAccordions.contains(option.accordionId)) { - continue; - } - } + int dWheel = Mouse.getEventDWheel(); + if (mouseY > innerTop && mouseY < innerBottom && dWheel != 0) { + if (dWheel < 0) { + dWheel = -1; + } + if (dWheel > 0) { + dWheel = 1; + } + if (mouseX < innerLeft) { + int newTarget = categoryScroll.getTarget() - dWheel * 30; + if (newTarget < 0) { + newTarget = 0; + } + + float catBarSize = 1; + int catY = -newTarget; + for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : getCurrentConfigEditing() + .entrySet()) { + if (getSelectedCategory() == null) { + setSelectedCategory(entry.getKey()); + } + + catY += 15; + if (catY > 0) { + catBarSize = + LerpUtils.clampZeroOne( + (float) (innerBottom - innerTop - 2) / + (catY + 5 + newTarget) + ); + } + } + + int barMax = (int) Math.floor( + (catY + 5 + newTarget) - catBarSize * (catY + 5 + newTarget) + ); + if (newTarget > barMax) { + newTarget = barMax; + } + categoryScroll.resetTimer(); + categoryScroll.setTarget(newTarget); + } else { + int newTarget = optionsScroll.getTarget() - dWheel * 30; + if (newTarget < 0) { + newTarget = 0; + } + + float barSize = 1; + int optionY = -newTarget; + if ( + getSelectedCategory() != null && + getCurrentConfigEditing() != null && + getCurrentConfigEditing().containsKey(getSelectedCategory()) + ) { + ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() + .get(getSelectedCategory()); + Set<Integer> activeAccordions = new HashSet<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( + cat + ) + .values()) { + if (option.accordionId >= 0) { + if ( + !activeAccordions.contains(option.accordionId) + ) { + continue; + } + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + activeAccordions.add( + accordion.getAccordionId() + ); + } + } + optionY += editor.getHeight() + 5; + + if (optionY > 0) { + barSize = + LerpUtils.clampZeroOne( + (float) (innerBottom - innerTop - 2) / + (optionY + 5 + newTarget) + ); + } + } + } + + int barMax = (int) Math.floor( + (optionY + 5 + newTarget) - + barSize * + (optionY + 5 + newTarget) + ); + if (newTarget > barMax) { + newTarget = barMax; + } + optionsScroll.setTimeToReachTarget( + Math.min( + 150, + Math.max( + 10, + 5 * Math.abs(newTarget - optionsScroll.getValue()) + ) + ) + ); + optionsScroll.resetTimer(); + optionsScroll.setTarget(newTarget); + } + } else if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { + if (getCurrentConfigEditing() != null) { + int catY = -categoryScroll.getValue(); + for (Map.Entry<String, ConfigProcessor.ProcessedCategory> entry : getCurrentConfigEditing() + .entrySet()) { + if (getSelectedCategory() == null) { + setSelectedCategory(entry.getKey()); + } + if ( + mouseX >= x + 5 && + mouseX <= x + 145 && + mouseY >= y + 70 + catY - 7 && + mouseY <= y + 70 + catY + 7 + ) { + setSelectedCategory(entry.getKey()); + return true; + } + catY += 15; + } + } - GuiOptionEditor editor = option.editor; - if (editor == null) { - continue; + for ( + int socialIndex = 0; + socialIndex < socialsLink.length; + socialIndex++ + ) { + int socialLeft = x + xSize - 23 - 18 * socialIndex; + + if ( + mouseX >= socialLeft && + mouseX <= socialLeft + 16 && + mouseY >= y + 6 && + mouseY <= y + 23 + ) { + try { + Desktop + .getDesktop() + .browse(new URI(socialsLink[socialIndex])); + } catch (Exception ignored) {} + return true; + } + } } - if (editor instanceof GuiOptionEditorAccordion) { - GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; - if (accordion.getToggled()) { - activeAccordions.add(accordion.getAccordionId()); - } + + int optionY = -optionsScroll.getValue(); + if ( + getSelectedCategory() != null && + getCurrentConfigEditing() != null && + getCurrentConfigEditing().containsKey(getSelectedCategory()) + ) { + int optionWidthDefault = innerRight - innerLeft - 20; + ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() + .get(getSelectedCategory()); + Set<Integer> activeAccordions = new HashSet<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( + cat + ) + .values()) { + int optionWidth = optionWidthDefault; + if (option.accordionId >= 0) { + if (!activeAccordions.contains(option.accordionId)) { + continue; + } + optionWidth = optionWidthDefault - 2 * innerPadding; + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + activeAccordions.add(accordion.getAccordionId()); + } + } + if ( + editor.mouseInputOverlay( + (innerLeft + innerRight - optionWidth) / 2 - 5, + innerTop + 5 + optionY, + optionWidth, + mouseX, + mouseY + ) + ) { + return true; + } + optionY += editor.getHeight() + 5; + } } - if (editor.keyboardInput()) { - return true; + + if ( + mouseX > innerLeft && + mouseX < innerRight && + mouseY > innerTop && + mouseY < innerBottom + ) { + optionY = -optionsScroll.getValue(); + if ( + getSelectedCategory() != null && + getCurrentConfigEditing() != null && + getCurrentConfigEditing().containsKey(getSelectedCategory()) + ) { + int optionWidthDefault = innerRight - innerLeft - 20; + ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() + .get(getSelectedCategory()); + Set<Integer> activeAccordions = new HashSet<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( + cat + ) + .values()) { + int optionWidth = optionWidthDefault; + if (option.accordionId >= 0) { + if (!activeAccordions.contains(option.accordionId)) { + continue; + } + optionWidth = optionWidthDefault - 2 * innerPadding; + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + activeAccordions.add(accordion.getAccordionId()); + } + } + if ( + editor.mouseInput( + (innerLeft + innerRight - optionWidth) / 2 - 5, + innerTop + 5 + optionY, + optionWidth, + mouseX, + mouseY + ) + ) { + return true; + } + optionY += editor.getHeight() + 5; + } + } } - } + + return true; } - return true; - } + public boolean keyboardInput() { + ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + int width = scaledResolution.getScaledWidth(); + + int xSize = Math.min( + width - 100 / scaledResolution.getScaleFactor(), + 500 + ); + + int adjScaleFactor = Math.max(2, scaledResolution.getScaleFactor()); + + int innerPadding = 20 / adjScaleFactor; + int innerWidth = xSize - 154 - innerPadding * 2; + + if ( + getSelectedCategory() != null && + getCurrentConfigEditing() != null && + getCurrentConfigEditing().containsKey(getSelectedCategory()) + ) { + ConfigProcessor.ProcessedCategory cat = getCurrentConfigEditing() + .get(getSelectedCategory()); + Set<Integer> activeAccordions = new HashSet<>(); + for (ConfigProcessor.ProcessedOption option : getOptionsInCategory( + cat + ) + .values()) { + if (option.accordionId >= 0) { + if (!activeAccordions.contains(option.accordionId)) { + continue; + } + } + + GuiOptionEditor editor = option.editor; + if (editor == null) { + continue; + } + if (editor instanceof GuiOptionEditorAccordion) { + GuiOptionEditorAccordion accordion = (GuiOptionEditorAccordion) editor; + if (accordion.getToggled()) { + activeAccordions.add(accordion.getAccordionId()); + } + } + if (editor.keyboardInput()) { + return true; + } + } + } + + return true; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/BackgroundBlur.java b/src/main/java/com/thatgravyboat/skyblockhud/core/BackgroundBlur.java index 9379d62..e95e896 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/BackgroundBlur.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/BackgroundBlur.java @@ -21,273 +21,288 @@ import org.lwjgl.opengl.GL11; public class BackgroundBlur { - private static HashMap<Float, Framebuffer> blurOutput = new HashMap<>(); - private static HashMap<Float, Long> lastBlurUse = new HashMap<>(); - private static long lastBlur = 0; - private static HashSet<Float> requestedBlurs = new HashSet<>(); - - private static int fogColour = 0; - private static boolean registered = false; - - public static void registerListener() { - if (!registered) { - registered = true; - MinecraftForge.EVENT_BUS.register(new BackgroundBlur()); + private static HashMap<Float, Framebuffer> blurOutput = new HashMap<>(); + private static HashMap<Float, Long> lastBlurUse = new HashMap<>(); + private static long lastBlur = 0; + private static HashSet<Float> requestedBlurs = new HashSet<>(); + + private static int fogColour = 0; + private static boolean registered = false; + + public static void registerListener() { + if (!registered) { + registered = true; + MinecraftForge.EVENT_BUS.register(new BackgroundBlur()); + } } - } - private static boolean shouldBlur = true; + private static boolean shouldBlur = true; - public static void markDirty() { - if (Minecraft.getMinecraft().theWorld != null) { - shouldBlur = true; + public static void markDirty() { + if (Minecraft.getMinecraft().theWorld != null) { + shouldBlur = true; + } } - } - public static void processBlurs() { - if (shouldBlur) { - shouldBlur = false; + public static void processBlurs() { + if (shouldBlur) { + shouldBlur = false; - long currentTime = System.currentTimeMillis(); + long currentTime = System.currentTimeMillis(); - for (float blur : requestedBlurs) { - lastBlur = currentTime; - lastBlurUse.put(blur, currentTime); + for (float blur : requestedBlurs) { + lastBlur = currentTime; + lastBlurUse.put(blur, currentTime); - int width = Minecraft.getMinecraft().displayWidth; - int height = Minecraft.getMinecraft().displayHeight; + int width = Minecraft.getMinecraft().displayWidth; + int height = Minecraft.getMinecraft().displayHeight; - Framebuffer output = blurOutput.computeIfAbsent( - blur, - k -> { - Framebuffer fb = new Framebuffer(width, height, false); - fb.setFramebufferFilter(GL11.GL_NEAREST); - return fb; - } - ); + Framebuffer output = blurOutput.computeIfAbsent( + blur, + k -> { + Framebuffer fb = new Framebuffer(width, height, false); + fb.setFramebufferFilter(GL11.GL_NEAREST); + return fb; + } + ); - output.framebufferWidth = output.framebufferTextureWidth = width; - output.framebufferHeight = output.framebufferTextureHeight = height; + output.framebufferWidth = + output.framebufferTextureWidth = width; + output.framebufferHeight = + output.framebufferTextureHeight = height; - blurBackground(output, blur); - } + blurBackground(output, blur); + } - Set<Float> remove = new HashSet<>(); - for (Map.Entry<Float, Long> entry : lastBlurUse.entrySet()) { - if (currentTime - entry.getValue() > 30 * 1000) { - remove.add(entry.getKey()); - } - } - remove.remove(5f); + Set<Float> remove = new HashSet<>(); + for (Map.Entry<Float, Long> entry : lastBlurUse.entrySet()) { + if (currentTime - entry.getValue() > 30 * 1000) { + remove.add(entry.getKey()); + } + } + remove.remove(5f); - lastBlurUse.keySet().removeAll(remove); - blurOutput.keySet().removeAll(remove); + lastBlurUse.keySet().removeAll(remove); + blurOutput.keySet().removeAll(remove); - requestedBlurs.clear(); + requestedBlurs.clear(); + } } - } - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onScreenRender(RenderGameOverlayEvent.Pre event) { - if (event.type == RenderGameOverlayEvent.ElementType.ALL) { - processBlurs(); - } - } - - @SubscribeEvent - public void onFogColour(EntityViewRenderEvent.FogColors event) { - fogColour = 0xff000000; - fogColour |= ((int) (event.red * 255) & 0xFF) << 16; - fogColour |= ((int) (event.green * 255) & 0xFF) << 8; - fogColour |= (int) (event.blue * 255) & 0xFF; - } - - private static Shader blurShaderHorz = null; - private static Shader blurShaderVert = null; - private static Framebuffer blurOutputHorz = null; - - /** - * Creates a projection matrix that projects from our coordinate space [0->width; 0->height] to OpenGL coordinate - * space [-1 -> 1; 1 -> -1] (Note: flipped y-axis). - * - * This is so that we can render to and from the framebuffer in a way that is familiar to us, instead of needing to - * apply scales and translations manually. - */ - private static Matrix4f createProjectionMatrix(int width, int height) { - Matrix4f projMatrix = new Matrix4f(); - projMatrix.setIdentity(); - projMatrix.m00 = 2.0F / (float) width; - projMatrix.m11 = 2.0F / (float) (-height); - projMatrix.m22 = -0.0020001999F; - projMatrix.m33 = 1.0F; - projMatrix.m03 = -1.0F; - projMatrix.m13 = 1.0F; - projMatrix.m23 = -1.0001999F; - return projMatrix; - } - - private static void blurBackground(Framebuffer output, float blurFactor) { - if ( - !OpenGlHelper.isFramebufferEnabled() || - !OpenGlHelper.areShadersSupported() - ) return; - - int width = Minecraft.getMinecraft().displayWidth; - int height = Minecraft.getMinecraft().displayHeight; - - GlStateManager.matrixMode(GL11.GL_PROJECTION); - GlStateManager.loadIdentity(); - GlStateManager.ortho(0.0D, width, height, 0.0D, 1000.0D, 3000.0D); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - GlStateManager.loadIdentity(); - GlStateManager.translate(0.0F, 0.0F, -2000.0F); - - if (blurOutputHorz == null) { - blurOutputHorz = new Framebuffer(width, height, false); - blurOutputHorz.setFramebufferFilter(GL11.GL_NEAREST); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onScreenRender(RenderGameOverlayEvent.Pre event) { + if (event.type == RenderGameOverlayEvent.ElementType.ALL) { + processBlurs(); + } } - if (blurOutputHorz == null || output == null) { - return; + + @SubscribeEvent + public void onFogColour(EntityViewRenderEvent.FogColors event) { + fogColour = 0xff000000; + fogColour |= ((int) (event.red * 255) & 0xFF) << 16; + fogColour |= ((int) (event.green * 255) & 0xFF) << 8; + fogColour |= (int) (event.blue * 255) & 0xFF; } - if ( - blurOutputHorz.framebufferWidth != width || - blurOutputHorz.framebufferHeight != height - ) { - blurOutputHorz.createBindFramebuffer(width, height); - blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height)); - Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false); + + private static Shader blurShaderHorz = null; + private static Shader blurShaderVert = null; + private static Framebuffer blurOutputHorz = null; + + /** + * Creates a projection matrix that projects from our coordinate space [0->width; 0->height] to OpenGL coordinate + * space [-1 -> 1; 1 -> -1] (Note: flipped y-axis). + * + * This is so that we can render to and from the framebuffer in a way that is familiar to us, instead of needing to + * apply scales and translations manually. + */ + private static Matrix4f createProjectionMatrix(int width, int height) { + Matrix4f projMatrix = new Matrix4f(); + projMatrix.setIdentity(); + projMatrix.m00 = 2.0F / (float) width; + projMatrix.m11 = 2.0F / (float) (-height); + projMatrix.m22 = -0.0020001999F; + projMatrix.m33 = 1.0F; + projMatrix.m03 = -1.0F; + projMatrix.m13 = 1.0F; + projMatrix.m23 = -1.0001999F; + return projMatrix; } - try { - blurShaderHorz = - new Shader( - Minecraft.getMinecraft().getResourceManager(), - "blur", - Minecraft.getMinecraft().getFramebuffer(), - blurOutputHorz - ); - blurShaderHorz.getShaderManager().getShaderUniform("BlurDir").set(1, 0); - blurShaderHorz.setProjectionMatrix(createProjectionMatrix(width, height)); - } catch (Exception ignored) {} - try { - blurShaderVert = - new Shader( - Minecraft.getMinecraft().getResourceManager(), - "blur", - blurOutputHorz, - output - ); - blurShaderVert.getShaderManager().getShaderUniform("BlurDir").set(0, 1); - blurShaderVert.setProjectionMatrix(createProjectionMatrix(width, height)); - } catch (Exception ignored) {} - if (blurShaderHorz != null && blurShaderVert != null) { - if ( - blurShaderHorz.getShaderManager().getShaderUniform("Radius") == null - ) { - //Corrupted shader? - return; - } - - blurShaderHorz - .getShaderManager() - .getShaderUniform("Radius") - .set(blurFactor); - blurShaderVert - .getShaderManager() - .getShaderUniform("Radius") - .set(blurFactor); - - GL11.glPushMatrix(); - /*GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, Minecraft.getMinecraft().getFramebuffer().framebufferObject); + private static void blurBackground(Framebuffer output, float blurFactor) { + if ( + !OpenGlHelper.isFramebufferEnabled() || + !OpenGlHelper.areShadersSupported() + ) return; + + int width = Minecraft.getMinecraft().displayWidth; + int height = Minecraft.getMinecraft().displayHeight; + + GlStateManager.matrixMode(GL11.GL_PROJECTION); + GlStateManager.loadIdentity(); + GlStateManager.ortho(0.0D, width, height, 0.0D, 1000.0D, 3000.0D); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + GlStateManager.loadIdentity(); + GlStateManager.translate(0.0F, 0.0F, -2000.0F); + + if (blurOutputHorz == null) { + blurOutputHorz = new Framebuffer(width, height, false); + blurOutputHorz.setFramebufferFilter(GL11.GL_NEAREST); + } + if (blurOutputHorz == null || output == null) { + return; + } + if ( + blurOutputHorz.framebufferWidth != width || + blurOutputHorz.framebufferHeight != height + ) { + blurOutputHorz.createBindFramebuffer(width, height); + blurShaderHorz.setProjectionMatrix( + createProjectionMatrix(width, height) + ); + Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false); + } + + try { + blurShaderHorz = + new Shader( + Minecraft.getMinecraft().getResourceManager(), + "blur", + Minecraft.getMinecraft().getFramebuffer(), + blurOutputHorz + ); + blurShaderHorz + .getShaderManager() + .getShaderUniform("BlurDir") + .set(1, 0); + blurShaderHorz.setProjectionMatrix( + createProjectionMatrix(width, height) + ); + } catch (Exception ignored) {} + try { + blurShaderVert = + new Shader( + Minecraft.getMinecraft().getResourceManager(), + "blur", + blurOutputHorz, + output + ); + blurShaderVert + .getShaderManager() + .getShaderUniform("BlurDir") + .set(0, 1); + blurShaderVert.setProjectionMatrix( + createProjectionMatrix(width, height) + ); + } catch (Exception ignored) {} + if (blurShaderHorz != null && blurShaderVert != null) { + if ( + blurShaderHorz.getShaderManager().getShaderUniform("Radius") == + null + ) { + //Corrupted shader? + return; + } + + blurShaderHorz + .getShaderManager() + .getShaderUniform("Radius") + .set(blurFactor); + blurShaderVert + .getShaderManager() + .getShaderUniform("Radius") + .set(blurFactor); + + GL11.glPushMatrix(); + /*GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, Minecraft.getMinecraft().getFramebuffer().framebufferObject); GL30.glBindFramebuffer(GL30.GL_DRAW_FRAMEBUFFER, output.framebufferObject); GL30.glBlitFramebuffer(0, 0, width, height, 0, 0, output.framebufferWidth, output.framebufferHeight, GL11.GL_COLOR_BUFFER_BIT, GL11.GL_NEAREST);*/ - blurShaderHorz.loadShader(0); - blurShaderVert.loadShader(0); - GlStateManager.enableDepth(); - GL11.glPopMatrix(); + blurShaderHorz.loadShader(0); + blurShaderVert.loadShader(0); + GlStateManager.enableDepth(); + GL11.glPopMatrix(); - Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false); + Minecraft.getMinecraft().getFramebuffer().bindFramebuffer(false); + } } - } - - public static void renderBlurredBackground( - float blurStrength, - int screenWidth, - int screenHeight, - int x, - int y, - int blurWidth, - int blurHeight - ) { - renderBlurredBackground( - blurStrength, - screenWidth, - screenHeight, - x, - y, - blurWidth, - blurHeight, - false - ); - } - - /** - * Renders a subsection of the blurred framebuffer on to the corresponding section of the screen. - * Essentially, this method will "blur" the background inside the bounds specified by [x->x+blurWidth, y->y+blurHeight] - */ - public static void renderBlurredBackground( - float blurStrength, - int screenWidth, - int screenHeight, - int x, - int y, - int blurWidth, - int blurHeight, - boolean forcedUpdate - ) { - if ( - !OpenGlHelper.isFramebufferEnabled() || - !OpenGlHelper.areShadersSupported() - ) return; - if (blurStrength < 0.5) return; - requestedBlurs.add(blurStrength); - - long currentTime = System.currentTimeMillis(); - if (currentTime - lastBlur > 300) { - shouldBlur = true; - if (currentTime - lastBlur > 400 && forcedUpdate) return; + + public static void renderBlurredBackground( + float blurStrength, + int screenWidth, + int screenHeight, + int x, + int y, + int blurWidth, + int blurHeight + ) { + renderBlurredBackground( + blurStrength, + screenWidth, + screenHeight, + x, + y, + blurWidth, + blurHeight, + false + ); } - if (blurOutput.isEmpty()) return; + /** + * Renders a subsection of the blurred framebuffer on to the corresponding section of the screen. + * Essentially, this method will "blur" the background inside the bounds specified by [x->x+blurWidth, y->y+blurHeight] + */ + public static void renderBlurredBackground( + float blurStrength, + int screenWidth, + int screenHeight, + int x, + int y, + int blurWidth, + int blurHeight, + boolean forcedUpdate + ) { + if ( + !OpenGlHelper.isFramebufferEnabled() || + !OpenGlHelper.areShadersSupported() + ) return; + if (blurStrength < 0.5) return; + requestedBlurs.add(blurStrength); + + long currentTime = System.currentTimeMillis(); + if (currentTime - lastBlur > 300) { + shouldBlur = true; + if (currentTime - lastBlur > 400 && forcedUpdate) return; + } - Framebuffer fb = blurOutput.get(blurStrength); - if (fb == null) { - fb = blurOutput.values().iterator().next(); - } + if (blurOutput.isEmpty()) return; - float uMin = x / (float) screenWidth; - float uMax = (x + blurWidth) / (float) screenWidth; - float vMin = (screenHeight - y) / (float) screenHeight; - float vMax = (screenHeight - y - blurHeight) / (float) screenHeight; - - GlStateManager.depthMask(false); - Gui.drawRect(x, y, x + blurWidth, y + blurHeight, fogColour); - fb.bindFramebufferTexture(); - GlStateManager.color(1f, 1f, 1f, 1f); - RenderUtils.drawTexturedRect( - x, - y, - blurWidth, - blurHeight, - uMin, - uMax, - vMin, - vMax - ); - fb.unbindFramebufferTexture(); - GlStateManager.depthMask(true); - } + Framebuffer fb = blurOutput.get(blurStrength); + if (fb == null) { + fb = blurOutput.values().iterator().next(); + } + + float uMin = x / (float) screenWidth; + float uMax = (x + blurWidth) / (float) screenWidth; + float vMin = (screenHeight - y) / (float) screenHeight; + float vMax = (screenHeight - y - blurHeight) / (float) screenHeight; + + GlStateManager.depthMask(false); + Gui.drawRect(x, y, x + blurWidth, y + blurHeight, fogColour); + fb.bindFramebufferTexture(); + GlStateManager.color(1f, 1f, 1f, 1f); + RenderUtils.drawTexturedRect( + x, + y, + blurWidth, + blurHeight, + uMin, + uMax, + vMin, + vMax + ); + fb.unbindFramebufferTexture(); + GlStateManager.depthMask(true); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/ChromaColour.java b/src/main/java/com/thatgravyboat/skyblockhud/core/ChromaColour.java index c8fc14b..b8e97ee 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/ChromaColour.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/ChromaColour.java @@ -4,111 +4,116 @@ import java.awt.*; public class ChromaColour { - public static String special(int chromaSpeed, int alpha, int rgb) { - return special( - chromaSpeed, - alpha, - (rgb & 0xFF0000) >> 16, - (rgb & 0x00FF00) >> 8, - (rgb & 0x0000FF) - ); - } - - private static final int RADIX = 10; - - public static String special( - int chromaSpeed, - int alpha, - int r, - int g, - int b - ) { - StringBuilder sb = new StringBuilder(); - sb.append(Integer.toString(chromaSpeed, RADIX)).append(":"); - sb.append(Integer.toString(alpha, RADIX)).append(":"); - sb.append(Integer.toString(r, RADIX)).append(":"); - sb.append(Integer.toString(g, RADIX)).append(":"); - sb.append(Integer.toString(b, RADIX)); - return sb.toString(); - } - - private static int[] decompose(String csv) { - String[] split = csv.split(":"); - - int[] arr = new int[split.length]; - - for (int i = 0; i < split.length; i++) { - arr[i] = Integer.parseInt(split[split.length - 1 - i], RADIX); + public static String special(int chromaSpeed, int alpha, int rgb) { + return special( + chromaSpeed, + alpha, + (rgb & 0xFF0000) >> 16, + (rgb & 0x00FF00) >> 8, + (rgb & 0x0000FF) + ); } - return arr; - } - - public static int specialToSimpleRGB(String special) { - int[] d = decompose(special); - int r = d[2]; - int g = d[1]; - int b = d[0]; - int a = d[3]; - int chr = d[4]; - - return (a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF); - } - - public static int getSpeed(String special) { - return decompose(special)[4]; - } - - public static float getSecondsForSpeed(int speed) { - return ( - (255 - speed) / - 254f * - (MAX_CHROMA_SECS - MIN_CHROMA_SECS) + - MIN_CHROMA_SECS - ); - } - - private static final int MIN_CHROMA_SECS = 1; - private static final int MAX_CHROMA_SECS = 60; - - public static long startTime = -1; - - public static int specialToChromaRGB(String special) { - if (startTime < 0) startTime = System.currentTimeMillis(); - - int[] d = decompose(special); - int chr = d[4]; - int a = d[3]; - int r = d[2]; - int g = d[1]; - int b = d[0]; - - float[] hsv = Color.RGBtoHSB(r, g, b, null); - - if (chr > 0) { - float seconds = getSecondsForSpeed(chr); - hsv[0] += (System.currentTimeMillis() - startTime) / 1000f / seconds; - hsv[0] %= 1; - if (hsv[0] < 0) hsv[0] += 1; + + private static final int RADIX = 10; + + public static String special( + int chromaSpeed, + int alpha, + int r, + int g, + int b + ) { + StringBuilder sb = new StringBuilder(); + sb.append(Integer.toString(chromaSpeed, RADIX)).append(":"); + sb.append(Integer.toString(alpha, RADIX)).append(":"); + sb.append(Integer.toString(r, RADIX)).append(":"); + sb.append(Integer.toString(g, RADIX)).append(":"); + sb.append(Integer.toString(b, RADIX)); + return sb.toString(); + } + + private static int[] decompose(String csv) { + String[] split = csv.split(":"); + + int[] arr = new int[split.length]; + + for (int i = 0; i < split.length; i++) { + arr[i] = Integer.parseInt(split[split.length - 1 - i], RADIX); + } + return arr; } - return ( - (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) - ); - } + public static int specialToSimpleRGB(String special) { + int[] d = decompose(special); + int r = d[2]; + int g = d[1]; + int b = d[0]; + int a = d[3]; + int chr = d[4]; + + return ( + (a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF) + ); + } + + public static int getSpeed(String special) { + return decompose(special)[4]; + } + + public static float getSecondsForSpeed(int speed) { + return ( + (255 - speed) / + 254f * + (MAX_CHROMA_SECS - MIN_CHROMA_SECS) + + MIN_CHROMA_SECS + ); + } - public static int rotateHue(int argb, int degrees) { - int a = (argb >> 24) & 0xFF; - int r = (argb >> 16) & 0xFF; - int g = (argb >> 8) & 0xFF; - int b = (argb) & 0xFF; + private static final int MIN_CHROMA_SECS = 1; + private static final int MAX_CHROMA_SECS = 60; - float[] hsv = Color.RGBtoHSB(r, g, b, null); + public static long startTime = -1; - hsv[0] += degrees / 360f; - hsv[0] %= 1; + public static int specialToChromaRGB(String special) { + if (startTime < 0) startTime = System.currentTimeMillis(); - return ( - (a & 0xFF) << 24 | (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) - ); - } + int[] d = decompose(special); + int chr = d[4]; + int a = d[3]; + int r = d[2]; + int g = d[1]; + int b = d[0]; + + float[] hsv = Color.RGBtoHSB(r, g, b, null); + + if (chr > 0) { + float seconds = getSecondsForSpeed(chr); + hsv[0] += + (System.currentTimeMillis() - startTime) / 1000f / seconds; + hsv[0] %= 1; + if (hsv[0] < 0) hsv[0] += 1; + } + + return ( + (a & 0xFF) << 24 | + (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) + ); + } + + public static int rotateHue(int argb, int degrees) { + int a = (argb >> 24) & 0xFF; + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = (argb) & 0xFF; + + float[] hsv = Color.RGBtoHSB(r, g, b, null); + + hsv[0] += degrees / 360f; + hsv[0] %= 1; + + return ( + (a & 0xFF) << 24 | + (Color.HSBtoRGB(hsv[0], hsv[1], hsv[2]) & 0x00FFFFFF) + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/GlScissorStack.java b/src/main/java/com/thatgravyboat/skyblockhud/core/GlScissorStack.java index 27e03b2..306565e 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/GlScissorStack.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/GlScissorStack.java @@ -7,93 +7,93 @@ import org.lwjgl.opengl.GL11; public class GlScissorStack { - private static class Bounds { + private static class Bounds { - int left; - int top; - int right; - int bottom; + int left; + int top; + int right; + int bottom; - public Bounds(int left, int top, int right, int bottom) { - this.left = left; - this.top = top; - this.right = right; - this.bottom = bottom; - } + public Bounds(int left, int top, int right, int bottom) { + this.left = left; + this.top = top; + this.right = right; + this.bottom = bottom; + } - public Bounds createSubBound(int left, int top, int right, int bottom) { - left = Math.max(left, this.left); - top = Math.max(top, this.top); - right = Math.min(right, this.right); - bottom = Math.min(bottom, this.bottom); + public Bounds createSubBound(int left, int top, int right, int bottom) { + left = Math.max(left, this.left); + top = Math.max(top, this.top); + right = Math.min(right, this.right); + bottom = Math.min(bottom, this.bottom); - if (top > bottom) { - top = bottom; - } - if (left > right) { - left = right; - } + if (top > bottom) { + top = bottom; + } + if (left > right) { + left = right; + } - return new Bounds(left, top, right, bottom); - } + return new Bounds(left, top, right, bottom); + } - public void set(ScaledResolution scaledResolution) { - int height = Minecraft.getMinecraft().displayHeight; - int scale = scaledResolution.getScaleFactor(); - GL11.glScissor( - left * scale, - height - bottom * scale, - (right - left) * scale, - (bottom - top) * scale - ); + public void set(ScaledResolution scaledResolution) { + int height = Minecraft.getMinecraft().displayHeight; + int scale = scaledResolution.getScaleFactor(); + GL11.glScissor( + left * scale, + height - bottom * scale, + (right - left) * scale, + (bottom - top) * scale + ); + } } - } - private static final LinkedList<Bounds> boundsStack = new LinkedList<>(); + private static final LinkedList<Bounds> boundsStack = new LinkedList<>(); - public static void push( - int left, - int top, - int right, - int bottom, - ScaledResolution scaledResolution - ) { - if (right < left) { - int temp = right; - right = left; - left = temp; - } - if (bottom < top) { - int temp = bottom; - bottom = top; - top = temp; - } - if (boundsStack.isEmpty()) { - boundsStack.push(new Bounds(left, top, right, bottom)); - } else { - boundsStack.push( - boundsStack.peek().createSubBound(left, top, right, bottom) - ); + public static void push( + int left, + int top, + int right, + int bottom, + ScaledResolution scaledResolution + ) { + if (right < left) { + int temp = right; + right = left; + left = temp; + } + if (bottom < top) { + int temp = bottom; + bottom = top; + top = temp; + } + if (boundsStack.isEmpty()) { + boundsStack.push(new Bounds(left, top, right, bottom)); + } else { + boundsStack.push( + boundsStack.peek().createSubBound(left, top, right, bottom) + ); + } + if (!boundsStack.isEmpty()) { + boundsStack.peek().set(scaledResolution); + } + GL11.glEnable(GL11.GL_SCISSOR_TEST); } - if (!boundsStack.isEmpty()) { - boundsStack.peek().set(scaledResolution); - } - GL11.glEnable(GL11.GL_SCISSOR_TEST); - } - public static void pop(ScaledResolution scaledResolution) { - if (!boundsStack.isEmpty()) { - boundsStack.pop(); - } - if (boundsStack.isEmpty()) { - GL11.glDisable(GL11.GL_SCISSOR_TEST); - } else { - boundsStack.peek().set(scaledResolution); + public static void pop(ScaledResolution scaledResolution) { + if (!boundsStack.isEmpty()) { + boundsStack.pop(); + } + if (boundsStack.isEmpty()) { + GL11.glDisable(GL11.GL_SCISSOR_TEST); + } else { + boundsStack.peek().set(scaledResolution); + } } - } - public static void clear() { - boundsStack.clear(); - GL11.glDisable(GL11.GL_SCISSOR_TEST); - } + public static void clear() { + boundsStack.clear(); + GL11.glDisable(GL11.GL_SCISSOR_TEST); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElement.java b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElement.java index 67bf882..cb9b15a 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElement.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElement.java @@ -2,9 +2,9 @@ package com.thatgravyboat.skyblockhud.core; public abstract class GuiElement { - public abstract void render(); + public abstract void render(); - public abstract boolean mouseInput(int mouseX, int mouseY); + public abstract boolean mouseInput(int mouseX, int mouseY); - public abstract boolean keyboardInput(); + public abstract boolean keyboardInput(); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementBoolean.java b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementBoolean.java index 57ad267..a8ed7d5 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementBoolean.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementBoolean.java @@ -11,126 +11,132 @@ import org.lwjgl.input.Mouse; public class GuiElementBoolean extends GuiElement { - public int x; - public int y; - private boolean value; - private int clickRadius; - private Consumer<Boolean> toggleCallback; + public int x; + public int y; + private boolean value; + private int clickRadius; + private Consumer<Boolean> toggleCallback; - private boolean previewValue; - private int animation = 0; - private long lastMillis = 0; + private boolean previewValue; + private int animation = 0; + private long lastMillis = 0; - private static final int xSize = 48; - private static final int ySize = 14; + private static final int xSize = 48; + private static final int ySize = 14; - public GuiElementBoolean( - int x, - int y, - boolean value, - Consumer<Boolean> toggleCallback - ) { - this(x, y, value, 0, toggleCallback); - } + public GuiElementBoolean( + int x, + int y, + boolean value, + Consumer<Boolean> toggleCallback + ) { + this(x, y, value, 0, toggleCallback); + } - public GuiElementBoolean( - int x, - int y, - boolean value, - int clickRadius, - Consumer<Boolean> toggleCallback - ) { - this.x = x; - this.y = y; - this.value = value; - this.previewValue = value; - this.clickRadius = clickRadius; - this.toggleCallback = toggleCallback; - this.lastMillis = System.currentTimeMillis(); + public GuiElementBoolean( + int x, + int y, + boolean value, + int clickRadius, + Consumer<Boolean> toggleCallback + ) { + this.x = x; + this.y = y; + this.value = value; + this.previewValue = value; + this.clickRadius = clickRadius; + this.toggleCallback = toggleCallback; + this.lastMillis = System.currentTimeMillis(); - if (value) animation = 36; - } + if (value) animation = 36; + } - @Override - public void render() { - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(GuiTextures.BAR); - RenderUtils.drawTexturedRect(x, y, xSize, ySize); + @Override + public void render() { + GlStateManager.color(1, 1, 1, 1); + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(GuiTextures.BAR); + RenderUtils.drawTexturedRect(x, y, xSize, ySize); - ResourceLocation buttonLoc = GuiTextures.ON; - long currentMillis = System.currentTimeMillis(); - long deltaMillis = currentMillis - lastMillis; - lastMillis = currentMillis; - boolean passedLimit = false; - if (previewValue != value) { - if ( - (previewValue && animation > 12) || (!previewValue && animation < 24) - ) { - passedLimit = true; - } - } - if (previewValue != passedLimit) { - animation += deltaMillis / 10; - } else { - animation -= deltaMillis / 10; - } - lastMillis -= deltaMillis % 10; + ResourceLocation buttonLoc = GuiTextures.ON; + long currentMillis = System.currentTimeMillis(); + long deltaMillis = currentMillis - lastMillis; + lastMillis = currentMillis; + boolean passedLimit = false; + if (previewValue != value) { + if ( + (previewValue && animation > 12) || + (!previewValue && animation < 24) + ) { + passedLimit = true; + } + } + if (previewValue != passedLimit) { + animation += deltaMillis / 10; + } else { + animation -= deltaMillis / 10; + } + lastMillis -= deltaMillis % 10; - if (previewValue == value) { - animation = Math.max(0, Math.min(36, animation)); - } else if (!passedLimit) { - if (previewValue) { - animation = Math.max(0, Math.min(12, animation)); - } else { - animation = Math.max(24, Math.min(36, animation)); - } - } else { - if (previewValue) { - animation = Math.max(12, animation); - } else { - animation = Math.min(24, animation); - } - } + if (previewValue == value) { + animation = Math.max(0, Math.min(36, animation)); + } else if (!passedLimit) { + if (previewValue) { + animation = Math.max(0, Math.min(12, animation)); + } else { + animation = Math.max(24, Math.min(36, animation)); + } + } else { + if (previewValue) { + animation = Math.max(12, animation); + } else { + animation = Math.min(24, animation); + } + } - int animation = (int) (LerpUtils.sigmoidZeroOne(this.animation / 36f) * 36); - if (animation < 3) { - buttonLoc = GuiTextures.OFF; - } else if (animation < 13) { - buttonLoc = GuiTextures.ONE; - } else if (animation < 23) { - buttonLoc = GuiTextures.TWO; - } else if (animation < 33) { - buttonLoc = GuiTextures.THREE; - } + int animation = (int) ( + LerpUtils.sigmoidZeroOne(this.animation / 36f) * 36 + ); + if (animation < 3) { + buttonLoc = GuiTextures.OFF; + } else if (animation < 13) { + buttonLoc = GuiTextures.ONE; + } else if (animation < 23) { + buttonLoc = GuiTextures.TWO; + } else if (animation < 33) { + buttonLoc = GuiTextures.THREE; + } - Minecraft.getMinecraft().getTextureManager().bindTexture(buttonLoc); - RenderUtils.drawTexturedRect(x + animation, y, 12, 14); - } + Minecraft.getMinecraft().getTextureManager().bindTexture(buttonLoc); + RenderUtils.drawTexturedRect(x + animation, y, 12, 14); + } - @Override - public boolean mouseInput(int mouseX, int mouseY) { - if ( - mouseX > x - clickRadius && - mouseX < x + xSize + clickRadius && - mouseY > y - clickRadius && - mouseY < y + ySize + clickRadius - ) { - if (Mouse.getEventButton() == 0) { - if (Mouse.getEventButtonState()) { - previewValue = !value; - } else if (previewValue == !value) { - value = !value; - toggleCallback.accept(value); + @Override + public boolean mouseInput(int mouseX, int mouseY) { + if ( + mouseX > x - clickRadius && + mouseX < x + xSize + clickRadius && + mouseY > y - clickRadius && + mouseY < y + ySize + clickRadius + ) { + if (Mouse.getEventButton() == 0) { + if (Mouse.getEventButtonState()) { + previewValue = !value; + } else if (previewValue == !value) { + value = !value; + toggleCallback.accept(value); + } + } + } else { + previewValue = value; } - } - } else { - previewValue = value; + return false; } - return false; - } - @Override - public boolean keyboardInput() { - return false; - } + @Override + public boolean keyboardInput() { + return false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementColour.java b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementColour.java index 66a43da..8b5c2d6 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementColour.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementColour.java @@ -18,588 +18,651 @@ import org.lwjgl.opengl.GL11; public class GuiElementColour extends GuiElement { - public static final ResourceLocation colour_selector_dot = new ResourceLocation( - "skyblockhud:core/colour_selector_dot.png" - ); - public static final ResourceLocation colour_selector_bar = new ResourceLocation( - "skyblockhud:core/colour_selector_bar.png" - ); - public static final ResourceLocation colour_selector_bar_alpha = new ResourceLocation( - "skyblockhud:core/colour_selector_bar_alpha.png" - ); - public static final ResourceLocation colour_selector_chroma = new ResourceLocation( - "skyblockhud:core/colour_selector_chroma.png" - ); - - private static final ResourceLocation colourPickerLocation = new ResourceLocation( - "mbcore:dynamic/colourpicker" - ); - private static final ResourceLocation colourPickerBarValueLocation = new ResourceLocation( - "mbcore:dynamic/colourpickervalue" - ); - private static final ResourceLocation colourPickerBarOpacityLocation = new ResourceLocation( - "mbcore:dynamic/colourpickeropacity" - ); - private final GuiElementTextField hexField = new GuiElementTextField( - "", - GuiElementTextField.SCALE_TEXT | - GuiElementTextField.FORCE_CAPS | - GuiElementTextField.NO_SPACE - ); - - private int x; - private int y; - private final int xSize = 119; - private final int ySize = 89; - - private float wheelAngle = 0; - private float wheelRadius = 0; - - private int clickedComponent = -1; - - private Consumer<String> colourChangedCallback; - private Runnable closeCallback; - private String colour; - - public GuiElementColour( - int x, - int y, - String initialColour, - Consumer<String> colourChangedCallback, - Runnable closeCallback - ) { - final ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() + public static final ResourceLocation colour_selector_dot = new ResourceLocation( + "skyblockhud:core/colour_selector_dot.png" ); - - this.y = - Math.max( - 10, - Math.min(scaledResolution.getScaledHeight() - ySize - 10, y) - ); - this.x = - Math.max(10, Math.min(scaledResolution.getScaledWidth() - xSize - 10, x)); - - this.colour = initialColour; - this.colourChangedCallback = colourChangedCallback; - this.closeCallback = closeCallback; - - int colour = ChromaColour.specialToSimpleRGB(initialColour); - Color c = new Color(colour); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - updateAngleAndRadius(hsv); - } - - public void updateAngleAndRadius(float[] hsv) { - this.wheelRadius = hsv[1]; - this.wheelAngle = hsv[0] * 360; - } - - public void render() { - RenderUtils.drawFloatingRectDark(x, y, xSize, ySize); - - int currentColour = ChromaColour.specialToSimpleRGB(colour); - Color c = new Color(currentColour, true); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - - BufferedImage bufferedImage = new BufferedImage( - 288, - 288, - BufferedImage.TYPE_INT_ARGB + public static final ResourceLocation colour_selector_bar = new ResourceLocation( + "skyblockhud:core/colour_selector_bar.png" ); - float borderRadius = 0.05f; - if (Keyboard.isKeyDown(Keyboard.KEY_N)) borderRadius = 0; - for (int x = -16; x < 272; x++) { - for (int y = -16; y < 272; y++) { - float radius = (float) Math.sqrt( - ((x - 128) * (x - 128) + (y - 128) * (y - 128)) / 16384f - ); - float angle = (float) Math.toDegrees( - Math.atan((128 - x) / (y - 128 + 1E-5)) + Math.PI / 2 - ); - if (y < 128) angle += 180; - if (radius <= 1) { - int rgb = Color - .getHSBColor(angle / 360f, (float) Math.pow(radius, 1.5f), hsv[2]) - .getRGB(); - bufferedImage.setRGB(x + 16, y + 16, rgb); - } else if (radius <= 1 + borderRadius) { - float invBlackAlpha = - Math.abs(radius - 1 - borderRadius / 2) / borderRadius * 2; - float blackAlpha = 1 - invBlackAlpha; - - if (radius > 1 + borderRadius / 2) { - bufferedImage.setRGB( - x + 16, - y + 16, - (int) (blackAlpha * 255) << 24 - ); - } else { - Color col = Color.getHSBColor(angle / 360f, 1, hsv[2]); - int rgb = (int) (col.getRed() * invBlackAlpha) << 16 | - (int) (col.getGreen() * invBlackAlpha) << 8 | - (int) (col.getBlue() * invBlackAlpha); - bufferedImage.setRGB(x + 16, y + 16, 0xff000000 | rgb); - } - } - } - } - - BufferedImage bufferedImageValue = new BufferedImage( - 10, - 64, - BufferedImage.TYPE_INT_ARGB + public static final ResourceLocation colour_selector_bar_alpha = new ResourceLocation( + "skyblockhud:core/colour_selector_bar_alpha.png" ); - for (int x = 0; x < 10; x++) { - for (int y = 0; y < 64; y++) { - if ((x == 0 || x == 9) && (y == 0 || y == 63)) continue; - - int rgb = Color - .getHSBColor(wheelAngle / 360, wheelRadius, (64 - y) / 64f) - .getRGB(); - bufferedImageValue.setRGB(x, y, rgb); - } - } - - BufferedImage bufferedImageOpacity = new BufferedImage( - 10, - 64, - BufferedImage.TYPE_INT_ARGB + public static final ResourceLocation colour_selector_chroma = new ResourceLocation( + "skyblockhud:core/colour_selector_chroma.png" ); - for (int x = 0; x < 10; x++) { - for (int y = 0; y < 64; y++) { - if ((x == 0 || x == 9) && (y == 0 || y == 63)) continue; - - int rgb = - (currentColour & 0x00FFFFFF) | (Math.min(255, (64 - y) * 4) << 24); - bufferedImageOpacity.setRGB(x, y, rgb); - } - } - float selradius = (float) Math.pow(wheelRadius, 1 / 1.5f) * 32; - int selx = (int) (Math.cos(Math.toRadians(wheelAngle)) * selradius); - int sely = (int) (Math.sin(Math.toRadians(wheelAngle)) * selradius); - - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colour_selector_bar_alpha); - GlStateManager.color(1, 1, 1, 1); - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5 + 10 + 5, - y + 5, - 10, - 64, - GL11.GL_NEAREST + private static final ResourceLocation colourPickerLocation = new ResourceLocation( + "mbcore:dynamic/colourpicker" ); - - Minecraft - .getMinecraft() - .getTextureManager() - .loadTexture( - colourPickerBarValueLocation, - new DynamicTexture(bufferedImageValue) - ); - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colourPickerBarValueLocation); - GlStateManager.color(1, 1, 1, 1); - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5, - y + 5, - 10, - 64, - GL11.GL_NEAREST + private static final ResourceLocation colourPickerBarValueLocation = new ResourceLocation( + "mbcore:dynamic/colourpickervalue" ); - - Minecraft - .getMinecraft() - .getTextureManager() - .loadTexture( - colourPickerBarOpacityLocation, - new DynamicTexture(bufferedImageOpacity) - ); - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colourPickerBarOpacityLocation); - GlStateManager.color(1, 1, 1, 1); - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5 + 10 + 5, - y + 5, - 10, - 64, - GL11.GL_NEAREST + private static final ResourceLocation colourPickerBarOpacityLocation = new ResourceLocation( + "mbcore:dynamic/colourpickeropacity" ); - - int chromaSpeed = ChromaColour.getSpeed(colour); - int currentColourChroma = ChromaColour.specialToChromaRGB(colour); - Color cChroma = new Color(currentColourChroma, true); - float hsvChroma[] = Color.RGBtoHSB( - cChroma.getRed(), - cChroma.getGreen(), - cChroma.getBlue(), - null + private final GuiElementTextField hexField = new GuiElementTextField( + "", + GuiElementTextField.SCALE_TEXT | + GuiElementTextField.FORCE_CAPS | + GuiElementTextField.NO_SPACE ); - if (chromaSpeed > 0) { - Gui.drawRect( - x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 1, - y + 5 + 1, - x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 10 - 1, - y + 5 + 64 - 1, - Color.HSBtoRGB(hsvChroma[0], 0.8f, 0.8f) - ); - } else { - Gui.drawRect( - x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 1, - y + 5 + 27 + 1, - x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 10 - 1, - y + 5 + 37 - 1, - Color.HSBtoRGB( - ( - hsvChroma[0] + - (System.currentTimeMillis() - ChromaColour.startTime) / - 1000f - ) % - 1, - 0.8f, - 0.8f - ) - ); - } + private int x; + private int y; + private final int xSize = 119; + private final int ySize = 89; - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colour_selector_bar); - GlStateManager.color(1, 1, 1, 1); - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5, - y + 5, - 10, - 64, - GL11.GL_NEAREST - ); - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5 + 10 + 5, - y + 5, - 10, - 64, - GL11.GL_NEAREST - ); + private float wheelAngle = 0; + private float wheelRadius = 0; + + private int clickedComponent = -1; + + private Consumer<String> colourChangedCallback; + private Runnable closeCallback; + private String colour; + + public GuiElementColour( + int x, + int y, + String initialColour, + Consumer<String> colourChangedCallback, + Runnable closeCallback + ) { + final ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); - if (chromaSpeed > 0) { - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5 + 10 + 5 + 10 + 5, - y + 5, - 10, - 64, - GL11.GL_NEAREST - ); - } else { - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colour_selector_chroma); - RenderUtils.drawTexturedRect( - x + 5 + 64 + 5 + 10 + 5 + 10 + 5, - y + 5 + 27, - 10, - 10, - GL11.GL_NEAREST - ); + this.y = + Math.max( + 10, + Math.min(scaledResolution.getScaledHeight() - ySize - 10, y) + ); + this.x = + Math.max( + 10, + Math.min(scaledResolution.getScaledWidth() - xSize - 10, x) + ); + + this.colour = initialColour; + this.colourChangedCallback = colourChangedCallback; + this.closeCallback = closeCallback; + + int colour = ChromaColour.specialToSimpleRGB(initialColour); + Color c = new Color(colour); + float[] hsv = Color.RGBtoHSB( + c.getRed(), + c.getGreen(), + c.getBlue(), + null + ); + updateAngleAndRadius(hsv); } - Gui.drawRect( - x + 5 + 64 + 5, - y + 5 + 64 - (int) (64 * hsv[2]), - x + 5 + 64 + 5 + 10, - y + 5 + 64 - (int) (64 * hsv[2]) + 1, - 0xFF000000 - ); - Gui.drawRect( - x + 5 + 64 + 5 + 10 + 5, - y + 5 + 64 - c.getAlpha() / 4, - x + 5 + 64 + 5 + 10 + 5 + 10, - y + 5 + 64 - c.getAlpha() / 4 - 1, - 0xFF000000 - ); - if (chromaSpeed > 0) { - Gui.drawRect( - x + 5 + 64 + 5 + 10 + 5 + 10 + 5, - y + 5 + 64 - (int) (chromaSpeed / 255f * 64), - x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 10, - y + 5 + 64 - (int) (chromaSpeed / 255f * 64) + 1, - 0xFF000000 - ); + public void updateAngleAndRadius(float[] hsv) { + this.wheelRadius = hsv[1]; + this.wheelAngle = hsv[0] * 360; } - Minecraft - .getMinecraft() - .getTextureManager() - .loadTexture(colourPickerLocation, new DynamicTexture(bufferedImage)); - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colourPickerLocation); - GlStateManager.color(1, 1, 1, 1); - RenderUtils.drawTexturedRect(x + 1, y + 1, 72, 72, GL11.GL_LINEAR); - - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(colour_selector_dot); - GlStateManager.color(1, 1, 1, 1); - RenderUtils.drawTexturedRect( - x + 5 + 32 + selx - 4, - y + 5 + 32 + sely - 4, - 8, - 8, - GL11.GL_NEAREST - ); + public void render() { + RenderUtils.drawFloatingRectDark(x, y, xSize, ySize); - TextRenderUtils.drawStringCenteredScaledMaxWidth( - EnumChatFormatting.GRAY.toString() + Math.round(hsv[2] * 100) + "", - Minecraft.getMinecraft().fontRendererObj, - x + 5 + 64 + 5 + 5 - (Math.round(hsv[2] * 100) == 100 ? 1 : 0), - y + 5 + 64 + 5 + 5, - true, - 13, - -1 - ); - TextRenderUtils.drawStringCenteredScaledMaxWidth( - EnumChatFormatting.GRAY.toString() + - Math.round(c.getAlpha() / 255f * 100) + - "", - Minecraft.getMinecraft().fontRendererObj, - x + 5 + 64 + 5 + 15 + 5, - y + 5 + 64 + 5 + 5, - true, - 13, - -1 - ); - if (chromaSpeed > 0) { - TextRenderUtils.drawStringCenteredScaledMaxWidth( - EnumChatFormatting.GRAY.toString() + - (int) ChromaColour.getSecondsForSpeed(chromaSpeed) + - "s", - Minecraft.getMinecraft().fontRendererObj, - x + 5 + 64 + 5 + 30 + 6, - y + 5 + 64 + 5 + 5, - true, - 13, - -1 - ); - } + int currentColour = ChromaColour.specialToSimpleRGB(colour); + Color c = new Color(currentColour, true); + float[] hsv = Color.RGBtoHSB( + c.getRed(), + c.getGreen(), + c.getBlue(), + null + ); - hexField.setSize(48, 10); - if (!hexField.getFocus()) hexField.setText( - Integer.toHexString(c.getRGB() & 0xFFFFFF).toUpperCase() - ); + BufferedImage bufferedImage = new BufferedImage( + 288, + 288, + BufferedImage.TYPE_INT_ARGB + ); + float borderRadius = 0.05f; + if (Keyboard.isKeyDown(Keyboard.KEY_N)) borderRadius = 0; + for (int x = -16; x < 272; x++) { + for (int y = -16; y < 272; y++) { + float radius = (float) Math.sqrt( + ((x - 128) * (x - 128) + (y - 128) * (y - 128)) / 16384f + ); + float angle = (float) Math.toDegrees( + Math.atan((128 - x) / (y - 128 + 1E-5)) + Math.PI / 2 + ); + if (y < 128) angle += 180; + if (radius <= 1) { + int rgb = Color + .getHSBColor( + angle / 360f, + (float) Math.pow(radius, 1.5f), + hsv[2] + ) + .getRGB(); + bufferedImage.setRGB(x + 16, y + 16, rgb); + } else if (radius <= 1 + borderRadius) { + float invBlackAlpha = + Math.abs(radius - 1 - borderRadius / 2) / + borderRadius * + 2; + float blackAlpha = 1 - invBlackAlpha; + + if (radius > 1 + borderRadius / 2) { + bufferedImage.setRGB( + x + 16, + y + 16, + (int) (blackAlpha * 255) << 24 + ); + } else { + Color col = Color.getHSBColor(angle / 360f, 1, hsv[2]); + int rgb = (int) (col.getRed() * invBlackAlpha) << 16 | + (int) (col.getGreen() * invBlackAlpha) << 8 | + (int) (col.getBlue() * invBlackAlpha); + bufferedImage.setRGB(x + 16, y + 16, 0xff000000 | rgb); + } + } + } + } - StringBuilder sb = new StringBuilder(EnumChatFormatting.GRAY + "#"); - for (int i = 0; i < 6 - hexField.getText().length(); i++) { - sb.append("0"); - } - sb.append(EnumChatFormatting.WHITE); + BufferedImage bufferedImageValue = new BufferedImage( + 10, + 64, + BufferedImage.TYPE_INT_ARGB + ); + for (int x = 0; x < 10; x++) { + for (int y = 0; y < 64; y++) { + if ((x == 0 || x == 9) && (y == 0 || y == 63)) continue; + + int rgb = Color + .getHSBColor(wheelAngle / 360, wheelRadius, (64 - y) / 64f) + .getRGB(); + bufferedImageValue.setRGB(x, y, rgb); + } + } - hexField.setPrependText(sb.toString()); - hexField.render(x + 5 + 8, y + 5 + 64 + 5); - } + BufferedImage bufferedImageOpacity = new BufferedImage( + 10, + 64, + BufferedImage.TYPE_INT_ARGB + ); + for (int x = 0; x < 10; x++) { + for (int y = 0; y < 64; y++) { + if ((x == 0 || x == 9) && (y == 0 || y == 63)) continue; + + int rgb = + (currentColour & 0x00FFFFFF) | + (Math.min(255, (64 - y) * 4) << 24); + bufferedImageOpacity.setRGB(x, y, rgb); + } + } - public boolean mouseInput(int mouseX, int mouseY) { - ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - float mouseXF = (float) ( - Mouse.getX() * - scaledResolution.getScaledWidth_double() / - Minecraft.getMinecraft().displayWidth - ); - float mouseYF = (float) ( - scaledResolution.getScaledHeight_double() - - Mouse.getY() * - scaledResolution.getScaledHeight_double() / - Minecraft.getMinecraft().displayHeight - - 1 - ); + float selradius = (float) Math.pow(wheelRadius, 1 / 1.5f) * 32; + int selx = (int) (Math.cos(Math.toRadians(wheelAngle)) * selradius); + int sely = (int) (Math.sin(Math.toRadians(wheelAngle)) * selradius); + + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colour_selector_bar_alpha); + GlStateManager.color(1, 1, 1, 1); + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5 + 10 + 5, + y + 5, + 10, + 64, + GL11.GL_NEAREST + ); - if ( - (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) && - Mouse.getEventButtonState() - ) { - if (mouseX > x + 5 + 8 && mouseX < x + 5 + 8 + 48) { - if (mouseY > y + 5 + 64 + 5 && mouseY < y + 5 + 64 + 5 + 10) { - hexField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - clickedComponent = -1; - return true; + Minecraft + .getMinecraft() + .getTextureManager() + .loadTexture( + colourPickerBarValueLocation, + new DynamicTexture(bufferedImageValue) + ); + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colourPickerBarValueLocation); + GlStateManager.color(1, 1, 1, 1); + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5, + y + 5, + 10, + 64, + GL11.GL_NEAREST + ); + + Minecraft + .getMinecraft() + .getTextureManager() + .loadTexture( + colourPickerBarOpacityLocation, + new DynamicTexture(bufferedImageOpacity) + ); + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colourPickerBarOpacityLocation); + GlStateManager.color(1, 1, 1, 1); + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5 + 10 + 5, + y + 5, + 10, + 64, + GL11.GL_NEAREST + ); + + int chromaSpeed = ChromaColour.getSpeed(colour); + int currentColourChroma = ChromaColour.specialToChromaRGB(colour); + Color cChroma = new Color(currentColourChroma, true); + float hsvChroma[] = Color.RGBtoHSB( + cChroma.getRed(), + cChroma.getGreen(), + cChroma.getBlue(), + null + ); + + if (chromaSpeed > 0) { + Gui.drawRect( + x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 1, + y + 5 + 1, + x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 10 - 1, + y + 5 + 64 - 1, + Color.HSBtoRGB(hsvChroma[0], 0.8f, 0.8f) + ); + } else { + Gui.drawRect( + x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 1, + y + 5 + 27 + 1, + x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 10 - 1, + y + 5 + 37 - 1, + Color.HSBtoRGB( + ( + hsvChroma[0] + + (System.currentTimeMillis() - ChromaColour.startTime) / + 1000f + ) % + 1, + 0.8f, + 0.8f + ) + ); } - } - } - if (!Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - clickedComponent = -1; - } - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if (mouseX >= x && mouseX <= x + 119 && mouseY >= y && mouseY <= y + 89) { - hexField.unfocus(); - int xWheel = mouseX - x - 5; - int yWheel = mouseY - y - 5; + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colour_selector_bar); + GlStateManager.color(1, 1, 1, 1); + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5, + y + 5, + 10, + 64, + GL11.GL_NEAREST + ); + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5 + 10 + 5, + y + 5, + 10, + 64, + GL11.GL_NEAREST + ); + + if (chromaSpeed > 0) { + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5 + 10 + 5 + 10 + 5, + y + 5, + 10, + 64, + GL11.GL_NEAREST + ); + } else { + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colour_selector_chroma); + RenderUtils.drawTexturedRect( + x + 5 + 64 + 5 + 10 + 5 + 10 + 5, + y + 5 + 27, + 10, + 10, + GL11.GL_NEAREST + ); + } - if (xWheel > 0 && xWheel < 64) { - if (yWheel > 0 && yWheel < 64) { - clickedComponent = 0; - } + Gui.drawRect( + x + 5 + 64 + 5, + y + 5 + 64 - (int) (64 * hsv[2]), + x + 5 + 64 + 5 + 10, + y + 5 + 64 - (int) (64 * hsv[2]) + 1, + 0xFF000000 + ); + Gui.drawRect( + x + 5 + 64 + 5 + 10 + 5, + y + 5 + 64 - c.getAlpha() / 4, + x + 5 + 64 + 5 + 10 + 5 + 10, + y + 5 + 64 - c.getAlpha() / 4 - 1, + 0xFF000000 + ); + if (chromaSpeed > 0) { + Gui.drawRect( + x + 5 + 64 + 5 + 10 + 5 + 10 + 5, + y + 5 + 64 - (int) (chromaSpeed / 255f * 64), + x + 5 + 64 + 5 + 10 + 5 + 10 + 5 + 10, + y + 5 + 64 - (int) (chromaSpeed / 255f * 64) + 1, + 0xFF000000 + ); } - int xValue = mouseX - (x + 5 + 64 + 5); - int y = mouseY - this.y - 5; + Minecraft + .getMinecraft() + .getTextureManager() + .loadTexture( + colourPickerLocation, + new DynamicTexture(bufferedImage) + ); + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colourPickerLocation); + GlStateManager.color(1, 1, 1, 1); + RenderUtils.drawTexturedRect(x + 1, y + 1, 72, 72, GL11.GL_LINEAR); + + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(colour_selector_dot); + GlStateManager.color(1, 1, 1, 1); + RenderUtils.drawTexturedRect( + x + 5 + 32 + selx - 4, + y + 5 + 32 + sely - 4, + 8, + 8, + GL11.GL_NEAREST + ); - if (y > -5 && y <= 69) { - if (xValue > 0 && xValue < 10) { - clickedComponent = 1; - } + TextRenderUtils.drawStringCenteredScaledMaxWidth( + EnumChatFormatting.GRAY.toString() + Math.round(hsv[2] * 100) + "", + Minecraft.getMinecraft().fontRendererObj, + x + 5 + 64 + 5 + 5 - (Math.round(hsv[2] * 100) == 100 ? 1 : 0), + y + 5 + 64 + 5 + 5, + true, + 13, + -1 + ); + TextRenderUtils.drawStringCenteredScaledMaxWidth( + EnumChatFormatting.GRAY.toString() + + Math.round(c.getAlpha() / 255f * 100) + + "", + Minecraft.getMinecraft().fontRendererObj, + x + 5 + 64 + 5 + 15 + 5, + y + 5 + 64 + 5 + 5, + true, + 13, + -1 + ); + if (chromaSpeed > 0) { + TextRenderUtils.drawStringCenteredScaledMaxWidth( + EnumChatFormatting.GRAY.toString() + + (int) ChromaColour.getSecondsForSpeed(chromaSpeed) + + "s", + Minecraft.getMinecraft().fontRendererObj, + x + 5 + 64 + 5 + 30 + 6, + y + 5 + 64 + 5 + 5, + true, + 13, + -1 + ); + } - int xOpacity = mouseX - (x + 5 + 64 + 5 + 10 + 5); + hexField.setSize(48, 10); + if (!hexField.getFocus()) hexField.setText( + Integer.toHexString(c.getRGB() & 0xFFFFFF).toUpperCase() + ); - if (xOpacity > 0 && xOpacity < 10) { - clickedComponent = 2; - } + StringBuilder sb = new StringBuilder(EnumChatFormatting.GRAY + "#"); + for (int i = 0; i < 6 - hexField.getText().length(); i++) { + sb.append("0"); } + sb.append(EnumChatFormatting.WHITE); - int chromaSpeed = ChromaColour.getSpeed(colour); - int xChroma = mouseX - (x + 5 + 64 + 5 + 10 + 5 + 10 + 5); - if (xChroma > 0 && xChroma < 10) { - if (chromaSpeed > 0) { - if (y > -5 && y <= 69) { - clickedComponent = 3; + hexField.setPrependText(sb.toString()); + hexField.render(x + 5 + 8, y + 5 + 64 + 5); + } + + public boolean mouseInput(int mouseX, int mouseY) { + ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + float mouseXF = (float) ( + Mouse.getX() * + scaledResolution.getScaledWidth_double() / + Minecraft.getMinecraft().displayWidth + ); + float mouseYF = (float) ( + scaledResolution.getScaledHeight_double() - + Mouse.getY() * + scaledResolution.getScaledHeight_double() / + Minecraft.getMinecraft().displayHeight - + 1 + ); + + if ( + (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) && + Mouse.getEventButtonState() + ) { + if (mouseX > x + 5 + 8 && mouseX < x + 5 + 8 + 48) { + if (mouseY > y + 5 + 64 + 5 && mouseY < y + 5 + 64 + 5 + 10) { + hexField.mouseClicked( + mouseX, + mouseY, + Mouse.getEventButton() + ); + clickedComponent = -1; + return true; + } } - } else if (mouseY > this.y + 5 + 27 && mouseY < this.y + 5 + 37) { + } + if (!Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { + clickedComponent = -1; + } + if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { + if ( + mouseX >= x && + mouseX <= x + 119 && + mouseY >= y && + mouseY <= y + 89 + ) { + hexField.unfocus(); + + int xWheel = mouseX - x - 5; + int yWheel = mouseY - y - 5; + + if (xWheel > 0 && xWheel < 64) { + if (yWheel > 0 && yWheel < 64) { + clickedComponent = 0; + } + } + + int xValue = mouseX - (x + 5 + 64 + 5); + int y = mouseY - this.y - 5; + + if (y > -5 && y <= 69) { + if (xValue > 0 && xValue < 10) { + clickedComponent = 1; + } + + int xOpacity = mouseX - (x + 5 + 64 + 5 + 10 + 5); + + if (xOpacity > 0 && xOpacity < 10) { + clickedComponent = 2; + } + } + + int chromaSpeed = ChromaColour.getSpeed(colour); + int xChroma = mouseX - (x + 5 + 64 + 5 + 10 + 5 + 10 + 5); + if (xChroma > 0 && xChroma < 10) { + if (chromaSpeed > 0) { + if (y > -5 && y <= 69) { + clickedComponent = 3; + } + } else if ( + mouseY > this.y + 5 + 27 && mouseY < this.y + 5 + 37 + ) { + int currentColour = ChromaColour.specialToSimpleRGB( + colour + ); + Color c = new Color(currentColour, true); + colour = + ChromaColour.special( + 200, + c.getAlpha(), + currentColour + ); + colourChangedCallback.accept(colour); + } + } + } else { + hexField.unfocus(); + closeCallback.run(); + return false; + } + } + if (Mouse.isButtonDown(0) && clickedComponent >= 0) { int currentColour = ChromaColour.specialToSimpleRGB(colour); Color c = new Color(currentColour, true); - colour = ChromaColour.special(200, c.getAlpha(), currentColour); - colourChangedCallback.accept(colour); - } + float[] hsv = Color.RGBtoHSB( + c.getRed(), + c.getGreen(), + c.getBlue(), + null + ); + + float xWheel = mouseXF - x - 5; + float yWheel = mouseYF - y - 5; + + if (clickedComponent == 0) { + float angle = (float) Math.toDegrees( + Math.atan((32 - xWheel) / (yWheel - 32 + 1E-5)) + + Math.PI / + 2 + ); + xWheel = Math.max(0, Math.min(64, xWheel)); + yWheel = Math.max(0, Math.min(64, yWheel)); + float radius = (float) Math.sqrt( + ( + (xWheel - 32) * + (xWheel - 32) + + (yWheel - 32) * + (yWheel - 32) + ) / + 1024f + ); + if (yWheel < 32) angle += 180; + + this.wheelAngle = angle; + this.wheelRadius = (float) Math.pow(Math.min(1, radius), 1.5f); + int rgb = Color + .getHSBColor(angle / 360f, wheelRadius, hsv[2]) + .getRGB(); + colour = + ChromaColour.special( + ChromaColour.getSpeed(colour), + c.getAlpha(), + rgb + ); + colourChangedCallback.accept(colour); + return true; + } + + float y = mouseYF - this.y - 5; + y = Math.max(0, Math.min(64, y)); + System.out.println(y); + + if (clickedComponent == 1) { + int rgb = Color + .getHSBColor(wheelAngle / 360, wheelRadius, 1 - y / 64f) + .getRGB(); + colour = + ChromaColour.special( + ChromaColour.getSpeed(colour), + c.getAlpha(), + rgb + ); + colourChangedCallback.accept(colour); + return true; + } + + if (clickedComponent == 2) { + colour = + ChromaColour.special( + ChromaColour.getSpeed(colour), + 255 - Math.round(y / 64f * 255), + currentColour + ); + colourChangedCallback.accept(colour); + return true; + } + + if (clickedComponent == 3) { + colour = + ChromaColour.special( + 255 - Math.round(y / 64f * 255), + c.getAlpha(), + currentColour + ); + colourChangedCallback.accept(colour); + } + return true; } - } else { - hexField.unfocus(); - closeCallback.run(); return false; - } } - if (Mouse.isButtonDown(0) && clickedComponent >= 0) { - int currentColour = ChromaColour.specialToSimpleRGB(colour); - Color c = new Color(currentColour, true); - float[] hsv = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null); - float xWheel = mouseXF - x - 5; - float yWheel = mouseYF - y - 5; + public boolean keyboardInput() { + if (Keyboard.getEventKeyState() && hexField.getFocus()) { + if (Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { + hexField.unfocus(); + return true; + } + String old = hexField.getText(); - if (clickedComponent == 0) { - float angle = (float) Math.toDegrees( - Math.atan((32 - xWheel) / (yWheel - 32 + 1E-5)) + Math.PI / 2 - ); - xWheel = Math.max(0, Math.min(64, xWheel)); - yWheel = Math.max(0, Math.min(64, yWheel)); - float radius = (float) Math.sqrt( - ((xWheel - 32) * (xWheel - 32) + (yWheel - 32) * (yWheel - 32)) / - 1024f - ); - if (yWheel < 32) angle += 180; - - this.wheelAngle = angle; - this.wheelRadius = (float) Math.pow(Math.min(1, radius), 1.5f); - int rgb = Color.getHSBColor(angle / 360f, wheelRadius, hsv[2]).getRGB(); - colour = - ChromaColour.special( - ChromaColour.getSpeed(colour), - c.getAlpha(), - rgb - ); - colourChangedCallback.accept(colour); - return true; - } - - float y = mouseYF - this.y - 5; - y = Math.max(0, Math.min(64, y)); - System.out.println(y); - - if (clickedComponent == 1) { - int rgb = Color - .getHSBColor(wheelAngle / 360, wheelRadius, 1 - y / 64f) - .getRGB(); - colour = - ChromaColour.special( - ChromaColour.getSpeed(colour), - c.getAlpha(), - rgb - ); - colourChangedCallback.accept(colour); - return true; - } - - if (clickedComponent == 2) { - colour = - ChromaColour.special( - ChromaColour.getSpeed(colour), - 255 - Math.round(y / 64f * 255), - currentColour - ); - colourChangedCallback.accept(colour); - return true; - } - - if (clickedComponent == 3) { - colour = - ChromaColour.special( - 255 - Math.round(y / 64f * 255), - c.getAlpha(), - currentColour - ); - colourChangedCallback.accept(colour); - } - return true; - } - return false; - } - - public boolean keyboardInput() { - if (Keyboard.getEventKeyState() && hexField.getFocus()) { - if (Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { - hexField.unfocus(); - return true; - } - String old = hexField.getText(); - - hexField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); - - if (hexField.getText().length() > 6) { - hexField.setText(old); - } else { - try { - String text = hexField.getText().toLowerCase(); - - int rgb = Integer.parseInt(text, 16); - int alpha = (ChromaColour.specialToSimpleRGB(colour) >> 24) & 0xFF; - colour = - ChromaColour.special(ChromaColour.getSpeed(colour), alpha, rgb); - colourChangedCallback.accept(colour); - - Color c = new Color(rgb); - float[] hsv = Color.RGBtoHSB( - c.getRed(), - c.getGreen(), - c.getBlue(), - null - ); - updateAngleAndRadius(hsv); - } catch (Exception e) {} - } + hexField.keyTyped( + Keyboard.getEventCharacter(), + Keyboard.getEventKey() + ); - return true; + if (hexField.getText().length() > 6) { + hexField.setText(old); + } else { + try { + String text = hexField.getText().toLowerCase(); + + int rgb = Integer.parseInt(text, 16); + int alpha = + (ChromaColour.specialToSimpleRGB(colour) >> 24) & 0xFF; + colour = + ChromaColour.special( + ChromaColour.getSpeed(colour), + alpha, + rgb + ); + colourChangedCallback.accept(colour); + + Color c = new Color(rgb); + float[] hsv = Color.RGBtoHSB( + c.getRed(), + c.getGreen(), + c.getBlue(), + null + ); + updateAngleAndRadius(hsv); + } catch (Exception e) {} + } + + return true; + } + return false; } - return false; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementTextField.java b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementTextField.java index abb5a51..a3d01b5 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementTextField.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiElementTextField.java @@ -14,730 +14,771 @@ import net.minecraft.client.renderer.GlStateManager; public class GuiElementTextField { - public static final int SCALE_TEXT = 0b100000; - public static final int NUM_ONLY = 0b10000; - public static final int NO_SPACE = 0b01000; - public static final int FORCE_CAPS = 0b00100; - public static final int COLOUR = 0b00010; - public static final int MULTILINE = 0b00001; - - private int searchBarYSize; - private int searchBarXSize; - private static final int searchBarPadding = 2; - - private int options; - - private boolean focus = false; - - private int x; - private int y; - - private String prependText = ""; - - private final GuiTextField textField = new GuiTextField( - 0, - Minecraft.getMinecraft().fontRendererObj, - 0, - 0, - 0, - 0 - ); - - private int customBorderColour = -1; - - public GuiElementTextField(String initialText, int options) { - this(initialText, 100, 20, options); - } - - public GuiElementTextField( - String initialText, - int sizeX, - int sizeY, - int options - ) { - textField.setFocused(true); - textField.setCanLoseFocus(false); - textField.setMaxStringLength(999); - textField.setText(initialText); - this.searchBarXSize = sizeX; - this.searchBarYSize = sizeY; - this.options = options; - } - - public void setMaxStringLength(int len) { - textField.setMaxStringLength(len); - } - - public void setCustomBorderColour(int colour) { - this.customBorderColour = colour; - } - - public String getText() { - return textField.getText(); - } - - public void setPrependText(String text) { - this.prependText = text; - } - - public void setText(String text) { - if (textField.getText() == null || !textField.getText().equals(text)) { - textField.setText(text); - } - } + public static final int SCALE_TEXT = 0b100000; + public static final int NUM_ONLY = 0b10000; + public static final int NO_SPACE = 0b01000; + public static final int FORCE_CAPS = 0b00100; + public static final int COLOUR = 0b00010; + public static final int MULTILINE = 0b00001; - public void setSize(int searchBarXSize, int searchBarYSize) { - this.searchBarXSize = searchBarXSize; - this.searchBarYSize = searchBarYSize; - } + private int searchBarYSize; + private int searchBarXSize; + private static final int searchBarPadding = 2; - public void setOptions(int options) { - this.options = options; - } + private int options; - @Override - public String toString() { - return textField.getText(); - } + private boolean focus = false; - public void setFocus(boolean focus) { - this.focus = focus; - } + private int x; + private int y; - public boolean getFocus() { - return focus; - } + private String prependText = ""; - public int getHeight() { - ScaledResolution scaledresolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - int paddingUnscaled = searchBarPadding / scaledresolution.getScaleFactor(); - - int numLines = - org.apache.commons.lang3.StringUtils.countMatches( - textField.getText(), - "\n" - ) + - 1; - int extraSize = (searchBarYSize - 8) / 2 + 8; - int bottomTextBox = searchBarYSize + extraSize * (numLines - 1); - - return bottomTextBox + paddingUnscaled * 2; - } - - public int getWidth() { - ScaledResolution scaledresolution = new ScaledResolution( - Minecraft.getMinecraft() + private final GuiTextField textField = new GuiTextField( + 0, + Minecraft.getMinecraft().fontRendererObj, + 0, + 0, + 0, + 0 ); - int paddingUnscaled = searchBarPadding / scaledresolution.getScaleFactor(); - return searchBarXSize + paddingUnscaled * 2; - } + private int customBorderColour = -1; - private float getScaleFactor(String str) { - return Math.min( - 1, - (searchBarXSize - 2) / - (float) Minecraft.getMinecraft().fontRendererObj.getStringWidth(str) - ); - } - - private boolean isScaling() { - return (options & SCALE_TEXT) != 0; - } - - private float getStringWidth(String str) { - if (isScaling()) { - return ( - Minecraft.getMinecraft().fontRendererObj.getStringWidth(str) * - getScaleFactor(str) - ); - } else { - return Minecraft.getMinecraft().fontRendererObj.getStringWidth(str); + public GuiElementTextField(String initialText, int options) { + this(initialText, 100, 20, options); } - } - public int getCursorPos(int mouseX, int mouseY) { - int xComp = mouseX - x; - int yComp = mouseY - y; + public GuiElementTextField( + String initialText, + int sizeX, + int sizeY, + int options + ) { + textField.setFocused(true); + textField.setCanLoseFocus(false); + textField.setMaxStringLength(999); + textField.setText(initialText); + this.searchBarXSize = sizeX; + this.searchBarYSize = sizeY; + this.options = options; + } - int extraSize = (searchBarYSize - 8) / 2 + 8; + public void setMaxStringLength(int len) { + textField.setMaxStringLength(len); + } - String renderText = prependText + textField.getText(); + public void setCustomBorderColour(int colour) { + this.customBorderColour = colour; + } - int lineNum = Math.round(((yComp - (searchBarYSize - 8) / 2)) / extraSize); + public String getText() { + return textField.getText(); + } - Pattern patternControlCode = Pattern.compile( - "(?i)\\u00A7([^\\u00B6])(?!\\u00B6)" - ); - String text = renderText; - String textNoColour = renderText; - if ((options & COLOUR) != 0) { - while (true) { - Matcher matcher = patternControlCode.matcher(text); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); - } + public void setPrependText(String text) { + this.prependText = text; + } + + public void setText(String text) { + if (textField.getText() == null || !textField.getText().equals(text)) { + textField.setText(text); + } } - while (true) { - Matcher matcher = patternControlCode.matcher(textNoColour); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - textNoColour = matcher.replaceFirst("\u00B6" + code); + + public void setSize(int searchBarXSize, int searchBarYSize) { + this.searchBarXSize = searchBarXSize; + this.searchBarYSize = searchBarYSize; } - int currentLine = 0; - int cursorIndex = 0; - for (; cursorIndex < textNoColour.length(); cursorIndex++) { - if (currentLine == lineNum) break; - if (textNoColour.charAt(cursorIndex) == '\n') { - currentLine++; - } + public void setOptions(int options) { + this.options = options; } - String textNC = textNoColour.substring(0, cursorIndex); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( - textNC, - "\u00B6" - ); - String line = text - .substring(cursorIndex + (((options & COLOUR) != 0) ? colorCodes * 2 : 0)) - .split("\n")[0]; - int padding = Math.min(5, searchBarXSize - strLenNoColor(line)) / 2; - String trimmed = Minecraft - .getMinecraft() - .fontRendererObj.trimStringToWidth(line, xComp - padding); - int linePos = strLenNoColor(trimmed); - if (linePos != strLenNoColor(line)) { - char after = line.charAt(linePos); - int trimmedWidth = Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(trimmed); - int charWidth = Minecraft - .getMinecraft() - .fontRendererObj.getCharWidth(after); - if (trimmedWidth + charWidth / 2 < xComp - padding) { - linePos++; - } + @Override + public String toString() { + return textField.getText(); } - cursorIndex += linePos; - int pre = StringUtils.cleanColour(prependText).length(); - if (cursorIndex < pre) { - cursorIndex = 0; - } else { - cursorIndex -= pre; + public void setFocus(boolean focus) { + this.focus = focus; } - return cursorIndex; - } + public boolean getFocus() { + return focus; + } - public void mouseClicked(int mouseX, int mouseY, int mouseButton) { - if (mouseButton == 1) { - textField.setText(""); - } else { - textField.setCursorPosition(getCursorPos(mouseX, mouseY)); + public int getHeight() { + ScaledResolution scaledresolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + int paddingUnscaled = + searchBarPadding / scaledresolution.getScaleFactor(); + + int numLines = + org.apache.commons.lang3.StringUtils.countMatches( + textField.getText(), + "\n" + ) + + 1; + int extraSize = (searchBarYSize - 8) / 2 + 8; + int bottomTextBox = searchBarYSize + extraSize * (numLines - 1); + + return bottomTextBox + paddingUnscaled * 2; } - focus = true; - } - - public void unfocus() { - focus = false; - textField.setSelectionPos(textField.getCursorPosition()); - } - - public int strLenNoColor(String str) { - return str.replaceAll("(?i)\\u00A7.", "").length(); - } - - public void mouseClickMove( - int mouseX, - int mouseY, - int clickedMouseButton, - long timeSinceLastClick - ) { - if (focus) { - textField.setSelectionPos(getCursorPos(mouseX, mouseY)); + + public int getWidth() { + ScaledResolution scaledresolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + int paddingUnscaled = + searchBarPadding / scaledresolution.getScaleFactor(); + + return searchBarXSize + paddingUnscaled * 2; } - } - public void keyTyped(char typedChar, int keyCode) { - if (focus) { - if ((options & MULTILINE) != 0) { //Carriage return - Pattern patternControlCode = Pattern.compile( - "(?i)\\u00A7([^\\u00B6\n])(?!\\u00B6)" + private float getScaleFactor(String str) { + return Math.min( + 1, + (searchBarXSize - 2) / + (float) Minecraft.getMinecraft().fontRendererObj.getStringWidth(str) ); + } - String text = textField.getText(); - String textNoColour = textField.getText(); - while (true) { - Matcher matcher = patternControlCode.matcher(text); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); + private boolean isScaling() { + return (options & SCALE_TEXT) != 0; + } + + private float getStringWidth(String str) { + if (isScaling()) { + return ( + Minecraft.getMinecraft().fontRendererObj.getStringWidth(str) * + getScaleFactor(str) + ); + } else { + return Minecraft.getMinecraft().fontRendererObj.getStringWidth(str); + } + } + + public int getCursorPos(int mouseX, int mouseY) { + int xComp = mouseX - x; + int yComp = mouseY - y; + + int extraSize = (searchBarYSize - 8) / 2 + 8; + + String renderText = prependText + textField.getText(); + + int lineNum = Math.round( + ((yComp - (searchBarYSize - 8) / 2)) / extraSize + ); + + Pattern patternControlCode = Pattern.compile( + "(?i)\\u00A7([^\\u00B6])(?!\\u00B6)" + ); + String text = renderText; + String textNoColour = renderText; + if ((options & COLOUR) != 0) { + while (true) { + Matcher matcher = patternControlCode.matcher(text); + if (!matcher.find() || matcher.groupCount() < 1) break; + String code = matcher.group(1); + text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); + } } while (true) { - Matcher matcher = patternControlCode.matcher(textNoColour); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - textNoColour = matcher.replaceFirst("\u00B6" + code); + Matcher matcher = patternControlCode.matcher(textNoColour); + if (!matcher.find() || matcher.groupCount() < 1) break; + String code = matcher.group(1); + textNoColour = matcher.replaceFirst("\u00B6" + code); } - if (keyCode == 28) { - String before = textField - .getText() - .substring(0, textField.getCursorPosition()); - String after = textField - .getText() - .substring(textField.getCursorPosition()); - int pos = textField.getCursorPosition(); - textField.setText(before + "\n" + after); - textField.setCursorPosition(pos + 1); - return; - } else if (keyCode == 200) { //Up - String textNCBeforeCursor = textNoColour.substring( - 0, - textField.getSelectionEnd() - ); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( - textNCBeforeCursor, + int currentLine = 0; + int cursorIndex = 0; + for (; cursorIndex < textNoColour.length(); cursorIndex++) { + if (currentLine == lineNum) break; + if (textNoColour.charAt(cursorIndex) == '\n') { + currentLine++; + } + } + + String textNC = textNoColour.substring(0, cursorIndex); + int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( + textNC, "\u00B6" - ); - String textBeforeCursor = text.substring( - 0, - textField.getSelectionEnd() + colorCodes * 2 - ); - - int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches( - textBeforeCursor, - "\n" - ); - - String[] split = textBeforeCursor.split("\n"); - int textBeforeCursorWidth; - String lineBefore; - String thisLineBeforeCursor; - if (split.length == numLinesBeforeCursor && split.length > 0) { - textBeforeCursorWidth = 0; - lineBefore = split[split.length - 1]; - thisLineBeforeCursor = ""; - } else if (split.length > 1) { - thisLineBeforeCursor = split[split.length - 1]; - lineBefore = split[split.length - 2]; - textBeforeCursorWidth = - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(thisLineBeforeCursor); - } else { - return; - } - String trimmed = Minecraft + ); + String line = text + .substring( + cursorIndex + (((options & COLOUR) != 0) ? colorCodes * 2 : 0) + ) + .split("\n")[0]; + int padding = Math.min(5, searchBarXSize - strLenNoColor(line)) / 2; + String trimmed = Minecraft .getMinecraft() - .fontRendererObj.trimStringToWidth( - lineBefore, - textBeforeCursorWidth - ); - int linePos = strLenNoColor(trimmed); - if (linePos != strLenNoColor(lineBefore)) { - char after = lineBefore.charAt(linePos); + .fontRendererObj.trimStringToWidth(line, xComp - padding); + int linePos = strLenNoColor(trimmed); + if (linePos != strLenNoColor(line)) { + char after = line.charAt(linePos); int trimmedWidth = Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(trimmed); - int charWidth = Minecraft - .getMinecraft() - .fontRendererObj.getCharWidth(after); - if (trimmedWidth + charWidth / 2 < textBeforeCursorWidth) { - linePos++; - } - } - int newPos = - textField.getSelectionEnd() - - strLenNoColor(thisLineBeforeCursor) - - strLenNoColor(lineBefore) - - 1 + - linePos; - - if (GuiScreen.isShiftKeyDown()) { - textField.setSelectionPos(newPos); - } else { - textField.setCursorPosition(newPos); - } - } else if (keyCode == 208) { //Down - String textNCBeforeCursor = textNoColour.substring( - 0, - textField.getSelectionEnd() - ); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( - textNCBeforeCursor, - "\u00B6" - ); - String textBeforeCursor = text.substring( - 0, - textField.getSelectionEnd() + colorCodes * 2 - ); - - int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches( - textBeforeCursor, - "\n" - ); - - String[] split = textBeforeCursor.split("\n"); - String thisLineBeforeCursor; - int textBeforeCursorWidth; - if (split.length == numLinesBeforeCursor) { - thisLineBeforeCursor = ""; - textBeforeCursorWidth = 0; - } else if (split.length > 0) { - thisLineBeforeCursor = split[split.length - 1]; - textBeforeCursorWidth = - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(thisLineBeforeCursor); - } else { - return; - } - - String[] split2 = textNoColour.split("\n"); - if (split2.length > numLinesBeforeCursor + 1) { - String lineAfter = split2[numLinesBeforeCursor + 1]; - String trimmed = Minecraft - .getMinecraft() - .fontRendererObj.trimStringToWidth( - lineAfter, - textBeforeCursorWidth - ); - int linePos = strLenNoColor(trimmed); - if (linePos != strLenNoColor(lineAfter)) { - char after = lineAfter.charAt(linePos); - int trimmedWidth = Minecraft .getMinecraft() .fontRendererObj.getStringWidth(trimmed); - int charWidth = Minecraft + int charWidth = Minecraft .getMinecraft() .fontRendererObj.getCharWidth(after); - if (trimmedWidth + charWidth / 2 < textBeforeCursorWidth) { + if (trimmedWidth + charWidth / 2 < xComp - padding) { linePos++; - } } - int newPos = - textField.getSelectionEnd() - - strLenNoColor(thisLineBeforeCursor) + - strLenNoColor(split2[numLinesBeforeCursor]) + - 1 + - linePos; - - if (GuiScreen.isShiftKeyDown()) { - textField.setSelectionPos(newPos); - } else { - textField.setCursorPosition(newPos); - } - } } - } - - String old = textField.getText(); - if ((options & FORCE_CAPS) != 0) typedChar = - Character.toUpperCase(typedChar); - if ((options & NO_SPACE) != 0 && typedChar == ' ') return; - - textField.setFocused(true); - textField.textboxKeyTyped(typedChar, keyCode); - - if ((options & COLOUR) != 0) { - if (typedChar == '&') { - int pos = textField.getCursorPosition() - 2; - if (pos >= 0 && pos < textField.getText().length()) { - if (textField.getText().charAt(pos) == '&') { - String before = textField.getText().substring(0, pos); - String after = ""; - if (pos + 2 < textField.getText().length()) { - after = textField.getText().substring(pos + 2); - } - textField.setText(before + "\u00A7" + after); - textField.setCursorPosition(pos + 1); - } - } + cursorIndex += linePos; + + int pre = StringUtils.cleanColour(prependText).length(); + if (cursorIndex < pre) { + cursorIndex = 0; + } else { + cursorIndex -= pre; } - } - if ( - (options & NUM_ONLY) != 0 && textField.getText().matches("[^0-9.]") - ) textField.setText(old); + return cursorIndex; } - } - - public void render(int x, int y) { - this.x = x; - this.y = y; - drawTextbox( - x, - y, - searchBarXSize, - searchBarYSize, - searchBarPadding, - textField, - focus - ); - } - - private void drawTextbox( - int x, - int y, - int searchBarXSize, - int searchBarYSize, - int searchBarPadding, - GuiTextField textField, - boolean focus - ) { - ScaledResolution scaledresolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - String renderText = prependText + textField.getText(); - GlStateManager.disableLighting(); + public void mouseClicked(int mouseX, int mouseY, int mouseButton) { + if (mouseButton == 1) { + textField.setText(""); + } else { + textField.setCursorPosition(getCursorPos(mouseX, mouseY)); + } + focus = true; + } - /** - * Search bar - */ - int paddingUnscaled = searchBarPadding / scaledresolution.getScaleFactor(); - if (paddingUnscaled < 1) paddingUnscaled = 1; + public void unfocus() { + focus = false; + textField.setSelectionPos(textField.getCursorPosition()); + } - int numLines = - org.apache.commons.lang3.StringUtils.countMatches(renderText, "\n") + 1; - int extraSize = (searchBarYSize - 8) / 2 + 8; - int bottomTextBox = y + searchBarYSize + extraSize * (numLines - 1); + public int strLenNoColor(String str) { + return str.replaceAll("(?i)\\u00A7.", "").length(); + } - int borderColour = focus ? Color.GREEN.getRGB() : Color.WHITE.getRGB(); - if (customBorderColour != -1) { - borderColour = customBorderColour; + public void mouseClickMove( + int mouseX, + int mouseY, + int clickedMouseButton, + long timeSinceLastClick + ) { + if (focus) { + textField.setSelectionPos(getCursorPos(mouseX, mouseY)); + } } - //bar background - Gui.drawRect( - x - paddingUnscaled, - y - paddingUnscaled, - x + searchBarXSize + paddingUnscaled, - bottomTextBox + paddingUnscaled, - borderColour - ); - Gui.drawRect(x, y, x + searchBarXSize, bottomTextBox, Color.BLACK.getRGB()); - //bar text - Pattern patternControlCode = Pattern.compile( - "(?i)\\u00A7([^\\u00B6\n])(?!\\u00B6)" - ); + public void keyTyped(char typedChar, int keyCode) { + if (focus) { + if ((options & MULTILINE) != 0) { //Carriage return + Pattern patternControlCode = Pattern.compile( + "(?i)\\u00A7([^\\u00B6\n])(?!\\u00B6)" + ); + + String text = textField.getText(); + String textNoColour = textField.getText(); + while (true) { + Matcher matcher = patternControlCode.matcher(text); + if (!matcher.find() || matcher.groupCount() < 1) break; + String code = matcher.group(1); + text = + matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); + } + while (true) { + Matcher matcher = patternControlCode.matcher(textNoColour); + if (!matcher.find() || matcher.groupCount() < 1) break; + String code = matcher.group(1); + textNoColour = matcher.replaceFirst("\u00B6" + code); + } + + if (keyCode == 28) { + String before = textField + .getText() + .substring(0, textField.getCursorPosition()); + String after = textField + .getText() + .substring(textField.getCursorPosition()); + int pos = textField.getCursorPosition(); + textField.setText(before + "\n" + after); + textField.setCursorPosition(pos + 1); + return; + } else if (keyCode == 200) { //Up + String textNCBeforeCursor = textNoColour.substring( + 0, + textField.getSelectionEnd() + ); + int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( + textNCBeforeCursor, + "\u00B6" + ); + String textBeforeCursor = text.substring( + 0, + textField.getSelectionEnd() + colorCodes * 2 + ); + + int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches( + textBeforeCursor, + "\n" + ); + + String[] split = textBeforeCursor.split("\n"); + int textBeforeCursorWidth; + String lineBefore; + String thisLineBeforeCursor; + if ( + split.length == numLinesBeforeCursor && split.length > 0 + ) { + textBeforeCursorWidth = 0; + lineBefore = split[split.length - 1]; + thisLineBeforeCursor = ""; + } else if (split.length > 1) { + thisLineBeforeCursor = split[split.length - 1]; + lineBefore = split[split.length - 2]; + textBeforeCursorWidth = + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth( + thisLineBeforeCursor + ); + } else { + return; + } + String trimmed = Minecraft + .getMinecraft() + .fontRendererObj.trimStringToWidth( + lineBefore, + textBeforeCursorWidth + ); + int linePos = strLenNoColor(trimmed); + if (linePos != strLenNoColor(lineBefore)) { + char after = lineBefore.charAt(linePos); + int trimmedWidth = Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(trimmed); + int charWidth = Minecraft + .getMinecraft() + .fontRendererObj.getCharWidth(after); + if ( + trimmedWidth + charWidth / 2 < textBeforeCursorWidth + ) { + linePos++; + } + } + int newPos = + textField.getSelectionEnd() - + strLenNoColor(thisLineBeforeCursor) - + strLenNoColor(lineBefore) - + 1 + + linePos; + + if (GuiScreen.isShiftKeyDown()) { + textField.setSelectionPos(newPos); + } else { + textField.setCursorPosition(newPos); + } + } else if (keyCode == 208) { //Down + String textNCBeforeCursor = textNoColour.substring( + 0, + textField.getSelectionEnd() + ); + int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( + textNCBeforeCursor, + "\u00B6" + ); + String textBeforeCursor = text.substring( + 0, + textField.getSelectionEnd() + colorCodes * 2 + ); + + int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches( + textBeforeCursor, + "\n" + ); + + String[] split = textBeforeCursor.split("\n"); + String thisLineBeforeCursor; + int textBeforeCursorWidth; + if (split.length == numLinesBeforeCursor) { + thisLineBeforeCursor = ""; + textBeforeCursorWidth = 0; + } else if (split.length > 0) { + thisLineBeforeCursor = split[split.length - 1]; + textBeforeCursorWidth = + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth( + thisLineBeforeCursor + ); + } else { + return; + } + + String[] split2 = textNoColour.split("\n"); + if (split2.length > numLinesBeforeCursor + 1) { + String lineAfter = split2[numLinesBeforeCursor + 1]; + String trimmed = Minecraft + .getMinecraft() + .fontRendererObj.trimStringToWidth( + lineAfter, + textBeforeCursorWidth + ); + int linePos = strLenNoColor(trimmed); + if (linePos != strLenNoColor(lineAfter)) { + char after = lineAfter.charAt(linePos); + int trimmedWidth = Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(trimmed); + int charWidth = Minecraft + .getMinecraft() + .fontRendererObj.getCharWidth(after); + if ( + trimmedWidth + + charWidth / + 2 < + textBeforeCursorWidth + ) { + linePos++; + } + } + int newPos = + textField.getSelectionEnd() - + strLenNoColor(thisLineBeforeCursor) + + strLenNoColor(split2[numLinesBeforeCursor]) + + 1 + + linePos; + + if (GuiScreen.isShiftKeyDown()) { + textField.setSelectionPos(newPos); + } else { + textField.setCursorPosition(newPos); + } + } + } + } - String text = renderText; - String textNoColor = renderText; - if ((options & COLOUR) != 0) { - while (true) { - Matcher matcher = patternControlCode.matcher(text); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); - } - } - while (true) { - Matcher matcher = patternControlCode.matcher(textNoColor); - if (!matcher.find() || matcher.groupCount() < 1) break; - String code = matcher.group(1); - textNoColor = matcher.replaceFirst("\u00B6" + code); - } + String old = textField.getText(); + if ((options & FORCE_CAPS) != 0) typedChar = + Character.toUpperCase(typedChar); + if ((options & NO_SPACE) != 0 && typedChar == ' ') return; + + textField.setFocused(true); + textField.textboxKeyTyped(typedChar, keyCode); + + if ((options & COLOUR) != 0) { + if (typedChar == '&') { + int pos = textField.getCursorPosition() - 2; + if (pos >= 0 && pos < textField.getText().length()) { + if (textField.getText().charAt(pos) == '&') { + String before = textField + .getText() + .substring(0, pos); + String after = ""; + if (pos + 2 < textField.getText().length()) { + after = textField.getText().substring(pos + 2); + } + textField.setText(before + "\u00A7" + after); + textField.setCursorPosition(pos + 1); + } + } + } + } - int xStartOffset = 5; - float scale = 1; - String[] texts = text.split("\n"); - for (int yOffI = 0; yOffI < texts.length; yOffI++) { - int yOff = yOffI * extraSize; - - if ( - isScaling() && - Minecraft.getMinecraft().fontRendererObj.getStringWidth(texts[yOffI]) > - searchBarXSize - - 10 - ) { - scale = - (searchBarXSize - 2) / - (float) Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(texts[yOffI]); - if (scale > 1) scale = 1; - float newLen = - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(texts[yOffI]) * - scale; - xStartOffset = (int) ((searchBarXSize - newLen) / 2f); - - TextRenderUtils.drawStringCenteredScaledMaxWidth( - texts[yOffI], - Minecraft.getMinecraft().fontRendererObj, - x + searchBarXSize / 2f, - y + searchBarYSize / 2f + yOff, - false, - searchBarXSize - 2, - Color.WHITE.getRGB() - ); - } else { - Minecraft - .getMinecraft() - .fontRendererObj.drawString( - StringUtils.trimToWidth(texts[yOffI], searchBarXSize - 10), - x + 5, - y + (searchBarYSize - 8) / 2 + yOff, - Color.WHITE.getRGB() - ); - } + if ( + (options & NUM_ONLY) != 0 && + textField.getText().matches("[^0-9.]") + ) textField.setText(old); + } } - if (focus && System.currentTimeMillis() % 1000 > 500) { - String textNCBeforeCursor = textNoColor.substring( - 0, - textField.getCursorPosition() + prependText.length() - ); - int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( - textNCBeforeCursor, - "\u00B6" - ); - String textBeforeCursor = text.substring( - 0, - textField.getCursorPosition() + - prependText.length() + - (((options & COLOUR) != 0) ? colorCodes * 2 : 0) - ); - - int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches( - textBeforeCursor, - "\n" - ); - int yOff = numLinesBeforeCursor * extraSize; - - String[] split = textBeforeCursor.split("\n"); - int textBeforeCursorWidth; - if (split.length <= numLinesBeforeCursor || split.length == 0) { - textBeforeCursorWidth = 0; - } else { - textBeforeCursorWidth = - (int) ( - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(split[split.length - 1]) * - scale - ); - } - Gui.drawRect( - x + xStartOffset + textBeforeCursorWidth, - y + (searchBarYSize - 8) / 2 - 1 + yOff, - x + xStartOffset + textBeforeCursorWidth + 1, - y + (searchBarYSize - 8) / 2 + 9 + yOff, - Color.WHITE.getRGB() - ); + public void render(int x, int y) { + this.x = x; + this.y = y; + drawTextbox( + x, + y, + searchBarXSize, + searchBarYSize, + searchBarPadding, + textField, + focus + ); } - String selectedText = textField.getSelectedText(); - if (!selectedText.isEmpty()) { - System.out.println("Start"); - int leftIndex = Math.min( - textField.getCursorPosition() + prependText.length(), - textField.getSelectionEnd() + prependText.length() - ); - int rightIndex = Math.max( - textField.getCursorPosition() + prependText.length(), - textField.getSelectionEnd() + prependText.length() - ); - - float texX = 0; - int texY = 0; - boolean sectionSignPrev = false; - boolean ignoreNext = false; - boolean bold = false; - for (int i = 0; i < textNoColor.length(); i++) { - if (ignoreNext) { - ignoreNext = false; - continue; + private void drawTextbox( + int x, + int y, + int searchBarXSize, + int searchBarYSize, + int searchBarPadding, + GuiTextField textField, + boolean focus + ) { + ScaledResolution scaledresolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + String renderText = prependText + textField.getText(); + + GlStateManager.disableLighting(); + + /** + * Search bar + */ + int paddingUnscaled = + searchBarPadding / scaledresolution.getScaleFactor(); + if (paddingUnscaled < 1) paddingUnscaled = 1; + + int numLines = + org.apache.commons.lang3.StringUtils.countMatches( + renderText, + "\n" + ) + + 1; + int extraSize = (searchBarYSize - 8) / 2 + 8; + int bottomTextBox = y + searchBarYSize + extraSize * (numLines - 1); + + int borderColour = focus ? Color.GREEN.getRGB() : Color.WHITE.getRGB(); + if (customBorderColour != -1) { + borderColour = customBorderColour; } + //bar background + Gui.drawRect( + x - paddingUnscaled, + y - paddingUnscaled, + x + searchBarXSize + paddingUnscaled, + bottomTextBox + paddingUnscaled, + borderColour + ); + Gui.drawRect( + x, + y, + x + searchBarXSize, + bottomTextBox, + Color.BLACK.getRGB() + ); + + //bar text + Pattern patternControlCode = Pattern.compile( + "(?i)\\u00A7([^\\u00B6\n])(?!\\u00B6)" + ); - char c = textNoColor.charAt(i); - if (sectionSignPrev) { - if ( - c != 'k' && - c != 'K' && - c != 'm' && - c != 'M' && - c != 'n' && - c != 'N' && - c != 'o' && - c != 'O' - ) { - bold = c == 'l' || c == 'L'; - } - sectionSignPrev = false; - if (i < prependText.length()) continue; + String text = renderText; + String textNoColor = renderText; + if ((options & COLOUR) != 0) { + while (true) { + Matcher matcher = patternControlCode.matcher(text); + if (!matcher.find() || matcher.groupCount() < 1) break; + String code = matcher.group(1); + text = matcher.replaceFirst("\u00A7" + code + "\u00B6" + code); + } } - if (c == '\u00B6') { - sectionSignPrev = true; - if (i < prependText.length()) continue; + while (true) { + Matcher matcher = patternControlCode.matcher(textNoColor); + if (!matcher.find() || matcher.groupCount() < 1) break; + String code = matcher.group(1); + textNoColor = matcher.replaceFirst("\u00B6" + code); } - if (c == '\n') { - if (i >= leftIndex && i < rightIndex) { - Gui.drawRect( - x + xStartOffset + (int) texX, - y + (searchBarYSize - 8) / 2 - 1 + texY, - x + xStartOffset + (int) texX + 3, - y + (searchBarYSize - 8) / 2 + 9 + texY, - Color.LIGHT_GRAY.getRGB() - ); - } - - texX = 0; - texY += extraSize; - continue; + int xStartOffset = 5; + float scale = 1; + String[] texts = text.split("\n"); + for (int yOffI = 0; yOffI < texts.length; yOffI++) { + int yOff = yOffI * extraSize; + + if ( + isScaling() && + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(texts[yOffI]) > + searchBarXSize - + 10 + ) { + scale = + (searchBarXSize - 2) / + (float) Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(texts[yOffI]); + if (scale > 1) scale = 1; + float newLen = + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(texts[yOffI]) * + scale; + xStartOffset = (int) ((searchBarXSize - newLen) / 2f); + + TextRenderUtils.drawStringCenteredScaledMaxWidth( + texts[yOffI], + Minecraft.getMinecraft().fontRendererObj, + x + searchBarXSize / 2f, + y + searchBarYSize / 2f + yOff, + false, + searchBarXSize - 2, + Color.WHITE.getRGB() + ); + } else { + Minecraft + .getMinecraft() + .fontRendererObj.drawString( + StringUtils.trimToWidth( + texts[yOffI], + searchBarXSize - 10 + ), + x + 5, + y + (searchBarYSize - 8) / 2 + yOff, + Color.WHITE.getRGB() + ); + } } - //String c2 = bold ? EnumChatFormatting.BOLD.toString() : "" + c; + if (focus && System.currentTimeMillis() % 1000 > 500) { + String textNCBeforeCursor = textNoColor.substring( + 0, + textField.getCursorPosition() + prependText.length() + ); + int colorCodes = org.apache.commons.lang3.StringUtils.countMatches( + textNCBeforeCursor, + "\u00B6" + ); + String textBeforeCursor = text.substring( + 0, + textField.getCursorPosition() + + prependText.length() + + (((options & COLOUR) != 0) ? colorCodes * 2 : 0) + ); - System.out.println( - "Adding len for char:" + c + ":" + Integer.toHexString(c) - ); - int len = Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(String.valueOf(c)); - if (bold) len++; - if (i >= leftIndex && i < rightIndex) { - Gui.drawRect( - x + xStartOffset + (int) texX, - y + (searchBarYSize - 8) / 2 - 1 + texY, - x + xStartOffset + (int) (texX + len * scale), - y + (searchBarYSize - 8) / 2 + 9 + texY, - Color.LIGHT_GRAY.getRGB() - ); - - TextRenderUtils.drawStringScaled( - String.valueOf(c), - Minecraft.getMinecraft().fontRendererObj, - x + xStartOffset + texX, - y + searchBarYSize / 2f - scale * 8 / 2f + texY, - false, - Color.BLACK.getRGB(), - scale - ); - if (bold) { - TextRenderUtils.drawStringScaled( - String.valueOf(c), - Minecraft.getMinecraft().fontRendererObj, - x + xStartOffset + texX + 1, - y + searchBarYSize / 2f - scale * 8 / 2f + texY, - false, - Color.BLACK.getRGB(), - scale + int numLinesBeforeCursor = org.apache.commons.lang3.StringUtils.countMatches( + textBeforeCursor, + "\n" + ); + int yOff = numLinesBeforeCursor * extraSize; + + String[] split = textBeforeCursor.split("\n"); + int textBeforeCursorWidth; + if (split.length <= numLinesBeforeCursor || split.length == 0) { + textBeforeCursorWidth = 0; + } else { + textBeforeCursorWidth = + (int) ( + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth( + split[split.length - 1] + ) * + scale + ); + } + Gui.drawRect( + x + xStartOffset + textBeforeCursorWidth, + y + (searchBarYSize - 8) / 2 - 1 + yOff, + x + xStartOffset + textBeforeCursorWidth + 1, + y + (searchBarYSize - 8) / 2 + 9 + yOff, + Color.WHITE.getRGB() ); - } } - texX += len * scale; - } + String selectedText = textField.getSelectedText(); + if (!selectedText.isEmpty()) { + System.out.println("Start"); + int leftIndex = Math.min( + textField.getCursorPosition() + prependText.length(), + textField.getSelectionEnd() + prependText.length() + ); + int rightIndex = Math.max( + textField.getCursorPosition() + prependText.length(), + textField.getSelectionEnd() + prependText.length() + ); + + float texX = 0; + int texY = 0; + boolean sectionSignPrev = false; + boolean ignoreNext = false; + boolean bold = false; + for (int i = 0; i < textNoColor.length(); i++) { + if (ignoreNext) { + ignoreNext = false; + continue; + } + + char c = textNoColor.charAt(i); + if (sectionSignPrev) { + if ( + c != 'k' && + c != 'K' && + c != 'm' && + c != 'M' && + c != 'n' && + c != 'N' && + c != 'o' && + c != 'O' + ) { + bold = c == 'l' || c == 'L'; + } + sectionSignPrev = false; + if (i < prependText.length()) continue; + } + if (c == '\u00B6') { + sectionSignPrev = true; + if (i < prependText.length()) continue; + } + + if (c == '\n') { + if (i >= leftIndex && i < rightIndex) { + Gui.drawRect( + x + xStartOffset + (int) texX, + y + (searchBarYSize - 8) / 2 - 1 + texY, + x + xStartOffset + (int) texX + 3, + y + (searchBarYSize - 8) / 2 + 9 + texY, + Color.LIGHT_GRAY.getRGB() + ); + } + + texX = 0; + texY += extraSize; + continue; + } + + //String c2 = bold ? EnumChatFormatting.BOLD.toString() : "" + c; + + System.out.println( + "Adding len for char:" + c + ":" + Integer.toHexString(c) + ); + int len = Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(String.valueOf(c)); + if (bold) len++; + if (i >= leftIndex && i < rightIndex) { + Gui.drawRect( + x + xStartOffset + (int) texX, + y + (searchBarYSize - 8) / 2 - 1 + texY, + x + xStartOffset + (int) (texX + len * scale), + y + (searchBarYSize - 8) / 2 + 9 + texY, + Color.LIGHT_GRAY.getRGB() + ); + + TextRenderUtils.drawStringScaled( + String.valueOf(c), + Minecraft.getMinecraft().fontRendererObj, + x + xStartOffset + texX, + y + searchBarYSize / 2f - scale * 8 / 2f + texY, + false, + Color.BLACK.getRGB(), + scale + ); + if (bold) { + TextRenderUtils.drawStringScaled( + String.valueOf(c), + Minecraft.getMinecraft().fontRendererObj, + x + xStartOffset + texX + 1, + y + searchBarYSize / 2f - scale * 8 / 2f + texY, + false, + Color.BLACK.getRGB(), + scale + ); + } + } + + texX += len * scale; + } + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiScreenElementWrapper.java b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiScreenElementWrapper.java index e1ee6ed..747d7c5 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/GuiScreenElementWrapper.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/GuiScreenElementWrapper.java @@ -6,30 +6,34 @@ import org.lwjgl.input.Mouse; public class GuiScreenElementWrapper extends GuiScreen { - public final GuiElement element; + public final GuiElement element; - public GuiScreenElementWrapper(GuiElement element) { - this.element = element; - } + public GuiScreenElementWrapper(GuiElement element) { + this.element = element; + } - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - super.drawScreen(mouseX, mouseY, partialTicks); - element.render(); - } + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + super.drawScreen(mouseX, mouseY, partialTicks); + element.render(); + } - @Override - public void handleMouseInput() throws IOException { - super.handleMouseInput(); - int i = Mouse.getEventX() * this.width / this.mc.displayWidth; - int j = - this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; - element.mouseInput(i, j); - } + @Override + public void handleMouseInput() throws IOException { + super.handleMouseInput(); + int i = Mouse.getEventX() * this.width / this.mc.displayWidth; + int j = + this.height - + Mouse.getEventY() * + this.height / + this.mc.displayHeight - + 1; + element.mouseInput(i, j); + } - @Override - public void handleKeyboardInput() throws IOException { - super.handleKeyboardInput(); - element.keyboardInput(); - } + @Override + public void handleKeyboardInput() throws IOException { + super.handleKeyboardInput(); + element.keyboardInput(); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/Config.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/Config.java index 08984e7..dbbca74 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/Config.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/Config.java @@ -2,5 +2,5 @@ package com.thatgravyboat.skyblockhud.core.config; public class Config { - public void executeRunnable(String runnableId) {} + public void executeRunnable(String runnableId) {} } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/Position.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/Position.java index 4d4bef0..0151e76 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/Position.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/Position.java @@ -5,204 +5,207 @@ import net.minecraft.client.gui.ScaledResolution; public class Position { - @Expose - private int x; + @Expose + private int x; - @Expose - private int y; + @Expose + private int y; - @Expose - private boolean centerX; + @Expose + private boolean centerX; - @Expose - private boolean centerY; + @Expose + private boolean centerY; - private static final int EDGE_OFFSET = 0; + private static final int EDGE_OFFSET = 0; - public Position(int x, int y) { - this(x, y, false, false); - } + public Position(int x, int y) { + this(x, y, false, false); + } + + public Position(int x, int y, boolean centerX, boolean centerY) { + this.x = x; + this.y = y; + this.centerX = centerX; + this.centerY = centerY; + } - public Position(int x, int y, boolean centerX, boolean centerY) { - this.x = x; - this.y = y; - this.centerX = centerX; - this.centerY = centerY; - } + public void set(Position other) { + this.x = other.x; + this.y = other.y; + this.centerX = other.centerX; + this.centerY = other.centerY; + } - public void set(Position other) { - this.x = other.x; - this.y = other.y; - this.centerX = other.centerX; - this.centerY = other.centerY; - } + public Position clone() { + return new Position(x, y, centerX, centerY); + } + + public boolean isCenterX() { + return centerX; + } - public Position clone() { - return new Position(x, y, centerX, centerY); - } + public boolean isCenterY() { + return centerY; + } - public boolean isCenterX() { - return centerX; - } + public int getRawX() { + return x; + } - public boolean isCenterY() { - return centerY; - } + public int getRawY() { + return y; + } - public int getRawX() { - return x; - } + public int getAbsX(ScaledResolution scaledResolution, int objWidth) { + int width = scaledResolution.getScaledWidth(); - public int getRawY() { - return y; - } + if (centerX) { + return width / 2 + x; + } - public int getAbsX(ScaledResolution scaledResolution, int objWidth) { - int width = scaledResolution.getScaledWidth(); + int ret = x; + if (x < 0) { + ret = width + x - objWidth; + } - if (centerX) { - return width / 2 + x; - } + if (ret < 0) ret = 0; + if (ret > width - objWidth) ret = width - objWidth; - int ret = x; - if (x < 0) { - ret = width + x - objWidth; + return ret; } - if (ret < 0) ret = 0; - if (ret > width - objWidth) ret = width - objWidth; + public int getAbsY(ScaledResolution scaledResolution, int objHeight) { + int height = scaledResolution.getScaledHeight(); - return ret; - } + if (centerY) { + return height / 2 + y; + } - public int getAbsY(ScaledResolution scaledResolution, int objHeight) { - int height = scaledResolution.getScaledHeight(); + int ret = y; + if (y < 0) { + ret = height + y - objHeight; + } - if (centerY) { - return height / 2 + y; - } + if (ret < 0) ret = 0; + if (ret > height - objHeight) ret = height - objHeight; - int ret = y; - if (y < 0) { - ret = height + y - objHeight; + return ret; } - if (ret < 0) ret = 0; - if (ret > height - objHeight) ret = height - objHeight; - - return ret; - } - - public int moveX( - int deltaX, - int objWidth, - ScaledResolution scaledResolution - ) { - int screenWidth = scaledResolution.getScaledWidth(); - boolean wasPositiveX = this.x >= 0; - this.x += deltaX; - - if (centerX) { - if (wasPositiveX) { - if (this.x > screenWidth / 2 - objWidth / 2) { - deltaX += screenWidth / 2 - objWidth / 2 - this.x; - this.x = screenWidth / 2 - objWidth / 2; + public int moveX( + int deltaX, + int objWidth, + ScaledResolution scaledResolution + ) { + int screenWidth = scaledResolution.getScaledWidth(); + boolean wasPositiveX = this.x >= 0; + this.x += deltaX; + + if (centerX) { + if (wasPositiveX) { + if (this.x > screenWidth / 2 - objWidth / 2) { + deltaX += screenWidth / 2 - objWidth / 2 - this.x; + this.x = screenWidth / 2 - objWidth / 2; + } + } else { + if (this.x < -screenWidth / 2 + objWidth / 2) { + deltaX += -screenWidth / 2 + objWidth / 2 - this.x; + this.x = -screenWidth / 2 + objWidth / 2; + } + } + return deltaX; } - } else { - if (this.x < -screenWidth / 2 + objWidth / 2) { - deltaX += -screenWidth / 2 + objWidth / 2 - this.x; - this.x = -screenWidth / 2 + objWidth / 2; + + if (wasPositiveX) { + if (this.x < EDGE_OFFSET) { + deltaX += EDGE_OFFSET - this.x; + this.x = EDGE_OFFSET; + } + if (this.x > screenWidth - EDGE_OFFSET) { + deltaX += screenWidth - EDGE_OFFSET - this.x; + this.x = screenWidth - EDGE_OFFSET; + } + } else { + if (this.x + 1 > -EDGE_OFFSET) { + deltaX += -EDGE_OFFSET - 1 - this.x; + this.x = -EDGE_OFFSET - 1; + } + if (this.x + screenWidth < EDGE_OFFSET) { + deltaX += EDGE_OFFSET - screenWidth - this.x; + this.x = EDGE_OFFSET - screenWidth; + } } - } - return deltaX; - } - if (wasPositiveX) { - if (this.x < EDGE_OFFSET) { - deltaX += EDGE_OFFSET - this.x; - this.x = EDGE_OFFSET; - } - if (this.x > screenWidth - EDGE_OFFSET) { - deltaX += screenWidth - EDGE_OFFSET - this.x; - this.x = screenWidth - EDGE_OFFSET; - } - } else { - if (this.x + 1 > -EDGE_OFFSET) { - deltaX += -EDGE_OFFSET - 1 - this.x; - this.x = -EDGE_OFFSET - 1; - } - if (this.x + screenWidth < EDGE_OFFSET) { - deltaX += EDGE_OFFSET - screenWidth - this.x; - this.x = EDGE_OFFSET - screenWidth; - } + if (this.x >= 0 && this.x + objWidth / 2 > screenWidth / 2) { + this.x -= screenWidth - objWidth; + } + if (this.x < 0 && this.x + objWidth / 2 <= -screenWidth / 2) { + this.x += screenWidth - objWidth; + } + return deltaX; } - if (this.x >= 0 && this.x + objWidth / 2 > screenWidth / 2) { - this.x -= screenWidth - objWidth; - } - if (this.x < 0 && this.x + objWidth / 2 <= -screenWidth / 2) { - this.x += screenWidth - objWidth; - } - return deltaX; - } - - public int moveY( - int deltaY, - int objHeight, - ScaledResolution scaledResolution - ) { - int screenHeight = scaledResolution.getScaledHeight(); - boolean wasPositiveY = this.y >= 0; - this.y += deltaY; - - if (centerY) { - if (wasPositiveY) { - if (this.y > screenHeight / 2 - objHeight / 2) { - deltaY += screenHeight / 2 - objHeight / 2 - this.y; - this.y = screenHeight / 2 - objHeight / 2; + public int moveY( + int deltaY, + int objHeight, + ScaledResolution scaledResolution + ) { + int screenHeight = scaledResolution.getScaledHeight(); + boolean wasPositiveY = this.y >= 0; + this.y += deltaY; + + if (centerY) { + if (wasPositiveY) { + if (this.y > screenHeight / 2 - objHeight / 2) { + deltaY += screenHeight / 2 - objHeight / 2 - this.y; + this.y = screenHeight / 2 - objHeight / 2; + } + } else { + if (this.y < -screenHeight / 2 + objHeight / 2) { + deltaY += -screenHeight / 2 + objHeight / 2 - this.y; + this.y = -screenHeight / 2 + objHeight / 2; + } + } + return deltaY; } - } else { - if (this.y < -screenHeight / 2 + objHeight / 2) { - deltaY += -screenHeight / 2 + objHeight / 2 - this.y; - this.y = -screenHeight / 2 + objHeight / 2; + + if (wasPositiveY) { + if (this.y < EDGE_OFFSET) { + deltaY += EDGE_OFFSET - this.y; + this.y = EDGE_OFFSET; + } + if (this.y > screenHeight - EDGE_OFFSET) { + deltaY += screenHeight - EDGE_OFFSET - this.y; + this.y = screenHeight - EDGE_OFFSET; + } + } else { + if (this.y + 1 > -EDGE_OFFSET) { + deltaY += -EDGE_OFFSET - 1 - this.y; + this.y = -EDGE_OFFSET - 1; + } + if (this.y + screenHeight < EDGE_OFFSET) { + deltaY += EDGE_OFFSET - screenHeight - this.y; + this.y = EDGE_OFFSET - screenHeight; + } } - } - return deltaY; - } - if (wasPositiveY) { - if (this.y < EDGE_OFFSET) { - deltaY += EDGE_OFFSET - this.y; - this.y = EDGE_OFFSET; - } - if (this.y > screenHeight - EDGE_OFFSET) { - deltaY += screenHeight - EDGE_OFFSET - this.y; - this.y = screenHeight - EDGE_OFFSET; - } - } else { - if (this.y + 1 > -EDGE_OFFSET) { - deltaY += -EDGE_OFFSET - 1 - this.y; - this.y = -EDGE_OFFSET - 1; - } - if (this.y + screenHeight < EDGE_OFFSET) { - deltaY += EDGE_OFFSET - screenHeight - this.y; - this.y = EDGE_OFFSET - screenHeight; - } + if (this.y >= 0 && this.y - objHeight / 2 > screenHeight / 2) { + this.y -= screenHeight - objHeight; + } + if (this.y < 0 && this.y - objHeight / 2 <= -screenHeight / 2) { + this.y += screenHeight - objHeight; + } + return deltaY; } - if (this.y >= 0 && this.y - objHeight / 2 > screenHeight / 2) { - this.y -= screenHeight - objHeight; - } - if (this.y < 0 && this.y - objHeight / 2 <= -screenHeight / 2) { - this.y += screenHeight - objHeight; + public boolean rightAligned( + ScaledResolution scaledResolution, + int objWidth + ) { + return ( + this.getAbsX(scaledResolution, objWidth) > + (scaledResolution.getScaledWidth() / 2) + ); } - return deltaY; - } - - public boolean rightAligned(ScaledResolution scaledResolution, int objWidth) { - return ( - this.getAbsX(scaledResolution, objWidth) > - (scaledResolution.getScaledWidth() / 2) - ); - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/Category.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/Category.java index a7355b0..05ae6ad 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/Category.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/Category.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Category { - String name(); + String name(); - String desc(); + String desc(); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigAccordionId.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigAccordionId.java index b494137..44b82be 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigAccordionId.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigAccordionId.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigAccordionId { - int id(); + int id(); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorAccordion.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorAccordion.java index 7ee271c..9712148 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorAccordion.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorAccordion.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigEditorAccordion { - int id(); + int id(); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorButton.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorButton.java index fb8cbc7..5e4bab8 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorButton.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorButton.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigEditorButton { - String runnableId(); + String runnableId(); - String buttonText() default ""; + String buttonText() default ""; } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDraggableList.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDraggableList.java index 5a82b9e..6bbeb27 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDraggableList.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDraggableList.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigEditorDraggableList { - String[] exampleText(); + String[] exampleText(); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDropdown.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDropdown.java index 66cc6a2..cc8bbf4 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDropdown.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorDropdown.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigEditorDropdown { - String[] values(); + String[] values(); - int initialIndex() default 0; + int initialIndex() default 0; } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorSlider.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorSlider.java index 9bcbefa..dcdf0b1 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorSlider.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigEditorSlider.java @@ -8,9 +8,9 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigEditorSlider { - float minValue(); + float minValue(); - float maxValue(); + float maxValue(); - float minStep(); + float minStep(); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigOption.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigOption.java index 47471fd..4574758 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigOption.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/annotations/ConfigOption.java @@ -8,9 +8,9 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface ConfigOption { - String name(); + String name(); - String desc(); + String desc(); - int subcategoryId() default -1; + int subcategoryId() default -1; } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditor.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditor.java index fedecd1..5dfcecc 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditor.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditor.java @@ -9,92 +9,92 @@ import net.minecraft.client.renderer.GlStateManager; public abstract class GuiOptionEditor { - protected final ConfigProcessor.ProcessedOption option; - private static final int HEIGHT = 45; - - public GuiOptionEditor(ConfigProcessor.ProcessedOption option) { - this.option = option; - } - - public void render(int x, int y, int width) { - int height = getHeight(); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - RenderUtils.drawFloatingRectDark(x, y, width, height, true); - TextRenderUtils.drawStringCenteredScaledMaxWidth( - option.name, - fr, - x + width / 6f, - y + 13, - true, - width / 3 - 10, - 0xc0c0c0 - ); + protected final ConfigProcessor.ProcessedOption option; + private static final int HEIGHT = 45; - int maxLines = 5; - float scale = 1; - int lineCount = fr - .listFormattedStringToWidth(option.desc, width * 2 / 3 - 10) - .size(); + public GuiOptionEditor(ConfigProcessor.ProcessedOption option) { + this.option = option; + } - if (lineCount <= 0) return; + public void render(int x, int y, int width) { + int height = getHeight(); + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + RenderUtils.drawFloatingRectDark(x, y, width, height, true); + TextRenderUtils.drawStringCenteredScaledMaxWidth( + option.name, + fr, + x + width / 6f, + y + 13, + true, + width / 3 - 10, + 0xc0c0c0 + ); + + int maxLines = 5; + float scale = 1; + int lineCount = fr + .listFormattedStringToWidth(option.desc, width * 2 / 3 - 10) + .size(); + + if (lineCount <= 0) return; + + float paraHeight = 9 * lineCount - 1; + + while (paraHeight >= HEIGHT - 10) { + scale -= 1 / 8f; + lineCount = + fr + .listFormattedStringToWidth( + option.desc, + (int) (width * 2 / 3 / scale - 10) + ) + .size(); + paraHeight = (int) (9 * scale * lineCount - 1 * scale); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate( + x + 5 + width / 3f, + y + HEIGHT / 2f - paraHeight / 2, + 0 + ); + GlStateManager.scale(scale, scale, 1); + + fr.drawSplitString( + option.desc, + 0, + 0, + (int) (width * 2 / 3 / scale - 10), + 0xc0c0c0 + ); - float paraHeight = 9 * lineCount - 1; + GlStateManager.popMatrix(); + } - while (paraHeight >= HEIGHT - 10) { - scale -= 1 / 8f; - lineCount = - fr - .listFormattedStringToWidth( - option.desc, - (int) (width * 2 / 3 / scale - 10) - ) - .size(); - paraHeight = (int) (9 * scale * lineCount - 1 * scale); + public int getHeight() { + return HEIGHT; } - GlStateManager.pushMatrix(); - GlStateManager.translate( - x + 5 + width / 3f, - y + HEIGHT / 2f - paraHeight / 2, - 0 - ); - GlStateManager.scale(scale, scale, 1); - - fr.drawSplitString( - option.desc, - 0, - 0, - (int) (width * 2 / 3 / scale - 10), - 0xc0c0c0 + public abstract boolean mouseInput( + int x, + int y, + int width, + int mouseX, + int mouseY ); - GlStateManager.popMatrix(); - } - - public int getHeight() { - return HEIGHT; - } - - public abstract boolean mouseInput( - int x, - int y, - int width, - int mouseX, - int mouseY - ); - - public abstract boolean keyboardInput(); - - public boolean mouseInputOverlay( - int x, - int y, - int width, - int mouseX, - int mouseY - ) { - return false; - } - - public void renderOverlay(int x, int y, int width) {} + public abstract boolean keyboardInput(); + + public boolean mouseInputOverlay( + int x, + int y, + int width, + int mouseX, + int mouseY + ) { + return false; + } + + public void renderOverlay(int x, int y, int width) {} } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorAccordion.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorAccordion.java index 2387b3c..5270c01 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorAccordion.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorAccordion.java @@ -13,89 +13,93 @@ import org.lwjgl.opengl.GL11; public class GuiOptionEditorAccordion extends GuiOptionEditor { - private int accordionId; - private boolean accordionToggled; + private int accordionId; + private boolean accordionToggled; - public GuiOptionEditorAccordion( - ConfigProcessor.ProcessedOption option, - int accordionId - ) { - super(option); - this.accordionToggled = (boolean) option.get(); - this.accordionId = accordionId; - } + public GuiOptionEditorAccordion( + ConfigProcessor.ProcessedOption option, + int accordionId + ) { + super(option); + this.accordionToggled = (boolean) option.get(); + this.accordionId = accordionId; + } - @Override - public int getHeight() { - return 20; - } + @Override + public int getHeight() { + return 20; + } - public int getAccordionId() { - return accordionId; - } + public int getAccordionId() { + return accordionId; + } - public boolean getToggled() { - return accordionToggled; - } + public boolean getToggled() { + return accordionToggled; + } - @Override - public void render(int x, int y, int width) { - int height = getHeight(); - RenderUtils.drawFloatingRectDark(x, y, width, height, true); + @Override + public void render(int x, int y, int width) { + int height = getHeight(); + RenderUtils.drawFloatingRectDark(x, y, width, height, true); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - GlStateManager.enableBlend(); - GlStateManager.disableTexture2D(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.color(1, 1, 1, 1); - worldrenderer.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION); - if (accordionToggled) { - worldrenderer.pos((double) x + 6, (double) y + 6, 0.0D).endVertex(); - worldrenderer - .pos((double) x + 9.75f, (double) y + 13.5f, 0.0D) - .endVertex(); - worldrenderer.pos((double) x + 13.5f, (double) y + 6, 0.0D).endVertex(); - } else { - worldrenderer.pos((double) x + 6, (double) y + 13.5f, 0.0D).endVertex(); - worldrenderer - .pos((double) x + 13.5f, (double) y + 9.75f, 0.0D) - .endVertex(); - worldrenderer.pos((double) x + 6, (double) y + 6, 0.0D).endVertex(); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + GlStateManager.enableBlend(); + GlStateManager.disableTexture2D(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.color(1, 1, 1, 1); + worldrenderer.begin(GL11.GL_TRIANGLES, DefaultVertexFormats.POSITION); + if (accordionToggled) { + worldrenderer.pos((double) x + 6, (double) y + 6, 0.0D).endVertex(); + worldrenderer + .pos((double) x + 9.75f, (double) y + 13.5f, 0.0D) + .endVertex(); + worldrenderer + .pos((double) x + 13.5f, (double) y + 6, 0.0D) + .endVertex(); + } else { + worldrenderer + .pos((double) x + 6, (double) y + 13.5f, 0.0D) + .endVertex(); + worldrenderer + .pos((double) x + 13.5f, (double) y + 9.75f, 0.0D) + .endVertex(); + worldrenderer.pos((double) x + 6, (double) y + 6, 0.0D).endVertex(); + } + tessellator.draw(); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + + TextRenderUtils.drawStringScaledMaxWidth( + option.name, + Minecraft.getMinecraft().fontRendererObj, + x + 18, + y + 6, + false, + width - 10, + 0xc0c0c0 + ); } - tessellator.draw(); - GlStateManager.enableTexture2D(); - GlStateManager.disableBlend(); - TextRenderUtils.drawStringScaledMaxWidth( - option.name, - Minecraft.getMinecraft().fontRendererObj, - x + 18, - y + 6, - false, - width - 10, - 0xc0c0c0 - ); - } + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + if ( + Mouse.getEventButtonState() && + mouseX > x && + mouseX < x + width && + mouseY > y && + mouseY < y + getHeight() + ) { + accordionToggled = !accordionToggled; + return true; + } - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if ( - Mouse.getEventButtonState() && - mouseX > x && - mouseX < x + width && - mouseY > y && - mouseY < y + getHeight() - ) { - accordionToggled = !accordionToggled; - return true; + return false; } - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } + @Override + public boolean keyboardInput() { + return false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorBoolean.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorBoolean.java index 1e8b647..508a7cc 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorBoolean.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorBoolean.java @@ -5,33 +5,40 @@ import com.thatgravyboat.skyblockhud.core.config.struct.ConfigProcessor; public class GuiOptionEditorBoolean extends GuiOptionEditor { - private final GuiElementBoolean bool; - - public GuiOptionEditorBoolean(ConfigProcessor.ProcessedOption option) { - super(option); - bool = new GuiElementBoolean(0, 0, (boolean) option.get(), 10, option::set); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - bool.x = x + width / 6 - 24; - bool.y = y + height - 7 - 14; - bool.render(); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - bool.x = x + width / 6 - 24; - bool.y = y + height - 7 - 14; - return bool.mouseInput(mouseX, mouseY); - } - - @Override - public boolean keyboardInput() { - return false; - } + private final GuiElementBoolean bool; + + public GuiOptionEditorBoolean(ConfigProcessor.ProcessedOption option) { + super(option); + bool = + new GuiElementBoolean( + 0, + 0, + (boolean) option.get(), + 10, + option::set + ); + } + + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); + int height = getHeight(); + + bool.x = x + width / 6 - 24; + bool.y = y + height - 7 - 14; + bool.render(); + } + + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + int height = getHeight(); + bool.x = x + width / 6 - 24; + bool.y = y + height - 7 - 14; + return bool.mouseInput(mouseX, mouseY); + } + + @Override + public boolean keyboardInput() { + return false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorButton.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorButton.java index 514f676..01fb7bd 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorButton.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorButton.java @@ -13,73 +13,74 @@ import org.lwjgl.input.Mouse; public class GuiOptionEditorButton extends GuiOptionEditor { - private final String runnableId; - private String buttonText; - private Config config; + private final String runnableId; + private String buttonText; + private Config config; - public GuiOptionEditorButton( - ConfigProcessor.ProcessedOption option, - String runnableId, - String buttonText, - Config config - ) { - super(option); - this.runnableId = runnableId; - this.config = config; + public GuiOptionEditorButton( + ConfigProcessor.ProcessedOption option, + String runnableId, + String buttonText, + Config config + ) { + super(option); + this.runnableId = runnableId; + this.config = config; - this.buttonText = buttonText; - if (this.buttonText != null && this.buttonText.isEmpty()) this.buttonText = - null; - } + this.buttonText = buttonText; + if ( + this.buttonText != null && this.buttonText.isEmpty() + ) this.buttonText = null; + } - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); - int height = getHeight(); + int height = getHeight(); - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); - RenderUtils.drawTexturedRect( - x + width / 6 - 24, - y + height - 7 - 14, - 48, - 16 - ); + GlStateManager.color(1, 1, 1, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); + RenderUtils.drawTexturedRect( + x + width / 6 - 24, + y + height - 7 - 14, + 48, + 16 + ); - if (buttonText != null) { - TextRenderUtils.drawStringCenteredScaledMaxWidth( - buttonText, - Minecraft.getMinecraft().fontRendererObj, - x + width / 6, - y + height - 7 - 6, - false, - 44, - 0xFF303030 - ); + if (buttonText != null) { + TextRenderUtils.drawStringCenteredScaledMaxWidth( + buttonText, + Minecraft.getMinecraft().fontRendererObj, + x + width / 6, + y + height - 7 - 6, + false, + 44, + 0xFF303030 + ); + } } - } - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if (Mouse.getEventButtonState()) { - int height = getHeight(); - if ( - mouseX > x + width / 6 - 24 && - mouseX < x + width / 6 + 24 && - mouseY > y + height - 7 - 14 && - mouseY < y + height - 7 + 2 - ) { - config.executeRunnable(runnableId); - return true; - } - } + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + if (Mouse.getEventButtonState()) { + int height = getHeight(); + if ( + mouseX > x + width / 6 - 24 && + mouseX < x + width / 6 + 24 && + mouseY > y + height - 7 - 14 && + mouseY < y + height - 7 + 2 + ) { + config.executeRunnable(runnableId); + return true; + } + } - return false; - } + return false; + } - @Override - public boolean keyboardInput() { - return false; - } + @Override + public boolean keyboardInput() { + return false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorColour.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorColour.java index 5052daa..ed44e5d 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorColour.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorColour.java @@ -12,81 +12,83 @@ import org.lwjgl.input.Mouse; public class GuiOptionEditorColour extends GuiOptionEditor { - private String chromaColour; - private GuiElementColour colourElement = null; + private String chromaColour; + private GuiElementColour colourElement = null; - public GuiOptionEditorColour(ConfigProcessor.ProcessedOption option) { - super(option); - this.chromaColour = (String) option.get(); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); + public GuiOptionEditorColour(ConfigProcessor.ProcessedOption option) { + super(option); + this.chromaColour = (String) option.get(); + } - int argb = ChromaColour.specialToChromaRGB(chromaColour); - int r = (argb >> 16) & 0xFF; - int g = (argb >> 8) & 0xFF; - int b = argb & 0xFF; - GlStateManager.color(r / 255f, g / 255f, b / 255f, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_white); - RenderUtils.drawTexturedRect( - x + width / 6f - 24, - y + height - 7 - 14, - 48, - 16 - ); - } + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); + int height = getHeight(); - @Override - public void renderOverlay(int x, int y, int width) { - if (colourElement != null) { - colourElement.render(); + int argb = ChromaColour.specialToChromaRGB(chromaColour); + int r = (argb >> 16) & 0xFF; + int g = (argb >> 8) & 0xFF; + int b = argb & 0xFF; + GlStateManager.color(r / 255f, g / 255f, b / 255f, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(button_white); + RenderUtils.drawTexturedRect( + x + width / 6f - 24, + y + height - 7 - 14, + 48, + 16 + ); } - } - @Override - public boolean mouseInputOverlay( - int x, - int y, - int width, - int mouseX, - int mouseY - ) { - return colourElement != null && colourElement.mouseInput(mouseX, mouseY); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); + @Override + public void renderOverlay(int x, int y, int width) { + if (colourElement != null) { + colourElement.render(); + } + } - if ( - Mouse.getEventButtonState() && - Mouse.getEventButton() == 0 && - mouseX > x + width / 6 - 24 && - mouseX < x + width / 6 + 24 && - mouseY > y + height - 7 - 14 && - mouseY < y + height - 7 + 2 + @Override + public boolean mouseInputOverlay( + int x, + int y, + int width, + int mouseX, + int mouseY ) { - colourElement = - new GuiElementColour( - mouseX, - mouseY, - (String) option.get(), - val -> { - option.set(val); - chromaColour = val; - }, - () -> colourElement = null + return ( + colourElement != null && colourElement.mouseInput(mouseX, mouseY) ); } - return false; - } + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + int height = getHeight(); - @Override - public boolean keyboardInput() { - return colourElement != null && colourElement.keyboardInput(); - } + if ( + Mouse.getEventButtonState() && + Mouse.getEventButton() == 0 && + mouseX > x + width / 6 - 24 && + mouseX < x + width / 6 + 24 && + mouseY > y + height - 7 - 14 && + mouseY < y + height - 7 + 2 + ) { + colourElement = + new GuiElementColour( + mouseX, + mouseY, + (String) option.get(), + val -> { + option.set(val); + chromaColour = val; + }, + () -> colourElement = null + ); + } + + return false; + } + + @Override + public boolean keyboardInput() { + return colourElement != null && colourElement.keyboardInput(); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDraggableList.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDraggableList.java index c3b962f..619e144 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDraggableList.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDraggableList.java @@ -21,378 +21,386 @@ import org.lwjgl.opengl.GL11; public class GuiOptionEditorDraggableList extends GuiOptionEditor { - private static final ResourceLocation DELETE = new ResourceLocation( - "notenoughupdates:core/delete.png" - ); - - private String[] exampleText; - private List<Integer> activeText; - private int currentDragging = -1; - private int dragStartIndex = -1; - - private long trashHoverTime = -1; - - private int dragOffsetX = -1; - private int dragOffsetY = -1; - - private boolean dropdownOpen = false; - - public GuiOptionEditorDraggableList( - ConfigProcessor.ProcessedOption option, - String[] exampleText - ) { - super(option); - this.exampleText = exampleText; - this.activeText = (List<Integer>) option.get(); - } - - @Override - public int getHeight() { - int height = super.getHeight() + 13; - - for (int strIndex : activeText) { - String str = exampleText[strIndex]; - height += 10 * str.split("\n").length; - } + private static final ResourceLocation DELETE = new ResourceLocation( + "notenoughupdates:core/delete.png" + ); - return height; - } + private String[] exampleText; + private List<Integer> activeText; + private int currentDragging = -1; + private int dragStartIndex = -1; - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); + private long trashHoverTime = -1; - int height = getHeight(); + private int dragOffsetX = -1; + private int dragOffsetY = -1; - GlStateManager.color(1, 1, 1, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); - RenderUtils.drawTexturedRect(x + width / 6f - 24, y + 45 - 7 - 14, 48, 16); + private boolean dropdownOpen = false; - TextRenderUtils.drawStringCenteredScaledMaxWidth( - "Add", - Minecraft.getMinecraft().fontRendererObj, - x + width / 6f, - y + 45 - 7 - 6, - false, - 44, - 0xFF303030 - ); + public GuiOptionEditorDraggableList( + ConfigProcessor.ProcessedOption option, + String[] exampleText + ) { + super(option); + this.exampleText = exampleText; + this.activeText = (List<Integer>) option.get(); + } - long currentTime = System.currentTimeMillis(); - float greenBlue = LerpUtils.clampZeroOne( - ((trashHoverTime < 0 ? 250 : 0) + trashHoverTime - currentTime) / 250f - ); - GlStateManager.color(1, greenBlue, greenBlue, 1); - Minecraft.getMinecraft().getTextureManager().bindTexture(DELETE); - Utils.drawTexturedRect( - x + width / 6f + 27, - y + 45 - 7 - 13, - 11, - 14, - GL11.GL_NEAREST - ); + @Override + public int getHeight() { + int height = super.getHeight() + 13; - Gui.drawRect(x + 5, y + 45, x + width - 5, y + height - 5, 0xffdddddd); - Gui.drawRect(x + 6, y + 46, x + width - 6, y + height - 6, 0xff000000); + for (int strIndex : activeText) { + String str = exampleText[strIndex]; + height += 10 * str.split("\n").length; + } - int i = 0; - int yOff = 0; - for (int strIndex : activeText) { - String str = exampleText[strIndex]; + return height; + } - String[] multilines = str.split("\n"); + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); - int ySize = multilines.length * 10; + int height = getHeight(); - if (i++ != dragStartIndex) { - for ( - int multilineIndex = 0; - multilineIndex < multilines.length; - multilineIndex++ - ) { - String line = multilines[multilineIndex]; - Utils.drawStringScaledMaxWidth( - line + EnumChatFormatting.RESET, - Minecraft.getMinecraft().fontRendererObj, - x + 20, - y + 50 + yOff + multilineIndex * 10, - true, - width - 20, - 0xffffffff - ); - } - Minecraft - .getMinecraft() - .fontRendererObj.drawString( - "\u2261", - x + 10, - y + 50 + yOff + ySize / 2f - 4, - 0xffffff, - true - ); - } - - yOff += ySize; - } - } - - @Override - public void renderOverlay(int x, int y, int width) { - super.renderOverlay(x, y, width); - - if (dropdownOpen) { - List<Integer> remaining = new ArrayList<>(); - for (int i = 0; i < exampleText.length; i++) { - remaining.add(i); - } - remaining.removeAll(activeText); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - int dropdownWidth = Math.min(width / 2 - 10, 150); - int left = dragOffsetX; - int top = dragOffsetY; - - int dropdownHeight = -1 + 12 * remaining.size(); - - int main = 0xff202026; - int outline = 0xff404046; - Gui.drawRect(left, top, left + 1, top + dropdownHeight, outline); //Left - Gui.drawRect(left + 1, top, left + dropdownWidth, top + 1, outline); //Top - Gui.drawRect( - left + dropdownWidth - 1, - top + 1, - left + dropdownWidth, - top + dropdownHeight, - outline - ); //Right - Gui.drawRect( - left + 1, - top + dropdownHeight - 1, - left + dropdownWidth - 1, - top + dropdownHeight, - outline - ); //Bottom - Gui.drawRect( - left + 1, - top + 1, - left + dropdownWidth - 1, - top + dropdownHeight - 1, - main - ); //Middle - - int dropdownY = -1; - for (int strIndex : remaining) { - String str = exampleText[strIndex]; - if (str.isEmpty()) { - str = "<NONE>"; - } - TextRenderUtils.drawStringScaledMaxWidth( - str.replaceAll("(\n.*)+", " ..."), - fr, - left + 3, - top + 3 + dropdownY, - false, - dropdownWidth - 6, - 0xffa0a0a0 + GlStateManager.color(1, 1, 1, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(button_tex); + RenderUtils.drawTexturedRect( + x + width / 6f - 24, + y + 45 - 7 - 14, + 48, + 16 ); - dropdownY += 12; - } - } else if (currentDragging >= 0) { - int opacity = 0x80; - long currentTime = System.currentTimeMillis(); - if (trashHoverTime < 0) { - float greenBlue = LerpUtils.clampZeroOne( - (currentTime + trashHoverTime) / 250f + + TextRenderUtils.drawStringCenteredScaledMaxWidth( + "Add", + Minecraft.getMinecraft().fontRendererObj, + x + width / 6f, + y + 45 - 7 - 6, + false, + 44, + 0xFF303030 ); - opacity = (int) (opacity * greenBlue); - } else { + + long currentTime = System.currentTimeMillis(); float greenBlue = LerpUtils.clampZeroOne( - (250 + trashHoverTime - currentTime) / 250f - ); - opacity = (int) (opacity * greenBlue); - } - - if (opacity < 20) return; - - ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - int mouseX = - Mouse.getX() * - scaledResolution.getScaledWidth() / - Minecraft.getMinecraft().displayWidth; - int mouseY = - scaledResolution.getScaledHeight() - - Mouse.getY() * - scaledResolution.getScaledHeight() / - Minecraft.getMinecraft().displayHeight - - 1; - - String str = exampleText[currentDragging]; - - String[] multilines = str.split("\n"); - - GlStateManager.enableBlend(); - for ( - int multilineIndex = 0; - multilineIndex < multilines.length; - multilineIndex++ - ) { - String line = multilines[multilineIndex]; - Utils.drawStringScaledMaxWidth( - line + EnumChatFormatting.RESET, - Minecraft.getMinecraft().fontRendererObj, - dragOffsetX + mouseX + 10, - dragOffsetY + mouseY + multilineIndex * 10, - true, - width - 20, - 0xffffff | (opacity << 24) + ((trashHoverTime < 0 ? 250 : 0) + trashHoverTime - currentTime) / + 250f ); - } - - int ySize = multilines.length * 10; - - Minecraft - .getMinecraft() - .fontRendererObj.drawString( - "\u2261", - dragOffsetX + mouseX, - dragOffsetY + mouseY + ySize / 2f - 4, - 0xffffff, - true + GlStateManager.color(1, greenBlue, greenBlue, 1); + Minecraft.getMinecraft().getTextureManager().bindTexture(DELETE); + Utils.drawTexturedRect( + x + width / 6f + 27, + y + 45 - 7 - 13, + 11, + 14, + GL11.GL_NEAREST ); - } - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - if ( - !Mouse.getEventButtonState() && - !dropdownOpen && - dragStartIndex >= 0 && - Mouse.getEventButton() == 0 && - mouseX >= x + width / 6 + 27 - 3 && - mouseX <= x + width / 6 + 27 + 11 + 3 && - mouseY >= y + 45 - 7 - 13 - 3 && - mouseY <= y + 45 - 7 - 13 + 14 + 3 - ) { - activeText.remove(dragStartIndex); - currentDragging = -1; - dragStartIndex = -1; - return false; - } - if (!Mouse.isButtonDown(0) || dropdownOpen) { - currentDragging = -1; - dragStartIndex = -1; - if (trashHoverTime > 0) trashHoverTime = -System.currentTimeMillis(); - } else if ( - currentDragging >= 0 && - mouseX >= x + width / 6 + 27 - 3 && - mouseX <= x + width / 6 + 27 + 11 + 3 && - mouseY >= y + 45 - 7 - 13 - 3 && - mouseY <= y + 45 - 7 - 13 + 14 + 3 - ) { - if (trashHoverTime < 0) trashHoverTime = System.currentTimeMillis(); - } else { - if (trashHoverTime > 0) trashHoverTime = -System.currentTimeMillis(); - } + Gui.drawRect(x + 5, y + 45, x + width - 5, y + height - 5, 0xffdddddd); + Gui.drawRect(x + 6, y + 46, x + width - 6, y + height - 6, 0xff000000); - if (Mouse.getEventButtonState()) { - int height = getHeight(); + int i = 0; + int yOff = 0; + for (int strIndex : activeText) { + String str = exampleText[strIndex]; + + String[] multilines = str.split("\n"); + + int ySize = multilines.length * 10; + + if (i++ != dragStartIndex) { + for ( + int multilineIndex = 0; + multilineIndex < multilines.length; + multilineIndex++ + ) { + String line = multilines[multilineIndex]; + Utils.drawStringScaledMaxWidth( + line + EnumChatFormatting.RESET, + Minecraft.getMinecraft().fontRendererObj, + x + 20, + y + 50 + yOff + multilineIndex * 10, + true, + width - 20, + 0xffffffff + ); + } + Minecraft + .getMinecraft() + .fontRendererObj.drawString( + "\u2261", + x + 10, + y + 50 + yOff + ySize / 2f - 4, + 0xffffff, + true + ); + } - if (dropdownOpen) { - List<Integer> remaining = new ArrayList<>(); - for (int i = 0; i < exampleText.length; i++) { - remaining.add(i); + yOff += ySize; } - remaining.removeAll(activeText); + } - int dropdownWidth = Math.min(width / 2 - 10, 150); - int left = dragOffsetX; - int top = dragOffsetY; + @Override + public void renderOverlay(int x, int y, int width) { + super.renderOverlay(x, y, width); - int dropdownHeight = -1 + 12 * remaining.size(); + if (dropdownOpen) { + List<Integer> remaining = new ArrayList<>(); + for (int i = 0; i < exampleText.length; i++) { + remaining.add(i); + } + remaining.removeAll(activeText); + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + int dropdownWidth = Math.min(width / 2 - 10, 150); + int left = dragOffsetX; + int top = dragOffsetY; + + int dropdownHeight = -1 + 12 * remaining.size(); + + int main = 0xff202026; + int outline = 0xff404046; + Gui.drawRect(left, top, left + 1, top + dropdownHeight, outline); //Left + Gui.drawRect(left + 1, top, left + dropdownWidth, top + 1, outline); //Top + Gui.drawRect( + left + dropdownWidth - 1, + top + 1, + left + dropdownWidth, + top + dropdownHeight, + outline + ); //Right + Gui.drawRect( + left + 1, + top + dropdownHeight - 1, + left + dropdownWidth - 1, + top + dropdownHeight, + outline + ); //Bottom + Gui.drawRect( + left + 1, + top + 1, + left + dropdownWidth - 1, + top + dropdownHeight - 1, + main + ); //Middle + + int dropdownY = -1; + for (int strIndex : remaining) { + String str = exampleText[strIndex]; + if (str.isEmpty()) { + str = "<NONE>"; + } + TextRenderUtils.drawStringScaledMaxWidth( + str.replaceAll("(\n.*)+", " ..."), + fr, + left + 3, + top + 3 + dropdownY, + false, + dropdownWidth - 6, + 0xffa0a0a0 + ); + dropdownY += 12; + } + } else if (currentDragging >= 0) { + int opacity = 0x80; + long currentTime = System.currentTimeMillis(); + if (trashHoverTime < 0) { + float greenBlue = LerpUtils.clampZeroOne( + (currentTime + trashHoverTime) / 250f + ); + opacity = (int) (opacity * greenBlue); + } else { + float greenBlue = LerpUtils.clampZeroOne( + (250 + trashHoverTime - currentTime) / 250f + ); + opacity = (int) (opacity * greenBlue); + } - if ( - mouseX > left && - mouseX < left + dropdownWidth && - mouseY > top && - mouseY < top + dropdownHeight - ) { - int dropdownY = -1; - for (int strIndex : remaining) { - if (mouseY < top + dropdownY + 12) { - activeText.add(0, strIndex); - if (remaining.size() == 1) dropdownOpen = false; - return true; + if (opacity < 20) return; + + ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + int mouseX = + Mouse.getX() * + scaledResolution.getScaledWidth() / + Minecraft.getMinecraft().displayWidth; + int mouseY = + scaledResolution.getScaledHeight() - + Mouse.getY() * + scaledResolution.getScaledHeight() / + Minecraft.getMinecraft().displayHeight - + 1; + + String str = exampleText[currentDragging]; + + String[] multilines = str.split("\n"); + + GlStateManager.enableBlend(); + for ( + int multilineIndex = 0; + multilineIndex < multilines.length; + multilineIndex++ + ) { + String line = multilines[multilineIndex]; + Utils.drawStringScaledMaxWidth( + line + EnumChatFormatting.RESET, + Minecraft.getMinecraft().fontRendererObj, + dragOffsetX + mouseX + 10, + dragOffsetY + mouseY + multilineIndex * 10, + true, + width - 20, + 0xffffff | (opacity << 24) + ); } - dropdownY += 12; - } + int ySize = multilines.length * 10; + + Minecraft + .getMinecraft() + .fontRendererObj.drawString( + "\u2261", + dragOffsetX + mouseX, + dragOffsetY + mouseY + ySize / 2f - 4, + 0xffffff, + true + ); } + } - dropdownOpen = false; - return true; - } - - if ( - activeText.size() < exampleText.length && - mouseX > x + width / 6 - 24 && - mouseX < x + width / 6 + 24 && - mouseY > y + 45 - 7 - 14 && - mouseY < y + 45 - 7 + 2 - ) { - dropdownOpen = !dropdownOpen; - dragOffsetX = mouseX; - dragOffsetY = mouseY; - return true; - } - - if ( - Mouse.getEventButton() == 0 && - mouseX > x + 5 && - mouseX < x + width - 5 && - mouseY > y + 45 && - mouseY < y + height - 6 - ) { - int yOff = 0; - int i = 0; - for (int strIndex : activeText) { - int ySize = 10 * exampleText[strIndex].split("\n").length; - if (mouseY < y + 50 + yOff + ySize) { - dragOffsetX = x + 10 - mouseX; - dragOffsetY = y + 50 + yOff - mouseY; - - currentDragging = strIndex; - dragStartIndex = i; - break; - } - yOff += ySize; - i++; + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + if ( + !Mouse.getEventButtonState() && + !dropdownOpen && + dragStartIndex >= 0 && + Mouse.getEventButton() == 0 && + mouseX >= x + width / 6 + 27 - 3 && + mouseX <= x + width / 6 + 27 + 11 + 3 && + mouseY >= y + 45 - 7 - 13 - 3 && + mouseY <= y + 45 - 7 - 13 + 14 + 3 + ) { + activeText.remove(dragStartIndex); + currentDragging = -1; + dragStartIndex = -1; + return false; } - } - } else if (Mouse.getEventButton() == -1 && currentDragging >= 0) { - int yOff = 0; - int i = 0; - for (int strIndex : activeText) { - if (dragOffsetY + mouseY + 4 < y + 50 + yOff + 10) { - activeText.remove(dragStartIndex); - activeText.add(i, currentDragging); - - dragStartIndex = i; - break; + + if (!Mouse.isButtonDown(0) || dropdownOpen) { + currentDragging = -1; + dragStartIndex = -1; + if (trashHoverTime > 0) trashHoverTime = + -System.currentTimeMillis(); + } else if ( + currentDragging >= 0 && + mouseX >= x + width / 6 + 27 - 3 && + mouseX <= x + width / 6 + 27 + 11 + 3 && + mouseY >= y + 45 - 7 - 13 - 3 && + mouseY <= y + 45 - 7 - 13 + 14 + 3 + ) { + if (trashHoverTime < 0) trashHoverTime = System.currentTimeMillis(); + } else { + if (trashHoverTime > 0) trashHoverTime = + -System.currentTimeMillis(); } - yOff += 10 * exampleText[strIndex].split("\n").length; - i++; - } - } - return false; - } + if (Mouse.getEventButtonState()) { + int height = getHeight(); + + if (dropdownOpen) { + List<Integer> remaining = new ArrayList<>(); + for (int i = 0; i < exampleText.length; i++) { + remaining.add(i); + } + remaining.removeAll(activeText); + + int dropdownWidth = Math.min(width / 2 - 10, 150); + int left = dragOffsetX; + int top = dragOffsetY; + + int dropdownHeight = -1 + 12 * remaining.size(); + + if ( + mouseX > left && + mouseX < left + dropdownWidth && + mouseY > top && + mouseY < top + dropdownHeight + ) { + int dropdownY = -1; + for (int strIndex : remaining) { + if (mouseY < top + dropdownY + 12) { + activeText.add(0, strIndex); + if (remaining.size() == 1) dropdownOpen = false; + return true; + } + + dropdownY += 12; + } + } + + dropdownOpen = false; + return true; + } - @Override - public boolean keyboardInput() { - return false; - } + if ( + activeText.size() < exampleText.length && + mouseX > x + width / 6 - 24 && + mouseX < x + width / 6 + 24 && + mouseY > y + 45 - 7 - 14 && + mouseY < y + 45 - 7 + 2 + ) { + dropdownOpen = !dropdownOpen; + dragOffsetX = mouseX; + dragOffsetY = mouseY; + return true; + } + + if ( + Mouse.getEventButton() == 0 && + mouseX > x + 5 && + mouseX < x + width - 5 && + mouseY > y + 45 && + mouseY < y + height - 6 + ) { + int yOff = 0; + int i = 0; + for (int strIndex : activeText) { + int ySize = 10 * exampleText[strIndex].split("\n").length; + if (mouseY < y + 50 + yOff + ySize) { + dragOffsetX = x + 10 - mouseX; + dragOffsetY = y + 50 + yOff - mouseY; + + currentDragging = strIndex; + dragStartIndex = i; + break; + } + yOff += ySize; + i++; + } + } + } else if (Mouse.getEventButton() == -1 && currentDragging >= 0) { + int yOff = 0; + int i = 0; + for (int strIndex : activeText) { + if (dragOffsetY + mouseY + 4 < y + 50 + yOff + 10) { + activeText.remove(dragStartIndex); + activeText.add(i, currentDragging); + + dragStartIndex = i; + break; + } + yOff += 10 * exampleText[strIndex].split("\n").length; + i++; + } + } + + return false; + } + + @Override + public boolean keyboardInput() { + return false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDropdown.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDropdown.java index 41c0acd..8aa5c08 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDropdown.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorDropdown.java @@ -12,227 +12,233 @@ import org.lwjgl.opengl.GL11; public class GuiOptionEditorDropdown extends GuiOptionEditor { - private final String[] values; - private final boolean useOrdinal; - private int selected; - private boolean open = false; - - public GuiOptionEditorDropdown( - ConfigProcessor.ProcessedOption option, - String[] values, - int selected, - boolean useOrdinal - ) { - super(option); - if (selected >= values.length) selected = values.length; - this.values = values; - this.selected = selected; - this.useOrdinal = useOrdinal; - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - - if (!open) { - int height = getHeight(); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - int dropdownWidth = Math.min(width / 3 - 10, 80); - int left = x + width / 6 - dropdownWidth / 2; - int top = y + height - 7 - 14; - - String selectedString = " - Select - "; - if (selected >= 0 && selected < values.length) { - selectedString = values[selected]; - } - - RenderUtils.drawFloatingRectDark(left, top, dropdownWidth, 14, false); - TextRenderUtils.drawStringScaled( - "\u25BC", - fr, - left + dropdownWidth - 10, - y + height - 7 - 15, - false, - 0xffa0a0a0, - 2 - ); - - TextRenderUtils.drawStringScaledMaxWidth( - selectedString, - fr, - left + 3, - top + 3, - false, - dropdownWidth - 16, - 0xffa0a0a0 - ); + private final String[] values; + private final boolean useOrdinal; + private int selected; + private boolean open = false; + + public GuiOptionEditorDropdown( + ConfigProcessor.ProcessedOption option, + String[] values, + int selected, + boolean useOrdinal + ) { + super(option); + if (selected >= values.length) selected = values.length; + this.values = values; + this.selected = selected; + this.useOrdinal = useOrdinal; } - } - - @Override - public void renderOverlay(int x, int y, int width) { - if (open) { - String selectedString = " - Select - "; - if (selected >= 0 && selected < values.length) { - selectedString = values[selected]; - } - - int height = getHeight(); - - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - int dropdownWidth = Math.min(width / 3 - 10, 80); - int left = x + width / 6 - dropdownWidth / 2; - int top = y + height - 7 - 14; - - int dropdownHeight = 13 + 12 * values.length; - - int main = 0xff202026; - int blue = 0xff2355ad; - Gui.drawRect(left, top, left + 1, top + dropdownHeight, blue); //Left - Gui.drawRect(left + 1, top, left + dropdownWidth, top + 1, blue); //Top - Gui.drawRect( - left + dropdownWidth - 1, - top + 1, - left + dropdownWidth, - top + dropdownHeight, - blue - ); //Right - Gui.drawRect( - left + 1, - top + dropdownHeight - 1, - left + dropdownWidth - 1, - top + dropdownHeight, - blue - ); //Bottom - Gui.drawRect( - left + 1, - top + 1, - left + dropdownWidth - 1, - top + dropdownHeight - 1, - main - ); //Middle - - Gui.drawRect( - left + 1, - top + 14 - 1, - left + dropdownWidth - 1, - top + 14, - blue - ); //Bar - - int dropdownY = 13; - for (String option : values) { - if (option.isEmpty()) { - option = "<NONE>"; + + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); + + if (!open) { + int height = getHeight(); + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + int dropdownWidth = Math.min(width / 3 - 10, 80); + int left = x + width / 6 - dropdownWidth / 2; + int top = y + height - 7 - 14; + + String selectedString = " - Select - "; + if (selected >= 0 && selected < values.length) { + selectedString = values[selected]; + } + + RenderUtils.drawFloatingRectDark( + left, + top, + dropdownWidth, + 14, + false + ); + TextRenderUtils.drawStringScaled( + "\u25BC", + fr, + left + dropdownWidth - 10, + y + height - 7 - 15, + false, + 0xffa0a0a0, + 2 + ); + + TextRenderUtils.drawStringScaledMaxWidth( + selectedString, + fr, + left + 3, + top + 3, + false, + dropdownWidth - 16, + 0xffa0a0a0 + ); } - TextRenderUtils.drawStringScaledMaxWidth( - option, - fr, - left + 3, - top + 3 + dropdownY, - false, - dropdownWidth - 6, - 0xffa0a0a0 - ); - dropdownY += 12; - } - - TextRenderUtils.drawStringScaled( - "\u25B2", - fr, - left + dropdownWidth - 10, - y + height - 7 - 15, - false, - 0xffa0a0a0, - 2 - ); - - TextRenderUtils.drawStringScaledMaxWidth( - selectedString, - fr, - left + 3, - top + 3, - false, - dropdownWidth - 16, - 0xffa0a0a0 - ); } - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - int left = x + width / 6 - 40; - int top = y + height - 7 - 14; - - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if ( - mouseX >= left && - mouseX <= left + 80 && - mouseY >= top && - mouseY <= top + 14 - ) { - open = !open; - return true; - } + + @Override + public void renderOverlay(int x, int y, int width) { + if (open) { + String selectedString = " - Select - "; + if (selected >= 0 && selected < values.length) { + selectedString = values[selected]; + } + + int height = getHeight(); + + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + int dropdownWidth = Math.min(width / 3 - 10, 80); + int left = x + width / 6 - dropdownWidth / 2; + int top = y + height - 7 - 14; + + int dropdownHeight = 13 + 12 * values.length; + + int main = 0xff202026; + int blue = 0xff2355ad; + Gui.drawRect(left, top, left + 1, top + dropdownHeight, blue); //Left + Gui.drawRect(left + 1, top, left + dropdownWidth, top + 1, blue); //Top + Gui.drawRect( + left + dropdownWidth - 1, + top + 1, + left + dropdownWidth, + top + dropdownHeight, + blue + ); //Right + Gui.drawRect( + left + 1, + top + dropdownHeight - 1, + left + dropdownWidth - 1, + top + dropdownHeight, + blue + ); //Bottom + Gui.drawRect( + left + 1, + top + 1, + left + dropdownWidth - 1, + top + dropdownHeight - 1, + main + ); //Middle + + Gui.drawRect( + left + 1, + top + 14 - 1, + left + dropdownWidth - 1, + top + 14, + blue + ); //Bar + + int dropdownY = 13; + for (String option : values) { + if (option.isEmpty()) { + option = "<NONE>"; + } + TextRenderUtils.drawStringScaledMaxWidth( + option, + fr, + left + 3, + top + 3 + dropdownY, + false, + dropdownWidth - 6, + 0xffa0a0a0 + ); + dropdownY += 12; + } + + TextRenderUtils.drawStringScaled( + "\u25B2", + fr, + left + dropdownWidth - 10, + y + height - 7 - 15, + false, + 0xffa0a0a0, + 2 + ); + + TextRenderUtils.drawStringScaledMaxWidth( + selectedString, + fr, + left + 3, + top + 3, + false, + dropdownWidth - 16, + 0xffa0a0a0 + ); + } } - return false; - } - - @Override - public boolean mouseInputOverlay( - int x, - int y, - int width, - int mouseX, - int mouseY - ) { - int height = getHeight(); - - int left = x + width / 6 - 40; - int top = y + height - 7 - 14; - - if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { - if ( - !( - mouseX >= left && - mouseX <= left + 80 && - mouseY >= top && - mouseY <= top + 14 - ) && - open - ) { - open = false; - if (mouseX >= left && mouseX <= left + 80) { - int dropdownY = 13; - for (int ordinal = 0; ordinal < values.length; ordinal++) { + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + int height = getHeight(); + + int left = x + width / 6 - 40; + int top = y + height - 7 - 14; + + if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { if ( - mouseY >= top + 3 + dropdownY && - mouseY <= top + 3 + dropdownY + 12 + mouseX >= left && + mouseX <= left + 80 && + mouseY >= top && + mouseY <= top + 14 ) { - selected = ordinal; - if (useOrdinal) { - option.set(selected); - } else { - option.set(values[selected]); - } - return true; + open = !open; + return true; } - dropdownY += 12; - } } - return true; - } + + return false; } - return false; - } + @Override + public boolean mouseInputOverlay( + int x, + int y, + int width, + int mouseX, + int mouseY + ) { + int height = getHeight(); + + int left = x + width / 6 - 40; + int top = y + height - 7 - 14; + + if (Mouse.getEventButtonState() && Mouse.getEventButton() == 0) { + if ( + !( + mouseX >= left && + mouseX <= left + 80 && + mouseY >= top && + mouseY <= top + 14 + ) && + open + ) { + open = false; + if (mouseX >= left && mouseX <= left + 80) { + int dropdownY = 13; + for (int ordinal = 0; ordinal < values.length; ordinal++) { + if ( + mouseY >= top + 3 + dropdownY && + mouseY <= top + 3 + dropdownY + 12 + ) { + selected = ordinal; + if (useOrdinal) { + option.set(selected); + } else { + option.set(values[selected]); + } + return true; + } + dropdownY += 12; + } + } + return true; + } + } + + return false; + } - @Override - public boolean keyboardInput() { - return false; - } + @Override + public boolean keyboardInput() { + return false; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorSlider.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorSlider.java index b9ad389..dd981d8 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorSlider.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorSlider.java @@ -10,166 +10,170 @@ import org.lwjgl.input.Mouse; public class GuiOptionEditorSlider extends GuiOptionEditor { - private final GuiElementSlider slider; - private final GuiElementTextField textField; - - public GuiOptionEditorSlider( - ConfigProcessor.ProcessedOption option, - float minValue, - float maxValue, - float minStep - ) { - super(option); - if (minStep < 0) minStep = 0.01f; - - float floatVal = ((Number) option.get()).floatValue(); - { - String strVal; - if (floatVal % 1 == 0) { - strVal = Integer.toString((int) floatVal); - } else { - strVal = Float.toString(floatVal); - } - textField = - new GuiElementTextField( - strVal, - GuiElementTextField.NO_SPACE | - GuiElementTextField.NUM_ONLY | - GuiElementTextField.SCALE_TEXT - ); + private final GuiElementSlider slider; + private final GuiElementTextField textField; + + public GuiOptionEditorSlider( + ConfigProcessor.ProcessedOption option, + float minValue, + float maxValue, + float minStep + ) { + super(option); + if (minStep < 0) minStep = 0.01f; + + float floatVal = ((Number) option.get()).floatValue(); + { + String strVal; + if (floatVal % 1 == 0) { + strVal = Integer.toString((int) floatVal); + } else { + strVal = Float.toString(floatVal); + } + textField = + new GuiElementTextField( + strVal, + GuiElementTextField.NO_SPACE | + GuiElementTextField.NUM_ONLY | + GuiElementTextField.SCALE_TEXT + ); + } + + slider = + new GuiElementSlider( + 0, + 0, + 80, + minValue, + maxValue, + minStep, + floatVal, + val -> { + option.set(val); + + String strVal; + if (val % 1 == 0) { + strVal = Integer.toString(val.intValue()); + } else { + strVal = Float.toString(val); + strVal = + strVal.replaceAll("(\\.\\d\\d\\d)(?:\\d)+", "$1"); + strVal = strVal.replaceAll("0+$", ""); + } + textField.setText(strVal); + } + ); } - slider = - new GuiElementSlider( - 0, - 0, - 80, - minValue, - maxValue, - minStep, - floatVal, - val -> { - option.set(val); - - String strVal; - if (val % 1 == 0) { - strVal = Integer.toString(val.intValue()); - } else { - strVal = Float.toString(val); - strVal = strVal.replaceAll("(\\.\\d\\d\\d)(?:\\d)+", "$1"); - strVal = strVal.replaceAll("0+$", ""); - } - textField.setText(strVal); + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); + int height = getHeight(); + + int fullWidth = Math.min(width / 3 - 10, 80); + int sliderWidth = (fullWidth - 5) * 3 / 4; + int textFieldWidth = (fullWidth - 5) / 4; + + slider.x = x + width / 6 - fullWidth / 2; + slider.y = y + height - 7 - 14; + slider.width = sliderWidth; + slider.render(); + + if (textField.getFocus()) { + textField.setOptions( + GuiElementTextField.NO_SPACE | GuiElementTextField.NUM_ONLY + ); + textField.setSize( + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(textField.getText()) + + 10, + 16 + ); + } else { + textField.setSize(textFieldWidth, 16); + textField.setOptions( + GuiElementTextField.NO_SPACE | + GuiElementTextField.NUM_ONLY | + GuiElementTextField.SCALE_TEXT + ); } - ); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - int sliderWidth = (fullWidth - 5) * 3 / 4; - int textFieldWidth = (fullWidth - 5) / 4; - - slider.x = x + width / 6 - fullWidth / 2; - slider.y = y + height - 7 - 14; - slider.width = sliderWidth; - slider.render(); - - if (textField.getFocus()) { - textField.setOptions( - GuiElementTextField.NO_SPACE | GuiElementTextField.NUM_ONLY - ); - textField.setSize( - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(textField.getText()) + - 10, - 16 - ); - } else { - textField.setSize(textFieldWidth, 16); - textField.setOptions( - GuiElementTextField.NO_SPACE | - GuiElementTextField.NUM_ONLY | - GuiElementTextField.SCALE_TEXT - ); - } - textField.render( - x + width / 6 - fullWidth / 2 + sliderWidth + 5, - y + height - 7 - 14 - ); - } - - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - int sliderWidth = (fullWidth - 5) * 3 / 4; - int textFieldWidth = (fullWidth - 5) / 4; - - slider.x = x + width / 6 - fullWidth / 2; - slider.y = y + height - 7 - 14; - slider.width = sliderWidth; - if (slider.mouseInput(mouseX, mouseY)) { - textField.unfocus(); - return true; + textField.render( + x + width / 6 - fullWidth / 2 + sliderWidth + 5, + y + height - 7 - 14 + ); } - if (textField.getFocus()) { - textFieldWidth = - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(textField.getText()) + - 10; - } + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + int height = getHeight(); - int textFieldX = x + width / 6 - fullWidth / 2 + sliderWidth + 5; - int textFieldY = y + height - 7 - 14; - textField.setSize(textFieldWidth, 16); + int fullWidth = Math.min(width / 3 - 10, 80); + int sliderWidth = (fullWidth - 5) * 3 / 4; + int textFieldWidth = (fullWidth - 5) / 4; - if ( - Mouse.getEventButtonState() && - (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) - ) { - if ( - mouseX > textFieldX && - mouseX < textFieldX + textFieldWidth && - mouseY > textFieldY && - mouseY < textFieldY + 16 - ) { - textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - return true; - } - textField.unfocus(); - } - - return false; - } + slider.x = x + width / 6 - fullWidth / 2; + slider.y = y + height - 7 - 14; + slider.width = sliderWidth; + if (slider.mouseInput(mouseX, mouseY)) { + textField.unfocus(); + return true; + } - @Override - public boolean keyboardInput() { - if (Keyboard.getEventKeyState() && textField.getFocus()) { - textField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); + if (textField.getFocus()) { + textFieldWidth = + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(textField.getText()) + + 10; + } - try { - textField.setCustomBorderColour(0xffffffff); - float f = Float.parseFloat(textField.getText()); - if (option.set(f)) { - slider.setValue(f); - } else { - textField.setCustomBorderColour(0xff0000ff); + int textFieldX = x + width / 6 - fullWidth / 2 + sliderWidth + 5; + int textFieldY = y + height - 7 - 14; + textField.setSize(textFieldWidth, 16); + + if ( + Mouse.getEventButtonState() && + (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) + ) { + if ( + mouseX > textFieldX && + mouseX < textFieldX + textFieldWidth && + mouseY > textFieldY && + mouseY < textFieldY + 16 + ) { + textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); + return true; + } + textField.unfocus(); } - } catch (Exception e) { - textField.setCustomBorderColour(0xffff0000); - } - return true; + return false; + } + + @Override + public boolean keyboardInput() { + if (Keyboard.getEventKeyState() && textField.getFocus()) { + textField.keyTyped( + Keyboard.getEventCharacter(), + Keyboard.getEventKey() + ); + + try { + textField.setCustomBorderColour(0xffffffff); + float f = Float.parseFloat(textField.getText()); + if (option.set(f)) { + slider.setValue(f); + } else { + textField.setCustomBorderColour(0xff0000ff); + } + } catch (Exception e) { + textField.setCustomBorderColour(0xffff0000); + } + + return true; + } + return false; } - return false; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorText.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorText.java index 701bf00..3e712f2 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorText.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiOptionEditorText.java @@ -10,93 +10,96 @@ import org.lwjgl.input.Mouse; public class GuiOptionEditorText extends GuiOptionEditor { - private final GuiElementTextField textField; - - public GuiOptionEditorText(ConfigProcessor.ProcessedOption option) { - super(option); - textField = new GuiElementTextField((String) option.get(), 0); - } - - @Override - public void render(int x, int y, int width) { - super.render(x, y, width); - int height = getHeight(); - - int fullWidth = Math.min(width / 3 - 10, 80); - - int textFieldX = x + width / 6 - fullWidth / 2; - if (textField.getFocus()) { - fullWidth = - Math.max( - fullWidth, - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(textField.getText()) + - 10 - ); - } + private final GuiElementTextField textField; - textField.setSize(fullWidth, 16); + public GuiOptionEditorText(ConfigProcessor.ProcessedOption option) { + super(option); + textField = new GuiElementTextField((String) option.get(), 0); + } - textField.render(textFieldX, y + height - 7 - 14); - } + @Override + public void render(int x, int y, int width) { + super.render(x, y, width); + int height = getHeight(); - @Override - public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { - int height = getHeight(); + int fullWidth = Math.min(width / 3 - 10, 80); - int fullWidth = Math.min(width / 3 - 10, 80); + int textFieldX = x + width / 6 - fullWidth / 2; + if (textField.getFocus()) { + fullWidth = + Math.max( + fullWidth, + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(textField.getText()) + + 10 + ); + } - int textFieldX = x + width / 6 - fullWidth / 2; + textField.setSize(fullWidth, 16); - if (textField.getFocus()) { - fullWidth = - Math.max( - fullWidth, - Minecraft - .getMinecraft() - .fontRendererObj.getStringWidth(textField.getText()) + - 10 - ); + textField.render(textFieldX, y + height - 7 - 14); } - int textFieldY = y + height - 7 - 14; - textField.setSize(fullWidth, 16); - - if ( - Mouse.getEventButtonState() && - (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) - ) { - if ( - mouseX > textFieldX && - mouseX < textFieldX + fullWidth && - mouseY > textFieldY && - mouseY < textFieldY + 16 - ) { - textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); - return true; - } - textField.unfocus(); + @Override + public boolean mouseInput(int x, int y, int width, int mouseX, int mouseY) { + int height = getHeight(); + + int fullWidth = Math.min(width / 3 - 10, 80); + + int textFieldX = x + width / 6 - fullWidth / 2; + + if (textField.getFocus()) { + fullWidth = + Math.max( + fullWidth, + Minecraft + .getMinecraft() + .fontRendererObj.getStringWidth(textField.getText()) + + 10 + ); + } + + int textFieldY = y + height - 7 - 14; + textField.setSize(fullWidth, 16); + + if ( + Mouse.getEventButtonState() && + (Mouse.getEventButton() == 0 || Mouse.getEventButton() == 1) + ) { + if ( + mouseX > textFieldX && + mouseX < textFieldX + fullWidth && + mouseY > textFieldY && + mouseY < textFieldY + 16 + ) { + textField.mouseClicked(mouseX, mouseY, Mouse.getEventButton()); + return true; + } + textField.unfocus(); + } + + return false; } - return false; - } - - @Override - public boolean keyboardInput() { - if (Keyboard.getEventKeyState() && textField.getFocus()) { - Keyboard.enableRepeatEvents(true); - textField.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); - - try { - textField.setCustomBorderColour(0xffffffff); - option.set(textField.getText()); - } catch (Exception e) { - textField.setCustomBorderColour(0xffff0000); - } - - return true; + @Override + public boolean keyboardInput() { + if (Keyboard.getEventKeyState() && textField.getFocus()) { + Keyboard.enableRepeatEvents(true); + textField.keyTyped( + Keyboard.getEventCharacter(), + Keyboard.getEventKey() + ); + + try { + textField.setCustomBorderColour(0xffffffff); + option.set(textField.getText()); + } catch (Exception e) { + textField.setCustomBorderColour(0xffff0000); + } + + return true; + } + return false; } - return false; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiPositionEditor.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiPositionEditor.java index e85f5c4..eaa399e 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiPositionEditor.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/gui/GuiPositionEditor.java @@ -13,234 +13,254 @@ import org.lwjgl.input.Mouse; public class GuiPositionEditor extends GuiScreen { - private final Position position; - private Position originalPosition; - private final int elementWidth; - private final int elementHeight; - private final Runnable renderCallback; - private final Runnable positionChangedCallback; - private final Runnable closedCallback; - private boolean clicked = false; - private int grabbedX = 0; - private int grabbedY = 0; - - private int guiScaleOverride = -1; - - public GuiPositionEditor( - Position position, - int elementWidth, - int elementHeight, - Runnable renderCallback, - Runnable positionChangedCallback, - Runnable closedCallback - ) { - this.position = position; - this.originalPosition = position.clone(); - this.elementWidth = elementWidth == -1 ? this.width : elementWidth; - this.elementHeight = elementHeight; - this.renderCallback = renderCallback; - this.positionChangedCallback = positionChangedCallback; - this.closedCallback = closedCallback; - } - - public GuiPositionEditor withScale(int scale) { - this.guiScaleOverride = scale; - return this; - } - - @Override - public void onGuiClosed() { - super.onGuiClosed(); - closedCallback.run(); - } - - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - super.drawScreen(mouseX, mouseY, partialTicks); - ScaledResolution scaledResolution; - if (guiScaleOverride >= 0) { - scaledResolution = Utils.pushGuiScale(guiScaleOverride); - } else { - scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + private final Position position; + private Position originalPosition; + private final int elementWidth; + private final int elementHeight; + private final Runnable renderCallback; + private final Runnable positionChangedCallback; + private final Runnable closedCallback; + private boolean clicked = false; + private int grabbedX = 0; + private int grabbedY = 0; + + private int guiScaleOverride = -1; + + public GuiPositionEditor( + Position position, + int elementWidth, + int elementHeight, + Runnable renderCallback, + Runnable positionChangedCallback, + Runnable closedCallback + ) { + this.position = position; + this.originalPosition = position.clone(); + this.elementWidth = elementWidth == -1 ? this.width : elementWidth; + this.elementHeight = elementHeight; + this.renderCallback = renderCallback; + this.positionChangedCallback = positionChangedCallback; + this.closedCallback = closedCallback; } - this.width = scaledResolution.getScaledWidth(); - this.height = scaledResolution.getScaledHeight(); - mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; - mouseY = - height - - Mouse.getY() * - height / - Minecraft.getMinecraft().displayHeight - - 1; - - drawDefaultBackground(); - - if (clicked) { - grabbedX += - position.moveX(mouseX - grabbedX, elementWidth, scaledResolution); - grabbedY += - position.moveY(mouseY - grabbedY, elementHeight, scaledResolution); + public GuiPositionEditor withScale(int scale) { + this.guiScaleOverride = scale; + return this; } - renderCallback.run(); + @Override + public void onGuiClosed() { + super.onGuiClosed(); + closedCallback.run(); + } - int x = position.getAbsX(scaledResolution, elementWidth); - int y = position.getAbsY(scaledResolution, elementHeight); + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + super.drawScreen(mouseX, mouseY, partialTicks); + ScaledResolution scaledResolution; + if (guiScaleOverride >= 0) { + scaledResolution = Utils.pushGuiScale(guiScaleOverride); + } else { + scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); + } - if (position.isCenterX()) x -= elementWidth / 2; - if (position.isCenterY()) y -= elementHeight / 2; - Gui.drawRect(x, y, x + elementWidth, y + elementHeight, 0x80404040); + this.width = scaledResolution.getScaledWidth(); + this.height = scaledResolution.getScaledHeight(); + mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + mouseY = + height - + Mouse.getY() * + height / + Minecraft.getMinecraft().displayHeight - + 1; - if (guiScaleOverride >= 0) { - Utils.pushGuiScale(-1); - } + drawDefaultBackground(); + + if (clicked) { + grabbedX += + position.moveX( + mouseX - grabbedX, + elementWidth, + scaledResolution + ); + grabbedY += + position.moveY( + mouseY - grabbedY, + elementHeight, + scaledResolution + ); + } + + renderCallback.run(); + + int x = position.getAbsX(scaledResolution, elementWidth); + int y = position.getAbsY(scaledResolution, elementHeight); + + if (position.isCenterX()) x -= elementWidth / 2; + if (position.isCenterY()) y -= elementHeight / 2; + Gui.drawRect(x, y, x + elementWidth, y + elementHeight, 0x80404040); + + if (guiScaleOverride >= 0) { + Utils.pushGuiScale(-1); + } - scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - Utils.drawStringCentered( - "Position Editor", - Minecraft.getMinecraft().fontRendererObj, - scaledResolution.getScaledWidth() / 2f, - 8, - true, - 0xffffff - ); - Utils.drawStringCentered( - "R to Reset - Arrow keys/mouse to move", - Minecraft.getMinecraft().fontRendererObj, - scaledResolution.getScaledWidth() / 2f, - 18, - true, - 0xffffff - ); - } - - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) - throws IOException { - super.mouseClicked(mouseX, mouseY, mouseButton); - - if (mouseButton == 0) { - ScaledResolution scaledResolution; - if (guiScaleOverride >= 0) { - scaledResolution = Utils.pushGuiScale(guiScaleOverride); - } else { scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - } - mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; - mouseY = - height - - Mouse.getY() * - height / - Minecraft.getMinecraft().displayHeight - - 1; - - int x = position.getAbsX(scaledResolution, elementWidth); - int y = position.getAbsY(scaledResolution, elementHeight); - if (position.isCenterX()) x -= elementWidth / 2; - if (position.isCenterY()) y -= elementHeight / 2; - - if ( - mouseX >= x && - mouseY >= y && - mouseX <= x + elementWidth && - mouseY <= y + elementHeight - ) { - clicked = true; - grabbedX = mouseX; - grabbedY = mouseY; - } - - if (guiScaleOverride >= 0) { - Utils.pushGuiScale(-1); - } - } - } - - @Override - protected void keyTyped(char typedChar, int keyCode) throws IOException { - Keyboard.enableRepeatEvents(true); - - if (keyCode == Keyboard.KEY_R) { - position.set(originalPosition); - } else if (!clicked) { - boolean shiftHeld = - Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || - Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); - int dist = shiftHeld ? 10 : 1; - if (keyCode == Keyboard.KEY_DOWN) { - position.moveY( - dist, - elementHeight, - new ScaledResolution(Minecraft.getMinecraft()) - ); - } else if (keyCode == Keyboard.KEY_UP) { - position.moveY( - -dist, - elementHeight, - new ScaledResolution(Minecraft.getMinecraft()) - ); - } else if (keyCode == Keyboard.KEY_LEFT) { - position.moveX( - -dist, - elementWidth, - new ScaledResolution(Minecraft.getMinecraft()) + Utils.drawStringCentered( + "Position Editor", + Minecraft.getMinecraft().fontRendererObj, + scaledResolution.getScaledWidth() / 2f, + 8, + true, + 0xffffff ); - } else if (keyCode == Keyboard.KEY_RIGHT) { - position.moveX( - dist, - elementWidth, - new ScaledResolution(Minecraft.getMinecraft()) + Utils.drawStringCentered( + "R to Reset - Arrow keys/mouse to move", + Minecraft.getMinecraft().fontRendererObj, + scaledResolution.getScaledWidth() / 2f, + 18, + true, + 0xffffff ); - } } - super.keyTyped(typedChar, keyCode); - } - - @Override - protected void mouseReleased(int mouseX, int mouseY, int state) { - super.mouseReleased(mouseX, mouseY, state); - clicked = false; - } - - @Override - protected void mouseClickMove( - int mouseX, - int mouseY, - int clickedMouseButton, - long timeSinceLastClick - ) { - super.mouseClickMove( - mouseX, - mouseY, - clickedMouseButton, - timeSinceLastClick - ); - - if (clicked) { - ScaledResolution scaledResolution; - if (guiScaleOverride >= 0) { - scaledResolution = Utils.pushGuiScale(guiScaleOverride); - } else { - scaledResolution = new ScaledResolution(Minecraft.getMinecraft()); - } - mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; - mouseY = - height - - Mouse.getY() * - height / - Minecraft.getMinecraft().displayHeight - - 1; - - grabbedX += - position.moveX(mouseX - grabbedX, elementWidth, scaledResolution); - grabbedY += - position.moveY(mouseY - grabbedY, elementHeight, scaledResolution); - positionChangedCallback.run(); - - if (guiScaleOverride >= 0) { - Utils.pushGuiScale(-1); - } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) + throws IOException { + super.mouseClicked(mouseX, mouseY, mouseButton); + + if (mouseButton == 0) { + ScaledResolution scaledResolution; + if (guiScaleOverride >= 0) { + scaledResolution = Utils.pushGuiScale(guiScaleOverride); + } else { + scaledResolution = + new ScaledResolution(Minecraft.getMinecraft()); + } + mouseX = + Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + mouseY = + height - + Mouse.getY() * + height / + Minecraft.getMinecraft().displayHeight - + 1; + + int x = position.getAbsX(scaledResolution, elementWidth); + int y = position.getAbsY(scaledResolution, elementHeight); + if (position.isCenterX()) x -= elementWidth / 2; + if (position.isCenterY()) y -= elementHeight / 2; + + if ( + mouseX >= x && + mouseY >= y && + mouseX <= x + elementWidth && + mouseY <= y + elementHeight + ) { + clicked = true; + grabbedX = mouseX; + grabbedY = mouseY; + } + + if (guiScaleOverride >= 0) { + Utils.pushGuiScale(-1); + } + } + } + + @Override + protected void keyTyped(char typedChar, int keyCode) throws IOException { + Keyboard.enableRepeatEvents(true); + + if (keyCode == Keyboard.KEY_R) { + position.set(originalPosition); + } else if (!clicked) { + boolean shiftHeld = + Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || + Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + int dist = shiftHeld ? 10 : 1; + if (keyCode == Keyboard.KEY_DOWN) { + position.moveY( + dist, + elementHeight, + new ScaledResolution(Minecraft.getMinecraft()) + ); + } else if (keyCode == Keyboard.KEY_UP) { + position.moveY( + -dist, + elementHeight, + new ScaledResolution(Minecraft.getMinecraft()) + ); + } else if (keyCode == Keyboard.KEY_LEFT) { + position.moveX( + -dist, + elementWidth, + new ScaledResolution(Minecraft.getMinecraft()) + ); + } else if (keyCode == Keyboard.KEY_RIGHT) { + position.moveX( + dist, + elementWidth, + new ScaledResolution(Minecraft.getMinecraft()) + ); + } + } + super.keyTyped(typedChar, keyCode); + } + + @Override + protected void mouseReleased(int mouseX, int mouseY, int state) { + super.mouseReleased(mouseX, mouseY, state); + clicked = false; + } + + @Override + protected void mouseClickMove( + int mouseX, + int mouseY, + int clickedMouseButton, + long timeSinceLastClick + ) { + super.mouseClickMove( + mouseX, + mouseY, + clickedMouseButton, + timeSinceLastClick + ); + + if (clicked) { + ScaledResolution scaledResolution; + if (guiScaleOverride >= 0) { + scaledResolution = Utils.pushGuiScale(guiScaleOverride); + } else { + scaledResolution = + new ScaledResolution(Minecraft.getMinecraft()); + } + mouseX = + Mouse.getX() * width / Minecraft.getMinecraft().displayWidth; + mouseY = + height - + Mouse.getY() * + height / + Minecraft.getMinecraft().displayHeight - + 1; + + grabbedX += + position.moveX( + mouseX - grabbedX, + elementWidth, + scaledResolution + ); + grabbedY += + position.moveY( + mouseY - grabbedY, + elementHeight, + scaledResolution + ); + positionChangedCallback.run(); + + if (guiScaleOverride >= 0) { + Utils.pushGuiScale(-1); + } + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/config/struct/ConfigProcessor.java b/src/main/java/com/thatgravyboat/skyblockhud/core/config/struct/ConfigProcessor.java index df8d55a..559fa9e 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/config/struct/ConfigProcessor.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/config/struct/ConfigProcessor.java @@ -11,244 +11,284 @@ import java.util.List; public class ConfigProcessor { - public static class ProcessedCategory { + public static class ProcessedCategory { - public final String name; - public final String desc; - public final LinkedHashMap<String, ProcessedOption> options = new LinkedHashMap<>(); + public final String name; + public final String desc; + public final LinkedHashMap<String, ProcessedOption> options = new LinkedHashMap<>(); - public ProcessedCategory(String name, String desc) { - this.name = name; - this.desc = desc; + public ProcessedCategory(String name, String desc) { + this.name = name; + this.desc = desc; + } } - } - public static class ProcessedOption { + public static class ProcessedOption { - public final String name; - public final String desc; - public final int subcategoryId; - public GuiOptionEditor editor; + public final String name; + public final String desc; + public final int subcategoryId; + public GuiOptionEditor editor; - public int accordionId = -1; + public int accordionId = -1; - private final Field field; - private final Object container; + private final Field field; + private final Object container; - public ProcessedOption( - String name, - String desc, - int subcategoryId, - Field field, - Object container - ) { - this.name = name; - this.desc = desc; - this.subcategoryId = subcategoryId; + public ProcessedOption( + String name, + String desc, + int subcategoryId, + Field field, + Object container + ) { + this.name = name; + this.desc = desc; + this.subcategoryId = subcategoryId; - this.field = field; - this.container = container; - } + this.field = field; + this.container = container; + } - public Object get() { - try { - return field.get(container); - } catch (Exception e) { - return null; - } - } + public Object get() { + try { + return field.get(container); + } catch (Exception e) { + return null; + } + } - public boolean set(Object value) { - try { - if (field.getType() == int.class && value instanceof Number) { - field.set(container, ((Number) value).intValue()); - } else { - field.set(container, value); + public boolean set(Object value) { + try { + if (field.getType() == int.class && value instanceof Number) { + field.set(container, ((Number) value).intValue()); + } else { + field.set(container, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } } - } - - public static LinkedHashMap<String, ProcessedCategory> create(Config config) { - LinkedHashMap<String, ProcessedCategory> processedConfig = new LinkedHashMap<>(); - for (Field categoryField : config.getClass().getDeclaredFields()) { - boolean exposePresent = categoryField.isAnnotationPresent(Expose.class); - boolean categoryPresent = categoryField.isAnnotationPresent( - Category.class - ); - - if (exposePresent && categoryPresent) { - Object categoryObj; - try { - categoryObj = categoryField.get(config); - } catch (Exception e) { - //System.err.printf("Failed to load config category %s. Field was not accessible.\n", categoryField.getName()); - continue; - } - Category categoryAnnotation = categoryField.getAnnotation( - Category.class - ); - ProcessedCategory cat = new ProcessedCategory( - categoryAnnotation.name(), - categoryAnnotation.desc() - ); - processedConfig.put(categoryField.getName(), cat); - - for (Field optionField : categoryObj.getClass().getDeclaredFields()) { - boolean optionPresent = optionField.isAnnotationPresent( - ConfigOption.class - ); - - if (optionPresent) { - ConfigOption optionAnnotation = optionField.getAnnotation( - ConfigOption.class + public static LinkedHashMap<String, ProcessedCategory> create( + Config config + ) { + LinkedHashMap<String, ProcessedCategory> processedConfig = new LinkedHashMap<>(); + for (Field categoryField : config.getClass().getDeclaredFields()) { + boolean exposePresent = categoryField.isAnnotationPresent( + Expose.class ); - ProcessedOption option = new ProcessedOption( - optionAnnotation.name(), - optionAnnotation.desc(), - optionAnnotation.subcategoryId(), - optionField, - categoryObj + boolean categoryPresent = categoryField.isAnnotationPresent( + Category.class ); - if (optionField.isAnnotationPresent(ConfigAccordionId.class)) { - ConfigAccordionId annotation = optionField.getAnnotation( - ConfigAccordionId.class - ); - option.accordionId = annotation.id(); - } - GuiOptionEditor editor = null; - Class<?> optionType = optionField.getType(); - if (optionField.isAnnotationPresent(ConfigEditorButton.class)) { - ConfigEditorButton configEditorAnnotation = optionField.getAnnotation( - ConfigEditorButton.class - ); - editor = - new GuiOptionEditorButton( - option, - configEditorAnnotation.runnableId(), - configEditorAnnotation.buttonText(), - config - ); - } - if ( - optionType.isAssignableFrom(boolean.class) && - optionField.isAnnotationPresent(ConfigEditorBoolean.class) - ) { - editor = new GuiOptionEditorBoolean(option); - } - if ( - optionType.isAssignableFrom(boolean.class) && - optionField.isAnnotationPresent(ConfigEditorAccordion.class) - ) { - ConfigEditorAccordion configEditorAnnotation = optionField.getAnnotation( - ConfigEditorAccordion.class - ); - editor = - new GuiOptionEditorAccordion( - option, - configEditorAnnotation.id() - ); - } - if (optionType.isAssignableFrom(int.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { - ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation( - ConfigEditorDropdown.class - ); - editor = - new GuiOptionEditorDropdown( - option, - configEditorAnnotation.values(), - (int) option.get(), - true - ); - } - } - if (optionType.isAssignableFrom(List.class)) { - if ( - optionField.isAnnotationPresent(ConfigEditorDraggableList.class) - ) { - ConfigEditorDraggableList configEditorAnnotation = optionField.getAnnotation( - ConfigEditorDraggableList.class - ); - editor = - new GuiOptionEditorDraggableList( - option, - configEditorAnnotation.exampleText() - ); - } - } - if (optionType.isAssignableFrom(String.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { - ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation( - ConfigEditorDropdown.class - ); - editor = - new GuiOptionEditorDropdown( - option, - configEditorAnnotation.values(), - configEditorAnnotation.initialIndex(), - false - ); - } else if ( - optionField.isAnnotationPresent(ConfigEditorColour.class) - ) { - editor = new GuiOptionEditorColour(option); - } else if ( - optionField.isAnnotationPresent(ConfigEditorText.class) - ) { - editor = new GuiOptionEditorText(option); - } - } - if ( - optionType.isAssignableFrom(int.class) || - optionType.isAssignableFrom(float.class) || - optionType.isAssignableFrom(double.class) - ) { - if (optionField.isAnnotationPresent(ConfigEditorSlider.class)) { - ConfigEditorSlider configEditorAnnotation = optionField.getAnnotation( - ConfigEditorSlider.class + if (exposePresent && categoryPresent) { + Object categoryObj; + try { + categoryObj = categoryField.get(config); + } catch (Exception e) { + //System.err.printf("Failed to load config category %s. Field was not accessible.\n", categoryField.getName()); + continue; + } + + Category categoryAnnotation = categoryField.getAnnotation( + Category.class ); - editor = - new GuiOptionEditorSlider( - option, - configEditorAnnotation.minValue(), - configEditorAnnotation.maxValue(), - configEditorAnnotation.minStep() - ); - } - } - if (optionType.isAssignableFrom(String.class)) { - if (optionField.isAnnotationPresent(ConfigEditorDropdown.class)) { - ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation( - ConfigEditorDropdown.class + ProcessedCategory cat = new ProcessedCategory( + categoryAnnotation.name(), + categoryAnnotation.desc() ); - editor = - new GuiOptionEditorDropdown( - option, - configEditorAnnotation.values(), - 0, - false - ); - } - } - if (editor == null) { - //System.err.printf("Failed to load config option %s. Could not find suitable editor.\n", optionField.getName()); - continue; + processedConfig.put(categoryField.getName(), cat); + + for (Field optionField : categoryObj + .getClass() + .getDeclaredFields()) { + boolean optionPresent = optionField.isAnnotationPresent( + ConfigOption.class + ); + + if (optionPresent) { + ConfigOption optionAnnotation = optionField.getAnnotation( + ConfigOption.class + ); + ProcessedOption option = new ProcessedOption( + optionAnnotation.name(), + optionAnnotation.desc(), + optionAnnotation.subcategoryId(), + optionField, + categoryObj + ); + if ( + optionField.isAnnotationPresent( + ConfigAccordionId.class + ) + ) { + ConfigAccordionId annotation = optionField.getAnnotation( + ConfigAccordionId.class + ); + option.accordionId = annotation.id(); + } + + GuiOptionEditor editor = null; + Class<?> optionType = optionField.getType(); + if ( + optionField.isAnnotationPresent( + ConfigEditorButton.class + ) + ) { + ConfigEditorButton configEditorAnnotation = optionField.getAnnotation( + ConfigEditorButton.class + ); + editor = + new GuiOptionEditorButton( + option, + configEditorAnnotation.runnableId(), + configEditorAnnotation.buttonText(), + config + ); + } + if ( + optionType.isAssignableFrom(boolean.class) && + optionField.isAnnotationPresent( + ConfigEditorBoolean.class + ) + ) { + editor = new GuiOptionEditorBoolean(option); + } + if ( + optionType.isAssignableFrom(boolean.class) && + optionField.isAnnotationPresent( + ConfigEditorAccordion.class + ) + ) { + ConfigEditorAccordion configEditorAnnotation = optionField.getAnnotation( + ConfigEditorAccordion.class + ); + editor = + new GuiOptionEditorAccordion( + option, + configEditorAnnotation.id() + ); + } + if (optionType.isAssignableFrom(int.class)) { + if ( + optionField.isAnnotationPresent( + ConfigEditorDropdown.class + ) + ) { + ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation( + ConfigEditorDropdown.class + ); + editor = + new GuiOptionEditorDropdown( + option, + configEditorAnnotation.values(), + (int) option.get(), + true + ); + } + } + if (optionType.isAssignableFrom(List.class)) { + if ( + optionField.isAnnotationPresent( + ConfigEditorDraggableList.class + ) + ) { + ConfigEditorDraggableList configEditorAnnotation = optionField.getAnnotation( + ConfigEditorDraggableList.class + ); + editor = + new GuiOptionEditorDraggableList( + option, + configEditorAnnotation.exampleText() + ); + } + } + if (optionType.isAssignableFrom(String.class)) { + if ( + optionField.isAnnotationPresent( + ConfigEditorDropdown.class + ) + ) { + ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation( + ConfigEditorDropdown.class + ); + editor = + new GuiOptionEditorDropdown( + option, + configEditorAnnotation.values(), + configEditorAnnotation.initialIndex(), + false + ); + } else if ( + optionField.isAnnotationPresent( + ConfigEditorColour.class + ) + ) { + editor = new GuiOptionEditorColour(option); + } else if ( + optionField.isAnnotationPresent( + ConfigEditorText.class + ) + ) { + editor = new GuiOptionEditorText(option); + } + } + if ( + optionType.isAssignableFrom(int.class) || + optionType.isAssignableFrom(float.class) || + optionType.isAssignableFrom(double.class) + ) { + if ( + optionField.isAnnotationPresent( + ConfigEditorSlider.class + ) + ) { + ConfigEditorSlider configEditorAnnotation = optionField.getAnnotation( + ConfigEditorSlider.class + ); + editor = + new GuiOptionEditorSlider( + option, + configEditorAnnotation.minValue(), + configEditorAnnotation.maxValue(), + configEditorAnnotation.minStep() + ); + } + } + if (optionType.isAssignableFrom(String.class)) { + if ( + optionField.isAnnotationPresent( + ConfigEditorDropdown.class + ) + ) { + ConfigEditorDropdown configEditorAnnotation = optionField.getAnnotation( + ConfigEditorDropdown.class + ); + editor = + new GuiOptionEditorDropdown( + option, + configEditorAnnotation.values(), + 0, + false + ); + } + } + if (editor == null) { + //System.err.printf("Failed to load config option %s. Could not find suitable editor.\n", optionField.getName()); + continue; + } + option.editor = editor; + cat.options.put(optionField.getName(), option); + } + } + } else if (exposePresent || categoryPresent) { + //System.err.printf("Failed to load config category %s. Both @Expose and @Category must be present.\n", categoryField.getName()); } - option.editor = editor; - cat.options.put(optionField.getName(), option); - } } - } else if (exposePresent || categoryPresent) { - //System.err.printf("Failed to load config category %s. Both @Expose and @Category must be present.\n", categoryField.getName()); - } + return processedConfig; } - return processedConfig; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/GuiElementSlider.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/GuiElementSlider.java index c27c5e3..cdd745d 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/GuiElementSlider.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/GuiElementSlider.java @@ -13,167 +13,178 @@ import org.lwjgl.opengl.GL11; public class GuiElementSlider extends GuiElement { - public int x; - public int y; - public int width; - private static final int HEIGHT = 16; - - private float minValue; - private float maxValue; - private float minStep; - - private float value; - private Consumer<Float> setCallback; - - private boolean clicked = false; - - public GuiElementSlider( - int x, - int y, - int width, - float minValue, - float maxValue, - float minStep, - float value, - Consumer<Float> setCallback - ) { - if (minStep < 0) minStep = 0.01f; - - this.x = x; - this.y = y; - this.width = width; - this.minValue = minValue; - this.maxValue = maxValue; - this.minStep = minStep; - this.value = value; - this.setCallback = setCallback; - } - - public void setValue(float value) { - this.value = value; - } - - @Override - public void render() { - final ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - int mouseX = - Mouse.getX() * - scaledResolution.getScaledWidth() / - Minecraft.getMinecraft().displayWidth; - - float value = this.value; - if (clicked) { - value = (mouseX - x) * (maxValue - minValue) / width + minValue; - value = Math.max(minValue, Math.min(maxValue, value)); - value = Math.round(value / minStep) * minStep; - } - - float sliderAmount = Math.max( - 0, - Math.min(1, (value - minValue) / (maxValue - minValue)) - ); - int sliderAmountI = (int) (width * sliderAmount); - - GlStateManager.color(1f, 1f, 1f, 1f); - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_on_cap); - Utils.drawTexturedRect(x, y, 4, HEIGHT, GL11.GL_NEAREST); - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_off_cap); - Utils.drawTexturedRect(x + width - 4, y, 4, HEIGHT, GL11.GL_NEAREST); - - if (sliderAmountI > 5) { - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(slider_on_segment); - Utils.drawTexturedRect( - x + 4, - y, - sliderAmountI - 4, - HEIGHT, - GL11.GL_NEAREST - ); + public int x; + public int y; + public int width; + private static final int HEIGHT = 16; + + private float minValue; + private float maxValue; + private float minStep; + + private float value; + private Consumer<Float> setCallback; + + private boolean clicked = false; + + public GuiElementSlider( + int x, + int y, + int width, + float minValue, + float maxValue, + float minStep, + float value, + Consumer<Float> setCallback + ) { + if (minStep < 0) minStep = 0.01f; + + this.x = x; + this.y = y; + this.width = width; + this.minValue = minValue; + this.maxValue = maxValue; + this.minStep = minStep; + this.value = value; + this.setCallback = setCallback; } - if (sliderAmountI < width - 5) { - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture(slider_off_segment); - Utils.drawTexturedRect( - x + sliderAmountI, - y, - width - 4 - sliderAmountI, - HEIGHT, - GL11.GL_NEAREST - ); + public void setValue(float value) { + this.value = value; } - for (int i = 1; i < 4; i++) { - int notchX = x + width * i / 4 - 1; - Minecraft - .getMinecraft() - .getTextureManager() - .bindTexture( - notchX > x + sliderAmountI ? slider_off_notch : slider_on_notch + @Override + public void render() { + final ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + int mouseX = + Mouse.getX() * + scaledResolution.getScaledWidth() / + Minecraft.getMinecraft().displayWidth; + + float value = this.value; + if (clicked) { + value = (mouseX - x) * (maxValue - minValue) / width + minValue; + value = Math.max(minValue, Math.min(maxValue, value)); + value = Math.round(value / minStep) * minStep; + } + + float sliderAmount = Math.max( + 0, + Math.min(1, (value - minValue) / (maxValue - minValue)) + ); + int sliderAmountI = (int) (width * sliderAmount); + + GlStateManager.color(1f, 1f, 1f, 1f); + Minecraft.getMinecraft().getTextureManager().bindTexture(slider_on_cap); + Utils.drawTexturedRect(x, y, 4, HEIGHT, GL11.GL_NEAREST); + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(slider_off_cap); + Utils.drawTexturedRect(x + width - 4, y, 4, HEIGHT, GL11.GL_NEAREST); + + if (sliderAmountI > 5) { + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(slider_on_segment); + Utils.drawTexturedRect( + x + 4, + y, + sliderAmountI - 4, + HEIGHT, + GL11.GL_NEAREST + ); + } + + if (sliderAmountI < width - 5) { + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(slider_off_segment); + Utils.drawTexturedRect( + x + sliderAmountI, + y, + width - 4 - sliderAmountI, + HEIGHT, + GL11.GL_NEAREST + ); + } + + for (int i = 1; i < 4; i++) { + int notchX = x + width * i / 4 - 1; + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture( + notchX > x + sliderAmountI + ? slider_off_notch + : slider_on_notch + ); + Utils.drawTexturedRect( + notchX, + y + (HEIGHT - 4) / 2f, + 2, + 4, + GL11.GL_NEAREST + ); + } + + Minecraft + .getMinecraft() + .getTextureManager() + .bindTexture(slider_button_new); + Utils.drawTexturedRect( + x + sliderAmountI - 4, + y, + 8, + HEIGHT, + GL11.GL_NEAREST ); - Utils.drawTexturedRect( - notchX, - y + (HEIGHT - 4) / 2f, - 2, - 4, - GL11.GL_NEAREST - ); - } - - Minecraft.getMinecraft().getTextureManager().bindTexture(slider_button_new); - Utils.drawTexturedRect( - x + sliderAmountI - 4, - y, - 8, - HEIGHT, - GL11.GL_NEAREST - ); - } - - @Override - public boolean mouseInput(int mouseX, int mouseY) { - if (!Mouse.isButtonDown(0)) { - clicked = false; } - if (Mouse.getEventButton() == 0) { - clicked = - Mouse.getEventButtonState() && - mouseX > x && - mouseX < x + width && - mouseY > y && - mouseY < y + HEIGHT; - if (clicked) { - value = (mouseX - x) * (maxValue - minValue) / width + minValue; - value = Math.max(minValue, Math.min(maxValue, value)); - value = (float) (Math.round(value / minStep) * (double) minStep); - setCallback.accept(value); - return true; - } + @Override + public boolean mouseInput(int mouseX, int mouseY) { + if (!Mouse.isButtonDown(0)) { + clicked = false; + } + + if (Mouse.getEventButton() == 0) { + clicked = + Mouse.getEventButtonState() && + mouseX > x && + mouseX < x + width && + mouseY > y && + mouseY < y + HEIGHT; + if (clicked) { + value = (mouseX - x) * (maxValue - minValue) / width + minValue; + value = Math.max(minValue, Math.min(maxValue, value)); + value = + (float) (Math.round(value / minStep) * (double) minStep); + setCallback.accept(value); + return true; + } + } + + if ( + !Mouse.getEventButtonState() && + Mouse.getEventButton() == -1 && + clicked + ) { + value = (mouseX - x) * (maxValue - minValue) / width + minValue; + value = Math.max(minValue, Math.min(maxValue, value)); + value = Math.round(value / minStep) * minStep; + setCallback.accept(value); + return true; + } + + return false; } - if ( - !Mouse.getEventButtonState() && Mouse.getEventButton() == -1 && clicked - ) { - value = (mouseX - x) * (maxValue - minValue) / width + minValue; - value = Math.max(minValue, Math.min(maxValue, value)); - value = Math.round(value / minStep) * minStep; - setCallback.accept(value); - return true; + @Override + public boolean keyboardInput() { + return false; } - - return false; - } - - @Override - public boolean keyboardInput() { - return false; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/MiscUtils.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/MiscUtils.java index dc390f9..4173694 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/MiscUtils.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/MiscUtils.java @@ -20,99 +20,113 @@ import org.lwjgl.input.Mouse; public class MiscUtils { - public static void copyToClipboard(String str) { - Toolkit - .getDefaultToolkit() - .getSystemClipboard() - .setContents(new StringSelection(str), null); - } + public static void copyToClipboard(String str) { + Toolkit + .getDefaultToolkit() + .getSystemClipboard() + .setContents(new StringSelection(str), null); + } - private static void unzip(InputStream src, File dest) { - //buffer for read and write data to file - byte[] buffer = new byte[1024]; - try { - ZipInputStream zis = new ZipInputStream(src); - ZipEntry ze = zis.getNextEntry(); - while (ze != null) { - if (!ze.isDirectory()) { - String fileName = ze.getName(); - File newFile = new File(dest, fileName); - //create directories for sub directories in zip - new File(newFile.getParent()).mkdirs(); - FileOutputStream fos = new FileOutputStream(newFile); - int len; - while ((len = zis.read(buffer)) > 0) { - fos.write(buffer, 0, len); - } - fos.close(); + private static void unzip(InputStream src, File dest) { + //buffer for read and write data to file + byte[] buffer = new byte[1024]; + try { + ZipInputStream zis = new ZipInputStream(src); + ZipEntry ze = zis.getNextEntry(); + while (ze != null) { + if (!ze.isDirectory()) { + String fileName = ze.getName(); + File newFile = new File(dest, fileName); + //create directories for sub directories in zip + new File(newFile.getParent()).mkdirs(); + FileOutputStream fos = new FileOutputStream(newFile); + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + fos.close(); + } + //close this ZipEntry + zis.closeEntry(); + ze = zis.getNextEntry(); + } + //close last ZipEntry + zis.closeEntry(); + zis.close(); + } catch (IOException e) { + e.printStackTrace(); } - //close this ZipEntry - zis.closeEntry(); - ze = zis.getNextEntry(); - } - //close last ZipEntry - zis.closeEntry(); - zis.close(); - } catch (IOException e) { - e.printStackTrace(); } - } - public static void recursiveDelete(File file) { - if (file.isDirectory() && !Files.isSymbolicLink(file.toPath())) { - for (File child : file.listFiles()) { - recursiveDelete(child); - } + public static void recursiveDelete(File file) { + if (file.isDirectory() && !Files.isSymbolicLink(file.toPath())) { + for (File child : file.listFiles()) { + recursiveDelete(child); + } + } + file.delete(); } - file.delete(); - } - private static String currentCursor = null; + private static String currentCursor = null; - public static void resetCursor() { - if (currentCursor == null) { - return; + public static void resetCursor() { + if (currentCursor == null) { + return; + } + currentCursor = null; + try { + Mouse.setNativeCursor(null); + } catch (Exception ignored) {} } - currentCursor = null; - try { - Mouse.setNativeCursor(null); - } catch (Exception ignored) {} - } - public static void setCursor( - ResourceLocation loc, - int hotspotX, - int hotspotY - ) { - if (currentCursor != null && loc.getResourcePath().equals(currentCursor)) { - return; - } - currentCursor = loc.getResourcePath(); - try { - BufferedImage image = ImageIO.read( - Minecraft - .getMinecraft() - .getResourceManager() - .getResource(loc) - .getInputStream() - ); - int maxSize = Cursor.getMaxCursorSize(); - IntBuffer buffer = BufferUtils.createIntBuffer(maxSize * maxSize); - for (int i = 0; i < maxSize * maxSize; i++) { - int cursorX = i % maxSize; - int cursorY = i / maxSize; - if (cursorX >= image.getWidth() || cursorY >= image.getHeight()) { - buffer.put(0x00000000); - } else { - buffer.put(image.getRGB(cursorX, image.getHeight() - 1 - cursorY)); + public static void setCursor( + ResourceLocation loc, + int hotspotX, + int hotspotY + ) { + if ( + currentCursor != null && loc.getResourcePath().equals(currentCursor) + ) { + return; + } + currentCursor = loc.getResourcePath(); + try { + BufferedImage image = ImageIO.read( + Minecraft + .getMinecraft() + .getResourceManager() + .getResource(loc) + .getInputStream() + ); + int maxSize = Cursor.getMaxCursorSize(); + IntBuffer buffer = BufferUtils.createIntBuffer(maxSize * maxSize); + for (int i = 0; i < maxSize * maxSize; i++) { + int cursorX = i % maxSize; + int cursorY = i / maxSize; + if ( + cursorX >= image.getWidth() || cursorY >= image.getHeight() + ) { + buffer.put(0x00000000); + } else { + buffer.put( + image.getRGB(cursorX, image.getHeight() - 1 - cursorY) + ); + } + } + buffer.flip(); + Mouse.setNativeCursor( + new Cursor( + maxSize, + maxSize, + hotspotX, + hotspotY, + 1, + buffer, + null + ) + ); + } catch (Exception e) { + e.printStackTrace(); } - } - buffer.flip(); - Mouse.setNativeCursor( - new Cursor(maxSize, maxSize, hotspotX, hotspotY, 1, buffer, null) - ); - } catch (Exception e) { - e.printStackTrace(); } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/Splitters.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/Splitters.java index 1690f74..f13fbc7 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/Splitters.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/Splitters.java @@ -4,5 +4,5 @@ import com.google.common.base.Splitter; public class Splitters { - public static final Splitter NEWLINE_SPLITTER = Splitter.on('\n'); + public static final Splitter NEWLINE_SPLITTER = Splitter.on('\n'); } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/StringUtils.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/StringUtils.java index 37d3429..48c7566 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/StringUtils.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/StringUtils.java @@ -7,31 +7,34 @@ import net.minecraft.client.gui.FontRenderer; public class StringUtils { - public static final Set<String> PROTOCOLS = Sets.newHashSet("http", "https"); - - public static String cleanColour(String in) { - return in.replaceAll("(?i)\\u00A7.", ""); - } - - public static String cleanColourNotModifiers(String in) { - return in.replaceAll("(?i)\\u00A7[0-9a-f]", "\u00A7r"); - } - - public static String trimToWidth(String str, int len) { - FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; - String trim = fr.trimStringToWidth(str, len); - - if (str.length() != trim.length() && !trim.endsWith(" ")) { - char next = str.charAt(trim.length()); - if (next != ' ') { - String[] split = trim.split(" "); - String last = split[split.length - 1]; - if (last.length() < 8) { - trim = trim.substring(0, trim.length() - last.length()); - } - } + public static final Set<String> PROTOCOLS = Sets.newHashSet( + "http", + "https" + ); + + public static String cleanColour(String in) { + return in.replaceAll("(?i)\\u00A7.", ""); + } + + public static String cleanColourNotModifiers(String in) { + return in.replaceAll("(?i)\\u00A7[0-9a-f]", "\u00A7r"); } - return trim; - } + public static String trimToWidth(String str, int len) { + FontRenderer fr = Minecraft.getMinecraft().fontRendererObj; + String trim = fr.trimStringToWidth(str, len); + + if (str.length() != trim.length() && !trim.endsWith(" ")) { + char next = str.charAt(trim.length()); + if (next != ' ') { + String[] split = trim.split(" "); + String last = split[split.length - 1]; + if (last.length() < 8) { + trim = trim.substring(0, trim.length() - last.length()); + } + } + } + + return trim; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpUtils.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpUtils.java index 56c4b92..b24bbe6 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpUtils.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpUtils.java @@ -2,25 +2,26 @@ package com.thatgravyboat.skyblockhud.core.util.lerp; public class LerpUtils { - public static float clampZeroOne(float f) { - return Math.max(0, Math.min(1, f)); - } + public static float clampZeroOne(float f) { + return Math.max(0, Math.min(1, f)); + } - public static float sigmoid(float val) { - return (float) (1 / (1 + Math.exp(-val))); - } + public static float sigmoid(float val) { + return (float) (1 / (1 + Math.exp(-val))); + } - private static final float sigmoidStr = 8; - private static final float sigmoidA = - -1 / (sigmoid(-0.5f * sigmoidStr) - sigmoid(0.5f * sigmoidStr)); - private static final float sigmoidB = sigmoidA * sigmoid(-0.5f * sigmoidStr); + private static final float sigmoidStr = 8; + private static final float sigmoidA = + -1 / (sigmoid(-0.5f * sigmoidStr) - sigmoid(0.5f * sigmoidStr)); + private static final float sigmoidB = + sigmoidA * sigmoid(-0.5f * sigmoidStr); - public static float sigmoidZeroOne(float f) { - f = clampZeroOne(f); - return sigmoidA * sigmoid(sigmoidStr * (f - 0.5f)) - sigmoidB; - } + public static float sigmoidZeroOne(float f) { + f = clampZeroOne(f); + return sigmoidA * sigmoid(sigmoidStr * (f - 0.5f)) - sigmoidB; + } - public static float lerp(float a, float b, float amount) { - return b + (a - b) * clampZeroOne(amount); - } + public static float lerp(float a, float b, float amount) { + return b + (a - b) * clampZeroOne(amount); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingFloat.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingFloat.java index 7eedcac..9e379c7 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingFloat.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingFloat.java @@ -2,67 +2,68 @@ package com.thatgravyboat.skyblockhud.core.util.lerp; public class LerpingFloat { - private int timeSpent; - private long lastMillis; - private int timeToReachTarget; + private int timeSpent; + private long lastMillis; + private int timeToReachTarget; - private float targetValue; - private float lerpValue; + private float targetValue; + private float lerpValue; - public LerpingFloat(float initialValue, int timeToReachTarget) { - this.targetValue = this.lerpValue = initialValue; - this.timeToReachTarget = timeToReachTarget; - } + public LerpingFloat(float initialValue, int timeToReachTarget) { + this.targetValue = this.lerpValue = initialValue; + this.timeToReachTarget = timeToReachTarget; + } + + public LerpingFloat(int initialValue) { + this(initialValue, 200); + } - public LerpingFloat(int initialValue) { - this(initialValue, 200); - } + public void tick() { + int lastTimeSpent = timeSpent; + this.timeSpent += System.currentTimeMillis() - lastMillis; - public void tick() { - int lastTimeSpent = timeSpent; - this.timeSpent += System.currentTimeMillis() - lastMillis; + float lastDistPercentToTarget = + lastTimeSpent / (float) timeToReachTarget; + float distPercentToTarget = timeSpent / (float) timeToReachTarget; + float fac = (1 - lastDistPercentToTarget) / lastDistPercentToTarget; - float lastDistPercentToTarget = lastTimeSpent / (float) timeToReachTarget; - float distPercentToTarget = timeSpent / (float) timeToReachTarget; - float fac = (1 - lastDistPercentToTarget) / lastDistPercentToTarget; + float startValue = lerpValue - (targetValue - lerpValue) / fac; - float startValue = lerpValue - (targetValue - lerpValue) / fac; + float dist = targetValue - startValue; + if (dist == 0) return; - float dist = targetValue - startValue; - if (dist == 0) return; + float oldLerpValue = lerpValue; + if (distPercentToTarget >= 1) { + lerpValue = targetValue; + } else { + lerpValue = startValue + dist * distPercentToTarget; + } - float oldLerpValue = lerpValue; - if (distPercentToTarget >= 1) { - lerpValue = targetValue; - } else { - lerpValue = startValue + dist * distPercentToTarget; + if (lerpValue == oldLerpValue) { + timeSpent = lastTimeSpent; + } else { + this.lastMillis = System.currentTimeMillis(); + } } - if (lerpValue == oldLerpValue) { - timeSpent = lastTimeSpent; - } else { - this.lastMillis = System.currentTimeMillis(); + public void resetTimer() { + this.timeSpent = 0; + this.lastMillis = System.currentTimeMillis(); } - } - - public void resetTimer() { - this.timeSpent = 0; - this.lastMillis = System.currentTimeMillis(); - } - public void setTarget(float targetValue) { - this.targetValue = targetValue; - } + public void setTarget(float targetValue) { + this.targetValue = targetValue; + } - public void setValue(float value) { - this.targetValue = this.lerpValue = value; - } + public void setValue(float value) { + this.targetValue = this.lerpValue = value; + } - public float getValue() { - return lerpValue; - } + public float getValue() { + return lerpValue; + } - public float getTarget() { - return targetValue; - } + public float getTarget() { + return targetValue; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingInteger.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingInteger.java index de9aec4..63e7143 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingInteger.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/lerp/LerpingInteger.java @@ -2,75 +2,76 @@ package com.thatgravyboat.skyblockhud.core.util.lerp; public class LerpingInteger { - private int timeSpent; - private long lastMillis; - private int timeToReachTarget; + private int timeSpent; + private long lastMillis; + private int timeToReachTarget; - private int targetValue; - private int lerpValue; + private int targetValue; + private int lerpValue; - public LerpingInteger(int initialValue, int timeToReachTarget) { - this.targetValue = this.lerpValue = initialValue; - this.timeToReachTarget = timeToReachTarget; - } + public LerpingInteger(int initialValue, int timeToReachTarget) { + this.targetValue = this.lerpValue = initialValue; + this.timeToReachTarget = timeToReachTarget; + } - public LerpingInteger(int initialValue) { - this(initialValue, 200); - } + public LerpingInteger(int initialValue) { + this(initialValue, 200); + } - public void tick() { - int lastTimeSpent = timeSpent; - this.timeSpent += System.currentTimeMillis() - lastMillis; + public void tick() { + int lastTimeSpent = timeSpent; + this.timeSpent += System.currentTimeMillis() - lastMillis; - float lastDistPercentToTarget = lastTimeSpent / (float) timeToReachTarget; - float distPercentToTarget = timeSpent / (float) timeToReachTarget; - float fac = (1 - lastDistPercentToTarget) / lastDistPercentToTarget; + float lastDistPercentToTarget = + lastTimeSpent / (float) timeToReachTarget; + float distPercentToTarget = timeSpent / (float) timeToReachTarget; + float fac = (1 - lastDistPercentToTarget) / lastDistPercentToTarget; - int startValue = lerpValue - (int) ((targetValue - lerpValue) / fac); + int startValue = lerpValue - (int) ((targetValue - lerpValue) / fac); - int dist = targetValue - startValue; - if (dist == 0) return; + int dist = targetValue - startValue; + if (dist == 0) return; - int oldLerpValue = lerpValue; - if (distPercentToTarget >= 1) { - lerpValue = targetValue; - } else { - lerpValue = startValue + (int) (dist * distPercentToTarget); - } + int oldLerpValue = lerpValue; + if (distPercentToTarget >= 1) { + lerpValue = targetValue; + } else { + lerpValue = startValue + (int) (dist * distPercentToTarget); + } - if (lerpValue == oldLerpValue) { - timeSpent = lastTimeSpent; - } else { - this.lastMillis = System.currentTimeMillis(); + if (lerpValue == oldLerpValue) { + timeSpent = lastTimeSpent; + } else { + this.lastMillis = System.currentTimeMillis(); + } } - } - public int getTimeSpent() { - return timeSpent; - } + public int getTimeSpent() { + return timeSpent; + } - public void resetTimer() { - this.timeSpent = 0; - this.lastMillis = System.currentTimeMillis(); - } + public void resetTimer() { + this.timeSpent = 0; + this.lastMillis = System.currentTimeMillis(); + } - public void setTimeToReachTarget(int timeToReachTarget) { - this.timeToReachTarget = timeToReachTarget; - } + public void setTimeToReachTarget(int timeToReachTarget) { + this.timeToReachTarget = timeToReachTarget; + } - public void setTarget(int targetValue) { - this.targetValue = targetValue; - } + public void setTarget(int targetValue) { + this.targetValue = targetValue; + } - public void setValue(int value) { - this.targetValue = this.lerpValue = value; - } + public void setValue(int value) { + this.targetValue = this.lerpValue = value; + } - public int getValue() { - return lerpValue; - } + public int getValue() { + return lerpValue; + } - public int getTarget() { - return targetValue; - } + public int getTarget() { + return targetValue; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/RenderUtils.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/RenderUtils.java index 042df83..242166b 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/RenderUtils.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/RenderUtils.java @@ -14,304 +14,330 @@ import org.lwjgl.opengl.GL14; public class RenderUtils { - public static void drawFloatingRectDark(int x, int y, int width, int height) { - drawFloatingRectDark(x, y, width, height, true); - } + public static void drawFloatingRectDark( + int x, + int y, + int width, + int height + ) { + drawFloatingRectDark(x, y, width, height, true); + } - public static void drawFloatingRectDark( - int x, - int y, - int width, - int height, - boolean shadow - ) { - int alpha = 0xf0000000; + public static void drawFloatingRectDark( + int x, + int y, + int width, + int height, + boolean shadow + ) { + int alpha = 0xf0000000; - if (OpenGlHelper.isFramebufferEnabled()) { - ScaledResolution scaledResolution = new ScaledResolution( - Minecraft.getMinecraft() - ); - BackgroundBlur.renderBlurredBackground( - 15, - scaledResolution.getScaledWidth(), - scaledResolution.getScaledHeight(), - x, - y, - width, - height, - true - ); - } else { - alpha = 0xff000000; - } + if (OpenGlHelper.isFramebufferEnabled()) { + ScaledResolution scaledResolution = new ScaledResolution( + Minecraft.getMinecraft() + ); + BackgroundBlur.renderBlurredBackground( + 15, + scaledResolution.getScaledWidth(), + scaledResolution.getScaledHeight(), + x, + y, + width, + height, + true + ); + } else { + alpha = 0xff000000; + } - int main = alpha | 0x202026; - int light = 0xff303036; - int dark = 0xff101016; - Gui.drawRect(x, y, x + 1, y + height, light); //Left - Gui.drawRect(x + 1, y, x + width, y + 1, light); //Top - Gui.drawRect(x + width - 1, y + 1, x + width, y + height, dark); //Right - Gui.drawRect(x + 1, y + height - 1, x + width - 1, y + height, dark); //Bottom - Gui.drawRect(x + 1, y + 1, x + width - 1, y + height - 1, main); //Middle - if (shadow) { - Gui.drawRect(x + width, y + 2, x + width + 2, y + height + 2, 0x70000000); //Right shadow - Gui.drawRect(x + 2, y + height, x + width, y + height + 2, 0x70000000); //Bottom shadow + int main = alpha | 0x202026; + int light = 0xff303036; + int dark = 0xff101016; + Gui.drawRect(x, y, x + 1, y + height, light); //Left + Gui.drawRect(x + 1, y, x + width, y + 1, light); //Top + Gui.drawRect(x + width - 1, y + 1, x + width, y + height, dark); //Right + Gui.drawRect(x + 1, y + height - 1, x + width - 1, y + height, dark); //Bottom + Gui.drawRect(x + 1, y + 1, x + width - 1, y + height - 1, main); //Middle + if (shadow) { + Gui.drawRect( + x + width, + y + 2, + x + width + 2, + y + height + 2, + 0x70000000 + ); //Right shadow + Gui.drawRect( + x + 2, + y + height, + x + width, + y + height + 2, + 0x70000000 + ); //Bottom shadow + } } - } - public static void drawFloatingRect(int x, int y, int width, int height) { - drawFloatingRectWithAlpha(x, y, width, height, 0xFF, true); - } + public static void drawFloatingRect(int x, int y, int width, int height) { + drawFloatingRectWithAlpha(x, y, width, height, 0xFF, true); + } - public static void drawFloatingRectWithAlpha( - int x, - int y, - int width, - int height, - int alpha, - boolean shadow - ) { - int main = (alpha << 24) | 0xc0c0c0; - int light = (alpha << 24) | 0xf0f0f0; - int dark = (alpha << 24) | 0x909090; - Gui.drawRect(x, y, x + 1, y + height, light); //Left - Gui.drawRect(x + 1, y, x + width, y + 1, light); //Top - Gui.drawRect(x + width - 1, y + 1, x + width, y + height, dark); //Right - Gui.drawRect(x + 1, y + height - 1, x + width - 1, y + height, dark); //Bottom - Gui.drawRect(x + 1, y + 1, x + width - 1, y + height - 1, main); //Middle - if (shadow) { - Gui.drawRect( - x + width, - y + 2, - x + width + 2, - y + height + 2, - (alpha * 3 / 5) << 24 - ); //Right shadow - Gui.drawRect( - x + 2, - y + height, - x + width, - y + height + 2, - (alpha * 3 / 5) << 24 - ); //Bottom shadow + public static void drawFloatingRectWithAlpha( + int x, + int y, + int width, + int height, + int alpha, + boolean shadow + ) { + int main = (alpha << 24) | 0xc0c0c0; + int light = (alpha << 24) | 0xf0f0f0; + int dark = (alpha << 24) | 0x909090; + Gui.drawRect(x, y, x + 1, y + height, light); //Left + Gui.drawRect(x + 1, y, x + width, y + 1, light); //Top + Gui.drawRect(x + width - 1, y + 1, x + width, y + height, dark); //Right + Gui.drawRect(x + 1, y + height - 1, x + width - 1, y + height, dark); //Bottom + Gui.drawRect(x + 1, y + 1, x + width - 1, y + height - 1, main); //Middle + if (shadow) { + Gui.drawRect( + x + width, + y + 2, + x + width + 2, + y + height + 2, + (alpha * 3 / 5) << 24 + ); //Right shadow + Gui.drawRect( + x + 2, + y + height, + x + width, + y + height + 2, + (alpha * 3 / 5) << 24 + ); //Bottom shadow + } } - } - public static void drawTexturedModalRect( - int x, - int y, - int textureX, - int textureY, - int width, - int height - ) { - double f = 0.00390625; - double f1 = 0.00390625; - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer - .pos(x + 0.0, y + height, 0.0) - .tex((textureX + 0.0) * f, (textureY + height) * f1) - .endVertex(); - worldrenderer - .pos(x + width, y + height, 0.0) - .tex((textureX + width) * f, (textureY + height) * f1) - .endVertex(); - worldrenderer - .pos(x + width, y + 0.0, 0.0) - .tex((textureX + width) * f, (textureY + 0.0) * f1) - .endVertex(); - worldrenderer - .pos(x + 0.0, y + 0.0, 0.0) - .tex((textureX + 0.0) * f, (textureY + 0.0) * f1) - .endVertex(); - tessellator.draw(); - } + public static void drawTexturedModalRect( + int x, + int y, + int textureX, + int textureY, + int width, + int height + ) { + double f = 0.00390625; + double f1 = 0.00390625; + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer + .pos(x + 0.0, y + height, 0.0) + .tex((textureX + 0.0) * f, (textureY + height) * f1) + .endVertex(); + worldrenderer + .pos(x + width, y + height, 0.0) + .tex((textureX + width) * f, (textureY + height) * f1) + .endVertex(); + worldrenderer + .pos(x + width, y + 0.0, 0.0) + .tex((textureX + width) * f, (textureY + 0.0) * f1) + .endVertex(); + worldrenderer + .pos(x + 0.0, y + 0.0, 0.0) + .tex((textureX + 0.0) * f, (textureY + 0.0) * f1) + .endVertex(); + tessellator.draw(); + } - public static void drawTexturedRect( - float x, - float y, - float width, - float height - ) { - drawTexturedRect(x, y, width, height, 0, 1, 0, 1); - } + public static void drawTexturedRect( + float x, + float y, + float width, + float height + ) { + drawTexturedRect(x, y, width, height, 0, 1, 0, 1); + } - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - int filter - ) { - drawTexturedRect(x, y, width, height, 0, 1, 0, 1, filter); - } + public static void drawTexturedRect( + float x, + float y, + float width, + float height, + int filter + ) { + drawTexturedRect(x, y, width, height, 0, 1, 0, 1, filter); + } - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax - ) { - drawTexturedRect( - x, - y, - width, - height, - uMin, - uMax, - vMin, - vMax, - GL11.GL_NEAREST - ); - } + public static void drawTexturedRect( + float x, + float y, + float width, + float height, + float uMin, + float uMax, + float vMin, + float vMax + ) { + drawTexturedRect( + x, + y, + width, + height, + uMin, + uMax, + vMin, + vMax, + GL11.GL_NEAREST + ); + } - public static void drawTexturedRect( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax, - int filter - ) { - GlStateManager.enableBlend(); - GL14.glBlendFuncSeparate( - GL11.GL_SRC_ALPHA, - GL11.GL_ONE_MINUS_SRC_ALPHA, - GL11.GL_ONE, - GL11.GL_ONE_MINUS_SRC_ALPHA - ); + public static void drawTexturedRect( + float x, + float y, + float width, + float height, + float uMin, + float uMax, + float vMin, + float vMax, + int filter + ) { + GlStateManager.enableBlend(); + GL14.glBlendFuncSeparate( + GL11.GL_SRC_ALPHA, + GL11.GL_ONE_MINUS_SRC_ALPHA, + GL11.GL_ONE, + GL11.GL_ONE_MINUS_SRC_ALPHA + ); - drawTexturedRectNoBlend( - x, - y, - width, - height, - uMin, - uMax, - vMin, - vMax, - filter - ); + drawTexturedRectNoBlend( + x, + y, + width, + height, + uMin, + uMax, + vMin, + vMax, + filter + ); - GlStateManager.disableBlend(); - } + GlStateManager.disableBlend(); + } - public static void drawTexturedRectNoBlend( - float x, - float y, - float width, - float height, - float uMin, - float uMax, - float vMin, - float vMax, - int filter - ) { - GlStateManager.enableTexture2D(); + public static void drawTexturedRectNoBlend( + float x, + float y, + float width, + float height, + float uMin, + float uMax, + float vMin, + float vMax, + int filter + ) { + GlStateManager.enableTexture2D(); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MIN_FILTER, - filter - ); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MAG_FILTER, - filter - ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MIN_FILTER, + filter + ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MAG_FILTER, + filter + ); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(x, y + height, 0.0D).tex(uMin, vMax).endVertex(); - worldrenderer.pos(x + width, y + height, 0.0D).tex(uMax, vMax).endVertex(); - worldrenderer.pos(x + width, y, 0.0D).tex(uMax, vMin).endVertex(); - worldrenderer.pos(x, y, 0.0D).tex(uMin, vMin).endVertex(); - tessellator.draw(); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldrenderer.pos(x, y + height, 0.0D).tex(uMin, vMax).endVertex(); + worldrenderer + .pos(x + width, y + height, 0.0D) + .tex(uMax, vMax) + .endVertex(); + worldrenderer.pos(x + width, y, 0.0D).tex(uMax, vMin).endVertex(); + worldrenderer.pos(x, y, 0.0D).tex(uMin, vMin).endVertex(); + tessellator.draw(); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MIN_FILTER, - GL11.GL_NEAREST - ); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_MAG_FILTER, - GL11.GL_NEAREST - ); - } + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MIN_FILTER, + GL11.GL_NEAREST + ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_MAG_FILTER, + GL11.GL_NEAREST + ); + } - public static void drawGradientRect( - int zLevel, - int left, - int top, - int right, - int bottom, - int startColor, - int endColor - ) { - float startAlpha = (float) (startColor >> 24 & 255) / 255.0F; - float startRed = (float) (startColor >> 16 & 255) / 255.0F; - float startGreen = (float) (startColor >> 8 & 255) / 255.0F; - float startBlue = (float) (startColor & 255) / 255.0F; - float endAlpha = (float) (endColor >> 24 & 255) / 255.0F; - float endRed = (float) (endColor >> 16 & 255) / 255.0F; - float endGreen = (float) (endColor >> 8 & 255) / 255.0F; - float endBlue = (float) (endColor & 255) / 255.0F; + public static void drawGradientRect( + int zLevel, + int left, + int top, + int right, + int bottom, + int startColor, + int endColor + ) { + float startAlpha = (float) (startColor >> 24 & 255) / 255.0F; + float startRed = (float) (startColor >> 16 & 255) / 255.0F; + float startGreen = (float) (startColor >> 8 & 255) / 255.0F; + float startBlue = (float) (startColor & 255) / 255.0F; + float endAlpha = (float) (endColor >> 24 & 255) / 255.0F; + float endRed = (float) (endColor >> 16 & 255) / 255.0F; + float endGreen = (float) (endColor >> 8 & 255) / 255.0F; + float endBlue = (float) (endColor & 255) / 255.0F; - GlStateManager.disableTexture2D(); - GlStateManager.enableBlend(); - GlStateManager.disableAlpha(); - GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); - GlStateManager.shadeModel(7425); + GlStateManager.disableTexture2D(); + GlStateManager.enableBlend(); + GlStateManager.disableAlpha(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.shadeModel(7425); - Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); - worldrenderer - .pos(right, top, zLevel) - .color(startRed, startGreen, startBlue, startAlpha) - .endVertex(); - worldrenderer - .pos(left, top, zLevel) - .color(startRed, startGreen, startBlue, startAlpha) - .endVertex(); - worldrenderer - .pos(left, bottom, zLevel) - .color(endRed, endGreen, endBlue, endAlpha) - .endVertex(); - worldrenderer - .pos(right, bottom, zLevel) - .color(endRed, endGreen, endBlue, endAlpha) - .endVertex(); - tessellator.draw(); + Tessellator tessellator = Tessellator.getInstance(); + WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR); + worldrenderer + .pos(right, top, zLevel) + .color(startRed, startGreen, startBlue, startAlpha) + .endVertex(); + worldrenderer + .pos(left, top, zLevel) + .color(startRed, startGreen, startBlue, startAlpha) + .endVertex(); + worldrenderer + .pos(left, bottom, zLevel) + .color(endRed, endGreen, endBlue, endAlpha) + .endVertex(); + worldrenderer + .pos(right, bottom, zLevel) + .color(endRed, endGreen, endBlue, endAlpha) + .endVertex(); + tessellator.draw(); - GlStateManager.shadeModel(7424); - GlStateManager.disableBlend(); - GlStateManager.enableAlpha(); - GlStateManager.enableTexture2D(); - } + GlStateManager.shadeModel(7424); + GlStateManager.disableBlend(); + GlStateManager.enableAlpha(); + GlStateManager.enableTexture2D(); + } - public static void drawInnerBox(int left, int top, int width, int height) { - Gui.drawRect(left, top, left + width, top + height, 0x6008080E); //Middle - Gui.drawRect(left, top, left + 1, top + height, 0xff08080E); //Left - Gui.drawRect(left, top, left + width, top + 1, 0xff08080E); //Top - Gui.drawRect(left + width - 1, top, left + width, top + height, 0xff28282E); //Right - Gui.drawRect( - left, - top + height - 1, - left + width, - top + height, - 0xff28282E - ); //Bottom - } + public static void drawInnerBox(int left, int top, int width, int height) { + Gui.drawRect(left, top, left + width, top + height, 0x6008080E); //Middle + Gui.drawRect(left, top, left + 1, top + height, 0xff08080E); //Left + Gui.drawRect(left, top, left + width, top + 1, 0xff08080E); //Top + Gui.drawRect( + left + width - 1, + top, + left + width, + top + height, + 0xff28282E + ); //Right + Gui.drawRect( + left, + top + height - 1, + left + width, + top + height, + 0xff28282E + ); //Bottom + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/TextRenderUtils.java b/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/TextRenderUtils.java index 566953a..4284012 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/TextRenderUtils.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/core/util/render/TextRenderUtils.java @@ -13,355 +13,364 @@ import org.lwjgl.opengl.GL11; public class TextRenderUtils { - public static int getCharVertLen(char c) { - if ("acegmnopqrsuvwxyz".indexOf(c) >= 0) { - return 5; - } else { - return 7; + public static int getCharVertLen(char c) { + if ("acegmnopqrsuvwxyz".indexOf(c) >= 0) { + return 5; + } else { + return 7; + } } - } - - public static float getVerticalHeight(String str) { - str = StringUtils.cleanColour(str); - float height = 0; - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - int charHeight = getCharVertLen(c); - height += charHeight + 1.5f; + + public static float getVerticalHeight(String str) { + str = StringUtils.cleanColour(str); + float height = 0; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + int charHeight = getCharVertLen(c); + height += charHeight + 1.5f; + } + return height; } - return height; - } - - public static void drawStringVertical( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int colour - ) { - String format = FontRenderer.getFormatFromString(str); - str = StringUtils.cleanColour(str); - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - - int charHeight = getCharVertLen(c); - int charWidth = fr.getCharWidth(c); - fr.drawString( - format + c, - x + (5 - charWidth) / 2f, - y - 7 + charHeight, - colour, - shadow - ); - - y += charHeight + 1.5f; + + public static void drawStringVertical( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int colour + ) { + String format = FontRenderer.getFormatFromString(str); + str = StringUtils.cleanColour(str); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + + int charHeight = getCharVertLen(c); + int charWidth = fr.getCharWidth(c); + fr.drawString( + format + c, + x + (5 - charWidth) / 2f, + y - 7 + charHeight, + colour, + shadow + ); + + y += charHeight + 1.5f; + } } - } - - public static void drawStringScaledMaxWidth( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int len, - int colour - ) { - int strLen = fr.getStringWidth(str); - float factor = len / (float) strLen; - factor = Math.min(1, factor); - - drawStringScaled(str, fr, x, y, shadow, colour, factor); - } - - public static void drawStringCentered( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int colour - ) { - int strLen = fr.getStringWidth(str); - - float x2 = x - strLen / 2f; - float y2 = y - fr.FONT_HEIGHT / 2f; - - GL11.glTranslatef(x2, y2, 0); - fr.drawString(str, 0, 0, colour, shadow); - GL11.glTranslatef(-x2, -y2, 0); - } - - public static void drawStringScaled( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int colour, - float factor - ) { - GlStateManager.scale(factor, factor, 1); - fr.drawString(str, x / factor, y / factor, colour, shadow); - GlStateManager.scale(1 / factor, 1 / factor, 1); - } - - public static void drawStringCenteredScaledMaxWidth( - String str, - FontRenderer fr, - float x, - float y, - boolean shadow, - int len, - int colour - ) { - int strLen = fr.getStringWidth(str); - float factor = len / (float) strLen; - factor = Math.min(1, factor); - int newLen = Math.min(strLen, len); - - float fontHeight = 8 * factor; - - drawStringScaled( - str, - fr, - x - newLen / 2, - y - fontHeight / 2, - shadow, - colour, - factor - ); - } - - public static void renderToolTip( - ItemStack stack, - int mouseX, - int mouseY, - int screenWidth, - int screenHeight, - FontRenderer fontStd - ) { - List<String> list = stack.getTooltip( - Minecraft.getMinecraft().thePlayer, - Minecraft.getMinecraft().gameSettings.advancedItemTooltips - ); - - for (int i = 0; i < list.size(); ++i) { - if (i == 0) { - list.set(i, stack.getRarity().rarityColor + list.get(i)); - } else { - list.set(i, EnumChatFormatting.GRAY + list.get(i)); - } + + public static void drawStringScaledMaxWidth( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int len, + int colour + ) { + int strLen = fr.getStringWidth(str); + float factor = len / (float) strLen; + factor = Math.min(1, factor); + + drawStringScaled(str, fr, x, y, shadow, colour, factor); } - FontRenderer font = stack.getItem().getFontRenderer(stack); - drawHoveringText( - list, - mouseX, - mouseY, - screenWidth, - screenHeight, - -1, - font == null ? fontStd : font - ); - } - - public static void drawHoveringText( - List<String> textLines, - final int mouseX, - final int mouseY, - final int screenWidth, - final int screenHeight, - final int maxTextWidth, - FontRenderer font - ) { - if (!textLines.isEmpty()) { - GlStateManager.disableRescaleNormal(); - RenderHelper.disableStandardItemLighting(); - GlStateManager.disableLighting(); - GlStateManager.disableDepth(); - int tooltipTextWidth = 0; - - for (String textLine : textLines) { - int textLineWidth = font.getStringWidth(textLine); - - if (textLineWidth > tooltipTextWidth) { - tooltipTextWidth = textLineWidth; - } - } - - boolean needsWrap = false; - - int titleLinesCount = 1; - int tooltipX = mouseX + 12; - if (tooltipX + tooltipTextWidth + 4 > screenWidth) { - tooltipX = mouseX - 16 - tooltipTextWidth; - if ( - tooltipX < 4 - ) { // if the tooltip doesn't fit on the screen - if (mouseX > screenWidth / 2) { - tooltipTextWidth = mouseX - 12 - 8; - } else { - tooltipTextWidth = screenWidth - 16 - mouseX; - } - needsWrap = true; - } - } - - if (maxTextWidth > 0 && tooltipTextWidth > maxTextWidth) { - tooltipTextWidth = maxTextWidth; - needsWrap = true; - } - - if (needsWrap) { - int wrappedTooltipWidth = 0; - List<String> wrappedTextLines = new ArrayList<String>(); - for (int i = 0; i < textLines.size(); i++) { - String textLine = textLines.get(i); - List<String> wrappedLine = font.listFormattedStringToWidth( - textLine, - tooltipTextWidth - ); - if (i == 0) { - titleLinesCount = wrappedLine.size(); - } - - for (String line : wrappedLine) { - int lineWidth = font.getStringWidth(line); - if (lineWidth > wrappedTooltipWidth) { - wrappedTooltipWidth = lineWidth; + public static void drawStringCentered( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int colour + ) { + int strLen = fr.getStringWidth(str); + + float x2 = x - strLen / 2f; + float y2 = y - fr.FONT_HEIGHT / 2f; + + GL11.glTranslatef(x2, y2, 0); + fr.drawString(str, 0, 0, colour, shadow); + GL11.glTranslatef(-x2, -y2, 0); + } + + public static void drawStringScaled( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int colour, + float factor + ) { + GlStateManager.scale(factor, factor, 1); + fr.drawString(str, x / factor, y / factor, colour, shadow); + GlStateManager.scale(1 / factor, 1 / factor, 1); + } + + public static void drawStringCenteredScaledMaxWidth( + String str, + FontRenderer fr, + float x, + float y, + boolean shadow, + int len, + int colour + ) { + int strLen = fr.getStringWidth(str); + float factor = len / (float) strLen; + factor = Math.min(1, factor); + int newLen = Math.min(strLen, len); + + float fontHeight = 8 * factor; + + drawStringScaled( + str, + fr, + x - newLen / 2, + y - fontHeight / 2, + shadow, + colour, + factor + ); + } + + public static void renderToolTip( + ItemStack stack, + int mouseX, + int mouseY, + int screenWidth, + int screenHeight, + FontRenderer fontStd + ) { + List<String> list = stack.getTooltip( + Minecraft.getMinecraft().thePlayer, + Minecraft.getMinecraft().gameSettings.advancedItemTooltips + ); + + for (int i = 0; i < list.size(); ++i) { + if (i == 0) { + list.set(i, stack.getRarity().rarityColor + list.get(i)); + } else { + list.set(i, EnumChatFormatting.GRAY + list.get(i)); } - wrappedTextLines.add(line); - } } - tooltipTextWidth = wrappedTooltipWidth; - textLines = wrappedTextLines; - if (mouseX > screenWidth / 2) { - tooltipX = mouseX - 16 - tooltipTextWidth; - } else { - tooltipX = mouseX + 12; - } - } + FontRenderer font = stack.getItem().getFontRenderer(stack); + drawHoveringText( + list, + mouseX, + mouseY, + screenWidth, + screenHeight, + -1, + font == null ? fontStd : font + ); + } - int tooltipY = mouseY - 12; - int tooltipHeight = 8; + public static void drawHoveringText( + List<String> textLines, + final int mouseX, + final int mouseY, + final int screenWidth, + final int screenHeight, + final int maxTextWidth, + FontRenderer font + ) { + if (!textLines.isEmpty()) { + GlStateManager.disableRescaleNormal(); + RenderHelper.disableStandardItemLighting(); + GlStateManager.disableLighting(); + GlStateManager.disableDepth(); + int tooltipTextWidth = 0; + + for (String textLine : textLines) { + int textLineWidth = font.getStringWidth(textLine); + + if (textLineWidth > tooltipTextWidth) { + tooltipTextWidth = textLineWidth; + } + } - if (textLines.size() > 1) { - tooltipHeight += (textLines.size() - 1) * 10; - if (textLines.size() > titleLinesCount) { - tooltipHeight += 2; // gap between title lines and next lines - } - } - - if (tooltipY + tooltipHeight + 6 > screenHeight) { - tooltipY = screenHeight - tooltipHeight - 6; - } - - final int zLevel = 300; - final int backgroundColor = 0xF0100010; - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 4, - tooltipX + tooltipTextWidth + 3, - tooltipY - 3, - backgroundColor, - backgroundColor - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY + tooltipHeight + 3, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 4, - backgroundColor, - backgroundColor - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 3, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 3, - backgroundColor, - backgroundColor - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 4, - tooltipY - 3, - tooltipX - 3, - tooltipY + tooltipHeight + 3, - backgroundColor, - backgroundColor - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX + tooltipTextWidth + 3, - tooltipY - 3, - tooltipX + tooltipTextWidth + 4, - tooltipY + tooltipHeight + 3, - backgroundColor, - backgroundColor - ); - final int borderColorStart = 0x505000FF; - final int borderColorEnd = - (borderColorStart & 0xFEFEFE) >> 1 | borderColorStart & 0xFF000000; - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 3 + 1, - tooltipX - 3 + 1, - tooltipY + tooltipHeight + 3 - 1, - borderColorStart, - borderColorEnd - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX + tooltipTextWidth + 2, - tooltipY - 3 + 1, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 3 - 1, - borderColorStart, - borderColorEnd - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY - 3, - tooltipX + tooltipTextWidth + 3, - tooltipY - 3 + 1, - borderColorStart, - borderColorStart - ); - RenderUtils.drawGradientRect( - zLevel, - tooltipX - 3, - tooltipY + tooltipHeight + 2, - tooltipX + tooltipTextWidth + 3, - tooltipY + tooltipHeight + 3, - borderColorEnd, - borderColorEnd - ); - - for (int lineNumber = 0; lineNumber < textLines.size(); ++lineNumber) { - String line = textLines.get(lineNumber); - font.drawStringWithShadow(line, (float) tooltipX, (float) tooltipY, -1); - - if (lineNumber + 1 == titleLinesCount) { - tooltipY += 2; - } + boolean needsWrap = false; + + int titleLinesCount = 1; + int tooltipX = mouseX + 12; + if (tooltipX + tooltipTextWidth + 4 > screenWidth) { + tooltipX = mouseX - 16 - tooltipTextWidth; + if (tooltipX < 4) { // if the tooltip doesn't fit on the screen + if (mouseX > screenWidth / 2) { + tooltipTextWidth = mouseX - 12 - 8; + } else { + tooltipTextWidth = screenWidth - 16 - mouseX; + } + needsWrap = true; + } + } + + if (maxTextWidth > 0 && tooltipTextWidth > maxTextWidth) { + tooltipTextWidth = maxTextWidth; + needsWrap = true; + } + + if (needsWrap) { + int wrappedTooltipWidth = 0; + List<String> wrappedTextLines = new ArrayList<String>(); + for (int i = 0; i < textLines.size(); i++) { + String textLine = textLines.get(i); + List<String> wrappedLine = font.listFormattedStringToWidth( + textLine, + tooltipTextWidth + ); + if (i == 0) { + titleLinesCount = wrappedLine.size(); + } + + for (String line : wrappedLine) { + int lineWidth = font.getStringWidth(line); + if (lineWidth > wrappedTooltipWidth) { + wrappedTooltipWidth = lineWidth; + } + wrappedTextLines.add(line); + } + } + tooltipTextWidth = wrappedTooltipWidth; + textLines = wrappedTextLines; + + if (mouseX > screenWidth / 2) { + tooltipX = mouseX - 16 - tooltipTextWidth; + } else { + tooltipX = mouseX + 12; + } + } + + int tooltipY = mouseY - 12; + int tooltipHeight = 8; + + if (textLines.size() > 1) { + tooltipHeight += (textLines.size() - 1) * 10; + if (textLines.size() > titleLinesCount) { + tooltipHeight += 2; // gap between title lines and next lines + } + } - tooltipY += 10; - } + if (tooltipY + tooltipHeight + 6 > screenHeight) { + tooltipY = screenHeight - tooltipHeight - 6; + } + + final int zLevel = 300; + final int backgroundColor = 0xF0100010; + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 3, + tooltipY - 4, + tooltipX + tooltipTextWidth + 3, + tooltipY - 3, + backgroundColor, + backgroundColor + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 3, + tooltipY + tooltipHeight + 3, + tooltipX + tooltipTextWidth + 3, + tooltipY + tooltipHeight + 4, + backgroundColor, + backgroundColor + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 3, + tooltipY - 3, + tooltipX + tooltipTextWidth + 3, + tooltipY + tooltipHeight + 3, + backgroundColor, + backgroundColor + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 4, + tooltipY - 3, + tooltipX - 3, + tooltipY + tooltipHeight + 3, + backgroundColor, + backgroundColor + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX + tooltipTextWidth + 3, + tooltipY - 3, + tooltipX + tooltipTextWidth + 4, + tooltipY + tooltipHeight + 3, + backgroundColor, + backgroundColor + ); + final int borderColorStart = 0x505000FF; + final int borderColorEnd = + (borderColorStart & 0xFEFEFE) >> 1 | + borderColorStart & + 0xFF000000; + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 3, + tooltipY - 3 + 1, + tooltipX - 3 + 1, + tooltipY + tooltipHeight + 3 - 1, + borderColorStart, + borderColorEnd + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX + tooltipTextWidth + 2, + tooltipY - 3 + 1, + tooltipX + tooltipTextWidth + 3, + tooltipY + tooltipHeight + 3 - 1, + borderColorStart, + borderColorEnd + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 3, + tooltipY - 3, + tooltipX + tooltipTextWidth + 3, + tooltipY - 3 + 1, + borderColorStart, + borderColorStart + ); + RenderUtils.drawGradientRect( + zLevel, + tooltipX - 3, + tooltipY + tooltipHeight + 2, + tooltipX + tooltipTextWidth + 3, + tooltipY + tooltipHeight + 3, + borderColorEnd, + borderColorEnd + ); + + for ( + int lineNumber = 0; + lineNumber < textLines.size(); + ++lineNumber + ) { + String line = textLines.get(lineNumber); + font.drawStringWithShadow( + line, + (float) tooltipX, + (float) tooltipY, + -1 + ); + + if (lineNumber + 1 == titleLinesCount) { + tooltipY += 2; + } + + tooltipY += 10; + } - GlStateManager.enableLighting(); - GlStateManager.enableDepth(); - RenderHelper.enableStandardItemLighting(); - GlStateManager.enableRescaleNormal(); + GlStateManager.enableLighting(); + GlStateManager.enableDepth(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.enableRescaleNormal(); + } + GlStateManager.disableLighting(); } - GlStateManager.disableLighting(); - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/dungeons/Classes.java b/src/main/java/com/thatgravyboat/skyblockhud/dungeons/Classes.java index 1c30045..f0f58da 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/dungeons/Classes.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/dungeons/Classes.java @@ -1,50 +1,50 @@ package com.thatgravyboat.skyblockhud.dungeons; public enum Classes { - H("Healer", "H", 154), - M("Mage", "M", 90), - B("Berserk", "B", 122), - A("Archer", "A", 58), - T("Tank", "T", 186); + H("Healer", "H", 154), + M("Mage", "M", 90), + B("Berserk", "B", 122), + A("Archer", "A", 58), + T("Tank", "T", 186); - private final String displayName; - private final String classId; - private final int textureY; + private final String displayName; + private final String classId; + private final int textureY; - Classes(String name, String id, int textureY) { - this.displayName = name; - this.classId = id; - this.textureY = textureY; - } + Classes(String name, String id, int textureY) { + this.displayName = name; + this.classId = id; + this.textureY = textureY; + } - public String getDisplayName() { - return this.displayName; - } + public String getDisplayName() { + return this.displayName; + } - public String getClassId() { - return this.classId; - } + public String getClassId() { + return this.classId; + } - public int getTextureY() { - return this.textureY; - } + public int getTextureY() { + return this.textureY; + } - public static Classes findClass(String input) { - if (input.length() == 1) { - try { - return Classes.valueOf(input.toUpperCase()); - } catch (IllegalArgumentException ignored) {} - } else if (input.length() == 3) { - try { - return Classes.valueOf( - input.replace("[", "").replace("]", "").toUpperCase() - ); - } catch (IllegalArgumentException ignored) {} - } else { - for (Classes clazz : Classes.values()) { - if (clazz.displayName.equalsIgnoreCase(input)) return clazz; - } + public static Classes findClass(String input) { + if (input.length() == 1) { + try { + return Classes.valueOf(input.toUpperCase()); + } catch (IllegalArgumentException ignored) {} + } else if (input.length() == 3) { + try { + return Classes.valueOf( + input.replace("[", "").replace("]", "").toUpperCase() + ); + } catch (IllegalArgumentException ignored) {} + } else { + for (Classes clazz : Classes.values()) { + if (clazz.displayName.equalsIgnoreCase(input)) return clazz; + } + } + return B; } - return B; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonHandler.java index 5307273..0c9cb2f 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonHandler.java @@ -13,225 +13,236 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class DungeonHandler { - private static final HashMap<String, DungeonPlayer> dungeonPlayersMap = new HashMap<>(); - private static int dungeonTime = 0; - private static int dungeonCleared = 0; - private static boolean bloodKey = false; - private static int witherKeys = 0; - private static int maxSecrets = 0; - private static int secrets = 0; - private static int totalSecrets = 0; - private static int deaths = 0; - private static int crypts = 0; - - private static final Pattern DungeonPlayerRegex = Pattern.compile( - "^\\[([HMBAT])] ([\\w]+) ([0-9]+|DEAD)$" - ); - - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if (LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS)) { - DungeonHandler.checkForDungeonTime(event.formattedLine); - DungeonHandler.checkForDungeonCleared(event.formattedLine); - DungeonHandler.checkForDungeonKeys(event.formattedLine, event.rawLine); - DungeonHandler.checkForDungeonPlayers( - event.formattedLine, - Minecraft.getMinecraft() - ); - } - } - - @SubscribeEvent - public void onSidebarPost(SidebarPostEvent event) { - if (!LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS)) { - DungeonHandler.clearDungeonStats(); - } - } - - public static void checkForDungeonPlayers(String scoreLine, Minecraft mc) { - Matcher dungeonMatcher = DungeonPlayerRegex.matcher(scoreLine); - if (dungeonMatcher.matches() && DungeonHandler.dungeonTime > 0) { - Classes playerClass = Classes.valueOf(dungeonMatcher.group(1)); - String displayName = dungeonMatcher.group(2); - String health = dungeonMatcher.group(3); - if ( - !mc.thePlayer - .getName() - .toLowerCase() - .startsWith(displayName.toLowerCase().trim()) - ) { - int healthNum = 0; - if (!health.equalsIgnoreCase("dead")) { - try { - healthNum = Integer.parseInt(health); - } catch (NumberFormatException ignored) {} + private static final HashMap<String, DungeonPlayer> dungeonPlayersMap = new HashMap<>(); + private static int dungeonTime = 0; + private static int dungeonCleared = 0; + private static boolean bloodKey = false; + private static int witherKeys = 0; + private static int maxSecrets = 0; + private static int secrets = 0; + private static int totalSecrets = 0; + private static int deaths = 0; + private static int crypts = 0; + + private static final Pattern DungeonPlayerRegex = Pattern.compile( + "^\\[([HMBAT])] ([\\w]+) ([0-9]+|DEAD)$" + ); + + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if (LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS)) { + DungeonHandler.checkForDungeonTime(event.formattedLine); + DungeonHandler.checkForDungeonCleared(event.formattedLine); + DungeonHandler.checkForDungeonKeys( + event.formattedLine, + event.rawLine + ); + DungeonHandler.checkForDungeonPlayers( + event.formattedLine, + Minecraft.getMinecraft() + ); } - DungeonPlayer player = new DungeonPlayer( - playerClass, - displayName, - healthNum, - health.equalsIgnoreCase("dead") - ); - dungeonPlayersMap.put(displayName.toLowerCase(), player); - } - } - } - - public static void checkForDungeonTime(String scoreLine) { - if (scoreLine.toLowerCase().trim().contains("time elapsed:")) { - String timeLine = scoreLine - .toLowerCase() - .trim() - .replace("time elapsed:", ""); - String[] times = timeLine.split("m "); - int time = 0; - try { - time += - Integer.parseInt(times[0].replace(" ", "").replace("m", "")) * 60; - time += Integer.parseInt(times[1].replace(" ", "").replace("s", "")); - } catch (NumberFormatException ignored) {} - dungeonTime = time; - } - } - - public static void checkForDungeonCleared(String scoreline) { - if (scoreline.toLowerCase().trim().contains("dungeon cleared:")) { - String dungeonClearedText = scoreline - .toLowerCase() - .trim() - .replace("dungeon cleared:", "") - .replace(" ", "") - .replace("%", ""); - try { - dungeonCleared = Integer.parseInt(dungeonClearedText); - } catch (NumberFormatException ignored) {} - } - } - - public static void checkForDungeonKeys(String scoreline, String rawString) { - if (scoreline.toLowerCase().trim().contains("keys:")) { - String dungeonClearedText = scoreline - .toLowerCase() - .trim() - .replace("keys:", "") - .replace(" ", "") - .replace("x", ""); - bloodKey = rawString.contains("\u2713"); - try { - witherKeys = Integer.parseInt(dungeonClearedText); - } catch (NumberFormatException ignored) {} - } - } - - public static void parseSecrets(String statusBar) { - boolean hasSecrets = false; - String[] parts = statusBar.split(" {4,}"); - for (String part : parts) { - if ( - part.toLowerCase().contains("secrets") && - !statusBar.toLowerCase().contains("no secrets") - ) { - hasSecrets = true; - try { - String secret = Utils - .removeColor(part.replace("Secrets", "")) - .replace(" ", ""); - maxSecrets = Integer.parseInt(secret.split("/")[1]); - secrets = Integer.parseInt(secret.split("/")[0]); - } catch (NumberFormatException ignored) {} - } - } - if (!hasSecrets) { - maxSecrets = 0; - secrets = 0; - } - } - - public static void parseTotalSecrets(String playerName) { - if (playerName.toLowerCase().contains("secrets found:")) { - String totalSecret = Utils - .removeColor(playerName.toLowerCase().replace("secrets found:", "")) - .replace(" ", ""); - try { - totalSecrets = Integer.parseInt(totalSecret); - } catch (NumberFormatException ignored) {} - } - } - - public static void parseDeaths(String playerName) { - if (playerName.toLowerCase().contains("deaths:")) { - String death = Utils - .removeColor(playerName.toLowerCase().replace("deaths:", "")) - .replace("(", "") - .replace(")", "") - .replace(" ", ""); - try { - deaths = Integer.parseInt(death); - } catch (NumberFormatException ignored) {} - } - } - - public static void parseCrypts(String playerName) { - if (playerName.toLowerCase().contains("crypts:")) { - String crypt = Utils - .removeColor(playerName.toLowerCase().replace("crypts:", "")) - .replace(" ", ""); - try { - crypts = Integer.parseInt(crypt); - } catch (NumberFormatException ignored) {} - } - } - - public static void clearDungeonStats() { - dungeonPlayersMap.clear(); - dungeonTime = 0; - dungeonCleared = 0; - bloodKey = false; - witherKeys = 0; - maxSecrets = 0; - secrets = 0; - totalSecrets = 0; - deaths = 0; - crypts = 0; - } - - public static HashMap<String, DungeonPlayer> getDungeonPlayers() { - return dungeonPlayersMap; - } - - public static int getDungeonTime() { - return dungeonTime; - } - - public static int getDungeonCleared() { - return dungeonCleared; - } - - public static int getWitherKeys() { - return witherKeys; - } - - public static boolean hasBloodkey() { - return bloodKey; - } - - public static int getMaxSecrets() { - return maxSecrets; - } - - public static int getSecrets() { - return secrets; - } - - public static int getDeaths() { - return deaths; - } - - public static int getTotalSecrets() { - return totalSecrets; - } - - public static int getCrypts() { - return crypts; - } + } + + @SubscribeEvent + public void onSidebarPost(SidebarPostEvent event) { + if (!LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS)) { + DungeonHandler.clearDungeonStats(); + } + } + + public static void checkForDungeonPlayers(String scoreLine, Minecraft mc) { + Matcher dungeonMatcher = DungeonPlayerRegex.matcher(scoreLine); + if (dungeonMatcher.matches() && DungeonHandler.dungeonTime > 0) { + Classes playerClass = Classes.valueOf(dungeonMatcher.group(1)); + String displayName = dungeonMatcher.group(2); + String health = dungeonMatcher.group(3); + if ( + !mc.thePlayer + .getName() + .toLowerCase() + .startsWith(displayName.toLowerCase().trim()) + ) { + int healthNum = 0; + if (!health.equalsIgnoreCase("dead")) { + try { + healthNum = Integer.parseInt(health); + } catch (NumberFormatException ignored) {} + } + DungeonPlayer player = new DungeonPlayer( + playerClass, + displayName, + healthNum, + health.equalsIgnoreCase("dead") + ); + dungeonPlayersMap.put(displayName.toLowerCase(), player); + } + } + } + + public static void checkForDungeonTime(String scoreLine) { + if (scoreLine.toLowerCase().trim().contains("time elapsed:")) { + String timeLine = scoreLine + .toLowerCase() + .trim() + .replace("time elapsed:", ""); + String[] times = timeLine.split("m "); + int time = 0; + try { + time += + Integer.parseInt( + times[0].replace(" ", "").replace("m", "") + ) * + 60; + time += + Integer.parseInt( + times[1].replace(" ", "").replace("s", "") + ); + } catch (NumberFormatException ignored) {} + dungeonTime = time; + } + } + + public static void checkForDungeonCleared(String scoreline) { + if (scoreline.toLowerCase().trim().contains("dungeon cleared:")) { + String dungeonClearedText = scoreline + .toLowerCase() + .trim() + .replace("dungeon cleared:", "") + .replace(" ", "") + .replace("%", ""); + try { + dungeonCleared = Integer.parseInt(dungeonClearedText); + } catch (NumberFormatException ignored) {} + } + } + + public static void checkForDungeonKeys(String scoreline, String rawString) { + if (scoreline.toLowerCase().trim().contains("keys:")) { + String dungeonClearedText = scoreline + .toLowerCase() + .trim() + .replace("keys:", "") + .replace(" ", "") + .replace("x", ""); + bloodKey = rawString.contains("\u2713"); + try { + witherKeys = Integer.parseInt(dungeonClearedText); + } catch (NumberFormatException ignored) {} + } + } + + public static void parseSecrets(String statusBar) { + boolean hasSecrets = false; + String[] parts = statusBar.split(" {4,}"); + for (String part : parts) { + if ( + part.toLowerCase().contains("secrets") && + !statusBar.toLowerCase().contains("no secrets") + ) { + hasSecrets = true; + try { + String secret = Utils + .removeColor(part.replace("Secrets", "")) + .replace(" ", ""); + maxSecrets = Integer.parseInt(secret.split("/")[1]); + secrets = Integer.parseInt(secret.split("/")[0]); + } catch (NumberFormatException ignored) {} + } + } + if (!hasSecrets) { + maxSecrets = 0; + secrets = 0; + } + } + + public static void parseTotalSecrets(String playerName) { + if (playerName.toLowerCase().contains("secrets found:")) { + String totalSecret = Utils + .removeColor( + playerName.toLowerCase().replace("secrets found:", "") + ) + .replace(" ", ""); + try { + totalSecrets = Integer.parseInt(totalSecret); + } catch (NumberFormatException ignored) {} + } + } + + public static void parseDeaths(String playerName) { + if (playerName.toLowerCase().contains("deaths:")) { + String death = Utils + .removeColor(playerName.toLowerCase().replace("deaths:", "")) + .replace("(", "") + .replace(")", "") + .replace(" ", ""); + try { + deaths = Integer.parseInt(death); + } catch (NumberFormatException ignored) {} + } + } + + public static void parseCrypts(String playerName) { + if (playerName.toLowerCase().contains("crypts:")) { + String crypt = Utils + .removeColor(playerName.toLowerCase().replace("crypts:", "")) + .replace(" ", ""); + try { + crypts = Integer.parseInt(crypt); + } catch (NumberFormatException ignored) {} + } + } + + public static void clearDungeonStats() { + dungeonPlayersMap.clear(); + dungeonTime = 0; + dungeonCleared = 0; + bloodKey = false; + witherKeys = 0; + maxSecrets = 0; + secrets = 0; + totalSecrets = 0; + deaths = 0; + crypts = 0; + } + + public static HashMap<String, DungeonPlayer> getDungeonPlayers() { + return dungeonPlayersMap; + } + + public static int getDungeonTime() { + return dungeonTime; + } + + public static int getDungeonCleared() { + return dungeonCleared; + } + + public static int getWitherKeys() { + return witherKeys; + } + + public static boolean hasBloodkey() { + return bloodKey; + } + + public static int getMaxSecrets() { + return maxSecrets; + } + + public static int getSecrets() { + return secrets; + } + + public static int getDeaths() { + return deaths; + } + + public static int getTotalSecrets() { + return totalSecrets; + } + + public static int getCrypts() { + return crypts; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonPlayer.java b/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonPlayer.java index 2326090..f517655 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonPlayer.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/dungeons/DungeonPlayer.java @@ -2,36 +2,36 @@ package com.thatgravyboat.skyblockhud.dungeons; public class DungeonPlayer { - private final Classes dungeonClass; - private final String name; - private final int health; - private final boolean dead; + private final Classes dungeonClass; + private final String name; + private final int health; + private final boolean dead; - public DungeonPlayer( - Classes playersClass, - String playersName, - int playersHealth, - boolean isDead - ) { - this.dungeonClass = playersClass; - this.name = playersName; - this.health = isDead ? 0 : playersHealth; - this.dead = isDead; - } + public DungeonPlayer( + Classes playersClass, + String playersName, + int playersHealth, + boolean isDead + ) { + this.dungeonClass = playersClass; + this.name = playersName; + this.health = isDead ? 0 : playersHealth; + this.dead = isDead; + } - public Classes getDungeonClass() { - return this.dungeonClass; - } + public Classes getDungeonClass() { + return this.dungeonClass; + } - public String getName() { - return this.name; - } + public String getName() { + return this.name; + } - public int getHealth() { - return this.dead ? 0 : this.health; - } + public int getHealth() { + return this.dead ? 0 : this.health; + } - public boolean isDead() { - return this.dead; - } + public boolean isDead() { + return this.dead; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/BossbarHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/BossbarHandler.java index 16ff63f..0338195 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/BossbarHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/BossbarHandler.java @@ -12,33 +12,36 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class BossbarHandler { - public static boolean bossBarRendered = true; + public static boolean bossBarRendered = true; - @SubscribeEvent(priority = EventPriority.LOWEST) - public void onBossbarRender(RenderGameOverlayEvent.Pre event) { - if ( - event.type == RenderGameOverlayEvent.ElementType.BOSSHEALTH && - BossStatus.bossName != null - ) { - bossBarRendered = !event.isCanceled(); - if (!SkyblockHud.config.main.bossShiftHud) { - bossBarRendered = false; - } - String bossName = Utils.removeColor(BossStatus.bossName); - if ( - SkyblockHud.config.renderer.hideBossBar && - DwarvenMineHandler.currentEvent == DwarvenMineHandler.Event.NONE && - !LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS) - ) { - if (bossName.equalsIgnoreCase("wither")) { - event.setCanceled(true); - bossBarRendered = false; + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onBossbarRender(RenderGameOverlayEvent.Pre event) { + if ( + event.type == RenderGameOverlayEvent.ElementType.BOSSHEALTH && + BossStatus.bossName != null + ) { + bossBarRendered = !event.isCanceled(); + if (!SkyblockHud.config.main.bossShiftHud) { + bossBarRendered = false; + } + String bossName = Utils.removeColor(BossStatus.bossName); + if ( + SkyblockHud.config.renderer.hideBossBar && + DwarvenMineHandler.currentEvent == + DwarvenMineHandler.Event.NONE && + !LocationHandler + .getCurrentLocation() + .equals(Locations.CATACOMBS) + ) { + if (bossName.equalsIgnoreCase("wither")) { + event.setCanceled(true); + bossBarRendered = false; + } + if (bossName.toLowerCase().startsWith("objective:")) { + event.setCanceled(true); + bossBarRendered = false; + } + } } - if (bossName.toLowerCase().startsWith("objective:")) { - event.setCanceled(true); - bossBarRendered = false; - } - } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/CurrencyHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/CurrencyHandler.java index f8c6b86..ea0ccca 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/CurrencyHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/CurrencyHandler.java @@ -13,120 +13,124 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class CurrencyHandler { - private static int bits = 0; - private static double coins = 0; + private static int bits = 0; + private static double coins = 0; - public static void setBits(int amount) { - bits = amount; - } - - public static void setCoins(double amount) { - coins = amount; - } - - public static int getBits() { - return bits; - } - - public static double getCoins() { - return coins; - } + public static void setBits(int amount) { + bits = amount; + } - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if ( - Utils - .removeColor(event.formattedLine.toLowerCase().trim()) - .contains("purse:") || - Utils - .removeColor(event.formattedLine.toLowerCase().trim()) - .contains("piggy:") - ) { - CurrencyHandler.checkCoins(event.formattedLine); + public static void setCoins(double amount) { + coins = amount; } - if ( - Utils - .removeColor(event.formattedLine.toLowerCase().trim()) - .contains("bits:") && - !event.formattedLine.toLowerCase().contains("(") - ) { - CurrencyHandler.checkBits(event.formattedLine); + + public static int getBits() { + return bits; } - } - @SubscribeEvent - public void onSidebarPost(SidebarPostEvent event) { - if (!Arrays.toString(event.arrayScores).toLowerCase().contains("bits:")) { - CurrencyHandler.setBits(0); + public static double getCoins() { + return coins; } - } - public static String getCoinsFormatted() { - DecimalFormat formatter = new DecimalFormat( - "#,###.0", - DecimalFormatSymbols.getInstance(Locale.CANADA) - ); - String output = formatter.format(coins); - if (output.equals(".0")) output = "0.0"; else if ( - output.equals(",0") - ) output = "0,0"; - return output; - } + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if ( + Utils + .removeColor(event.formattedLine.toLowerCase().trim()) + .contains("purse:") || + Utils + .removeColor(event.formattedLine.toLowerCase().trim()) + .contains("piggy:") + ) { + CurrencyHandler.checkCoins(event.formattedLine); + } + if ( + Utils + .removeColor(event.formattedLine.toLowerCase().trim()) + .contains("bits:") && + !event.formattedLine.toLowerCase().contains("(") + ) { + CurrencyHandler.checkBits(event.formattedLine); + } + } - public static String getBitsFormatted() { - DecimalFormat formatter = new DecimalFormat( - "#.#", - DecimalFormatSymbols.getInstance(Locale.CANADA) - ); - formatter.setRoundingMode(RoundingMode.FLOOR); - return bits > 999 - ? formatter.format((double) bits / 1000) + "k" - : String.valueOf(bits); - } + @SubscribeEvent + public void onSidebarPost(SidebarPostEvent event) { + if ( + !Arrays.toString(event.arrayScores).toLowerCase().contains("bits:") + ) { + CurrencyHandler.setBits(0); + } + } - public static void checkCoins(String formatedScoreboardLine) { - String purse = Utils - .removeWhiteSpaceAndRemoveWord( - Utils.removeColor(formatedScoreboardLine.toLowerCase().trim()), - Utils - .removeColor(formatedScoreboardLine.toLowerCase().trim()) - .contains("purse:") - ? "purse:" - : "piggy:" - ) - .replace(",", ""); - if (!purse.contains("(") && !purse.contains("+")) { - try { - double coins = Double.parseDouble( - Pattern.compile("[^0-9.]").matcher(purse).replaceAll("") + public static String getCoinsFormatted() { + DecimalFormat formatter = new DecimalFormat( + "#,###.0", + DecimalFormatSymbols.getInstance(Locale.CANADA) ); - CurrencyHandler.setCoins(coins); - } catch (IllegalArgumentException ex) { - System.out.println( - "Failed to parse purse, please report to ThatGravyBoat. Purse Text: " + - purse + String output = formatter.format(coins); + if (output.equals(".0")) output = "0.0"; else if ( + output.equals(",0") + ) output = "0,0"; + return output; + } + + public static String getBitsFormatted() { + DecimalFormat formatter = new DecimalFormat( + "#.#", + DecimalFormatSymbols.getInstance(Locale.CANADA) ); - } + formatter.setRoundingMode(RoundingMode.FLOOR); + return bits > 999 + ? formatter.format((double) bits / 1000) + "k" + : String.valueOf(bits); + } + + public static void checkCoins(String formatedScoreboardLine) { + String purse = Utils + .removeWhiteSpaceAndRemoveWord( + Utils.removeColor(formatedScoreboardLine.toLowerCase().trim()), + Utils + .removeColor( + formatedScoreboardLine.toLowerCase().trim() + ) + .contains("purse:") + ? "purse:" + : "piggy:" + ) + .replace(",", ""); + if (!purse.contains("(") && !purse.contains("+")) { + try { + double coins = Double.parseDouble( + Pattern.compile("[^0-9.]").matcher(purse).replaceAll("") + ); + CurrencyHandler.setCoins(coins); + } catch (IllegalArgumentException ex) { + System.out.println( + "Failed to parse purse, please report to ThatGravyBoat. Purse Text: " + + purse + ); + } + } } - } - public static void checkBits(String formatedScoreboardLine) { - String bits = Utils - .removeWhiteSpaceAndRemoveWord( - Utils.removeColor(formatedScoreboardLine.toLowerCase().trim()), - "bits:" - ) - .replace(",", ""); - try { - int bit = Integer.parseInt( - Pattern.compile("[^0-9]").matcher(bits).replaceAll("") - ); - CurrencyHandler.setBits(bit); - } catch (IllegalArgumentException ex) { - System.out.println( - "Failed to parse bits, please report to ThatGravyBoat. Bits Text: " + - bits - ); + public static void checkBits(String formatedScoreboardLine) { + String bits = Utils + .removeWhiteSpaceAndRemoveWord( + Utils.removeColor(formatedScoreboardLine.toLowerCase().trim()), + "bits:" + ) + .replace(",", ""); + try { + int bit = Integer.parseInt( + Pattern.compile("[^0-9]").matcher(bits).replaceAll("") + ); + CurrencyHandler.setBits(bit); + } catch (IllegalArgumentException ex) { + System.out.println( + "Failed to parse bits, please report to ThatGravyBoat. Bits Text: " + + bits + ); + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/HeldItemHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/HeldItemHandler.java index 8211f0f..e7686d2 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/HeldItemHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/HeldItemHandler.java @@ -12,50 +12,54 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class HeldItemHandler extends Gui { - public void drawFuelBar(Minecraft mc, int current, int max) { - GenericOverlays.drawSmallBar( - mc, - 100, - 100, - (double) current / (double) max, - 1.0d, - 0xff00ff, - 0xffff00, - 0 - ); - drawString( - mc.fontRendererObj, - "Fuel - " + Math.round(((double) current / (double) max) * 100) + "%", - 100, - 100, - 0xffffff - ); - } + public void drawFuelBar(Minecraft mc, int current, int max) { + GenericOverlays.drawSmallBar( + mc, + 100, + 100, + (double) current / (double) max, + 1.0d, + 0xff00ff, + 0xffff00, + 0 + ); + drawString( + mc.fontRendererObj, + "Fuel - " + + Math.round(((double) current / (double) max) * 100) + + "%", + 100, + 100, + 0xffffff + ); + } - public boolean isDrill(ItemStack stack) { - if (stack == null) return false; - if (!stack.getTagCompound().hasKey("ExtraAttributes")) return false; - return stack - .getTagCompound() - .getCompoundTag("ExtraAttributes") - .hasKey("drill_fuel"); - } + public boolean isDrill(ItemStack stack) { + if (stack == null) return false; + if (!stack.getTagCompound().hasKey("ExtraAttributes")) return false; + return stack + .getTagCompound() + .getCompoundTag("ExtraAttributes") + .hasKey("drill_fuel"); + } - public String getDrillFuel(ItemStack stack) { - NBTTagCompound display = stack.getTagCompound().getCompoundTag("display"); - NBTTagList lore = display.getTagList("Lore", 8); - for (int i = lore.tagCount() - 1; i >= 0; i--) { - String line = Utils.removeColor(lore.getStringTagAt(i)); - if (line.trim().startsWith("Fuel:")) { - return line; - } + public String getDrillFuel(ItemStack stack) { + NBTTagCompound display = stack + .getTagCompound() + .getCompoundTag("display"); + NBTTagList lore = display.getTagList("Lore", 8); + for (int i = lore.tagCount() - 1; i >= 0; i--) { + String line = Utils.removeColor(lore.getStringTagAt(i)); + if (line.trim().startsWith("Fuel:")) { + return line; + } + } + return ""; } - return ""; - } - @SubscribeEvent - public void drawOverlay(RenderGameOverlayEvent.Post event) { - /* + @SubscribeEvent + public void drawOverlay(RenderGameOverlayEvent.Post event) { + /* if (Utils.overlayShouldRender(event.type, SkyblockHud.hasSkyblockScoreboard())){ Minecraft mc = Minecraft.getMinecraft(); ItemStack stack = mc.thePlayer.getHeldItem(); @@ -72,5 +76,5 @@ public class HeldItemHandler extends Gui { } } */ - } + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/MapHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/MapHandler.java index bb2b492..ab618af 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/MapHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/MapHandler.java @@ -28,426 +28,457 @@ import org.lwjgl.opengl.GL11; public class MapHandler { - public enum MapIconTypes { - SHOPS, - MISC, - NPC, - INFO, - QUEST - } + public enum MapIconTypes { + SHOPS, + MISC, + NPC, + INFO, + QUEST + } - public static class MapIcon { + public static class MapIcon { - public Vector2f position; - public ResourceLocation icon; - public String tooltip; - public String command; - public MapIconTypes type; + public Vector2f position; + public ResourceLocation icon; + public String tooltip; + public String command; + public MapIconTypes type; - public MapIcon( - Vector2f pos, - ResourceLocation icon, - String tooltip, - MapIconTypes type - ) { - this(pos, icon, tooltip, type, ""); - } + public MapIcon( + Vector2f pos, + ResourceLocation icon, + String tooltip, + MapIconTypes type + ) { + this(pos, icon, tooltip, type, ""); + } - public MapIcon( - Vector2f pos, - ResourceLocation icon, - String tooltip, - MapIconTypes type, - String command - ) { - this.position = pos; - this.icon = icon; - this.tooltip = tooltip; - this.type = type; - this.command = command; - } + public MapIcon( + Vector2f pos, + ResourceLocation icon, + String tooltip, + MapIconTypes type, + String command + ) { + this.position = pos; + this.icon = icon; + this.tooltip = tooltip; + this.type = type; + this.command = command; + } - public boolean canRender() { - SBHConfig.Map mapConfig = SkyblockHud.config.map; - if ( - mapConfig.showInfoIcons && type.equals(MapIconTypes.INFO) - ) return true; else if ( - mapConfig.showMiscIcons && type.equals(MapIconTypes.MISC) - ) return true; else if ( - mapConfig.showNpcIcons && type.equals(MapIconTypes.NPC) - ) return true; else if ( - mapConfig.showQuestIcons && type.equals(MapIconTypes.QUEST) - ) return true; else return ( - mapConfig.showShopIcons && type.equals(MapIconTypes.SHOPS) - ); + public boolean canRender() { + SBHConfig.Map mapConfig = SkyblockHud.config.map; + if ( + mapConfig.showInfoIcons && type.equals(MapIconTypes.INFO) + ) return true; else if ( + mapConfig.showMiscIcons && type.equals(MapIconTypes.MISC) + ) return true; else if ( + mapConfig.showNpcIcons && type.equals(MapIconTypes.NPC) + ) return true; else if ( + mapConfig.showQuestIcons && type.equals(MapIconTypes.QUEST) + ) return true; else return ( + mapConfig.showShopIcons && type.equals(MapIconTypes.SHOPS) + ); + } } - } - public enum Maps { - HUB( - 0.5f, - 494, - 444, - 294, - 218, - 294, - 224, - new ResourceLocation("skyblockhud", "maps/hub.png"), - HubIcons.hubIcons - ), - MUSHROOM( - 1.0f, - 318, - 316, - -84, - 605, - -84, - 612, - new ResourceLocation("skyblockhud", "maps/mushroom.png"), - Collections.emptyList() - ), - SPIDERS( - 1.0f, - 270, - 238, - 400, - 362, - 400, - 364, - new ResourceLocation("skyblockhud", "maps/spidersden.png"), - Collections.emptyList() - ), - NETHER( - 0.5f, - 257, - 371, - 436, - 732, - 433, - 736, - new ResourceLocation("skyblockhud", "maps/fort.png"), - Collections.emptyList() - ), - BARN( - 1.5f, - 135, - 130, - -82, - 320, - -81, - 318, - new ResourceLocation("skyblockhud", "maps/barn.png"), - Collections.emptyList() - ), - DWARVEN( - 0.5f, - 409, - 461, - 206, - 160, - 202, - 166, - new ResourceLocation("skyblockhud", "maps/dwarven.png"), - DwarvenIcons.dwarvenIcons - ), - PARK( - 1.0f, - 211, - 230, - 480, - 133, - 478, - 134, - new ResourceLocation("skyblockhud", "maps/park.png"), - Collections.emptyList() - ); + public enum Maps { + HUB( + 0.5f, + 494, + 444, + 294, + 218, + 294, + 224, + new ResourceLocation("skyblockhud", "maps/hub.png"), + HubIcons.hubIcons + ), + MUSHROOM( + 1.0f, + 318, + 316, + -84, + 605, + -84, + 612, + new ResourceLocation("skyblockhud", "maps/mushroom.png"), + Collections.emptyList() + ), + SPIDERS( + 1.0f, + 270, + 238, + 400, + 362, + 400, + 364, + new ResourceLocation("skyblockhud", "maps/spidersden.png"), + Collections.emptyList() + ), + NETHER( + 0.5f, + 257, + 371, + 436, + 732, + 433, + 736, + new ResourceLocation("skyblockhud", "maps/fort.png"), + Collections.emptyList() + ), + BARN( + 1.5f, + 135, + 130, + -82, + 320, + -81, + 318, + new ResourceLocation("skyblockhud", "maps/barn.png"), + Collections.emptyList() + ), + DWARVEN( + 0.5f, + 409, + 461, + 206, + 160, + 202, + 166, + new ResourceLocation("skyblockhud", "maps/dwarven.png"), + DwarvenIcons.dwarvenIcons + ), + PARK( + 1.0f, + 211, + 230, + 480, + 133, + 478, + 134, + new ResourceLocation("skyblockhud", "maps/park.png"), + Collections.emptyList() + ); - public float scaleFactor; - public int width; - public int height; - public int xMiniOffset; - public int yMiniOffset; - public int xOffset; - public int yOffset; - public ResourceLocation mapTexture; - public List<MapIcon> icons; + public float scaleFactor; + public int width; + public int height; + public int xMiniOffset; + public int yMiniOffset; + public int xOffset; + public int yOffset; + public ResourceLocation mapTexture; + public List<MapIcon> icons; - Maps( - float scaleFactor, - int width, - int height, - int xMiniOffset, - int yMiniOffset, - int xOffset, - int yOffset, - ResourceLocation mapTexture, - List<MapIcon> icons - ) { - this.scaleFactor = scaleFactor; - this.width = width; - this.height = height; - this.xMiniOffset = xMiniOffset; - this.yMiniOffset = yMiniOffset; - this.xOffset = xOffset; - this.yOffset = yOffset; - this.mapTexture = mapTexture; - this.icons = icons; + Maps( + float scaleFactor, + int width, + int height, + int xMiniOffset, + int yMiniOffset, + int xOffset, + int yOffset, + ResourceLocation mapTexture, + List<MapIcon> icons + ) { + this.scaleFactor = scaleFactor; + this.width = width; + this.height = height; + this.xMiniOffset = xMiniOffset; + this.yMiniOffset = yMiniOffset; + this.xOffset = xOffset; + this.yOffset = yOffset; + this.mapTexture = mapTexture; + this.icons = icons; + } } - } - @SubscribeEvent - public void renderOverlay(RenderGameOverlayEvent.Post event) { - if ( - Utils.overlayShouldRender( - event.type, - SkyblockHud.hasSkyblockScoreboard(), - SkyblockHud.config.map.showMiniMap - ) - ) { - Minecraft mc = Minecraft.getMinecraft(); - if (mc.currentScreen instanceof MapScreen) return; - if ( - LocationHandler.getCurrentLocation().getCategory().getMap() == null - ) return; - if (mc.thePlayer != null) { - MapHandler.Maps map = LocationHandler - .getCurrentLocation() - .getCategory() - .getMap(); - mc.renderEngine.bindTexture(mapOverlay); - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - Position pos = SkyblockHud.config.map.miniMapPosition; - Gui.drawModalRectWithCustomSizedTexture( - pos.getAbsX(event.resolution, 72), - pos.getAbsY(event.resolution, 72), - 72, - 0, - 72, - 72, - 256, - 256 - ); - mc.renderEngine.bindTexture(map.mapTexture); + @SubscribeEvent + public void renderOverlay(RenderGameOverlayEvent.Post event) { + if ( + Utils.overlayShouldRender( + event.type, + SkyblockHud.hasSkyblockScoreboard(), + SkyblockHud.config.map.showMiniMap + ) + ) { + Minecraft mc = Minecraft.getMinecraft(); + if (mc.currentScreen instanceof MapScreen) return; + if ( + LocationHandler.getCurrentLocation().getCategory().getMap() == + null + ) return; + if (mc.thePlayer != null) { + MapHandler.Maps map = LocationHandler + .getCurrentLocation() + .getCategory() + .getMap(); + mc.renderEngine.bindTexture(mapOverlay); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + Position pos = SkyblockHud.config.map.miniMapPosition; + Gui.drawModalRectWithCustomSizedTexture( + pos.getAbsX(event.resolution, 72), + pos.getAbsY(event.resolution, 72), + 72, + 0, + 72, + 72, + 256, + 256 + ); + mc.renderEngine.bindTexture(map.mapTexture); - int x = mc.thePlayer.getPosition().getX() + map.xMiniOffset; - int z = mc.thePlayer.getPosition().getZ() + map.yMiniOffset; - float u = (x / (map.width / 256f)) - 33f; - float v = (z / (map.height / 256f)) - 28f; + int x = mc.thePlayer.getPosition().getX() + map.xMiniOffset; + int z = mc.thePlayer.getPosition().getZ() + map.yMiniOffset; + float u = (x / (map.width / 256f)) - 33f; + float v = (z / (map.height / 256f)) - 28f; - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_WRAP_S, - GL11.GL_CLAMP - ); - GL11.glTexParameteri( - GL11.GL_TEXTURE_2D, - GL11.GL_TEXTURE_WRAP_T, - GL11.GL_CLAMP - ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_WRAP_S, + GL11.GL_CLAMP + ); + GL11.glTexParameteri( + GL11.GL_TEXTURE_2D, + GL11.GL_TEXTURE_WRAP_T, + GL11.GL_CLAMP + ); - Gui.drawModalRectWithCustomSizedTexture( - pos.getAbsX(event.resolution, 72) + 4, - pos.getAbsY(event.resolution, 72) + 2, - u, - v, - 64, - 64, - 256, - 256 - ); + Gui.drawModalRectWithCustomSizedTexture( + pos.getAbsX(event.resolution, 72) + 4, + pos.getAbsY(event.resolution, 72) + 2, + u, + v, + 64, + 64, + 256, + 256 + ); - if (SkyblockHud.config.map.showPlayerLocation) { - mc.fontRendererObj.drawString( - "\u2022", - pos.getAbsX(event.resolution, 72) + 36, - pos.getAbsY(event.resolution, 72) + 34, - 0xff0000, - false - ); - } + if (SkyblockHud.config.map.showPlayerLocation) { + mc.fontRendererObj.drawString( + "\u2022", + pos.getAbsX(event.resolution, 72) + 36, + pos.getAbsY(event.resolution, 72) + 34, + 0xff0000, + false + ); + } - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - mc.renderEngine.bindTexture(mapOverlay); - Gui.drawModalRectWithCustomSizedTexture( - pos.getAbsX(event.resolution, 72), - pos.getAbsY(event.resolution, 72), - 0, - 0, - 72, - 72, - 256, - 256 - ); - String keyCode = GameSettings.getKeyDisplayString( - KeyBindings.map.getKeyCode() - ); - Utils.drawStringCenteredScaled( - keyCode, - mc.fontRendererObj, - pos.getAbsX(event.resolution, 64) + 58, - pos.getAbsY(event.resolution, 72) + 66, - false, - 6, - 0xFFFFFF - ); - BlockPos playerPos = mc.thePlayer.getPosition(); - String position = String.format( - "%d/%d/%d", - playerPos.getX(), - playerPos.getY(), - playerPos.getZ() - ); - Utils.drawStringCenteredScaled( - position, - mc.fontRendererObj, - pos.getAbsX(event.resolution, 64) + 29, - pos.getAbsY(event.resolution, 72) + 66, - false, - 36, - 0xFFFFFF - ); - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - } + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + mc.renderEngine.bindTexture(mapOverlay); + Gui.drawModalRectWithCustomSizedTexture( + pos.getAbsX(event.resolution, 72), + pos.getAbsY(event.resolution, 72), + 0, + 0, + 72, + 72, + 256, + 256 + ); + String keyCode = GameSettings.getKeyDisplayString( + KeyBindings.map.getKeyCode() + ); + Utils.drawStringCenteredScaled( + keyCode, + mc.fontRendererObj, + pos.getAbsX(event.resolution, 64) + 58, + pos.getAbsY(event.resolution, 72) + 66, + false, + 6, + 0xFFFFFF + ); + BlockPos playerPos = mc.thePlayer.getPosition(); + String position = String.format( + "%d/%d/%d", + playerPos.getX(), + playerPos.getY(), + playerPos.getZ() + ); + Utils.drawStringCenteredScaled( + position, + mc.fontRendererObj, + pos.getAbsX(event.resolution, 64) + 29, + pos.getAbsY(event.resolution, 72) + 66, + false, + 36, + 0xFFFFFF + ); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + } + } } - } - @SubscribeEvent - public void clientTick(TickEvent.ClientTickEvent event) { - if ( - KeyBindings.map.isPressed() && - LocationHandler.getCurrentLocation().getCategory().getMap() != null && - SkyblockHud.hasSkyblockScoreboard() - ) SkyblockHud.screenToOpen = new MapScreen(); - } + @SubscribeEvent + public void clientTick(TickEvent.ClientTickEvent event) { + if ( + KeyBindings.map.isPressed() && + LocationHandler.getCurrentLocation().getCategory().getMap() != + null && + SkyblockHud.hasSkyblockScoreboard() + ) SkyblockHud.screenToOpen = new MapScreen(); + } - public static class MapScreen extends GuiScreen { + public static class MapScreen extends GuiScreen { - public MapHandler.Maps map = LocationHandler - .getCurrentLocation() - .getCategory() - .getMap(); + public MapHandler.Maps map = LocationHandler + .getCurrentLocation() + .getCategory() + .getMap(); - @Override - public void drawScreen(int mouseX, int mouseY, float partialTicks) { - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - this.drawWorldBackground(0); - this.mc.renderEngine.bindTexture(map.mapTexture); - float mapX = (width / 2f) - ((map.width / 2f) * map.scaleFactor); - float mapY = (height / 2f) - ((map.height / 2f) * map.scaleFactor); - Gui.drawModalRectWithCustomSizedTexture( - (int) mapX, - (int) mapY, - 0, - 0, - (int) (map.width * map.scaleFactor), - (int) (map.height * map.scaleFactor), - (int) (map.width * map.scaleFactor), - (int) (map.height * map.scaleFactor) - ); - drawIcons((int) mapX, (int) mapY); - if ( - this.mc.thePlayer != null && SkyblockHud.config.map.showPlayerLocation - ) { - int x = this.mc.thePlayer.getPosition().getX() + map.xOffset; - int z = this.mc.thePlayer.getPosition().getZ() + map.yOffset; - fontRendererObj.drawString( - "\u2022", - (int) (x * map.scaleFactor + mapX), - (int) (z * map.scaleFactor + mapY), - 0xff0000 - ); - } - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - onTooltip(mouseX, mouseY, (int) mapX, (int) mapY); - } + @Override + public void drawScreen(int mouseX, int mouseY, float partialTicks) { + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + this.drawWorldBackground(0); + this.mc.renderEngine.bindTexture(map.mapTexture); + float mapX = (width / 2f) - ((map.width / 2f) * map.scaleFactor); + float mapY = (height / 2f) - ((map.height / 2f) * map.scaleFactor); + Gui.drawModalRectWithCustomSizedTexture( + (int) mapX, + (int) mapY, + 0, + 0, + (int) (map.width * map.scaleFactor), + (int) (map.height * map.scaleFactor), + (int) (map.width * map.scaleFactor), + (int) (map.height * map.scaleFactor) + ); + drawIcons((int) mapX, (int) mapY); + if ( + this.mc.thePlayer != null && + SkyblockHud.config.map.showPlayerLocation + ) { + int x = this.mc.thePlayer.getPosition().getX() + map.xOffset; + int z = this.mc.thePlayer.getPosition().getZ() + map.yOffset; + fontRendererObj.drawString( + "\u2022", + (int) (x * map.scaleFactor + mapX), + (int) (z * map.scaleFactor + mapY), + 0xff0000 + ); + } + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + onTooltip(mouseX, mouseY, (int) mapX, (int) mapY); + } - public void drawIcons(int startX, int startY) { - if (map.icons == null) return; - for (MapIcon icon : map.icons) { - if (!icon.canRender()) continue; - GlStateManager.enableBlend(); - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - this.mc.renderEngine.bindTexture(icon.icon); - float x = - ((icon.position.x + map.xOffset) * map.scaleFactor) + startX - 4; - float y = - ((icon.position.y + map.yOffset) * map.scaleFactor) + startY - 4; - Gui.drawModalRectWithCustomSizedTexture( - (int) x, - (int) y, - 0, - 0, - 8, - 8, - 8, - 8 - ); - GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - } - } + public void drawIcons(int startX, int startY) { + if (map.icons == null) return; + for (MapIcon icon : map.icons) { + if (!icon.canRender()) continue; + GlStateManager.enableBlend(); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + this.mc.renderEngine.bindTexture(icon.icon); + float x = + ((icon.position.x + map.xOffset) * map.scaleFactor) + + startX - + 4; + float y = + ((icon.position.y + map.yOffset) * map.scaleFactor) + + startY - + 4; + Gui.drawModalRectWithCustomSizedTexture( + (int) x, + (int) y, + 0, + 0, + 8, + 8, + 8, + 8 + ); + GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); + } + } - public void onTooltip(int mouseX, int mouseY, int startX, int startY) { - if (map.icons == null) return; - for (MapIcon icon : map.icons) { - if (!icon.canRender()) continue; - if ( - Utils.inRangeInclusive( - mouseX, - (int) ((icon.position.x + map.xOffset) * map.scaleFactor) + - startX - - 4, - (int) ((icon.position.x + map.xOffset) * map.scaleFactor) + - startX + - 4 - ) && - Utils.inRangeInclusive( - mouseY, - (int) ((icon.position.y + map.yOffset) * map.scaleFactor) + - startY - - 4, - (int) ((icon.position.y + map.yOffset) * map.scaleFactor) + - startY + - 4 - ) - ) { - drawHoveringText( - Arrays.asList(icon.tooltip.split("\n")), - mouseX, - mouseY - ); - break; + public void onTooltip(int mouseX, int mouseY, int startX, int startY) { + if (map.icons == null) return; + for (MapIcon icon : map.icons) { + if (!icon.canRender()) continue; + if ( + Utils.inRangeInclusive( + mouseX, + (int) ( + (icon.position.x + map.xOffset) * map.scaleFactor + ) + + startX - + 4, + (int) ( + (icon.position.x + map.xOffset) * map.scaleFactor + ) + + startX + + 4 + ) && + Utils.inRangeInclusive( + mouseY, + (int) ( + (icon.position.y + map.yOffset) * map.scaleFactor + ) + + startY - + 4, + (int) ( + (icon.position.y + map.yOffset) * map.scaleFactor + ) + + startY + + 4 + ) + ) { + drawHoveringText( + Arrays.asList(icon.tooltip.split("\n")), + mouseX, + mouseY + ); + break; + } + } } - } - } - @Override - protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { - int mapX = (int) ((width / 2f) - ((map.width / 2f) * map.scaleFactor)); - int mapY = (int) ((height / 2f) - ((map.height / 2f) * map.scaleFactor)); - for (MapIcon icon : map.icons) { - if (!icon.canRender()) continue; - if ( - Utils.inRangeInclusive( - mouseX, - (int) ((icon.position.x + map.xOffset) * map.scaleFactor) + - mapX - - 4, - (int) ((icon.position.x + map.xOffset) * map.scaleFactor) + mapX + 4 - ) && - Utils.inRangeInclusive( - mouseY, - (int) ((icon.position.y + map.yOffset) * map.scaleFactor) + - mapY - - 4, - (int) ((icon.position.y + map.yOffset) * map.scaleFactor) + mapY + 4 - ) - ) { - if (!icon.command.isEmpty()) { - this.mc.thePlayer.sendChatMessage("/" + icon.command); - } - break; + @Override + protected void mouseClicked(int mouseX, int mouseY, int mouseButton) { + int mapX = (int) ( + (width / 2f) - ((map.width / 2f) * map.scaleFactor) + ); + int mapY = (int) ( + (height / 2f) - ((map.height / 2f) * map.scaleFactor) + ); + for (MapIcon icon : map.icons) { + if (!icon.canRender()) continue; + if ( + Utils.inRangeInclusive( + mouseX, + (int) ( + (icon.position.x + map.xOffset) * map.scaleFactor + ) + + mapX - + 4, + (int) ( + (icon.position.x + map.xOffset) * map.scaleFactor + ) + + mapX + + 4 + ) && + Utils.inRangeInclusive( + mouseY, + (int) ( + (icon.position.y + map.yOffset) * map.scaleFactor + ) + + mapY - + 4, + (int) ( + (icon.position.y + map.yOffset) * map.scaleFactor + ) + + mapY + + 4 + ) + ) { + if (!icon.command.isEmpty()) { + this.mc.thePlayer.sendChatMessage("/" + icon.command); + } + break; + } + } } - } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java index b0ff88e..6b2c808 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/SlayerHandler.java @@ -11,152 +11,160 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class SlayerHandler { - //Optional Characters are required because Hypixel dumb and cuts off text - private static final Pattern COMBAT_XP_REGEX = Pattern.compile( - "\\(([\\d,]+)/([\\dkm]+)\\) comb?a?t? x?p?" - ); - private static final Pattern KILLS_REGEX = Pattern.compile( - "(\\d+)/(\\d+) kills?" - ); + //Optional Characters are required because Hypixel dumb and cuts off text + private static final Pattern COMBAT_XP_REGEX = Pattern.compile( + "\\(([\\d,]+)/([\\dkm]+)\\) comb?a?t? x?p?" + ); + private static final Pattern KILLS_REGEX = Pattern.compile( + "(\\d+)/(\\d+) kills?" + ); - public enum slayerTypes { - ZOMBIE(34, "Revenant Horror"), - WOLF(42, "Sven Packmaster"), - SPIDER(50, "Tarantula Broodfather"), - VOIDGLOOMSERAPH(50, "Voidgloom Seraph"), - NONE(0, ""); + public enum slayerTypes { + ZOMBIE(34, "Revenant Horror"), + WOLF(42, "Sven Packmaster"), + SPIDER(50, "Tarantula Broodfather"), + VOIDGLOOMSERAPH(50, "Voidgloom Seraph"), + NONE(0, ""); - private final String displayName; - private final int x; + private final String displayName; + private final int x; - slayerTypes(int x, String displayName) { - this.displayName = displayName; - this.x = x; - } + slayerTypes(int x, String displayName) { + this.displayName = displayName; + this.x = x; + } - public String getDisplayName() { - return displayName; - } + public String getDisplayName() { + return displayName; + } - public int getX() { - return x; + public int getX() { + return x; + } } - } - public static slayerTypes currentSlayer = slayerTypes.NONE; - public static int slayerTier = 0; - public static boolean isDoingSlayer = false; - public static int progress = 0; - public static int maxKills = 0; - public static boolean bossSlain = false; - public static boolean isKillingBoss = false; + public static slayerTypes currentSlayer = slayerTypes.NONE; + public static int slayerTier = 0; + public static boolean isDoingSlayer = false; + public static int progress = 0; + public static int maxKills = 0; + public static boolean bossSlain = false; + public static boolean isKillingBoss = false; - public static void clearSlayer() { - currentSlayer = slayerTypes.NONE; - isDoingSlayer = false; - progress = 0; - maxKills = 0; - bossSlain = false; - isKillingBoss = false; - } + public static void clearSlayer() { + currentSlayer = slayerTypes.NONE; + isDoingSlayer = false; + progress = 0; + maxKills = 0; + bossSlain = false; + isKillingBoss = false; + } - @SubscribeEvent - public void onSidebarPost(SidebarPostEvent event) { - String arrayString = Arrays.toString(event.arrayScores); - isDoingSlayer = Arrays.toString(event.arrayScores).contains("Slayer Quest"); - if ( - isDoingSlayer && - ( - currentSlayer.equals(slayerTypes.NONE) || - !arrayString - .replace(" ", "") - .contains( - currentSlayer.getDisplayName().replace(" ", "") + - Utils.intToRomanNumeral(slayerTier) - ) - ) - ) { - for (int i = 0; i < event.scores.size(); i++) { - String line = event.scores.get(i); - if (line.contains("Slayer Quest") && event.scores.size() > 3) { - String slayer = event.scores.get(i - 1).toLowerCase(); - SlayerHandler.slayerTypes selectedSlayer = - SlayerHandler.slayerTypes.NONE; - for (slayerTypes types : slayerTypes.values()) { - if ( - slayer.contains(types.displayName.toLowerCase(Locale.ENGLISH)) - ) { - selectedSlayer = types; - break; + @SubscribeEvent + public void onSidebarPost(SidebarPostEvent event) { + String arrayString = Arrays.toString(event.arrayScores); + isDoingSlayer = + Arrays.toString(event.arrayScores).contains("Slayer Quest"); + if ( + isDoingSlayer && + ( + currentSlayer.equals(slayerTypes.NONE) || + !arrayString + .replace(" ", "") + .contains( + currentSlayer.getDisplayName().replace(" ", "") + + Utils.intToRomanNumeral(slayerTier) + ) + ) + ) { + for (int i = 0; i < event.scores.size(); i++) { + String line = event.scores.get(i); + if (line.contains("Slayer Quest") && event.scores.size() > 3) { + String slayer = event.scores.get(i - 1).toLowerCase(); + SlayerHandler.slayerTypes selectedSlayer = + SlayerHandler.slayerTypes.NONE; + for (slayerTypes types : slayerTypes.values()) { + if ( + slayer.contains( + types.displayName.toLowerCase(Locale.ENGLISH) + ) + ) { + selectedSlayer = types; + break; + } + } + SlayerHandler.currentSlayer = selectedSlayer; + SlayerHandler.slayerTier = + Utils.whatRomanNumeral( + slayer + .replace( + selectedSlayer + .getDisplayName() + .toLowerCase(), + "" + ) + .replace(" ", "") + ); + break; + } } - } - SlayerHandler.currentSlayer = selectedSlayer; - SlayerHandler.slayerTier = - Utils.whatRomanNumeral( - slayer - .replace(selectedSlayer.getDisplayName().toLowerCase(), "") - .replace(" ", "") - ); - break; } - } - } - if (!isDoingSlayer) { - clearSlayer(); + if (!isDoingSlayer) { + clearSlayer(); + } } - } - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if ( - !isDoingSlayer && event.formattedLine.equals("Slayer Quest") - ) isDoingSlayer = true; + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if ( + !isDoingSlayer && event.formattedLine.equals("Slayer Quest") + ) isDoingSlayer = true; - if (isDoingSlayer) { - String line = event.formattedLine.toLowerCase(); - Matcher killMatcher = KILLS_REGEX.matcher(line); - Matcher xpMatcher = COMBAT_XP_REGEX.matcher(line); + if (isDoingSlayer) { + String line = event.formattedLine.toLowerCase(); + Matcher killMatcher = KILLS_REGEX.matcher(line); + Matcher xpMatcher = COMBAT_XP_REGEX.matcher(line); - if (killMatcher.find()) { - SlayerHandler.bossSlain = false; - SlayerHandler.isKillingBoss = false; - try { - progress = Integer.parseInt(killMatcher.group(1)); - } catch (Exception ignored) {} - try { - maxKills = Integer.parseInt(killMatcher.group(2)); - } catch (Exception ignored) {} - } else if (xpMatcher.find()) { - SlayerHandler.bossSlain = false; - SlayerHandler.isKillingBoss = false; - try { - progress = Integer.parseInt(xpMatcher.group(1)); - } catch (Exception ignored) {} - try { - maxKills = - Integer.parseInt(xpMatcher.group(2).replace("k", "")) * - ( - xpMatcher.group(2).contains("k") - ? 1000 - : xpMatcher.group(2).contains("m") ? 1000000 : 1 - ); - } catch (Exception ignored) {} - } else if (line.contains("slay the boss")) { - SlayerHandler.bossSlain = false; - SlayerHandler.isKillingBoss = true; - SlayerHandler.maxKills = 0; - SlayerHandler.progress = 0; - } else if (line.contains("boss slain")) { - SlayerHandler.isKillingBoss = false; - SlayerHandler.maxKills = 0; - SlayerHandler.progress = 0; - SlayerHandler.bossSlain = true; - } - if (maxKills == 0 && progress == 0) { - SlayerHandler.maxKills = 0; - SlayerHandler.progress = 0; - } + if (killMatcher.find()) { + SlayerHandler.bossSlain = false; + SlayerHandler.isKillingBoss = false; + try { + progress = Integer.parseInt(killMatcher.group(1)); + } catch (Exception ignored) {} + try { + maxKills = Integer.parseInt(killMatcher.group(2)); + } catch (Exception ignored) {} + } else if (xpMatcher.find()) { + SlayerHandler.bossSlain = false; + SlayerHandler.isKillingBoss = false; + try { + progress = Integer.parseInt(xpMatcher.group(1)); + } catch (Exception ignored) {} + try { + maxKills = + Integer.parseInt(xpMatcher.group(2).replace("k", "")) * + ( + xpMatcher.group(2).contains("k") + ? 1000 + : xpMatcher.group(2).contains("m") ? 1000000 : 1 + ); + } catch (Exception ignored) {} + } else if (line.contains("slay the boss")) { + SlayerHandler.bossSlain = false; + SlayerHandler.isKillingBoss = true; + SlayerHandler.maxKills = 0; + SlayerHandler.progress = 0; + } else if (line.contains("boss slain")) { + SlayerHandler.isKillingBoss = false; + SlayerHandler.maxKills = 0; + SlayerHandler.progress = 0; + SlayerHandler.bossSlain = true; + } + if (maxKills == 0 && progress == 0) { + SlayerHandler.maxKills = 0; + SlayerHandler.progress = 0; + } + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/TimeHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/TimeHandler.java index 7a66df2..1fc3d3f 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/TimeHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/TimeHandler.java @@ -10,34 +10,39 @@ import org.apache.logging.log4j.LogManager; public class TimeHandler { - public static long time; + public static long time; - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if ( - Pattern.matches( - "([0-9]*):([0-9]*)(pm|am)", - event.formattedLine.toLowerCase().trim() - ) - ) { - boolean isPm = event.formattedLine.toLowerCase().trim().endsWith("pm"); - SimpleDateFormat parseFormat = new SimpleDateFormat( - "hh:mm a", - Locale.CANADA - ); - String currentTimeString = event.formattedLine - .replace(" ", "") - .replace(isPm ? "pm" : "am", isPm ? " pm" : " am"); - try { - time = - ( - parseFormat.parse(currentTimeString).getTime() - - parseFormat.parse("00:00 am").getTime() - ) / - 1000L; - } catch (ParseException ignored) { - LogManager.getLogger().warn("timeformat error: " + currentTimeString); - } + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if ( + Pattern.matches( + "([0-9]*):([0-9]*)(pm|am)", + event.formattedLine.toLowerCase().trim() + ) + ) { + boolean isPm = event.formattedLine + .toLowerCase() + .trim() + .endsWith("pm"); + SimpleDateFormat parseFormat = new SimpleDateFormat( + "hh:mm a", + Locale.CANADA + ); + String currentTimeString = event.formattedLine + .replace(" ", "") + .replace(isPm ? "pm" : "am", isPm ? " pm" : " am"); + try { + time = + ( + parseFormat.parse(currentTimeString).getTime() - + parseFormat.parse("00:00 am").getTime() + ) / + 1000L; + } catch (ParseException ignored) { + LogManager + .getLogger() + .warn("timeformat error: " + currentTimeString); + } + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/DwarvenIcons.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/DwarvenIcons.java index 542846a..abfbd0e 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/DwarvenIcons.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/DwarvenIcons.java @@ -9,90 +9,101 @@ import net.minecraft.util.ResourceLocation; public class DwarvenIcons { - public static List<MapHandler.MapIcon> dwarvenIcons = new ArrayList<>(); + public static List<MapHandler.MapIcon> dwarvenIcons = new ArrayList<>(); - static { - setupNpcIcons(); - setupMiscIcons(); - setupInfoIcons(); - setupShopIcons(); - setupQuestIcons(); - } + static { + setupNpcIcons(); + setupMiscIcons(); + setupInfoIcons(); + setupShopIcons(); + setupQuestIcons(); + } - private static void setupNpcIcons() { - dwarvenIcons.add( - new MapHandler.MapIcon( - new Vector2f(129, 187), - new ResourceLocation("skyblockhud", "maps/icons/puzzle.png"), - new ComponentBuilder() - .nl("Puzzler", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Puzzler gives you a small puzzle each day to solve and") - .nl("gives you 1000 mithril powder.") - .build(), - MapHandler.MapIconTypes.NPC - ) - ); - } + private static void setupNpcIcons() { + dwarvenIcons.add( + new MapHandler.MapIcon( + new Vector2f(129, 187), + new ResourceLocation("skyblockhud", "maps/icons/puzzle.png"), + new ComponentBuilder() + .nl("Puzzler", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl( + "The Puzzler gives you a small puzzle each day to solve and" + ) + .nl("gives you 1000 mithril powder.") + .build(), + MapHandler.MapIconTypes.NPC + ) + ); + } - private static void setupMiscIcons() {} + private static void setupMiscIcons() {} - private static void setupInfoIcons() { - dwarvenIcons.add( - new MapHandler.MapIcon( - new Vector2f(129, 187), - new ResourceLocation("skyblockhud", "maps/icons/crown.png"), - new ComponentBuilder() - .nl("King", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The King allows you to first start commissions and if you click") - .nl("each king which change every skyblock day you will get") - .nl("the King Talisman.") - .nl() - .apd("Click to open HOTM", new char[] { '6', 'l' }) - .build(), - MapHandler.MapIconTypes.INFO, - "hotm" - ) - ); - } + private static void setupInfoIcons() { + dwarvenIcons.add( + new MapHandler.MapIcon( + new Vector2f(129, 187), + new ResourceLocation("skyblockhud", "maps/icons/crown.png"), + new ComponentBuilder() + .nl("King", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl( + "The King allows you to first start commissions and if you click" + ) + .nl( + "each king which change every skyblock day you will get" + ) + .nl("the King Talisman.") + .nl() + .apd("Click to open HOTM", new char[] { '6', 'l' }) + .build(), + MapHandler.MapIconTypes.INFO, + "hotm" + ) + ); + } - private static void setupShopIcons() { - dwarvenIcons.add( - new MapHandler.MapIcon( - new Vector2f(4, 8), - new ResourceLocation("skyblockhud", "maps/icons/blacksmith.png"), - new ComponentBuilder() - .nl("Forge", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Forge is where you can go craft special items") - .nl("and fuel your drill.") - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Forger - Allows you to forge special items") - .nl(" Jotraeline Greatforge - Allows you to refuel your drill.") - .nl() - .apd("Click to warp", new char[] { '6', 'l' }) - .build(), - MapHandler.MapIconTypes.SHOPS, - "warpforge" - ) - ); - } + private static void setupShopIcons() { + dwarvenIcons.add( + new MapHandler.MapIcon( + new Vector2f(4, 8), + new ResourceLocation( + "skyblockhud", + "maps/icons/blacksmith.png" + ), + new ComponentBuilder() + .nl("Forge", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Forge is where you can go craft special items") + .nl("and fuel your drill.") + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Forger - Allows you to forge special items") + .nl( + " Jotraeline Greatforge - Allows you to refuel your drill." + ) + .nl() + .apd("Click to warp", new char[] { '6', 'l' }) + .build(), + MapHandler.MapIconTypes.SHOPS, + "warpforge" + ) + ); + } - private static void setupQuestIcons() { - dwarvenIcons.add( - new MapHandler.MapIcon( - new Vector2f(67, 204), - new ResourceLocation("skyblockhud", "maps/icons/special.png"), - new ComponentBuilder() - .nl("Royal Resident", new char[] { 'a', 'l' }) - .nl("The Royal Resident is a quest where you right") - .nl("click them for a bit to obtain and if you continue") - .nl("to right click them for about 7 hours it will give") - .apd("the achievement Royal Conversation.") - .build(), - MapHandler.MapIconTypes.QUEST - ) - ); - } + private static void setupQuestIcons() { + dwarvenIcons.add( + new MapHandler.MapIcon( + new Vector2f(67, 204), + new ResourceLocation("skyblockhud", "maps/icons/special.png"), + new ComponentBuilder() + .nl("Royal Resident", new char[] { 'a', 'l' }) + .nl("The Royal Resident is a quest where you right") + .nl("click them for a bit to obtain and if you continue") + .nl("to right click them for about 7 hours it will give") + .apd("the achievement Royal Conversation.") + .build(), + MapHandler.MapIconTypes.QUEST + ) + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/HubIcons.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/HubIcons.java index 7e510b9..2eafaec 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/HubIcons.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/mapicons/HubIcons.java @@ -9,318 +9,333 @@ import net.minecraft.util.ResourceLocation; public class HubIcons { - public static List<MapHandler.MapIcon> hubIcons = new ArrayList<>(); + public static List<MapHandler.MapIcon> hubIcons = new ArrayList<>(); - static { - setupNpcIcons(); - setupMiscIcons(); - setupInfoIcons(); - setupShopIcons(); - setupQuestIcons(); - } + static { + setupNpcIcons(); + setupMiscIcons(); + setupInfoIcons(); + setupShopIcons(); + setupQuestIcons(); + } - private static void setupNpcIcons() { - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-2, -34), - new ResourceLocation("skyblockhud", "maps/icons/special.png"), - new ComponentBuilder() - .nl("Event Hut", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Event Hut is where special event npcs") - .nl("are during some events.") - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Baker - During New Years") - .nl(" Jerry - While Winter Island is opened") - .nl(" Fear Mongerer - During Spooky Festival") - .apd(" Oringo - During Traveling Zoo") - .build(), - MapHandler.MapIconTypes.NPC - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(135, 142), - new ResourceLocation("skyblockhud", "maps/icons/fairy.png"), - new ComponentBuilder() - .nl("Fairy", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Fairy is where you go when you find fairy souls") - .apd("to trade them in to get permanent stat upgrades.") - .build(), - MapHandler.MapIconTypes.NPC - ) - ); - } + private static void setupNpcIcons() { + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-2, -34), + new ResourceLocation("skyblockhud", "maps/icons/special.png"), + new ComponentBuilder() + .nl("Event Hut", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Event Hut is where special event npcs") + .nl("are during some events.") + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Baker - During New Years") + .nl(" Jerry - While Winter Island is opened") + .nl(" Fear Mongerer - During Spooky Festival") + .apd(" Oringo - During Traveling Zoo") + .build(), + MapHandler.MapIconTypes.NPC + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(135, 142), + new ResourceLocation("skyblockhud", "maps/icons/fairy.png"), + new ComponentBuilder() + .nl("Fairy", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Fairy is where you go when you find fairy souls") + .apd("to trade them in to get permanent stat upgrades.") + .build(), + MapHandler.MapIconTypes.NPC + ) + ); + } - private static void setupShopIcons() { - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-50, -22), - new ResourceLocation("skyblockhud", "maps/icons/building.png"), - new ComponentBuilder() - .nl("Builder's House", new char[] { 'a', 'l' }) - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Wool Weaver") - .nl(" Builder") - .apd(" Mad Redstone Engineer") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-78, -46), - new ResourceLocation("skyblockhud", "maps/icons/bar.png"), - new ComponentBuilder() - .nl("Tavern", new char[] { 'a', 'l' }) - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Bartender") - .nl(" Maddox the slayer") - .nl("Description", 'l') - .nl("The Tavern is where maddox the slayer is located you can") - .nl("start slayer quests with them to unlock") - .apd("new items the more slayer bosses you kill.") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(36, -82), - new ResourceLocation("skyblockhud", "maps/icons/vet.png"), - new ComponentBuilder() - .nl("Vet", new char[] { 'a', 'l' }) - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Bea") - .nl(" Zog") - .nl(" Kat") - .nl(" George") - .nl("Description", 'l') - .nl("The Vet is where you go to upgrade your pet") - .nl("at Kat or to buy pet upgrade items from Zog") - .nl("or trade in your pet at George and if you're") - .apd("a new player you can buy a bee pet from Bea.") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(58, -73), - new ResourceLocation("skyblockhud", "maps/icons/fishing_merchant.png"), - new ComponentBuilder() - .nl("Fishing Merchant", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Fishing Merchant allows you to buy") - .nl("fishing related items and he has his friend") - .nl("joe whose in the house hes setup") - .apd("in front of who sells sponges.") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(46, -53), - new ResourceLocation("skyblockhud", "maps/icons/witch.png"), - new ComponentBuilder() - .nl("Alchemist", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Alchemist allows you to buy") - .apd("potion making related items") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-4, -128), - new ResourceLocation("skyblockhud", "maps/icons/metal_merchants.png"), - new ComponentBuilder() - .nl("Blacksmith Merchants", new char[] { 'a', 'l' }) - .nl("Merchants", new char[] { 'c', 'l' }) - .nl(" Weaponsmith - Weapon Related Items") - .nl(" Armorsmith - Armor Related Items") - .apd(" Mine Merchant - Mining Related Items") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-30, -120), - new ResourceLocation("skyblockhud", "maps/icons/blacksmith.png"), - new ComponentBuilder() - .nl("Blacksmith", new char[] { 'a', 'l' }) - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Blacksmith") - .nl(" Dusk") - .nl(" Smithmonger") - .nl("Description", 'l') - .nl("The Blacksmith lets you reforge your items") - .nl("while the Smithmonger allows you to buy reforge stones") - .apd("and Dusk allows you to combine and apply runes.") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(124, 180), - new ResourceLocation("skyblockhud", "maps/icons/dark_bar.png"), - new ComponentBuilder() - .nl("Dark Bar", new char[] { 'a', 'l' }) - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Shifty") - .nl(" Lucius") - .nl("Description", 'l') - .nl("The Dark Bar is where you can buy special") - .nl("brews from Shifty and you can buy special") - .nl("items from Lucius after buying a certain") - .apd("amount of items from the Dark Auction.") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(92, 185), - new ResourceLocation("skyblockhud", "maps/icons/dark_ah.png"), - new ComponentBuilder() - .nl("Dark Auction", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Dark Auction allows you to buy") - .nl("super special items from Sirius the") - .apd("auctioneer in a special auction.") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-245, 52), - new ResourceLocation("skyblockhud", "maps/icons/scroll.png"), - new ComponentBuilder() - .nl("Lonely Philosopher", new char[] { 'a', 'l' }) - .nl("Shop", new char[] { '6', 'l' }) - .nl(" Travel Scroll to Hub Castle") - .nl() - .nl(" Cost") - .nl(" 150,000 Coins", '6') - .nl() - .apd(" Requires ") - .apd("MVP", 'b') - .apd("+", 'c') - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(24, -38), - new ResourceLocation("skyblockhud", "maps/icons/tux.png"), - new ComponentBuilder() - .nl("Fashion Shop", new char[] { 'a', 'l' }) - .nl("NPCS", new char[] { 'c', 'l' }) - .nl(" Wool Weaver") - .nl(" Builder") - .apd(" Mad Redstone Engineer") - .build(), - MapHandler.MapIconTypes.SHOPS - ) - ); - } + private static void setupShopIcons() { + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-50, -22), + new ResourceLocation("skyblockhud", "maps/icons/building.png"), + new ComponentBuilder() + .nl("Builder's House", new char[] { 'a', 'l' }) + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Wool Weaver") + .nl(" Builder") + .apd(" Mad Redstone Engineer") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-78, -46), + new ResourceLocation("skyblockhud", "maps/icons/bar.png"), + new ComponentBuilder() + .nl("Tavern", new char[] { 'a', 'l' }) + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Bartender") + .nl(" Maddox the slayer") + .nl("Description", 'l') + .nl( + "The Tavern is where maddox the slayer is located you can" + ) + .nl("start slayer quests with them to unlock") + .apd("new items the more slayer bosses you kill.") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(36, -82), + new ResourceLocation("skyblockhud", "maps/icons/vet.png"), + new ComponentBuilder() + .nl("Vet", new char[] { 'a', 'l' }) + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Bea") + .nl(" Zog") + .nl(" Kat") + .nl(" George") + .nl("Description", 'l') + .nl("The Vet is where you go to upgrade your pet") + .nl("at Kat or to buy pet upgrade items from Zog") + .nl("or trade in your pet at George and if you're") + .apd("a new player you can buy a bee pet from Bea.") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(58, -73), + new ResourceLocation( + "skyblockhud", + "maps/icons/fishing_merchant.png" + ), + new ComponentBuilder() + .nl("Fishing Merchant", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Fishing Merchant allows you to buy") + .nl("fishing related items and he has his friend") + .nl("joe whose in the house hes setup") + .apd("in front of who sells sponges.") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(46, -53), + new ResourceLocation("skyblockhud", "maps/icons/witch.png"), + new ComponentBuilder() + .nl("Alchemist", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Alchemist allows you to buy") + .apd("potion making related items") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-4, -128), + new ResourceLocation( + "skyblockhud", + "maps/icons/metal_merchants.png" + ), + new ComponentBuilder() + .nl("Blacksmith Merchants", new char[] { 'a', 'l' }) + .nl("Merchants", new char[] { 'c', 'l' }) + .nl(" Weaponsmith - Weapon Related Items") + .nl(" Armorsmith - Armor Related Items") + .apd(" Mine Merchant - Mining Related Items") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-30, -120), + new ResourceLocation( + "skyblockhud", + "maps/icons/blacksmith.png" + ), + new ComponentBuilder() + .nl("Blacksmith", new char[] { 'a', 'l' }) + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Blacksmith") + .nl(" Dusk") + .nl(" Smithmonger") + .nl("Description", 'l') + .nl("The Blacksmith lets you reforge your items") + .nl( + "while the Smithmonger allows you to buy reforge stones" + ) + .apd("and Dusk allows you to combine and apply runes.") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(124, 180), + new ResourceLocation("skyblockhud", "maps/icons/dark_bar.png"), + new ComponentBuilder() + .nl("Dark Bar", new char[] { 'a', 'l' }) + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Shifty") + .nl(" Lucius") + .nl("Description", 'l') + .nl("The Dark Bar is where you can buy special") + .nl("brews from Shifty and you can buy special") + .nl("items from Lucius after buying a certain") + .apd("amount of items from the Dark Auction.") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(92, 185), + new ResourceLocation("skyblockhud", "maps/icons/dark_ah.png"), + new ComponentBuilder() + .nl("Dark Auction", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Dark Auction allows you to buy") + .nl("super special items from Sirius the") + .apd("auctioneer in a special auction.") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-245, 52), + new ResourceLocation("skyblockhud", "maps/icons/scroll.png"), + new ComponentBuilder() + .nl("Lonely Philosopher", new char[] { 'a', 'l' }) + .nl("Shop", new char[] { '6', 'l' }) + .nl(" Travel Scroll to Hub Castle") + .nl() + .nl(" Cost") + .nl(" 150,000 Coins", '6') + .nl() + .apd(" Requires ") + .apd("MVP", 'b') + .apd("+", 'c') + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(24, -38), + new ResourceLocation("skyblockhud", "maps/icons/tux.png"), + new ComponentBuilder() + .nl("Fashion Shop", new char[] { 'a', 'l' }) + .nl("NPCS", new char[] { 'c', 'l' }) + .nl(" Wool Weaver") + .nl(" Builder") + .apd(" Mad Redstone Engineer") + .build(), + MapHandler.MapIconTypes.SHOPS + ) + ); + } - private static void setupMiscIcons() { - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-24, -53), - new ResourceLocation("skyblockhud", "maps/icons/bank.png"), - new ComponentBuilder() - .nl("Bank", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Bank is where you can store your money on skyblock") - .apd("you can also store some items in the vault.") - .build(), - MapHandler.MapIconTypes.MISC - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-26, -80), - new ResourceLocation("skyblockhud", "maps/icons/ah.png"), - new ComponentBuilder() - .nl("Auction House", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Auction House is where you can auction off your") - .apd("precious items in skyblock to make a profit.") - .build(), - MapHandler.MapIconTypes.MISC - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-38, -66), - new ResourceLocation("skyblockhud", "maps/icons/bazaar.png"), - new ComponentBuilder() - .nl("Bazaar", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Bazaar is where you can sell specific items") - .nl("on a sort of stock market and request and") - .apd("sell items at a specific price.") - .build(), - MapHandler.MapIconTypes.MISC - ) - ); - } + private static void setupMiscIcons() { + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-24, -53), + new ResourceLocation("skyblockhud", "maps/icons/bank.png"), + new ComponentBuilder() + .nl("Bank", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl( + "The Bank is where you can store your money on skyblock" + ) + .apd("you can also store some items in the vault.") + .build(), + MapHandler.MapIconTypes.MISC + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-26, -80), + new ResourceLocation("skyblockhud", "maps/icons/ah.png"), + new ComponentBuilder() + .nl("Auction House", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Auction House is where you can auction off your") + .apd("precious items in skyblock to make a profit.") + .build(), + MapHandler.MapIconTypes.MISC + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-38, -66), + new ResourceLocation("skyblockhud", "maps/icons/bazaar.png"), + new ComponentBuilder() + .nl("Bazaar", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Bazaar is where you can sell specific items") + .nl("on a sort of stock market and request and") + .apd("sell items at a specific price.") + .build(), + MapHandler.MapIconTypes.MISC + ) + ); + } - private static void setupInfoIcons() { - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(8, -95), - new ResourceLocation("skyblockhud", "maps/icons/community.png"), - new ComponentBuilder() - .nl("Community Center", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("The Community Center is where you can vote") - .nl("for your favorite election candidate,") - .nl("access the community shop, upgrade your") - .apd("account, and help with city projects.") - .build(), - MapHandler.MapIconTypes.INFO - ) - ); - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(150, 45), - new ResourceLocation("skyblockhud", "maps/icons/fishing.png"), - new ComponentBuilder() - .nl("Fisherman's Hut", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("This is a spot where people regularly") - .nl("do their fishing, this is one") - .apd("of many spots.") - .build(), - MapHandler.MapIconTypes.INFO - ) - ); - } + private static void setupInfoIcons() { + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(8, -95), + new ResourceLocation("skyblockhud", "maps/icons/community.png"), + new ComponentBuilder() + .nl("Community Center", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("The Community Center is where you can vote") + .nl("for your favorite election candidate,") + .nl("access the community shop, upgrade your") + .apd("account, and help with city projects.") + .build(), + MapHandler.MapIconTypes.INFO + ) + ); + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(150, 45), + new ResourceLocation("skyblockhud", "maps/icons/fishing.png"), + new ComponentBuilder() + .nl("Fisherman's Hut", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("This is a spot where people regularly") + .nl("do their fishing, this is one") + .apd("of many spots.") + .build(), + MapHandler.MapIconTypes.INFO + ) + ); + } - private static void setupQuestIcons() { - hubIcons.add( - new MapHandler.MapIcon( - new Vector2f(-8, -10), - new ResourceLocation("skyblockhud", "maps/icons/painter.png"), - new ComponentBuilder() - .nl("Marco", new char[] { 'a', 'l' }) - .nl("Description", 'l') - .nl("Marco is an NPC that has no other uses") - .nl("besides giving you a spray can for") - .apd("completing a quest.") - .build(), - MapHandler.MapIconTypes.QUEST - ) - ); - } + private static void setupQuestIcons() { + hubIcons.add( + new MapHandler.MapIcon( + new Vector2f(-8, -10), + new ResourceLocation("skyblockhud", "maps/icons/painter.png"), + new ComponentBuilder() + .nl("Marco", new char[] { 'a', 'l' }) + .nl("Description", 'l') + .nl("Marco is an NPC that has no other uses") + .nl("besides giving you a spray can for") + .apd("completing a quest.") + .build(), + MapHandler.MapIconTypes.QUEST + ) + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeHelper.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeHelper.java index 158222c..f5e7c2f 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeHelper.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeHelper.java @@ -8,28 +8,28 @@ import net.minecraft.init.Blocks; public class EntityTypeHelper { - public static boolean isZealot(Entity entity) { - if (entity instanceof EntityEnderman) { - EntityEnderman enderman = ((EntityEnderman) entity); - double maxHealthBase = enderman - .getAttributeMap() - .getAttributeInstanceByName("generic.maxHealth") - .getBaseValue(); - if ( - maxHealthBase == 13000d || - ( - maxHealthBase == 2000d && - enderman - .getHeldBlockState() - .getBlock() - .equals(Blocks.end_portal_frame) - ) - ) { - return LocationHandler - .getCurrentLocation() - .equals(Locations.DRAGONSNEST); - } + public static boolean isZealot(Entity entity) { + if (entity instanceof EntityEnderman) { + EntityEnderman enderman = ((EntityEnderman) entity); + double maxHealthBase = enderman + .getAttributeMap() + .getAttributeInstanceByName("generic.maxHealth") + .getBaseValue(); + if ( + maxHealthBase == 13000d || + ( + maxHealthBase == 2000d && + enderman + .getHeldBlockState() + .getBlock() + .equals(Blocks.end_portal_frame) + ) + ) { + return LocationHandler + .getCurrentLocation() + .equals(Locations.DRAGONSNEST); + } + } + return false; } - return false; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeRegistry.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeRegistry.java index 254f61e..a2b70ef 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeRegistry.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/EntityTypeRegistry.java @@ -9,20 +9,22 @@ import net.minecraft.entity.monster.EntityEnderman; public class EntityTypeRegistry { - private static final Map<Class<? extends Entity>, List<SkyBlockEntity>> entities = Maps.newHashMap(); + private static final Map<Class<? extends Entity>, List<SkyBlockEntity>> entities = Maps.newHashMap(); - static { - entities.put( - EntityEnderman.class, - ImmutableList.of(SkyBlockEntity.of("zealot", EntityTypeHelper::isZealot)) - ); - } + static { + entities.put( + EntityEnderman.class, + ImmutableList.of( + SkyBlockEntity.of("zealot", EntityTypeHelper::isZealot) + ) + ); + } - public static String getEntityId(Entity entity) { - if (!entities.containsKey(entity.getClass())) return null; - for (SkyBlockEntity skyBlockEntity : entities.get(entity.getClass())) if ( - skyBlockEntity.isEntity(entity) - ) return skyBlockEntity.getName(); - return null; - } + public static String getEntityId(Entity entity) { + if (!entities.containsKey(entity.getClass())) return null; + for (SkyBlockEntity skyBlockEntity : entities.get( + entity.getClass() + )) if (skyBlockEntity.isEntity(entity)) return skyBlockEntity.getName(); + return null; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/SkyBlockEntity.java b/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/SkyBlockEntity.java index 23a56e5..ee8c3a7 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/SkyBlockEntity.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/handlers/sbentities/SkyBlockEntity.java @@ -5,23 +5,23 @@ import net.minecraft.entity.Entity; public class SkyBlockEntity { - private final String name; - private final Predicate<Entity> predicate; + private final String name; + private final Predicate<Entity> predicate; - public static SkyBlockEntity of(String name, Predicate<Entity> predicate) { - return new SkyBlockEntity(name, predicate); - } + public static SkyBlockEntity of(String name, Predicate<Entity> predicate) { + return new SkyBlockEntity(name, predicate); + } - private SkyBlockEntity(String name, Predicate<Entity> predicate) { - this.name = name; - this.predicate = predicate; - } + private SkyBlockEntity(String name, Predicate<Entity> predicate) { + this.name = name; + this.predicate = predicate; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public boolean isEntity(Entity entity) { - return predicate.test(entity); - } + public boolean isEntity(Entity entity) { + return predicate.test(entity); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/DwarvenMineHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/location/DwarvenMineHandler.java index 143c0af..c047767 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/DwarvenMineHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/DwarvenMineHandler.java @@ -10,129 +10,136 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class DwarvenMineHandler { - public enum Event { - NONE(0, "Unknown"), - TICKET(107, "Raffle"), - GOBLIN(99, "Goblin Raid"); + public enum Event { + NONE(0, "Unknown"), + TICKET(107, "Raffle"), + GOBLIN(99, "Goblin Raid"); - public int x; - public String displayName; + public int x; + public String displayName; - Event(int x, String displayName) { - this.x = x; - this.displayName = displayName; + Event(int x, String displayName) { + this.x = x; + this.displayName = displayName; + } } - } - - public static int mithril; - public static int eventMax; - public static int eventProgress; - public static Event currentEvent; + public static int mithril; - private static final DecimalFormat formatter = new DecimalFormat( - "#,###", - DecimalFormatSymbols.getInstance(Locale.CANADA) - ); + public static int eventMax; + public static int eventProgress; + public static Event currentEvent; - public static String getMithrilFormatted() { - String output = formatter.format(mithril); - if (output.equals(".0")) output = "0.0"; else if ( - output.equals(",0") - ) output = "0,0"; - return output; - } + private static final DecimalFormat formatter = new DecimalFormat( + "#,###", + DecimalFormatSymbols.getInstance(Locale.CANADA) + ); - public static void parseMithril(String line) { - try { - mithril = - Integer.parseInt( - line.toLowerCase().replace("mithril powder:", "").trim() - ); - } catch (Exception ignored) {} - } - - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if (event.formattedLine.toLowerCase().contains("mithril")) { - try { - mithril = - Integer.parseInt( - event.formattedLine.toLowerCase().replace("mithril:", "").trim() - ); - } catch (Exception ignored) {} + public static String getMithrilFormatted() { + String output = formatter.format(mithril); + if (output.equals(".0")) output = "0.0"; else if ( + output.equals(",0") + ) output = "0,0"; + return output; } - if (event.formattedLine.toLowerCase().contains("event")) { - if (event.formattedLine.toLowerCase().contains("raffle")) { - DwarvenMineHandler.currentEvent = Event.TICKET; - } else if (event.formattedLine.toLowerCase().contains("goblin raid")) { - DwarvenMineHandler.currentEvent = Event.GOBLIN; - } + + public static void parseMithril(String line) { + try { + mithril = + Integer.parseInt( + line.toLowerCase().replace("mithril powder:", "").trim() + ); + } catch (Exception ignored) {} } - if (DwarvenMineHandler.currentEvent != Event.NONE) { - if ( - DwarvenMineHandler.currentEvent == Event.TICKET && - event.formattedLine.toLowerCase().contains("tickets:") - ) { - if (event.formattedLine.toLowerCase().contains("pool:")) { - try { - eventMax = - Integer.parseInt( - event.formattedLine - .toLowerCase() - .replace("pool:", "") - .trim() - .split("/")[0].trim() - ); - } catch (Exception ignored) {} - } else if (event.formattedLine.toLowerCase().contains("tickets:")) { - try { - eventProgress = - Integer.parseInt( - event.formattedLine - .toLowerCase() - .replace("tickets:", "") - .split("\\(")[0].trim() - ); - } catch (Exception ignored) {} + + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if (event.formattedLine.toLowerCase().contains("mithril")) { + try { + mithril = + Integer.parseInt( + event.formattedLine + .toLowerCase() + .replace("mithril:", "") + .trim() + ); + } catch (Exception ignored) {} + } + if (event.formattedLine.toLowerCase().contains("event")) { + if (event.formattedLine.toLowerCase().contains("raffle")) { + DwarvenMineHandler.currentEvent = Event.TICKET; + } else if ( + event.formattedLine.toLowerCase().contains("goblin raid") + ) { + DwarvenMineHandler.currentEvent = Event.GOBLIN; + } } - } else if (DwarvenMineHandler.currentEvent == Event.GOBLIN) { - if (event.formattedLine.toLowerCase().contains("remaining:")) { - try { - eventMax = - Integer.parseInt( - event.formattedLine - .toLowerCase() - .replace("goblins", "") - .replace("remaining:", "") - .trim() - ); - } catch (Exception ignored) {} - } else if ( - event.formattedLine.toLowerCase().contains("your kills:") && - !event.formattedLine.toLowerCase().contains("(") - ) { - try { - eventProgress = - Integer.parseInt( - event.formattedLine - .toLowerCase() - .replace("your kills:", "") - .trim() - ); - } catch (Exception ignored) {} + if (DwarvenMineHandler.currentEvent != Event.NONE) { + if ( + DwarvenMineHandler.currentEvent == Event.TICKET && + event.formattedLine.toLowerCase().contains("tickets:") + ) { + if (event.formattedLine.toLowerCase().contains("pool:")) { + try { + eventMax = + Integer.parseInt( + event.formattedLine + .toLowerCase() + .replace("pool:", "") + .trim() + .split("/")[0].trim() + ); + } catch (Exception ignored) {} + } else if ( + event.formattedLine.toLowerCase().contains("tickets:") + ) { + try { + eventProgress = + Integer.parseInt( + event.formattedLine + .toLowerCase() + .replace("tickets:", "") + .split("\\(")[0].trim() + ); + } catch (Exception ignored) {} + } + } else if (DwarvenMineHandler.currentEvent == Event.GOBLIN) { + if (event.formattedLine.toLowerCase().contains("remaining:")) { + try { + eventMax = + Integer.parseInt( + event.formattedLine + .toLowerCase() + .replace("goblins", "") + .replace("remaining:", "") + .trim() + ); + } catch (Exception ignored) {} + } else if ( + event.formattedLine.toLowerCase().contains("your kills:") && + !event.formattedLine.toLowerCase().contains("(") + ) { + try { + eventProgress = + Integer.parseInt( + event.formattedLine + .toLowerCase() + .replace("your kills:", "") + .trim() + ); + } catch (Exception ignored) {} + } + } } - } } - } - @SubscribeEvent - public void onSidebarPost(SidebarPostEvent event) { - String arrayString = Arrays.toString(event.arrayScores); - if (!arrayString.toLowerCase().contains("event:")) { - DwarvenMineHandler.currentEvent = Event.NONE; - DwarvenMineHandler.eventProgress = 0; - DwarvenMineHandler.eventMax = 0; + @SubscribeEvent + public void onSidebarPost(SidebarPostEvent event) { + String arrayString = Arrays.toString(event.arrayScores); + if (!arrayString.toLowerCase().contains("event:")) { + DwarvenMineHandler.currentEvent = Event.NONE; + DwarvenMineHandler.eventProgress = 0; + DwarvenMineHandler.eventMax = 0; + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/EndIslandHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/location/EndIslandHandler.java index 3eb87d4..51ea9d8 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/EndIslandHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/EndIslandHandler.java @@ -2,58 +2,58 @@ package com.thatgravyboat.skyblockhud.location; public class EndIslandHandler { - public enum dragonTypes { - PROTECTOR("Protector Dragon", 9000000), - OLD("Old Dragon", 15000000), - WISE("Wise Dragon", 9000000), - UNSTABLE("Unstable Dragon", 9000000), - YOUNG("Young Dragon", 7500000), - STRONG("Strong Dragon", 9000000), - SUPERIOR("Superior Dragon", 12000000), - NODRAGON("", 0); - - private final String displayName; - private final int maxHealth; - - dragonTypes(String displayName, int maxHealth) { - this.displayName = displayName; - this.maxHealth = maxHealth; - } - - public String getDisplayName() { - return this.displayName; - } + public enum dragonTypes { + PROTECTOR("Protector Dragon", 9000000), + OLD("Old Dragon", 15000000), + WISE("Wise Dragon", 9000000), + UNSTABLE("Unstable Dragon", 9000000), + YOUNG("Young Dragon", 7500000), + STRONG("Strong Dragon", 9000000), + SUPERIOR("Superior Dragon", 12000000), + NODRAGON("", 0); + + private final String displayName; + private final int maxHealth; + + dragonTypes(String displayName, int maxHealth) { + this.displayName = displayName; + this.maxHealth = maxHealth; + } - public int getMaxHealth() { - return this.maxHealth; - } + public String getDisplayName() { + return this.displayName; + } - public static dragonTypes findDragon(String input) { - if (input.contains(" ")) { - try { - return dragonTypes.valueOf( - input - .toLowerCase() - .replace("dragon", "") - .replace(" ", "") - .toUpperCase() - ); - } catch (IllegalArgumentException ignored) { - return NODRAGON; + public int getMaxHealth() { + return this.maxHealth; } - } else { - try { - return dragonTypes.valueOf(input); - } catch (IllegalArgumentException ignored) { - return NODRAGON; + + public static dragonTypes findDragon(String input) { + if (input.contains(" ")) { + try { + return dragonTypes.valueOf( + input + .toLowerCase() + .replace("dragon", "") + .replace(" ", "") + .toUpperCase() + ); + } catch (IllegalArgumentException ignored) { + return NODRAGON; + } + } else { + try { + return dragonTypes.valueOf(input); + } catch (IllegalArgumentException ignored) { + return NODRAGON; + } + } } - } } - } - private static dragonTypes currentDragon = dragonTypes.NODRAGON; + private static dragonTypes currentDragon = dragonTypes.NODRAGON; - public static void setCurrentDragon(dragonTypes dragon) { - currentDragon = dragon; - } + public static void setCurrentDragon(dragonTypes dragon) { + currentDragon = dragon; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/FarmingIslandHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/location/FarmingIslandHandler.java index 083b575..8997fa4 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/FarmingIslandHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/FarmingIslandHandler.java @@ -6,26 +6,30 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class FarmingIslandHandler { - public static Locations location = Locations.NONE; - public static int pelts; + public static Locations location = Locations.NONE; + public static int pelts; - @SubscribeEvent - public void onSidebarPost(SidebarPostEvent event) { - boolean isTracking = Arrays - .toString(event.arrayScores) - .toLowerCase() - .contains("tracker mob location:"); - if (isTracking && location == Locations.NONE) { - for (int i = 0; i < event.scores.size(); i++) { - String line = event.scores.get(i); - if (line.toLowerCase().contains("tracker mob location:") && i > 2) { - location = Locations.get(event.scores.get(i - 1).toLowerCase()); - break; + @SubscribeEvent + public void onSidebarPost(SidebarPostEvent event) { + boolean isTracking = Arrays + .toString(event.arrayScores) + .toLowerCase() + .contains("tracker mob location:"); + if (isTracking && location == Locations.NONE) { + for (int i = 0; i < event.scores.size(); i++) { + String line = event.scores.get(i); + if ( + line.toLowerCase().contains("tracker mob location:") && + i > 2 + ) { + location = + Locations.get(event.scores.get(i - 1).toLowerCase()); + break; + } + } + } + if (!isTracking && location != Locations.NONE) { + location = Locations.NONE; } - } - } - if (!isTracking && location != Locations.NONE) { - location = Locations.NONE; } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/IslandHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/location/IslandHandler.java index 9bd459a..a50358d 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/IslandHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/IslandHandler.java @@ -10,79 +10,79 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class IslandHandler { - public static int flightTime; - public static boolean hadFlightTime; + public static int flightTime; + public static boolean hadFlightTime; - public static int redstone; - public static boolean hadRedstone; + public static int redstone; + public static boolean hadRedstone; - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - hadFlightTime = checkFlightDuration(event.formattedLine); - hadRedstone = checkRestone(event.formattedLine); - } + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + hadFlightTime = checkFlightDuration(event.formattedLine); + hadRedstone = checkRestone(event.formattedLine); + } - @SubscribeEvent - public void onProfileSwitch(ProfileSwitchedEvent event) { - flightTime = 0; - } + @SubscribeEvent + public void onProfileSwitch(ProfileSwitchedEvent event) { + flightTime = 0; + } - public static boolean checkFlightDuration(String formatedScoreboardLine) { - if ( - LocationHandler.getCurrentLocation() == Locations.YOURISLAND && - Utils - .removeColor(formatedScoreboardLine.toLowerCase().trim()) - .contains("flight duration:") - ) { - String timeString = formatedScoreboardLine - .toLowerCase() - .replace("flight duration:", "") - .replace(" ", ""); - String[] times = timeString.split(":"); - if (times.length == 2) { - int s = 0; - try { - s += Integer.parseInt(times[0]) * 60; - } catch (NumberFormatException ignored) {} - try { - s += Integer.parseInt(times[1]); - } catch (NumberFormatException ignored) {} - flightTime = s - 1; - } else if (times.length == 3) { - int s = 0; - try { - s += Integer.parseInt(times[0]) * 3600; - } catch (NumberFormatException ignored) {} - try { - s += Integer.parseInt(times[1]) * 60; - } catch (NumberFormatException ignored) {} - try { - s += Integer.parseInt(times[2]); - } catch (NumberFormatException ignored) {} - flightTime = s - 1; - } - return true; + public static boolean checkFlightDuration(String formatedScoreboardLine) { + if ( + LocationHandler.getCurrentLocation() == Locations.YOURISLAND && + Utils + .removeColor(formatedScoreboardLine.toLowerCase().trim()) + .contains("flight duration:") + ) { + String timeString = formatedScoreboardLine + .toLowerCase() + .replace("flight duration:", "") + .replace(" ", ""); + String[] times = timeString.split(":"); + if (times.length == 2) { + int s = 0; + try { + s += Integer.parseInt(times[0]) * 60; + } catch (NumberFormatException ignored) {} + try { + s += Integer.parseInt(times[1]); + } catch (NumberFormatException ignored) {} + flightTime = s - 1; + } else if (times.length == 3) { + int s = 0; + try { + s += Integer.parseInt(times[0]) * 3600; + } catch (NumberFormatException ignored) {} + try { + s += Integer.parseInt(times[1]) * 60; + } catch (NumberFormatException ignored) {} + try { + s += Integer.parseInt(times[2]); + } catch (NumberFormatException ignored) {} + flightTime = s - 1; + } + return true; + } + return false; } - return false; - } - public static boolean checkRestone(String formatedScoreboardLine) { - if (LocationHandler.getCurrentLocation() == Locations.YOURISLAND) { - if ( - formatedScoreboardLine.toLowerCase().contains("redstone:") - ) return true; - try { - redstone = - formatedScoreboardLine.toLowerCase().contains("redstone:") - ? Integer.parseInt( - Utils.removeWhiteSpaceAndRemoveWord( - formatedScoreboardLine, - "redstone:" - ) - ) - : 0; - } catch (Exception ignored) {} + public static boolean checkRestone(String formatedScoreboardLine) { + if (LocationHandler.getCurrentLocation() == Locations.YOURISLAND) { + if ( + formatedScoreboardLine.toLowerCase().contains("redstone:") + ) return true; + try { + redstone = + formatedScoreboardLine.toLowerCase().contains("redstone:") + ? Integer.parseInt( + Utils.removeWhiteSpaceAndRemoveWord( + formatedScoreboardLine, + "redstone:" + ) + ) + : 0; + } catch (Exception ignored) {} + } + return false; } - return false; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/LocationCategory.java b/src/main/java/com/thatgravyboat/skyblockhud/location/LocationCategory.java index 33462f1..a337f3d 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/LocationCategory.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/LocationCategory.java @@ -5,45 +5,45 @@ import static com.thatgravyboat.skyblockhud.handlers.MapHandler.Maps; import com.thatgravyboat.skyblockhud.handlers.MapHandler; public enum LocationCategory { - ERROR("error", 34), - ISLAND("island", 43), - HUB("hub", 34, Maps.HUB), - BARN("barn", 67, Maps.BARN), - MUSHROOMDESERT("mushroomdesert", 75, Maps.MUSHROOM), - GOLDMINE("gold_mine", 83), - DEEPCAVERNS("deepcaverns", 91), - SPIDERSDEN("spiders_den", 99, Maps.SPIDERS), - PARK("park", 51, Maps.PARK), - FORTRESS("fortress", 107, Maps.NETHER), - DUNGEONHUB("dungeonhub", 115), - JERRY("jerry", 59), - THEEND("the_end", 123), - DWARVENMINES("dwarven_mines", 131, Maps.DWARVEN), - CRYSTALHOLLOWS("crystal_hollows", 131); - - private final String name; - private final int texturePos; - private final MapHandler.Maps map; - - LocationCategory(String name, int texturePos) { - this(name, texturePos, null); - } - - LocationCategory(String name, int texturePos, MapHandler.Maps map) { - this.name = name; - this.texturePos = texturePos; - this.map = map; - } - - public String getName() { - return this.name; - } - - public int getTexturePos() { - return this.texturePos; - } - - public MapHandler.Maps getMap() { - return this.map; - } + ERROR("error", 34), + ISLAND("island", 43), + HUB("hub", 34, Maps.HUB), + BARN("barn", 67, Maps.BARN), + MUSHROOMDESERT("mushroomdesert", 75, Maps.MUSHROOM), + GOLDMINE("gold_mine", 83), + DEEPCAVERNS("deepcaverns", 91), + SPIDERSDEN("spiders_den", 99, Maps.SPIDERS), + PARK("park", 51, Maps.PARK), + FORTRESS("fortress", 107, Maps.NETHER), + DUNGEONHUB("dungeonhub", 115), + JERRY("jerry", 59), + THEEND("the_end", 123), + DWARVENMINES("dwarven_mines", 131, Maps.DWARVEN), + CRYSTALHOLLOWS("crystal_hollows", 131); + + private final String name; + private final int texturePos; + private final MapHandler.Maps map; + + LocationCategory(String name, int texturePos) { + this(name, texturePos, null); + } + + LocationCategory(String name, int texturePos, MapHandler.Maps map) { + this.name = name; + this.texturePos = texturePos; + this.map = map; + } + + public String getName() { + return this.name; + } + + public int getTexturePos() { + return this.texturePos; + } + + public MapHandler.Maps getMap() { + return this.map; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/LocationHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/location/LocationHandler.java index 86f0432..5cd006a 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/LocationHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/LocationHandler.java @@ -8,49 +8,49 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class LocationHandler { - private static Locations currentLocation = Locations.NONE; - private static final List<String> UndocumentedLocations = new ArrayList<>(); - - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if (event.rawLine.contains("\u23E3")) { - String objectiveName = event.objective - .getDisplayName() - .replaceAll("(?i)\\u00A7.", ""); - if (objectiveName.toLowerCase(Locale.ENGLISH).endsWith("guest")) { - LocationHandler.setCurrentLocation(Locations.GUESTISLAND); - } else { - LocationHandler.handleLocation(event.formattedLine); - } + private static Locations currentLocation = Locations.NONE; + private static final List<String> UndocumentedLocations = new ArrayList<>(); + + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if (event.rawLine.contains("\u23E3")) { + String objectiveName = event.objective + .getDisplayName() + .replaceAll("(?i)\\u00A7.", ""); + if (objectiveName.toLowerCase(Locale.ENGLISH).endsWith("guest")) { + LocationHandler.setCurrentLocation(Locations.GUESTISLAND); + } else { + LocationHandler.handleLocation(event.formattedLine); + } + } } - } - - public static void setCurrentLocation(String location) { - currentLocation = Locations.get(location); - } - - public static void setCurrentLocation(Locations location) { - currentLocation = location; - } - - public static Locations getCurrentLocation() { - return currentLocation; - } - - public static void handleLocation(String locationLine) { - String location = locationLine - .replace(" ", "") - .toUpperCase(Locale.ENGLISH) - .trim(); - if (location.startsWith("THECATACOMBS")) { - currentLocation = Locations.CATACOMBS; - } else setCurrentLocation(location.replaceAll("[^A-Za-z0-9]", "")); - } - - public static void reportUndocumentedLocation(String locationId) { - if (!UndocumentedLocations.contains(locationId)) { - UndocumentedLocations.add(locationId); - System.out.println("Missing Location value for: " + locationId); + + public static void setCurrentLocation(String location) { + currentLocation = Locations.get(location); + } + + public static void setCurrentLocation(Locations location) { + currentLocation = location; + } + + public static Locations getCurrentLocation() { + return currentLocation; + } + + public static void handleLocation(String locationLine) { + String location = locationLine + .replace(" ", "") + .toUpperCase(Locale.ENGLISH) + .trim(); + if (location.startsWith("THECATACOMBS")) { + currentLocation = Locations.CATACOMBS; + } else setCurrentLocation(location.replaceAll("[^A-Za-z0-9]", "")); + } + + public static void reportUndocumentedLocation(String locationId) { + if (!UndocumentedLocations.contains(locationId)) { + UndocumentedLocations.add(locationId); + System.out.println("Missing Location value for: " + locationId); + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/Locations.java b/src/main/java/com/thatgravyboat/skyblockhud/location/Locations.java index 0b8bfa2..7669456 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/Locations.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/Locations.java @@ -1,254 +1,294 @@ package com.thatgravyboat.skyblockhud.location; public enum Locations { - //ERROR LOCATIONS - DEFAULT("unknown", "Error", LocationCategory.ERROR), - NONE("none", "Unknown", LocationCategory.ERROR), - //ISLAND - YOURISLAND("yourisland", "Your Island", LocationCategory.ISLAND), - GUESTISLAND("guestisland", "Guest Island", LocationCategory.ISLAND), - MOULBERRYSISLAND("moulberryisland", "Cool Dude Hub", LocationCategory.ISLAND), - //HUB - VILLAGE("village", "Village", LocationCategory.HUB), - AUCTIONHOUSE("auctionhouse", "Auction House", LocationCategory.HUB), - BAZAARALLEY("bazaaralley", "Bazaar Alley", LocationCategory.HUB), - BANK("bank", "Bank", LocationCategory.HUB), - FASHIONSHOP("fashionshop", "Fashion Shop", LocationCategory.HUB), - COLOSSEUM("colosseum", "Colosseum", LocationCategory.HUB), - COLOSSEUMARENA("colosseumarena", "Colosseum Arena", LocationCategory.HUB), - MOUNTAIN("mountain", "Mountain", LocationCategory.HUB), - HIGHLEVEL("highlevel", "High Level", LocationCategory.HUB), - WILDERNESS("wilderness", "Wilderness", LocationCategory.HUB), - FISHERMANSHUT("fishermanshut", "Fisherman's Hut", LocationCategory.HUB), - FLOWERHOUSE("flowerhouse", "Flower House", LocationCategory.HUB), - CANVASROOM("canvasroom", "Canvas Room", LocationCategory.HUB), - TAVERN("tavern", "Tavern", LocationCategory.HUB), - FOREST("forest", "Forest", LocationCategory.HUB), - RUINS("ruins", "Ruins", LocationCategory.HUB), - GRAVEYARD("graveyard", "Graveyard", LocationCategory.HUB), - COALMINE("coalmine", "Coal Mine", LocationCategory.HUB), - FARM("farm", "Farm", LocationCategory.HUB), - LIBRARY("library", "Library", LocationCategory.HUB), - COMMUNITYCENTER("communitycenter", "Community Center", LocationCategory.HUB), - ELECTIONROOM("electionroom", "Election Room", LocationCategory.HUB), - BUILDERSHOUSE("buildershouse", "Builder's House", LocationCategory.HUB), - BLACKSMITH("blacksmith", "Blacksmith", LocationCategory.HUB), - FARMHOUSE("farmhouse", "Farmhouse", LocationCategory.HUB), - WIZARDTOWER("wizardtower", "Wizard Tower", LocationCategory.HUB), - //THE BARN - THEBARN("thebarn", "The Barn", LocationCategory.BARN), - WINDMILL("windmill", "Windmill", LocationCategory.BARN), - //MUSHROOM DESERT - MUSHROOMDESERT( - "mushroomdesert", - "Mushroom Desert", - LocationCategory.MUSHROOMDESERT - ), - DESERTSETTLEMENT( - "desertsettlement", - "Desert Settlement", - LocationCategory.MUSHROOMDESERT - ), - OASIS("oasis", "Oasis", LocationCategory.MUSHROOMDESERT), - MUSHROOMGORGE( - "mushroomgorge", - "Mushroom Gorge", - LocationCategory.MUSHROOMDESERT - ), - SHEPHERDSKEEP( - "shepherdskeep", - "Shepherds Keep", - LocationCategory.MUSHROOMDESERT - ), - JAKESHOUSE("jakeshouse", "Jake's House", LocationCategory.MUSHROOMDESERT), - TREASUREHUNTERCAMP( - "treasurehuntercamp", - "Treasure Hunter Camp", - LocationCategory.MUSHROOMDESERT - ), - GLOWINGMUSHROOMCAVE( - "glowingmushroomcave", - "Glowing Mushroom Cave", - LocationCategory.MUSHROOMDESERT - ), - TRAPPERSDEN("trappersden", "Trappers Den", LocationCategory.MUSHROOMDESERT), - OVERGROWNMUSHROOMCAVE( - "overgrownmushroomcave", - "Overgrown Mushroom Cave", - LocationCategory.MUSHROOMDESERT - ), - //GOLD MINE - GOLDMINE("goldmine", "Gold Mine", LocationCategory.GOLDMINE), - //DEEP CAVERNS - DEEPCAVERNS("deepcaverns", "Deep Caverns", LocationCategory.DEEPCAVERNS), - GUNPOWDERMINES( - "gunpowdermines", - "Gunpowder Mines", - LocationCategory.DEEPCAVERNS - ), - LAPISQUARRY("lapisquarry", "Lapis Quarry", LocationCategory.DEEPCAVERNS), - PIGMANSDEN("pigmansden", "Pigman's Den", LocationCategory.DEEPCAVERNS), - SLIMEHILL("slimehill", "Slimehill", LocationCategory.DEEPCAVERNS), - DIAMONDRESERVE( - "diamondreserve", - "Diamond Reserve", - LocationCategory.DEEPCAVERNS - ), - OBSIDIANSANCTUARY( - "obsidiansanctuary", - "Obsidian Sanctuary", - LocationCategory.DEEPCAVERNS - ), - //SPIDERS DEN - SPIDERSDEN("spidersden", "Spider's Den", LocationCategory.SPIDERSDEN), + //ERROR LOCATIONS + DEFAULT("unknown", "Error", LocationCategory.ERROR), + NONE("none", "Unknown", LocationCategory.ERROR), + //ISLAND + YOURISLAND("yourisland", "Your Island", LocationCategory.ISLAND), + GUESTISLAND("guestisland", "Guest Island", LocationCategory.ISLAND), + MOULBERRYSISLAND( + "moulberryisland", + "Cool Dude Hub", + LocationCategory.ISLAND + ), + //HUB + VILLAGE("village", "Village", LocationCategory.HUB), + AUCTIONHOUSE("auctionhouse", "Auction House", LocationCategory.HUB), + BAZAARALLEY("bazaaralley", "Bazaar Alley", LocationCategory.HUB), + BANK("bank", "Bank", LocationCategory.HUB), + FASHIONSHOP("fashionshop", "Fashion Shop", LocationCategory.HUB), + COLOSSEUM("colosseum", "Colosseum", LocationCategory.HUB), + COLOSSEUMARENA("colosseumarena", "Colosseum Arena", LocationCategory.HUB), + MOUNTAIN("mountain", "Mountain", LocationCategory.HUB), + HIGHLEVEL("highlevel", "High Level", LocationCategory.HUB), + WILDERNESS("wilderness", "Wilderness", LocationCategory.HUB), + FISHERMANSHUT("fishermanshut", "Fisherman's Hut", LocationCategory.HUB), + FLOWERHOUSE("flowerhouse", "Flower House", LocationCategory.HUB), + CANVASROOM("canvasroom", "Canvas Room", LocationCategory.HUB), + TAVERN("tavern", "Tavern", LocationCategory.HUB), + FOREST("forest", "Forest", LocationCategory.HUB), + RUINS("ruins", "Ruins", LocationCategory.HUB), + GRAVEYARD("graveyard", "Graveyard", LocationCategory.HUB), + COALMINE("coalmine", "Coal Mine", LocationCategory.HUB), + FARM("farm", "Farm", LocationCategory.HUB), + LIBRARY("library", "Library", LocationCategory.HUB), + COMMUNITYCENTER( + "communitycenter", + "Community Center", + LocationCategory.HUB + ), + ELECTIONROOM("electionroom", "Election Room", LocationCategory.HUB), + BUILDERSHOUSE("buildershouse", "Builder's House", LocationCategory.HUB), + BLACKSMITH("blacksmith", "Blacksmith", LocationCategory.HUB), + FARMHOUSE("farmhouse", "Farmhouse", LocationCategory.HUB), + WIZARDTOWER("wizardtower", "Wizard Tower", LocationCategory.HUB), + //THE BARN + THEBARN("thebarn", "The Barn", LocationCategory.BARN), + WINDMILL("windmill", "Windmill", LocationCategory.BARN), + //MUSHROOM DESERT + MUSHROOMDESERT( + "mushroomdesert", + "Mushroom Desert", + LocationCategory.MUSHROOMDESERT + ), + DESERTSETTLEMENT( + "desertsettlement", + "Desert Settlement", + LocationCategory.MUSHROOMDESERT + ), + OASIS("oasis", "Oasis", LocationCategory.MUSHROOMDESERT), + MUSHROOMGORGE( + "mushroomgorge", + "Mushroom Gorge", + LocationCategory.MUSHROOMDESERT + ), + SHEPHERDSKEEP( + "shepherdskeep", + "Shepherds Keep", + LocationCategory.MUSHROOMDESERT + ), + JAKESHOUSE("jakeshouse", "Jake's House", LocationCategory.MUSHROOMDESERT), + TREASUREHUNTERCAMP( + "treasurehuntercamp", + "Treasure Hunter Camp", + LocationCategory.MUSHROOMDESERT + ), + GLOWINGMUSHROOMCAVE( + "glowingmushroomcave", + "Glowing Mushroom Cave", + LocationCategory.MUSHROOMDESERT + ), + TRAPPERSDEN("trappersden", "Trappers Den", LocationCategory.MUSHROOMDESERT), + OVERGROWNMUSHROOMCAVE( + "overgrownmushroomcave", + "Overgrown Mushroom Cave", + LocationCategory.MUSHROOMDESERT + ), + //GOLD MINE + GOLDMINE("goldmine", "Gold Mine", LocationCategory.GOLDMINE), + //DEEP CAVERNS + DEEPCAVERNS("deepcaverns", "Deep Caverns", LocationCategory.DEEPCAVERNS), + GUNPOWDERMINES( + "gunpowdermines", + "Gunpowder Mines", + LocationCategory.DEEPCAVERNS + ), + LAPISQUARRY("lapisquarry", "Lapis Quarry", LocationCategory.DEEPCAVERNS), + PIGMANSDEN("pigmansden", "Pigman's Den", LocationCategory.DEEPCAVERNS), + SLIMEHILL("slimehill", "Slimehill", LocationCategory.DEEPCAVERNS), + DIAMONDRESERVE( + "diamondreserve", + "Diamond Reserve", + LocationCategory.DEEPCAVERNS + ), + OBSIDIANSANCTUARY( + "obsidiansanctuary", + "Obsidian Sanctuary", + LocationCategory.DEEPCAVERNS + ), + //SPIDERS DEN + SPIDERSDEN("spidersden", "Spider's Den", LocationCategory.SPIDERSDEN), - //THE END - THEEND("theend", "The End", LocationCategory.THEEND), - DRAGONSNEST("dragonsnest", "Dragon's Nest", LocationCategory.THEEND), - VOIDSEPULTURE("voidsepulture", "Void Sepulture", LocationCategory.THEEND), - //PARK - HOWLINGCAVE("howlingcave", "Howling Cave", LocationCategory.PARK), - BIRCHPARK("birchpark", "Birch Park", LocationCategory.PARK), - SPRUCEWOODS("sprucewoods", "Spruce Woods", LocationCategory.PARK), - DARKTHICKET("darkthicket", "Dark Thicket", LocationCategory.PARK), - SAVANNAWOODLAND("savannawoodland", "Savanna Woodland", LocationCategory.PARK), - JUNGLEISLAND("jungleisland", "Jungle Island", LocationCategory.PARK), - //BLAZING FORTRESS - BLAZINGFORTRESS( - "blazingfortress", - "Blazing Fortress", - LocationCategory.FORTRESS - ), - //DUNGEONS - DUNGEONHUB("dungeonhub", "Dungeon Hub", LocationCategory.DUNGEONHUB), - CATACOMBS("catacombs", "The Catacombs", LocationCategory.DUNGEONHUB), - CATACOMBSENTRANCE( - "catacombsentrance", - "Catacombs Entrance", - LocationCategory.DUNGEONHUB - ), - //JERRYISLAND - JERRYSWORKSHOP("jerrysworkshop", "Jerry's Workshop", LocationCategory.JERRY), - JERRYPOND("jerrypond", "Jerry Pond", LocationCategory.JERRY), - //DWARVENMINES - THELIFT("thelift", "The Lift", LocationCategory.DWARVENMINES), - DWARVENVILLAGE( - "dwarvenvillage", - "Dwarven Village", - LocationCategory.DWARVENMINES - ), - DWARVENMINES("dwarvenmines", "Dwarven Mines", LocationCategory.DWARVENMINES), - LAVASPRINGS("lavasprings", "Lava Springs", LocationCategory.DWARVENMINES), - PALACEBRIDGE("palacebridge", "Palace Bridge", LocationCategory.DWARVENMINES), - ROYALPALACE("royalpalace", "Royal Palace", LocationCategory.DWARVENMINES), - GRANDLIBRARY("grandlibrary", "Grand Library", LocationCategory.DWARVENMINES), - ROYALQUARTERS( - "royalquarters", - "Royal Quarters", - LocationCategory.DWARVENMINES - ), - BARRACKSOFHEROES( - "barracksofheroes", - "Barracks of Heroes", - LocationCategory.DWARVENMINES - ), - HANGINGCOURT("hangingcourt", "Hanging Court", LocationCategory.DWARVENMINES), - GREATICEWALL("greaticewall", "Great Ice Wall", LocationCategory.DWARVENMINES), - GOBLINBURROWS( - "goblinburrows", - "Goblin Burrows", - LocationCategory.DWARVENMINES - ), - FARRESERVE("farreserve", "Far Reserve", LocationCategory.DWARVENMINES), - CCMINECARTSCO("ccminecartco", "Minecart Co.", LocationCategory.DWARVENMINES), - UPPERMINES("uppermines", "Upper Mines", LocationCategory.DWARVENMINES), - RAMPARTSQUARRY( - "rampartsquarry", - "Ramparts Quarry", - LocationCategory.DWARVENMINES - ), - GATESTOTHEMINES( - "gatestothemines", - "Gates to The Mines", - LocationCategory.DWARVENMINES - ), - FORGEBASIN("forgebasin", "Forge Basin", LocationCategory.DWARVENMINES), - THEFORGE("theforge", "The Forge", LocationCategory.DWARVENMINES), - CLIFFSIDEVEINS( - "cliffsideveins", - "Cliffside Veins", - LocationCategory.DWARVENMINES - ), - DIVANSGATEWAY( - "divansgateway", - "Divan's Gateway", - LocationCategory.DWARVENMINES - ), - THEMIST("themist", "The Mist", LocationCategory.DWARVENMINES), - ROYALMINES("royalmines", "Royal Mines", LocationCategory.DWARVENMINES), - ARISTOCRATPASSAGE( - "aristocratpassage", - "Aristocrat Passage", - LocationCategory.DWARVENMINES - ), - MINERSGUILD("minersguild", "Miner's Guild", LocationCategory.DWARVENMINES), - //CRYSTALHOLLOWS - JUNGLE("jungle", "Jungle", LocationCategory.CRYSTALHOLLOWS), - MAMGAFIELDS("magmafields", "Magma Fields", LocationCategory.CRYSTALHOLLOWS), - GOBLINHOLDOUT( - "goblinholdout", - "Goblin Holdout", - LocationCategory.CRYSTALHOLLOWS - ), - CRYSTALNUCLEUS( - "crystalnucleus", - "Crystal Nucleus", - LocationCategory.CRYSTALHOLLOWS - ), - PERCURSORREMNANTS( - "precursorremnants", - "Precursor Remnants", - LocationCategory.CRYSTALHOLLOWS - ), - MITHRILDEPOSITS( - "mithrildeposits", - "Mithril Deposits", - LocationCategory.CRYSTALHOLLOWS - ); + //THE END + THEEND("theend", "The End", LocationCategory.THEEND), + DRAGONSNEST("dragonsnest", "Dragon's Nest", LocationCategory.THEEND), + VOIDSEPULTURE("voidsepulture", "Void Sepulture", LocationCategory.THEEND), + //PARK + HOWLINGCAVE("howlingcave", "Howling Cave", LocationCategory.PARK), + BIRCHPARK("birchpark", "Birch Park", LocationCategory.PARK), + SPRUCEWOODS("sprucewoods", "Spruce Woods", LocationCategory.PARK), + DARKTHICKET("darkthicket", "Dark Thicket", LocationCategory.PARK), + SAVANNAWOODLAND( + "savannawoodland", + "Savanna Woodland", + LocationCategory.PARK + ), + JUNGLEISLAND("jungleisland", "Jungle Island", LocationCategory.PARK), + //BLAZING FORTRESS + BLAZINGFORTRESS( + "blazingfortress", + "Blazing Fortress", + LocationCategory.FORTRESS + ), + //DUNGEONS + DUNGEONHUB("dungeonhub", "Dungeon Hub", LocationCategory.DUNGEONHUB), + CATACOMBS("catacombs", "The Catacombs", LocationCategory.DUNGEONHUB), + CATACOMBSENTRANCE( + "catacombsentrance", + "Catacombs Entrance", + LocationCategory.DUNGEONHUB + ), + //JERRYISLAND + JERRYSWORKSHOP( + "jerrysworkshop", + "Jerry's Workshop", + LocationCategory.JERRY + ), + JERRYPOND("jerrypond", "Jerry Pond", LocationCategory.JERRY), + //DWARVENMINES + THELIFT("thelift", "The Lift", LocationCategory.DWARVENMINES), + DWARVENVILLAGE( + "dwarvenvillage", + "Dwarven Village", + LocationCategory.DWARVENMINES + ), + DWARVENMINES( + "dwarvenmines", + "Dwarven Mines", + LocationCategory.DWARVENMINES + ), + LAVASPRINGS("lavasprings", "Lava Springs", LocationCategory.DWARVENMINES), + PALACEBRIDGE( + "palacebridge", + "Palace Bridge", + LocationCategory.DWARVENMINES + ), + ROYALPALACE("royalpalace", "Royal Palace", LocationCategory.DWARVENMINES), + GRANDLIBRARY( + "grandlibrary", + "Grand Library", + LocationCategory.DWARVENMINES + ), + ROYALQUARTERS( + "royalquarters", + "Royal Quarters", + LocationCategory.DWARVENMINES + ), + BARRACKSOFHEROES( + "barracksofheroes", + "Barracks of Heroes", + LocationCategory.DWARVENMINES + ), + HANGINGCOURT( + "hangingcourt", + "Hanging Court", + LocationCategory.DWARVENMINES + ), + GREATICEWALL( + "greaticewall", + "Great Ice Wall", + LocationCategory.DWARVENMINES + ), + GOBLINBURROWS( + "goblinburrows", + "Goblin Burrows", + LocationCategory.DWARVENMINES + ), + FARRESERVE("farreserve", "Far Reserve", LocationCategory.DWARVENMINES), + CCMINECARTSCO( + "ccminecartco", + "Minecart Co.", + LocationCategory.DWARVENMINES + ), + UPPERMINES("uppermines", "Upper Mines", LocationCategory.DWARVENMINES), + RAMPARTSQUARRY( + "rampartsquarry", + "Ramparts Quarry", + LocationCategory.DWARVENMINES + ), + GATESTOTHEMINES( + "gatestothemines", + "Gates to The Mines", + LocationCategory.DWARVENMINES + ), + FORGEBASIN("forgebasin", "Forge Basin", LocationCategory.DWARVENMINES), + THEFORGE("theforge", "The Forge", LocationCategory.DWARVENMINES), + CLIFFSIDEVEINS( + "cliffsideveins", + "Cliffside Veins", + LocationCategory.DWARVENMINES + ), + DIVANSGATEWAY( + "divansgateway", + "Divan's Gateway", + LocationCategory.DWARVENMINES + ), + THEMIST("themist", "The Mist", LocationCategory.DWARVENMINES), + ROYALMINES("royalmines", "Royal Mines", LocationCategory.DWARVENMINES), + ARISTOCRATPASSAGE( + "aristocratpassage", + "Aristocrat Passage", + LocationCategory.DWARVENMINES + ), + MINERSGUILD("minersguild", "Miner's Guild", LocationCategory.DWARVENMINES), + //CRYSTALHOLLOWS + JUNGLE("jungle", "Jungle", LocationCategory.CRYSTALHOLLOWS), + MAMGAFIELDS("magmafields", "Magma Fields", LocationCategory.CRYSTALHOLLOWS), + GOBLINHOLDOUT( + "goblinholdout", + "Goblin Holdout", + LocationCategory.CRYSTALHOLLOWS + ), + CRYSTALNUCLEUS( + "crystalnucleus", + "Crystal Nucleus", + LocationCategory.CRYSTALHOLLOWS + ), + PERCURSORREMNANTS( + "precursorremnants", + "Precursor Remnants", + LocationCategory.CRYSTALHOLLOWS + ), + MITHRILDEPOSITS( + "mithrildeposits", + "Mithril Deposits", + LocationCategory.CRYSTALHOLLOWS + ); - private final String name; - private final String displayName; - private final LocationCategory category; + private final String name; + private final String displayName; + private final LocationCategory category; - Locations(String name, String displayName, LocationCategory category) { - this.name = name; - this.displayName = displayName; - this.category = category; - } + Locations(String name, String displayName, LocationCategory category) { + this.name = name; + this.displayName = displayName; + this.category = category; + } - public String getName() { - return this.name; - } + public String getName() { + return this.name; + } - public String getDisplayName() { - return this.displayName; - } + public String getDisplayName() { + return this.displayName; + } - public LocationCategory getCategory() { - return this.category; - } + public LocationCategory getCategory() { + return this.category; + } - public static Locations get(String id) { - try { - return Locations.valueOf(id.replace(" ", "").toUpperCase()); - } catch (IllegalArgumentException ex) { - LocationHandler.reportUndocumentedLocation(id); - return DEFAULT; + public static Locations get(String id) { + try { + return Locations.valueOf(id.replace(" ", "").toUpperCase()); + } catch (IllegalArgumentException ex) { + LocationHandler.reportUndocumentedLocation(id); + return DEFAULT; + } } - } - @Override - public String toString() { - return this.name; - } + @Override + public String toString() { + return this.name; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/location/ParkIslandHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/location/ParkIslandHandler.java index 7fa0d19..5d5f756 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/location/ParkIslandHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/location/ParkIslandHandler.java @@ -4,26 +4,28 @@ import javax.annotation.Nullable; public class ParkIslandHandler { - private static boolean isRaining = false; - private static String rainTime = ""; + private static boolean isRaining = false; + private static String rainTime = ""; - public static void parseRain(@Nullable String tabLine) { - if (tabLine == null) { - isRaining = false; - rainTime = ""; - } else if (tabLine.toLowerCase().contains("rain:")) { - if (tabLine.toLowerCase().contains("no rain")) isRaining = false; else { - rainTime = tabLine.toLowerCase().replace("rain:", "").replace(" ", ""); - isRaining = true; - } + public static void parseRain(@Nullable String tabLine) { + if (tabLine == null) { + isRaining = false; + rainTime = ""; + } else if (tabLine.toLowerCase().contains("rain:")) { + if (tabLine.toLowerCase().contains("no rain")) isRaining = + false; else { + rainTime = + tabLine.toLowerCase().replace("rain:", "").replace(" ", ""); + isRaining = true; + } + } } - } - public static String getRainTime() { - return rainTime; - } + public static String getRainTime() { + return rainTime; + } - public static boolean isRaining() { - return isRaining; - } + public static boolean isRaining() { + return isRaining; + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEndermanRenderer.java b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEndermanRenderer.java index 07853d3..d29b6f5 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEndermanRenderer.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEndermanRenderer.java @@ -14,29 +14,29 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(RenderEnderman.class) public class MixinEndermanRenderer { - @Inject( - method = "doRender(Lnet/minecraft/entity/monster/EntityEnderman;DDDFF)V", - at = @At("HEAD") - ) - public void onRender( - EntityEnderman entity, - double x, - double y, - double z, - float entityYaw, - float partialTicks, - CallbackInfo ci - ) { - if (EntityTypeHelper.isZealot(entity)) { - Color color = new Color( - SpecialColour.specialToChromaRGB("255:255:0:48:255") - ); - GlStateManager.color( - color.getRed() / 255f, - color.getGreen() / 255f, - color.getBlue() / 255f, - 255f - ); + @Inject( + method = "doRender(Lnet/minecraft/entity/monster/EntityEnderman;DDDFF)V", + at = @At("HEAD") + ) + public void onRender( + EntityEnderman entity, + double x, + double y, + double z, + float entityYaw, + float partialTicks, + CallbackInfo ci + ) { + if (EntityTypeHelper.isZealot(entity)) { + Color color = new Color( + SpecialColour.specialToChromaRGB("255:255:0:48:255") + ); + GlStateManager.color( + color.getRed() / 255f, + color.getGreen() / 255f, + color.getBlue() / 255f, + 255f + ); + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEntityArrow.java b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEntityArrow.java index 57ea2dc..3641876 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEntityArrow.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinEntityArrow.java @@ -13,21 +13,23 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(EntityArrow.class) public class MixinEntityArrow { - //Disabled as kill tracker stuff not fully added yet. - @Shadow - public Entity shootingEntity; + //Disabled as kill tracker stuff not fully added yet. + @Shadow + public Entity shootingEntity; - @ModifyVariable(method = "onUpdate", at = @At(value = "STORE", ordinal = 1)) - public MovingObjectPosition onUpdate(MovingObjectPosition position) { - if ( - position != null && - position.entityHit != null && - this.shootingEntity != null && - this.shootingEntity.getUniqueID() - .equals(Minecraft.getMinecraft().thePlayer.getUniqueID()) - ) { - KillTrackerHandler.attackedEntities.add(position.entityHit.getUniqueID()); + @ModifyVariable(method = "onUpdate", at = @At(value = "STORE", ordinal = 1)) + public MovingObjectPosition onUpdate(MovingObjectPosition position) { + if ( + position != null && + position.entityHit != null && + this.shootingEntity != null && + this.shootingEntity.getUniqueID() + .equals(Minecraft.getMinecraft().thePlayer.getUniqueID()) + ) { + KillTrackerHandler.attackedEntities.add( + position.entityHit.getUniqueID() + ); + } + return position; } - return position; - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinGuiIngameForge.java b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinGuiIngameForge.java index 1d20f02..d6e0ac6 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinGuiIngameForge.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinGuiIngameForge.java @@ -15,136 +15,137 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GuiIngameForge.class) public class MixinGuiIngameForge { - @Shadow(remap = false) - private RenderGameOverlayEvent eventParent; + @Shadow(remap = false) + private RenderGameOverlayEvent eventParent; - @Inject( - method = "renderArmor", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderArmor(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideArmor && - SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(ARMOR)) return; - post(ARMOR); + @Inject( + method = "renderArmor", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderArmor(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideArmor && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(ARMOR)) return; + post(ARMOR); + } } - } - @Inject( - method = "renderHealth", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderHealth(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideHearts && - SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(HEALTH)) return; - post(HEALTH); + @Inject( + method = "renderHealth", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderHealth(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideHearts && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(HEALTH)) return; + post(HEALTH); + } } - } - @Inject( - method = "renderAir", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderAir(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideAir && SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(AIR)) return; - post(AIR); + @Inject( + method = "renderAir", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderAir(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideAir && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(AIR)) return; + post(AIR); + } } - } - @Inject( - method = "renderHealthMount", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderHealthMount(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideAnimalHearts && - SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(HEALTHMOUNT)) return; - post(HEALTHMOUNT); + @Inject( + method = "renderHealthMount", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderHealthMount(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideAnimalHearts && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(HEALTHMOUNT)) return; + post(HEALTHMOUNT); + } } - } - @Inject( - method = "renderExperience", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderExperience(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideXpBar && - SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(EXPERIENCE)) return; - post(EXPERIENCE); + @Inject( + method = "renderExperience", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderExperience(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideXpBar && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(EXPERIENCE)) return; + post(EXPERIENCE); + } } - } - @Inject( - method = "renderJumpBar", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderJumpBar(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideXpBar && - SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(JUMPBAR)) return; - post(JUMPBAR); + @Inject( + method = "renderJumpBar", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderJumpBar(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideXpBar && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(JUMPBAR)) return; + post(JUMPBAR); + } } - } - @Inject( - method = "renderFood", - at = @At("HEAD"), - cancellable = true, - remap = false - ) - public void onRenderFood(int width, int height, CallbackInfo ci) { - if ( - SkyblockHud.config.renderer.hideFood && - SkyblockHud.hasSkyblockScoreboard() - ) { - ci.cancel(); - if (pre(FOOD)) return; - post(FOOD); + @Inject( + method = "renderFood", + at = @At("HEAD"), + cancellable = true, + remap = false + ) + public void onRenderFood(int width, int height, CallbackInfo ci) { + if ( + SkyblockHud.config.renderer.hideFood && + SkyblockHud.hasSkyblockScoreboard() + ) { + ci.cancel(); + if (pre(FOOD)) return; + post(FOOD); + } } - } - private boolean pre(RenderGameOverlayEvent.ElementType type) { - return MinecraftForge.EVENT_BUS.post( - new RenderGameOverlayEvent.Pre(eventParent, type) - ); - } + private boolean pre(RenderGameOverlayEvent.ElementType type) { + return MinecraftForge.EVENT_BUS.post( + new RenderGameOverlayEvent.Pre(eventParent, type) + ); + } - private void post(RenderGameOverlayEvent.ElementType type) { - MinecraftForge.EVENT_BUS.post( - new RenderGameOverlayEvent.Post(eventParent, type) - ); - } + private void post(RenderGameOverlayEvent.ElementType type) { + MinecraftForge.EVENT_BUS.post( + new RenderGameOverlayEvent.Post(eventParent, type) + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinNetHandlerPlayClient.java b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinNetHandlerPlayClient.java index 759089b..5cb4036 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinNetHandlerPlayClient.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/mixins/MixinNetHandlerPlayClient.java @@ -12,7 +12,7 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(NetHandlerPlayClient.class) public class MixinNetHandlerPlayClient { - /* DISABLE UNTIL NEW SYSTEM + /* DISABLE UNTIL NEW SYSTEM @Inject(method = "handleSetSlot", at = @At("HEAD")) public void onHandleSetSlot(S2FPacketSetSlot packetIn, CallbackInfo ci){ if (SkyblockHud.hasSkyblockScoreboard()) { @@ -44,26 +44,26 @@ public class MixinNetHandlerPlayClient { } */ - @Inject( - method = "handleTeams", - locals = LocalCapture.CAPTURE_FAILHARD, - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/network/play/server/S3EPacketTeams;getAction()I", - ordinal = 0, - shift = At.Shift.BEFORE - ), - cancellable = true - ) - public void handleTeams( - S3EPacketTeams packetIn, - CallbackInfo ci, - Scoreboard scoreboard - ) { - //This stops Hypixel from being stupid and spamming our logs because they dont have different ids for things. - if ( - scoreboard.getTeam(packetIn.getName()) != null && - packetIn.getAction() == 0 - ) ci.cancel(); - } + @Inject( + method = "handleTeams", + locals = LocalCapture.CAPTURE_FAILHARD, + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/network/play/server/S3EPacketTeams;getAction()I", + ordinal = 0, + shift = At.Shift.BEFORE + ), + cancellable = true + ) + public void handleTeams( + S3EPacketTeams packetIn, + CallbackInfo ci, + Scoreboard scoreboard + ) { + //This stops Hypixel from being stupid and spamming our logs because they dont have different ids for things. + if ( + scoreboard.getTeam(packetIn.getName()) != null && + packetIn.getAction() == 0 + ) ci.cancel(); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java b/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java index d5602ed..9d8556d 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/DungeonOverlay.java @@ -24,322 +24,335 @@ 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; + 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); + 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); + 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 - ); + 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 - ); + //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 - ); + //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 - ); - } + //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; + 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); + 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 - ); + 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++ + @SubscribeEvent + public void renderOverlay(RenderGameOverlayEvent.Post event) { + Minecraft mc = Minecraft.getMinecraft(); + if ( + Utils.overlayShouldRender( + event.type, + SkyblockHud.hasSkyblockScoreboard(), + LocationHandler.getCurrentLocation().equals(Locations.CATACOMBS) + ) ) { - 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 - ); + 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 + ); } - } - 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 index 8cff166..45fd243 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/overlay/GenericOverlays.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/GenericOverlays.java @@ -10,75 +10,93 @@ import net.minecraft.client.renderer.GlStateManager; 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); + 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); - } + 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); - } + 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 index 1b0614d..cba60eb 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/overlay/OverlayHud.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/OverlayHud.java @@ -25,709 +25,731 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class OverlayHud extends Gui { - private static final FontRenderer font = Minecraft.getMinecraft() - .fontRendererObj; + private static final FontRenderer font = Minecraft.getMinecraft() + .fontRendererObj; - //STATS - private static boolean eventToggle; + //STATS + private static boolean eventToggle; - public static boolean bossBarVisible = false; + 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 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"); - 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 - ); - } - } + 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 + ); - 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; + //PURSE + drawPurseAndBits(width, offset, mc); - //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; + //SEASON/DATE + drawSeasonAndDate(width, offset, mc); - //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; - } + //REDSTONE PERCENT + drawRedstone(width, offset, mc); - drawTexturedModalRect( - xPos, - offset + (bossBarVisible ? 35 : 18), - 252, - 34, - 4, - 14 - ); - } + // LOCATION + drawLocation(width, offset, mc); - 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 - ); + //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 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 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 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) { + public void drawLocation(int width, int offset, Minecraft mc) { 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 + (width / 2) - + 33 - + ( + font.getStringWidth( + LocationHandler.getCurrentLocation().getDisplayName() + ) + ), + offset + (bossBarVisible ? 20 : 3), + 0, + 34, + 2, + 14 ); drawTexturedModalRect( - ((width / 2) - 33 - (font.getStringWidth(text))) + 2, - offset + (bossBarVisible ? 35 : 18), - 2, - 34, - font.getStringWidth(text) + 14, - 14 + ( + (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(text))) + 4, - offset + (bossBarVisible ? 38 : 21), - slayerType.getX(), - 24, - 8, - 8 + ( + (width / 2) - + 33 - + ( + font.getStringWidth( + LocationHandler.getCurrentLocation().getDisplayName() + ) + ) + ) + + 4, + offset + (bossBarVisible ? 23 : 6), + LocationHandler.getCurrentLocation().getCategory().getTexturePos(), + 8, + 8, + 8 ); drawString( - font, - text, - (width / 2) - 19 - (font.getStringWidth(text)), - offset + (bossBarVisible ? 38 : 21), - 0xFFFFFF + font, + LocationHandler.getCurrentLocation().getDisplayName(), + (width / 2) - + 19 - + ( + font.getStringWidth( + LocationHandler.getCurrentLocation().getDisplayName() + ) + ), + offset + (bossBarVisible ? 23 : 6), + 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 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 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 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; - 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; + //COINS drawTexturedModalRect( - (width / 2) - 33 - (font.getStringWidth(duration)), - offset + (bossBarVisible ? 35 : 18), - 0, - 34, - 2, - 14 + xPos, + offset + (bossBarVisible ? 35 : 18), + 2, + 34, + font.getStringWidth(CurrencyHandler.getCoinsFormatted()) + 11, + 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 + xPos + 1, + offset + (bossBarVisible ? 37 : 20), + 34, + 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 + 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( - ((width / 2) - 33 - (font.getStringWidth(text))) + 4, - offset + (bossBarVisible ? 38 : 21), - DwarvenMineHandler.currentEvent.x, - 0, - 8, - 8 + xPos, + offset + (bossBarVisible ? 35 : 18), + 252, + 34, + 4, + 14 ); - 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()) + 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 ) { - 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.scale(factor, factor, 1); + drawCenteredString( + font, + text, + (int) (x / factor), + (int) (y / factor), + color ); - } - GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.scale(1 / factor, 1 / factor, 1); } - } - - 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 index 5a7409e..885ff7a 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/overlay/RPGHud.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/overlay/RPGHud.java @@ -17,175 +17,188 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; 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 - ) + 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( + "#.##" ); - 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 + + 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 + ) ); - } - 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, - true - ); - GlStateManager.scale(1 / 0.75f, 1 / 0.75f, 1); - GlStateManager.color(255, 255, 255); - GlStateManager.disableBlend(); + 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, + true + ); + GlStateManager.scale(1 / 0.75f, 1 / 0.75f, 1); + GlStateManager.color(255, 255, 255); + GlStateManager.disableBlend(); + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/playerstats/ActionBarParsing.java b/src/main/java/com/thatgravyboat/skyblockhud/playerstats/ActionBarParsing.java index a67535f..a37726f 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/playerstats/ActionBarParsing.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/playerstats/ActionBarParsing.java @@ -14,161 +14,175 @@ import net.minecraftforge.fml.common.gameevent.TickEvent; public class ActionBarParsing { - private static String lastActionBar = ""; - private static String lastLowActionBar = ""; - private static IChatComponent lastLowEditedActionBar = null; + private static String lastActionBar = ""; + private static String lastLowActionBar = ""; + private static IChatComponent lastLowEditedActionBar = null; - private static final Pattern HealthRegex = Pattern.compile( - "([0-9]+)/([0-9]+)\u2764" - ); - private static final Pattern HealingRegex = Pattern.compile( - "\\+([0-9]+)[\u2586\u2585\u2584\u2583\u2582\u2581]" - ); - private static final Pattern DefenseRegex = Pattern.compile( - "([0-9]+)\u2748 Defense" - ); - private static final Pattern ManaRegex = Pattern.compile( - "([0-9]+)/([0-9]+)\u270E Mana" - ); - private static final Pattern ManaOverflowRegex = Pattern.compile( - "([0-9]+)/([0-9]+)\u270E ([0-9]+)\u02AC" - ); - private static final Pattern ManaDecreaseRegex = Pattern.compile( - "-([0-9]+) Mana \\(" - ); - private static final Pattern XpGainRegex = Pattern.compile( - "\\+(\\d*\\.?\\d*) (Farming|Mining|Combat|Foraging|Fishing|Enchanting|Alchemy|Carpentry|Runecrafting) \\((\\d*\\.?\\d*)%\\)" - ); + private static final Pattern HealthRegex = Pattern.compile( + "([0-9]+)/([0-9]+)\u2764" + ); + private static final Pattern HealingRegex = Pattern.compile( + "\\+([0-9]+)[\u2586\u2585\u2584\u2583\u2582\u2581]" + ); + private static final Pattern DefenseRegex = Pattern.compile( + "([0-9]+)\u2748 Defense" + ); + private static final Pattern ManaRegex = Pattern.compile( + "([0-9]+)/([0-9]+)\u270E Mana" + ); + private static final Pattern ManaOverflowRegex = Pattern.compile( + "([0-9]+)/([0-9]+)\u270E ([0-9]+)\u02AC" + ); + private static final Pattern ManaDecreaseRegex = Pattern.compile( + "-([0-9]+) Mana \\(" + ); + private static final Pattern XpGainRegex = Pattern.compile( + "\\+(\\d*\\.?\\d*) (Farming|Mining|Combat|Foraging|Fishing|Enchanting|Alchemy|Carpentry|Runecrafting) \\((\\d*\\.?\\d*)%\\)" + ); - private static final Pattern HealthReplaceRegex = Pattern.compile( - "\u00A7c([0-9]+)/([0-9]+)\u2764" - ); - private static final Pattern HealingReplaceRegex = Pattern.compile( - "\\+\u00A7c([0-9]+)[\u2586\u2585\u2584\u2583\u2582\u2581]" - ); - private static final Pattern HealthAbsorptionReplaceRegex = Pattern.compile( - "\u00A76([0-9]+)/([0-9]+)\u2764" - ); - private static final Pattern DefenseReplaceRegex = Pattern.compile( - "\u00A7a([0-9]+)\u00A7a\u2748 Defense" - ); - private static final Pattern ManaReplaceRegex = Pattern.compile( - "\u00A7b([0-9]+)/([0-9]+)\u270E Mana" - ); - private static final Pattern ManaOverflowReplaceRegex = Pattern.compile( - "\u00A7b([0-9]+)/([0-9]+)\u270E \u00A73([0-9]+)\u02AC" - ); + private static final Pattern HealthReplaceRegex = Pattern.compile( + "\u00A7c([0-9]+)/([0-9]+)\u2764" + ); + private static final Pattern HealingReplaceRegex = Pattern.compile( + "\\+\u00A7c([0-9]+)[\u2586\u2585\u2584\u2583\u2582\u2581]" + ); + private static final Pattern HealthAbsorptionReplaceRegex = Pattern.compile( + "\u00A76([0-9]+)/([0-9]+)\u2764" + ); + private static final Pattern DefenseReplaceRegex = Pattern.compile( + "\u00A7a([0-9]+)\u00A7a\u2748 Defense" + ); + private static final Pattern ManaReplaceRegex = Pattern.compile( + "\u00A7b([0-9]+)/([0-9]+)\u270E Mana" + ); + private static final Pattern ManaOverflowReplaceRegex = Pattern.compile( + "\u00A7b([0-9]+)/([0-9]+)\u270E \u00A73([0-9]+)\u02AC" + ); - private static int ticksSinceLastPrediction = 0; - private static boolean predict = false; + private static int ticksSinceLastPrediction = 0; + private static boolean predict = false; - @SubscribeEvent - public void tick(TickEvent.ClientTickEvent event) { - if (predict) { - ticksSinceLastPrediction++; - if (ticksSinceLastPrediction == 20 && SkyblockHud.config.rpg.showRpgHud) { - ticksSinceLastPrediction = 0; - RPGHud.manaPredictionUpdate(true, 0); - } + @SubscribeEvent + public void tick(TickEvent.ClientTickEvent event) { + if (predict) { + ticksSinceLastPrediction++; + if ( + ticksSinceLastPrediction == 20 && + SkyblockHud.config.rpg.showRpgHud + ) { + ticksSinceLastPrediction = 0; + RPGHud.manaPredictionUpdate(true, 0); + } + } } - } - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onStatusBarHigh(ClientChatReceivedEvent event) { - if ( - event.type == 2 && - SkyblockHud.hasSkyblockScoreboard() && - SkyblockHud.config.rpg.showRpgHud - ) { - parseActionBar(event.message.getUnformattedText()); + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onStatusBarHigh(ClientChatReceivedEvent event) { + if ( + event.type == 2 && + SkyblockHud.hasSkyblockScoreboard() && + SkyblockHud.config.rpg.showRpgHud + ) { + parseActionBar(event.message.getUnformattedText()); + } } - } - @SubscribeEvent(priority = EventPriority.LOW) - public void onStatusBarLow(ClientChatReceivedEvent event) { - if ( - event.type == 2 && - SkyblockHud.hasSkyblockScoreboard() && - SkyblockHud.config.rpg.showRpgHud - ) { - String message = event.message.getUnformattedText(); - if (lastLowEditedActionBar == null || !lastLowActionBar.equals(message)) { - lastLowActionBar = message; - message = HealthReplaceRegex.matcher(message).replaceAll(""); - message = HealthAbsorptionReplaceRegex.matcher(message).replaceAll(""); - message = DefenseReplaceRegex.matcher(message).replaceAll(""); - message = ManaReplaceRegex.matcher(message).replaceAll(""); - message = ManaOverflowReplaceRegex.matcher(message).replaceAll(""); + @SubscribeEvent(priority = EventPriority.LOW) + public void onStatusBarLow(ClientChatReceivedEvent event) { + if ( + event.type == 2 && + SkyblockHud.hasSkyblockScoreboard() && + SkyblockHud.config.rpg.showRpgHud + ) { + String message = event.message.getUnformattedText(); + if ( + lastLowEditedActionBar == null || + !lastLowActionBar.equals(message) + ) { + lastLowActionBar = message; + message = HealthReplaceRegex.matcher(message).replaceAll(""); + message = + HealthAbsorptionReplaceRegex + .matcher(message) + .replaceAll(""); + message = DefenseReplaceRegex.matcher(message).replaceAll(""); + message = ManaReplaceRegex.matcher(message).replaceAll(""); + message = + ManaOverflowReplaceRegex.matcher(message).replaceAll(""); - lastLowEditedActionBar = new ChatComponentText(message.trim()); - } - event.message = lastLowEditedActionBar; + lastLowEditedActionBar = new ChatComponentText(message.trim()); + } + event.message = lastLowEditedActionBar; + } } - } - public static void parseActionBar(String input) { - if (!lastActionBar.equals(input)) { - lastActionBar = input; - String bar = Utils.removeColor(input); + public static void parseActionBar(String input) { + if (!lastActionBar.equals(input)) { + lastActionBar = input; + String bar = Utils.removeColor(input); - Matcher HealthMatcher = HealthRegex.matcher(bar); - Matcher DefenseMatcher = DefenseRegex.matcher(bar); - Matcher ManaMatcher = ManaRegex.matcher(bar); - Matcher ManaUseMatcher = ManaDecreaseRegex.matcher(bar); - Matcher ManaOverflowMatcher = ManaOverflowRegex.matcher(bar); - Matcher XpGainMatcher = XpGainRegex.matcher(bar); + Matcher HealthMatcher = HealthRegex.matcher(bar); + Matcher DefenseMatcher = DefenseRegex.matcher(bar); + Matcher ManaMatcher = ManaRegex.matcher(bar); + Matcher ManaUseMatcher = ManaDecreaseRegex.matcher(bar); + Matcher ManaOverflowMatcher = ManaOverflowRegex.matcher(bar); + Matcher XpGainMatcher = XpGainRegex.matcher(bar); - boolean healthFound = HealthMatcher.find(); - boolean defenseFound = DefenseMatcher.find(); - boolean manaFound = ManaMatcher.find(); - boolean manaUseFound = ManaUseMatcher.find(); - boolean manaOverflowFound = ManaOverflowMatcher.find(); - boolean xpFound = XpGainMatcher.find(); + boolean healthFound = HealthMatcher.find(); + boolean defenseFound = DefenseMatcher.find(); + boolean manaFound = ManaMatcher.find(); + boolean manaUseFound = ManaUseMatcher.find(); + boolean manaOverflowFound = ManaOverflowMatcher.find(); + boolean xpFound = XpGainMatcher.find(); - if (healthFound) { - try { - RPGHud.updateHealth( - Integer.parseInt(HealthMatcher.group(1)), - Integer.parseInt(HealthMatcher.group(2)) - ); - } catch (Exception ignored) {} - } - if (defenseFound) { - try { - RPGHud.updateDefense(Integer.parseInt(DefenseMatcher.group(1))); - } catch (Exception ignored) {} - } else if (!xpFound && !manaUseFound) { - RPGHud.updateDefense(0); - } - if (manaFound) { - try { - RPGHud.updateMana( - Integer.parseInt(ManaMatcher.group(1)), - Integer.parseInt(ManaMatcher.group(2)) - ); - } catch (Exception ignored) {} - } - if (!manaFound && manaOverflowFound) { - try { - RPGHud.updateMana( - Integer.parseInt(ManaOverflowMatcher.group(1)), - Integer.parseInt(ManaOverflowMatcher.group(2)) - ); - RPGHud.updateOverflow(Integer.parseInt(ManaOverflowMatcher.group(3))); - } catch (Exception ignored) {} - } - if (!manaFound) { - if (manaUseFound) { - try { - RPGHud.manaPredictionUpdate( - false, - Integer.parseInt(ManaUseMatcher.group(1)) - ); - } catch (Exception ignored) {} + if (healthFound) { + try { + RPGHud.updateHealth( + Integer.parseInt(HealthMatcher.group(1)), + Integer.parseInt(HealthMatcher.group(2)) + ); + } catch (Exception ignored) {} + } + if (defenseFound) { + try { + RPGHud.updateDefense( + Integer.parseInt(DefenseMatcher.group(1)) + ); + } catch (Exception ignored) {} + } else if (!xpFound && !manaUseFound) { + RPGHud.updateDefense(0); + } + if (manaFound) { + try { + RPGHud.updateMana( + Integer.parseInt(ManaMatcher.group(1)), + Integer.parseInt(ManaMatcher.group(2)) + ); + } catch (Exception ignored) {} + } + if (!manaFound && manaOverflowFound) { + try { + RPGHud.updateMana( + Integer.parseInt(ManaOverflowMatcher.group(1)), + Integer.parseInt(ManaOverflowMatcher.group(2)) + ); + RPGHud.updateOverflow( + Integer.parseInt(ManaOverflowMatcher.group(3)) + ); + } catch (Exception ignored) {} + } + if (!manaFound) { + if (manaUseFound) { + try { + RPGHud.manaPredictionUpdate( + false, + Integer.parseInt(ManaUseMatcher.group(1)) + ); + } catch (Exception ignored) {} + } + RPGHud.manaPredictionUpdate(true, 0); + } + predict = !manaFound; } - RPGHud.manaPredictionUpdate(true, 0); - } - predict = !manaFound; } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/seasons/Season.java b/src/main/java/com/thatgravyboat/skyblockhud/seasons/Season.java index 61524ee..da14204 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/seasons/Season.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/seasons/Season.java @@ -1,53 +1,53 @@ package com.thatgravyboat.skyblockhud.seasons; public enum Season { - EARLYSPRING("earlyspring", "Early Spring", 34, 0), - SPRING("spring", "Spring", 34, 31), - LATESPRING("latespring", "Late Spring", 34, 62), - EARLYSUMMER("earlysummer", "Early Summer", 42, 93), - SUMMER("summer", "Summer", 42, 124), - LATESUMMER("latesummer", "Late Summer", 42, 155), - EARLYAUTUMN("earlyautumn", "Early Autumn", 50, 186), - AUTUMN("autumn", "Autumn", 50, 217), - LATEAUTUMN("lateautumn", "Late Autumn", 50, 248), - EARLYWINTER("earlywinter", "Early Winter", 58, 279), - WINTER("winter", "Winter", 58, 310), - LATEWINTER("latewinter", "Late Winter", 58, 341), - ERROR("error", "Error", 0, -1); - - private final String name; - private final String displayName; - private final int textureX; - private final int yearStartDay; - - Season(String name, String displayName, int textureX, int yearStartDay) { - this.name = name; - this.displayName = displayName; - this.textureX = textureX; - this.yearStartDay = yearStartDay; - } - - public String getName() { - return this.name; - } - - public String getDisplayName() { - return this.displayName; - } - - public int getTextureX() { - return this.textureX; - } - - public int getYearStartDay() { - return yearStartDay; - } - - public static Season get(String id) { - try { - return Season.valueOf(id); - } catch (IllegalArgumentException ex) { - return ERROR; + EARLYSPRING("earlyspring", "Early Spring", 34, 0), + SPRING("spring", "Spring", 34, 31), + LATESPRING("latespring", "Late Spring", 34, 62), + EARLYSUMMER("earlysummer", "Early Summer", 42, 93), + SUMMER("summer", "Summer", 42, 124), + LATESUMMER("latesummer", "Late Summer", 42, 155), + EARLYAUTUMN("earlyautumn", "Early Autumn", 50, 186), + AUTUMN("autumn", "Autumn", 50, 217), + LATEAUTUMN("lateautumn", "Late Autumn", 50, 248), + EARLYWINTER("earlywinter", "Early Winter", 58, 279), + WINTER("winter", "Winter", 58, 310), + LATEWINTER("latewinter", "Late Winter", 58, 341), + ERROR("error", "Error", 0, -1); + + private final String name; + private final String displayName; + private final int textureX; + private final int yearStartDay; + + Season(String name, String displayName, int textureX, int yearStartDay) { + this.name = name; + this.displayName = displayName; + this.textureX = textureX; + this.yearStartDay = yearStartDay; + } + + public String getName() { + return this.name; + } + + public String getDisplayName() { + return this.displayName; + } + + public int getTextureX() { + return this.textureX; + } + + public int getYearStartDay() { + return yearStartDay; + } + + public static Season get(String id) { + try { + return Season.valueOf(id); + } catch (IllegalArgumentException ex) { + return ERROR; + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/seasons/SeasonDateHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/seasons/SeasonDateHandler.java index 06b7009..609b3b7 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/seasons/SeasonDateHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/seasons/SeasonDateHandler.java @@ -7,99 +7,101 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class SeasonDateHandler { - private static Season currentSeason = Season.ERROR; - private static int currentDate = 1; - private static String currentEvent = ""; - private static String eventTime = ""; + private static Season currentSeason = Season.ERROR; + private static int currentDate = 1; + private static String currentEvent = ""; + private static String eventTime = ""; - @SubscribeEvent - public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { - if ( - Season.get( - SeasonDateHandler - .removeDate(event.formattedLine.toLowerCase()) - .toUpperCase() - ) != - Season.ERROR - ) { - SeasonDateHandler.setCurrentDateAndSeason( - SeasonDateHandler.removeSeason( - Utils.removeColor(event.formattedLine.toLowerCase().trim()) - ), - SeasonDateHandler - .removeDate( - Utils.removeColor(event.formattedLine.toLowerCase().trim()) - ) - .toUpperCase() - ); + @SubscribeEvent + public void onSidebarLineUpdate(SidebarLineUpdateEvent event) { + if ( + Season.get( + SeasonDateHandler + .removeDate(event.formattedLine.toLowerCase()) + .toUpperCase() + ) != + Season.ERROR + ) { + SeasonDateHandler.setCurrentDateAndSeason( + SeasonDateHandler.removeSeason( + Utils.removeColor(event.formattedLine.toLowerCase().trim()) + ), + SeasonDateHandler + .removeDate( + Utils.removeColor( + event.formattedLine.toLowerCase().trim() + ) + ) + .toUpperCase() + ); + } } - } - public static void setCurrentDateAndSeason(int date, String season) { - currentDate = date; - currentSeason = Season.get(season); - } + public static void setCurrentDateAndSeason(int date, String season) { + currentDate = date; + currentSeason = Season.get(season); + } - public static void setCurrentEvent(String event, String time) { - currentEvent = event; - eventTime = time; - } + public static void setCurrentEvent(String event, String time) { + currentEvent = event; + eventTime = time; + } - public static Season getCurrentSeason() { - return currentSeason; - } + public static Season getCurrentSeason() { + return currentSeason; + } - public static int getCurrentDate() { - return currentDate; - } + public static int getCurrentDate() { + return currentDate; + } - private static String getDataSuffix(int date) { - if (date > 10 && date < 14) return "th"; - switch (date % 10) { - case 1: - return "st"; - case 2: - return "nd"; - case 3: - return "rd"; - default: - return "th"; + private static String getDataSuffix(int date) { + if (date > 10 && date < 14) return "th"; + switch (date % 10) { + case 1: + return "st"; + case 2: + return "nd"; + case 3: + return "rd"; + default: + return "th"; + } } - } - public static String getFancySeasonAndDate() { - return ( - currentSeason.getDisplayName() + - " " + - currentDate + - getDataSuffix(currentDate) - ); - } + public static String getFancySeasonAndDate() { + return ( + currentSeason.getDisplayName() + + " " + + currentDate + + getDataSuffix(currentDate) + ); + } - public static String getCurrentEvent() { - return currentEvent; - } + public static String getCurrentEvent() { + return currentEvent; + } - public static String getCurrentEventTime() { - return eventTime; - } + public static String getCurrentEventTime() { + return eventTime; + } - public static String removeDate(String seasonDate) { - return Pattern - .compile("[^a-zA-Z]") - .matcher(seasonDate.toLowerCase()) - .replaceAll("") - .replaceAll("st|nd|rd|th", "") - .trim(); - } + public static String removeDate(String seasonDate) { + return Pattern + .compile("[^a-zA-Z]") + .matcher(seasonDate.toLowerCase()) + .replaceAll("") + .replaceAll("st|nd|rd|th", "") + .trim(); + } - public static int removeSeason(String seasonDate) { - return Integer.parseInt( - Pattern - .compile("[^0-9]") - .matcher(seasonDate.toLowerCase()) - .replaceAll("") - .trim() - ); - } + public static int removeSeason(String seasonDate) { + return Integer.parseInt( + Pattern + .compile("[^0-9]") + .matcher(seasonDate.toLowerCase()) + .replaceAll("") + .trim() + ); + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/tracker/KillTrackerHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/tracker/KillTrackerHandler.java index d82a521..552837b 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/tracker/KillTrackerHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/tracker/KillTrackerHandler.java @@ -13,72 +13,74 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class KillTrackerHandler { - public static final Set<UUID> attackedEntities = new HashSet<>(); + public static final Set<UUID> attackedEntities = new HashSet<>(); - @SubscribeEvent - public void onAttack(AttackEntityEvent event) { - if (event.target != null) { - attackedEntities.add(event.target.getUniqueID()); + @SubscribeEvent + public void onAttack(AttackEntityEvent event) { + if (event.target != null) { + attackedEntities.add(event.target.getUniqueID()); + } } - } - @SubscribeEvent - public void onDeath(LivingDeathEvent event) { - if (false) { - //Used for testing - System.out.println( - "----------------------------------------------------------------------------------------------------------------" - ); - System.out.println("Name : " + event.entity.getName()); - System.out.println("UUID : " + event.entity.getUniqueID()); - NBTTagCompound tag = new NBTTagCompound(); - event.entity.writeToNBT(tag); - System.out.println("Tag : " + tag); - System.out.println("Damage : " + getDamageSourceString(event.source)); - System.out.println( - "----------------------------------------------------------------------------------------------------------------" - ); - } + @SubscribeEvent + public void onDeath(LivingDeathEvent event) { + if (false) { + //Used for testing + System.out.println( + "----------------------------------------------------------------------------------------------------------------" + ); + System.out.println("Name : " + event.entity.getName()); + System.out.println("UUID : " + event.entity.getUniqueID()); + NBTTagCompound tag = new NBTTagCompound(); + event.entity.writeToNBT(tag); + System.out.println("Tag : " + tag); + System.out.println( + "Damage : " + getDamageSourceString(event.source) + ); + System.out.println( + "----------------------------------------------------------------------------------------------------------------" + ); + } - attackedEntities.remove(event.entity.getUniqueID()); - } + attackedEntities.remove(event.entity.getUniqueID()); + } - public static String getDamageSourceString(DamageSource source) { - return ( - "{ " + - source.getDamageType() + - ", " + - source.isDamageAbsolute() + - ", " + - source.isDifficultyScaled() + - ", " + - source.isFireDamage() + - ", " + - source.isProjectile() + - ", " + - source.isUnblockable() + - ", " + - source.isExplosion() + - ", " + - source.isMagicDamage() + - ", " + - source.isCreativePlayer() + - ", " + - source.getSourceOfDamage() + - " }" - ); - } + public static String getDamageSourceString(DamageSource source) { + return ( + "{ " + + source.getDamageType() + + ", " + + source.isDamageAbsolute() + + ", " + + source.isDifficultyScaled() + + ", " + + source.isFireDamage() + + ", " + + source.isProjectile() + + ", " + + source.isUnblockable() + + ", " + + source.isExplosion() + + ", " + + source.isMagicDamage() + + ", " + + source.isCreativePlayer() + + ", " + + source.getSourceOfDamage() + + " }" + ); + } - @SubscribeEvent - public void onWorldChange(EntityJoinWorldEvent event) { - if (event.entity != null) { - if ( - event.entity - .getUniqueID() - .equals(Minecraft.getMinecraft().thePlayer.getUniqueID()) - ) { - attackedEntities.clear(); - } + @SubscribeEvent + public void onWorldChange(EntityJoinWorldEvent event) { + if (event.entity != null) { + if ( + event.entity + .getUniqueID() + .equals(Minecraft.getMinecraft().thePlayer.getUniqueID()) + ) { + attackedEntities.clear(); + } + } } - } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java index 4accb25..7035fee 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerFileLoader.java @@ -18,224 +18,237 @@ import net.minecraft.util.ResourceLocation; public class TrackerFileLoader { - private static final Gson gson = new GsonBuilder().create(); - - public static ItemStack getDisplayItem(JsonObject jsonObject) { - int meta = jsonObject.get("meta").getAsInt(); - String displayItemId = jsonObject.get("item").getAsString(); - Item item = Item.itemRegistry.getObject( - new ResourceLocation(displayItemId) - ); - ItemStack stack = new ItemStack(item, 0, meta); - if ( - jsonObject.has("skullData") && - displayItemId.equals("minecraft:skull") && - meta == 3 - ) { - stack.setTagInfo( - "SkullOwner", - getSkullTag(jsonObject.getAsJsonObject("skullData")) - ); - } - if ( - jsonObject.has("enchanted") && jsonObject.get("enchanted").getAsBoolean() - ) stack.setTagInfo("ench", new NBTTagList()); - return stack; - } - - public static NBTBase getSkullTag(JsonObject skullObject) { - NBTTagCompound skullOwner = new NBTTagCompound(); - NBTTagCompound properties = new NBTTagCompound(); - NBTTagList textures = new NBTTagList(); - NBTTagCompound value = new NBTTagCompound(); - - skullOwner.setString("Id", skullObject.get("id").getAsString()); - - value.setString("Value", skullObject.get("texture").getAsString()); - textures.appendTag(value); - - properties.setTag("textures", textures); - - skullOwner.setTag("Properties", properties); - return skullOwner; - } - - private static void loadTrackers(JsonObject object) { - for (JsonElement element : object.get("trackers").getAsJsonArray()) { - JsonObject tracker = element.getAsJsonObject(); - StringBuilder builder = new StringBuilder(); - tracker - .get("location") - .getAsJsonArray() - .forEach(loc -> builder.append(loc.getAsString())); - String location = builder.toString(); - - Map<String, ItemStack> stacks = new HashMap<>(); - for (JsonElement drop : tracker.get("drops").getAsJsonArray()) { - JsonObject dropObject = drop.getAsJsonObject(); - - //Display Item Creation - ItemStack stack = getDisplayItem( - dropObject.getAsJsonObject("displayItem") + private static final Gson gson = new GsonBuilder().create(); + + public static ItemStack getDisplayItem(JsonObject jsonObject) { + int meta = jsonObject.get("meta").getAsInt(); + String displayItemId = jsonObject.get("item").getAsString(); + Item item = Item.itemRegistry.getObject( + new ResourceLocation(displayItemId) ); - String itemId = dropObject.get("id").getAsString(); + ItemStack stack = new ItemStack(item, 0, meta); + if ( + jsonObject.has("skullData") && + displayItemId.equals("minecraft:skull") && + meta == 3 + ) { + stack.setTagInfo( + "SkullOwner", + getSkullTag(jsonObject.getAsJsonObject("skullData")) + ); + } + if ( + jsonObject.has("enchanted") && + jsonObject.get("enchanted").getAsBoolean() + ) stack.setTagInfo("ench", new NBTTagList()); + return stack; + } - stacks.put(itemId, stack); - } + public static NBTBase getSkullTag(JsonObject skullObject) { + NBTTagCompound skullOwner = new NBTTagCompound(); + NBTTagCompound properties = new NBTTagCompound(); + NBTTagList textures = new NBTTagList(); + NBTTagCompound value = new NBTTagCompound(); - String event = tracker.has("event") - ? tracker.get("event").getAsString() - : null; + skullOwner.setString("Id", skullObject.get("id").getAsString()); - Map<String, Map<String, ItemStack>> events = new HashMap<>(); - events.put(event, stacks); + value.setString("Value", skullObject.get("texture").getAsString()); + textures.appendTag(value); - if (TrackerHandler.trackers.containsKey(location)) { - TrackerHandler.trackers.get(location).dropTrackers.put(event, stacks); - } else { - TrackerHandler.trackers.putIfAbsent( - location, - new TrackerHandler.TrackerData(events) - ); - } - - tracker - .get("location") - .getAsJsonArray() - .forEach( - loc -> - TrackerHandler.trackerIds.put( - Locations.get(loc.getAsString()), - location - ) + properties.setTag("textures", textures); + + skullOwner.setTag("Properties", properties); + return skullOwner; + } + + private static void loadTrackers(JsonObject object) { + for (JsonElement element : object.get("trackers").getAsJsonArray()) { + JsonObject tracker = element.getAsJsonObject(); + StringBuilder builder = new StringBuilder(); + tracker + .get("location") + .getAsJsonArray() + .forEach(loc -> builder.append(loc.getAsString())); + String location = builder.toString(); + + Map<String, ItemStack> stacks = new HashMap<>(); + for (JsonElement drop : tracker.get("drops").getAsJsonArray()) { + JsonObject dropObject = drop.getAsJsonObject(); + + //Display Item Creation + ItemStack stack = getDisplayItem( + dropObject.getAsJsonObject("displayItem") + ); + String itemId = dropObject.get("id").getAsString(); + + stacks.put(itemId, stack); + } + + String event = tracker.has("event") + ? tracker.get("event").getAsString() + : null; + + Map<String, Map<String, ItemStack>> events = new HashMap<>(); + events.put(event, stacks); + + if (TrackerHandler.trackers.containsKey(location)) { + TrackerHandler.trackers + .get(location) + .dropTrackers.put(event, stacks); + } else { + TrackerHandler.trackers.putIfAbsent( + location, + new TrackerHandler.TrackerData(events) + ); + } + + tracker + .get("location") + .getAsJsonArray() + .forEach( + loc -> + TrackerHandler.trackerIds.put( + Locations.get(loc.getAsString()), + location + ) + ); + } + } + + private static JsonElement getTrackerFile() { + List<JsonObject> trackerStats = new ArrayList<>(); + TrackerHandler.trackers.forEach( + (locations, trackerData) -> + trackerData.dropTrackers.forEach( + (event, drops) -> { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("location", locations); + + if (event == null) jsonObject.add( + "event", + new JsonNull() + ); else jsonObject.addProperty("event", event); + + JsonObject dropsData = new JsonObject(); + drops.forEach( + (s, stack) -> + dropsData.addProperty(s, stack.stackSize) + ); + jsonObject.add("drops", dropsData); + trackerStats.add(jsonObject); + } + ) ); + JsonArray stats = new JsonArray(); + trackerStats.forEach(stats::add); + return stats; } - } - - private static JsonElement getTrackerFile() { - List<JsonObject> trackerStats = new ArrayList<>(); - TrackerHandler.trackers.forEach( - (locations, trackerData) -> - trackerData.dropTrackers.forEach( - (event, drops) -> { - JsonObject jsonObject = new JsonObject(); - jsonObject.addProperty("location", locations); - - if (event == null) jsonObject.add( - "event", - new JsonNull() - ); else jsonObject.addProperty("event", event); - - JsonObject dropsData = new JsonObject(); - drops.forEach( - (s, stack) -> dropsData.addProperty(s, stack.stackSize) + + public static void loadTrackersFile() { + try { + ResourceLocation trackers = new ResourceLocation( + "skyblockhud:data/trackers.json" ); - jsonObject.add("drops", dropsData); - trackerStats.add(jsonObject); - } - ) - ); - JsonArray stats = new JsonArray(); - trackerStats.forEach(stats::add); - return stats; - } - - public static void loadTrackersFile() { - try { - ResourceLocation trackers = new ResourceLocation( - "skyblockhud:data/trackers.json" - ); - InputStream is = Minecraft - .getMinecraft() - .getResourceManager() - .getResource(trackers) - .getInputStream(); - - try ( - BufferedReader reader = new BufferedReader( - new InputStreamReader(is, StandardCharsets.UTF_8) - ) - ) { - loadTrackers(gson.fromJson(reader, JsonObject.class)); - } - } catch (Exception ignored) {} - } - - public static boolean loadTrackerStatsFile(File configDirectory) { - File configFile = new File(configDirectory, "sbh-trackers-stats.json"); - - try { - if (configFile.createNewFile()) { - return true; - } - - try ( - BufferedReader reader = new BufferedReader( - new InputStreamReader( - new FileInputStream(configFile), - StandardCharsets.UTF_8 - ) - ) - ) { - JsonObject json = gson.fromJson(reader, JsonObject.class); - if (json.has("trackerStats")) { - json - .getAsJsonArray("trackerStats") - .forEach( - element -> { - if (element.isJsonObject()) { - JsonObject object = element.getAsJsonObject(); - String location = object.get("location").getAsString(); - Map<String, Map<String, ItemStack>> trackers = TrackerHandler.trackers.get( - location - ) - .dropTrackers; - - JsonElement event = object.get("event"); - String eventString = event == null || event.isJsonNull() - ? null - : event.getAsString(); - Map<String, ItemStack> drops = trackers.get(eventString); - - if (drops != null) { - for (Map.Entry<String, JsonElement> drop : object - .getAsJsonObject("drops") - .entrySet()) { - if (drops.containsKey(drop.getKey())) { - drops.get(drop.getKey()).stackSize = - drop.getValue().getAsInt(); - } - } - drops = TrackerHandler.sortTrackers(drops); - trackers.put(eventString, drops); - } + InputStream is = Minecraft + .getMinecraft() + .getResourceManager() + .getResource(trackers) + .getInputStream(); + + try ( + BufferedReader reader = new BufferedReader( + new InputStreamReader(is, StandardCharsets.UTF_8) + ) + ) { + loadTrackers(gson.fromJson(reader, JsonObject.class)); + } + } catch (Exception ignored) {} + } + + public static boolean loadTrackerStatsFile(File configDirectory) { + File configFile = new File(configDirectory, "sbh-trackers-stats.json"); + + try { + if (configFile.createNewFile()) { + return true; + } + + try ( + BufferedReader reader = new BufferedReader( + new InputStreamReader( + new FileInputStream(configFile), + StandardCharsets.UTF_8 + ) + ) + ) { + JsonObject json = gson.fromJson(reader, JsonObject.class); + if (json.has("trackerStats")) { + json + .getAsJsonArray("trackerStats") + .forEach( + element -> { + if (element.isJsonObject()) { + JsonObject object = element.getAsJsonObject(); + String location = object + .get("location") + .getAsString(); + Map<String, Map<String, ItemStack>> trackers = TrackerHandler.trackers.get( + location + ) + .dropTrackers; + + JsonElement event = object.get("event"); + String eventString = event == null || + event.isJsonNull() + ? null + : event.getAsString(); + Map<String, ItemStack> drops = trackers.get( + eventString + ); + + if (drops != null) { + for (Map.Entry<String, JsonElement> drop : object + .getAsJsonObject("drops") + .entrySet()) { + if ( + drops.containsKey(drop.getKey()) + ) { + drops.get(drop.getKey()) + .stackSize = + drop.getValue().getAsInt(); + } + } + drops = + TrackerHandler.sortTrackers(drops); + trackers.put(eventString, drops); + } + } + } + ); } - } - ); - } - } - } catch (Exception ignored) {} - return false; - } - - public static void saveTrackerStatsFile(File configDirectory) { - File configFile = new File(configDirectory, "sbh-trackers-stats.json"); - - try { - configFile.createNewFile(); - - try ( - BufferedWriter writer = new BufferedWriter( - new OutputStreamWriter( - new FileOutputStream(configFile), - StandardCharsets.UTF_8 - ) - ) - ) { - JsonObject json = new JsonObject(); - json.add("trackerStats", getTrackerFile()); - writer.write(gson.toJson(json)); - } - } catch (IOException ignored) {} - } + } + } catch (Exception ignored) {} + return false; + } + + public static void saveTrackerStatsFile(File configDirectory) { + File configFile = new File(configDirectory, "sbh-trackers-stats.json"); + + try { + configFile.createNewFile(); + + try ( + BufferedWriter writer = new BufferedWriter( + new OutputStreamWriter( + new FileOutputStream(configFile), + StandardCharsets.UTF_8 + ) + ) + ) { + JsonObject json = new JsonObject(); + json.add("trackerStats", getTrackerFile()); + writer.write(gson.toJson(json)); + } + } catch (IOException ignored) {} + } } diff --git a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java index 1d1e33c..8c8a521 100644 --- a/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java +++ b/src/main/java/com/thatgravyboat/skyblockhud/tracker/TrackerHandler.java @@ -18,164 +18,175 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class TrackerHandler { - public static class TrackerData { + public static class TrackerData { - public Map<String, Map<String, ItemStack>> dropTrackers; + public Map<String, Map<String, ItemStack>> dropTrackers; - public TrackerData(Map<String, Map<String, ItemStack>> trackers) { - this.dropTrackers = trackers; - } + public TrackerData(Map<String, Map<String, ItemStack>> trackers) { + this.dropTrackers = trackers; + } - public String getDropId(String event) { - if ( - event == null || - event.isEmpty() || - !eventGoing() || - !dropTrackers.containsKey(event.toLowerCase().trim()) - ) return null; - return event.toLowerCase().trim(); - } + public String getDropId(String event) { + if ( + event == null || + event.isEmpty() || + !eventGoing() || + !dropTrackers.containsKey(event.toLowerCase().trim()) + ) return null; + return event.toLowerCase().trim(); + } - private boolean eventGoing() { - return SeasonDateHandler - .getCurrentEventTime() - .trim() - .toLowerCase() - .contains("ends in"); - } - } - - public static Map<String, TrackerData> trackers = new HashMap<>(); - public static Map<Locations, String> trackerIds = new HashMap<>(); - - public static Map<String, ItemStack> sortTrackers( - Map<String, ItemStack> map - ) { - List<Map.Entry<String, ItemStack>> list = new ArrayList<>(map.entrySet()); - list.sort( - (entry1, entry2) -> - Integer.compare( - entry2.getValue().stackSize, - entry1.getValue().stackSize - ) - ); - - Map<String, ItemStack> result = new LinkedHashMap<>(); - for (Map.Entry<String, ItemStack> entry : list) { - result.put(entry.getKey(), entry.getValue()); + private boolean eventGoing() { + return SeasonDateHandler + .getCurrentEventTime() + .trim() + .toLowerCase() + .contains("ends in"); + } } - return result; - } - - public static void onItemAdded( - String id, - int amount, - String enchant, - int level - ) { - if ( - SkyblockHud.hasSkyblockScoreboard() && - trackerIds.containsKey(LocationHandler.getCurrentLocation()) - ) { - String trackerId = trackerIds.get(LocationHandler.getCurrentLocation()); - TrackerData tracked = trackers.get(trackerId); - String dropTrackerId = tracked.getDropId( - SeasonDateHandler.getCurrentEvent() - ); - Map<String, ItemStack> tracker = tracked.dropTrackers.get(dropTrackerId); - String dropId = id; - if (enchant != null) { - dropId = enchant.toUpperCase() + ";" + level; - } - - if (tracker != null && tracker.containsKey(dropId)) { - ItemStack stack = tracker.get(dropId); - stack.stackSize += amount; - tracked.dropTrackers.put(dropTrackerId, sortTrackers(tracker)); - } - } - } - - public static void drawItemStack(ItemStack stack, int x, int y) { - if (stack == null) return; - RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); - RenderHelper.enableGUIStandardItemLighting(); - itemRender.zLevel = -145; - itemRender.renderItemAndEffectIntoGUI(stack, x, y); - itemRender.zLevel = 0; - RenderHelper.disableStandardItemLighting(); - } - - @SubscribeEvent - public void renderOverlay(RenderGameOverlayEvent.Post event) { - if ( - Utils.overlayShouldRender( - event.type, - SkyblockHud.hasSkyblockScoreboard(), - trackerIds.containsKey(LocationHandler.getCurrentLocation()), - !SkyblockHud.config.trackers.hideTracker - ) + public static Map<String, TrackerData> trackers = new HashMap<>(); + public static Map<Locations, String> trackerIds = new HashMap<>(); + + public static Map<String, ItemStack> sortTrackers( + Map<String, ItemStack> map ) { - String trackerId = trackerIds.get(LocationHandler.getCurrentLocation()); - Minecraft mc = Minecraft.getMinecraft(); - TrackerData tracked = trackers.get(trackerId); - - Map<String, ItemStack> tracker = tracked.dropTrackers.get( - tracked.getDropId(SeasonDateHandler.getCurrentEvent()) - ); - if (tracker != null) { - Position pos = SkyblockHud.config.trackers.trackerPosition; - int startPos = pos.getAbsX( - event.resolution, - (tracker.size() >= 6 ? 120 : tracker.size() * 20) + List<Map.Entry<String, ItemStack>> list = new ArrayList<>( + map.entrySet() ); - int y = pos.getAbsY( - event.resolution, - (int) (10 + Math.ceil(tracker.size() / 5d) * 20) + list.sort( + (entry1, entry2) -> + Integer.compare( + entry2.getValue().stackSize, + entry1.getValue().stackSize + ) ); - Gui.drawRect(startPos, y, startPos + 120, y + 10, -1072689136); - mc.fontRendererObj.drawString( - "Tracker", - startPos + 4, - y + 1, - 0xffffff, - false - ); - y += 10; - Gui.drawRect( - startPos, - y, - startPos + (tracker.size() >= 6 ? 120 : tracker.size() * 20), - (int) (y + (Math.ceil(tracker.size() / 5d) * 20)), - 1610612736 - ); - int x = startPos; - for (ItemStack stack : tracker.values()) { - String s = String.valueOf(stack.stackSize); - GlStateManager.disableLighting(); - GlStateManager.enableDepth(); - drawItemStack(stack, x, y); - GlStateManager.disableDepth(); - GlStateManager.disableBlend(); - mc.fontRendererObj.drawStringWithShadow( - s, - (float) (x + 19 - 2 - mc.fontRendererObj.getStringWidth(s)), - (float) (y + 9), - stack.stackSize < 1 ? 16733525 : 16777215 - ); - GlStateManager.enableBlend(); - GlStateManager.enableDepth(); - - if ((x - startPos) / 20 == 5) { - x = startPos; - y += 20; - } else { - x += 20; - } + Map<String, ItemStack> result = new LinkedHashMap<>(); + for (Map.Entry<String, ItemStack> entry : list) { + result.put(entry.getKey(), entry.getValue()); + } + + return result; + } + + public static void onItemAdded( + String id, + int amount, + String enchant, + int level + ) { + if ( + SkyblockHud.hasSkyblockScoreboard() && + trackerIds.containsKey(LocationHandler.getCurrentLocation()) + ) { + String trackerId = trackerIds.get( + LocationHandler.getCurrentLocation() + ); + TrackerData tracked = trackers.get(trackerId); + String dropTrackerId = tracked.getDropId( + SeasonDateHandler.getCurrentEvent() + ); + Map<String, ItemStack> tracker = tracked.dropTrackers.get( + dropTrackerId + ); + String dropId = id; + if (enchant != null) { + dropId = enchant.toUpperCase() + ";" + level; + } + + if (tracker != null && tracker.containsKey(dropId)) { + ItemStack stack = tracker.get(dropId); + stack.stackSize += amount; + tracked.dropTrackers.put(dropTrackerId, sortTrackers(tracker)); + } + } + } + + public static void drawItemStack(ItemStack stack, int x, int y) { + if (stack == null) return; + RenderItem itemRender = Minecraft.getMinecraft().getRenderItem(); + RenderHelper.enableGUIStandardItemLighting(); + itemRender.zLevel = -145; + itemRender.renderItemAndEffectIntoGUI(stack, x, y); + itemRender.zLevel = 0; + RenderHelper.disableStandardItemLighting(); + } + + @SubscribeEvent + public void renderOverlay(RenderGameOverlayEvent.Post event) { + if ( + Utils.overlayShouldRender( + event.type, + SkyblockHud.hasSkyblockScoreboard(), + trackerIds.containsKey(LocationHandler.getCurrentLocation()), + !SkyblockHud.config.trackers.hideTracker + ) + ) { + String trackerId = trackerIds.get( + LocationHandler.getCurrentLocation() + ); + Minecraft mc = Minecraft.getMinecraft(); + TrackerData tracked = trackers.get(trackerId); + + Map<String, ItemStack> tracker = tracked.dropTrackers.get( + tracked.getDropId(SeasonDateHandler.getCurrentEvent()) + ); + if (tracker != null) { + Position pos = SkyblockHud.config.trackers.trackerPosition; + int startPos = pos.getAbsX( + event.resolution, + (tracker.size() >= 6 ? 120 : tracker.size() * 20) + ); + int y = pos.getAbsY( + event.resolution, + (int) (10 + Math.ceil(tracker.size() / 5d) * 20) + ); + + Gui.drawRect(startPos, y, startPos + 120, y + 10, -1072689136); + mc.fontRendererObj.drawString( + "Tracker", + startPos + 4, + y + 1, + 0xffffff, + false + ); + y += 10; + Gui.drawRect( + startPos, + y, + startPos + + (tracker.size() >= 6 ? 120 : tracker.size() * 20), + (int) (y + (Math.ceil(tracker.size() / 5d) * 20)), + 1610612736 + ); + int x = startPos; + for (ItemStack stack : tracker.values()) { + String s = String.valueOf(stack.stackSize); + GlStateManager.disableLighting(); + GlStateManager.enableDepth(); + drawItemStack(stack, x, y); + GlStateManager.disableDepth(); + GlStateManager.disableBlend(); + mc.fontRendererObj.drawStringWithShadow( + s, + (float) ( + x + 19 - 2 - mc.fontRendererObj.getStringWidth(s) + ), + (float) (y + 9), + stack.stackSize < 1 ? 16733525 : 16777215 + ); + GlStateManager.enableBlend(); + GlStateManager.enableDepth(); + + if ((x - startPos) / 20 == 5) { + x = startPos; + y += 20; + } else { + x += 20; + } + } + } } - } } - } } |