diff options
author | msg-programs <msgdoesstuff@gmail.com> | 2023-04-07 12:18:23 +0200 |
---|---|---|
committer | msg-programs <msgdoesstuff@gmail.com> | 2023-04-07 12:18:23 +0200 |
commit | c97e7033aebadfcaa9827b7264fe03c24581757e (patch) | |
tree | 686bdc5189625354c0afd95032c697cb368eb1c9 /src/main/java/me/xmrvizzy | |
parent | 628796313982af2228bbb3561aaf5f09c05328c9 (diff) | |
download | Skyblocker-c97e7033aebadfcaa9827b7264fe03c24581757e.tar.gz Skyblocker-c97e7033aebadfcaa9827b7264fe03c24581757e.tar.bz2 Skyblocker-c97e7033aebadfcaa9827b7264fe03c24581757e.zip |
Improve support for garden area, works fully now
Diffstat (limited to 'src/main/java/me/xmrvizzy')
7 files changed, 188 insertions, 5 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java new file mode 100644 index 00000000..a9547283 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GardenInfoScreen.java @@ -0,0 +1,50 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EffectWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EventWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.GardenSkillsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.JacobsContestWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.ProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.UpgradeWidget; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.Text; + +public class GardenInfoScreen extends Screen { + + public GardenInfoScreen(int w, int h, List<PlayerListEntry> ple, Text footer) { + super(w, h); + + String f = footer.getString(); + + GardenSkillsWidget gsw = new GardenSkillsWidget(ple); + EventWidget evw = new EventWidget(ple, true); + UpgradeWidget uw = new UpgradeWidget(f); + + ProfileWidget pw = new ProfileWidget(ple); + EffectWidget efw = new EffectWidget(f); + + JacobsContestWidget jcw = new JacobsContestWidget(ple); + CookieWidget cw = new CookieWidget(f); + + // goofy ahh layout code incoming + this.stackWidgetsH(gsw, evw, uw); + this.stackWidgetsH(pw, efw); + this.stackWidgetsH(jcw, cw); + + this.centerW(gsw); + this.centerW(evw); + this.centerW(uw); + + this.collideAgainstL(pw, gsw, evw, uw); + this.collideAgainstL(efw, gsw, evw, uw); + + this.collideAgainstR(jcw, gsw, evw, uw); + this.collideAgainstR(cw, gsw, evw, uw); + + this.addWidgets(gsw, evw, uw, pw, efw, jcw, cw); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java index 01b159e2..b9b03a75 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/GenericInfoScreen.java @@ -21,7 +21,7 @@ public class GenericInfoScreen extends Screen { String f = footer.getString(); SkillsWidget sw = new SkillsWidget(ple); - EventWidget evw = new EventWidget(ple); + EventWidget evw = new EventWidget(ple, false); UpgradeWidget uw = new UpgradeWidget(f); ProfileWidget pw = new ProfileWidget(ple); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 8e99698b..fb5159a8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -157,7 +157,7 @@ public class Screen { public static Screen getCorrect(int w, int h, List<PlayerListEntry> ple, Text footer) { if (TabHud.genericTgl.isPressed()) { - return new GenericInfoScreen(w, h, ple, footer); + return Screen.correctGenericScrn(w, h, ple, footer); // } else if (TabHud.mapTgl.isPressed()) { // return Screen.correctMapScrn(w, h, ple, footer); } else if (TabHud.playerTgl.isPressed()) { @@ -167,6 +167,7 @@ public class Screen { } } + private static ScreenType getScreenType(List<PlayerListEntry> ple) { String cat2Name = StrMan.strAt(ple, 40); @@ -222,6 +223,14 @@ public class Screen { // return new EmptyScreen(w, h, list, footer); // } + private static Screen correctGenericScrn(int w, int h, List<PlayerListEntry> list, Text footer) { + return switch (getScreenType(list)) { + case GARDEN -> new GardenInfoScreen(w, h, list, footer); + default -> new GenericInfoScreen(w, h, list, footer); // ok + }; + } + + private static Screen correctPlayerScrn(int w, int h, List<PlayerListEntry> list, Text footer) { return switch (getScreenType(list)) { case GUEST_ISLAND -> new GuestPlayerScreen(w, h, list, footer); // ok diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java index a9f8e22f..f3e18b44 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -47,4 +47,5 @@ public class Ico { public static final ItemStack COPPER = new ItemStack(Items.COPPER_INGOT); public static final ItemStack COMPOSTER = new ItemStack(Items.COMPOSTER); public static final ItemStack SAPLING = new ItemStack(Items.OAK_SAPLING); + public static final ItemStack MILESTONE = new ItemStack(Items.LODESTONE); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java index 051ce11c..7fcbe1c1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/EventWidget.java @@ -16,15 +16,19 @@ import net.minecraft.util.Formatting; public class EventWidget extends Widget { private static final MutableText TITLE = Text.literal("Event Info").formatted(Formatting.YELLOW, Formatting.BOLD); - public EventWidget(List<PlayerListEntry> list) { + public EventWidget(List<PlayerListEntry> list, boolean isInGarden) { super(TITLE, Formatting.YELLOW.getColorValue()); - Text eventName = StrMan.stdEntry(list, 73, "Name:", Formatting.YELLOW); + // hypixel devs carefully inserting the most random edge cases #317: + // the event info is placed a bit differently when in the garden. + int offset = (isInGarden) ? -1 : 0; + + Text eventName = StrMan.stdEntry(list, 73 + offset, "Name:", Formatting.YELLOW); IcoTextComponent event = new IcoTextComponent(Ico.NTAG, eventName); this.addComponent(event); // this could look better - Text time = StrMan.plainEntry(list, 74); + Text time = StrMan.plainEntry(list, 74 + offset); IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); this.addComponent(t); this.pack(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java new file mode 100644 index 00000000..99011616 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/GardenSkillsWidget.java @@ -0,0 +1,63 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + + +public class GardenSkillsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Skill Info").formatted(Formatting.YELLOW, + Formatting.BOLD); + + // match the skill entry + // group 1: skill name and level + // group 2: progress to next level (without "%") + private static final Pattern SKILL_PATTERN = Pattern.compile("\\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + // same with leading space + // TODO: make better, maybe + private static final Pattern MS_PATTERN = Pattern.compile(" \\S*: ([A-Za-z]* [0-9]*): (\\S*)%"); + + public GardenSkillsWidget(List<PlayerListEntry> list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Matcher m = StrMan.regexAt(list, 66, SKILL_PATTERN); + + float pcnt = Float.parseFloat(m.group(2)); + String skill = m.group(1); + + ProgressComponent pc = new ProgressComponent(Ico.LANTERN, Text.of(skill), pcnt, Formatting.GOLD.getColorValue()); + this.addComponent(pc); + + Text speed = StrMan.stdEntry(list, 67, "SPD", Formatting.WHITE); + IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); + Text farmfort = StrMan.stdEntry(list, 68, "FFO", Formatting.GOLD); + IcoTextComponent ffo = new IcoTextComponent(Ico.HOE, farmfort); + + TableComponent tc = new TableComponent(2, 1, Formatting.YELLOW.getColorValue()); + tc.addToCell(0, 0, spd); + tc.addToCell(1, 0, ffo); + this.addComponent(tc); + + m = StrMan.regexAt(list, 69, MS_PATTERN); + pcnt = Float.parseFloat(m.group(2)); + skill = m.group(1); + + ProgressComponent pc2 = new ProgressComponent(Ico.MILESTONE, Text.of(skill), pcnt, Formatting.GREEN.getColorValue()); + this.addComponent(pc2); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java new file mode 100644 index 00000000..11817662 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/JacobsContestWidget.java @@ -0,0 +1,56 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; + +import java.util.HashMap; +import java.util.List; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.StrMan; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; +import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class JacobsContestWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Jacob's Contest").formatted(Formatting.YELLOW, + Formatting.BOLD); + + private static final HashMap<String, ItemStack> FARM_DATA = new HashMap<>(); + + // again, there HAS to be a better way to do this + static { + FARM_DATA.put("Wheat", new ItemStack(Items.WHEAT)); + FARM_DATA.put("Sugar Cane", new ItemStack(Items.SUGAR_CANE)); + FARM_DATA.put("Carrot", new ItemStack(Items.CARROT)); + FARM_DATA.put("Potato", new ItemStack(Items.POTATO)); + FARM_DATA.put("Melon", new ItemStack(Items.MELON_SLICE)); + FARM_DATA.put("Pumpkin", new ItemStack(Items.PUMPKIN)); + FARM_DATA.put("Cocoa Beans", new ItemStack(Items.COCOA_BEANS)); + FARM_DATA.put("Nether Wart", new ItemStack(Items.NETHER_WART)); + FARM_DATA.put("Cactus", new ItemStack(Items.CACTUS)); + FARM_DATA.put("Mushroom", new ItemStack(Items.RED_MUSHROOM)); + } + + public JacobsContestWidget(List<PlayerListEntry> list) { + super(TITLE, Formatting.YELLOW.getColorValue()); + + Text time = StrMan.stdEntry(list, 76, "Starts in:", Formatting.GOLD); + IcoTextComponent t = new IcoTextComponent(Ico.CLOCK, time); + this.addComponent(t); + + TableComponent tc = new TableComponent(1, 3, Formatting.YELLOW .getColorValue()); + + for (int i = 77; i < 80; i++) { + String item = StrMan.strAt(list, i).trim(); + tc.addToCell(0, i - 77, new IcoTextComponent(FARM_DATA.get(item), Text.of(item))); + } + this.addComponent(tc); + + this.pack(); + } + +} |