diff options
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock')
69 files changed, 3527 insertions, 17 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 86fe58fe..15f9e58b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CommsWidget; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @@ -49,23 +50,57 @@ public class DwarvenHud { }))))); HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> { - if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled || client.player == null || commissionList.isEmpty()) return; + if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled + || client.options.playerListKey.isPressed() + || client.player == null + || commissionList.isEmpty()) { + return; + } render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); }); } public static void render(MatrixStack matrixStack, int hudX, int hudY, List<Commission> commissions) { - if (commissions.size() > 0){ - if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) - DrawableHelper.fill(matrixStack, hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); - int y = 0; - for (Commission commission : commissions) { - client.textRenderer.drawWithShadow(matrixStack, Text.literal(commission.commission).styled(style -> style.withColor(Formatting.AQUA)).append(Text.literal(": " + commission.progression).styled(style -> style.withColor(Formatting.GREEN))), hudX + 5, hudY + y + 5, 0xFFFFFFFF); - y += 20; - } + + switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { + case SIMPLE -> renderSimple(matrixStack, hudX, hudY, commissions); + case FANCY -> renderFancy(matrixStack, hudX, hudY, commissions); + case CLASSIC -> renderClassic(matrixStack, hudX, hudY, commissions); + } + } + + public static void renderClassic(MatrixStack matrixStack, int hudX, int hudY, List<Commission> commissions) { + if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) { + DrawableHelper.fill(matrixStack, hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); + } + + int y = 0; + for (Commission commission : commissions) { + client.textRenderer + .drawWithShadow(matrixStack, + Text.literal(commission.commission + ": ") + .styled(style -> style.withColor(Formatting.AQUA)) + .append(Text.literal(commission.progression) + .styled(style -> style.withColor(Formatting.GREEN))), + hudX + 5, hudY + y + 5, 0xFFFFFFFF); + y += 20; } } + public static void renderSimple(MatrixStack matrixStack, int hudX, int hudY, List<Commission> commissions) { + CommsWidget cw = new CommsWidget(commissions, false); + cw.setX(hudX); + cw.setY(hudY); + cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + } + + public static void renderFancy(MatrixStack matrixStack, int hudX, int hudY, List<Commission> commissions) { + CommsWidget cw = new CommsWidget(commissions, true); + cw.setX(hudX); + cw.setY(hudY); + cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + } + public static void update() { commissionList = new ArrayList<>(); if (client.player == null || !SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled) return; @@ -83,13 +118,7 @@ public class DwarvenHud { }); } - public static class Commission{ - final String commission; - final String progression; + // steamroller tactics to get visibility from outside classes (CommsWidget) + public static record Commission(String commission, String progression){} - public Commission(String commission, String progression){ - this.commission = commission; - this.progression = progression; - } - } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java new file mode 100644 index 00000000..6d90b269 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/TabHud.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud; + +import org.lwjgl.glfw.GLFW; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; + +public class TabHud { + + public static KeyBinding playerTgl; + public static KeyBinding genericTgl; + // public static KeyBinding mapTgl; + public static KeyBinding defaultTgl; + + public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Tab HUD"); + + public static void init() { + + playerTgl = KeyBindingHelper.registerKeyBinding( + new KeyBinding("key.skyblocker.playerTgl", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_B, + "key.categories.skyblocker")); + genericTgl = KeyBindingHelper.registerKeyBinding( + new KeyBinding("key.skyblocker.genericTgl", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_N, + "key.categories.skyblocker")); + // mapTgl = KeyBindingHelper.registerKeyBinding( + // new KeyBinding("key.tabhud.mapTgl", + // InputUtil.Type.KEYSYM, + // GLFW.GLFW_KEY_LEFT_ALT, + // "key.categories.skyblocker")); + defaultTgl = KeyBindingHelper.registerKeyBinding( + new KeyBinding("key.skyblocker.defaultTgl", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_M, + "key.categories.skyblocker")); + + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java new file mode 100644 index 00000000..5c302eb3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/EmptyScreen.java @@ -0,0 +1,16 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.EmptyWidget; + +import net.minecraft.text.Text; + +public class EmptyScreen extends Screen { + + public EmptyScreen(int w, int h, Text footer) { + super(w, h); + EmptyWidget ew = new EmptyWidget(); + this.center(ew); + this.addWidget(ew); + } + +} 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 new file mode 100644 index 00000000..43b7f956 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -0,0 +1,225 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens; + +import java.util.ArrayList; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GardenInfoScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericInfoScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.CrimsonIsleScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonHubScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.FarmingServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GardenScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GenericServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.GuestServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HomeServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HubServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.MineServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.ParkServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.DungeonPlayerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.GuestPlayerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; + +public class Screen { + + private ArrayList<Widget> widgets = new ArrayList<>(); + private int w, h; + + public Screen(int w, int h) { + float scale = SkyblockerConfig.get().general.tabHud.tabHudScale / 100f; + this.w = (int) (w / scale); + this.h = (int) (h / scale); + } + + public static Screen getCorrect(int w, int h, Text footer) { + if (TabHud.genericTgl.isPressed()) { + return Screen.correctGenericScrn(w, h, footer); + } else if (TabHud.playerTgl.isPressed()) { + return Screen.correctPlayerScrn(w, h, footer); + } else { + return Screen.correctMainScrn(w, h, footer); + } + } + + private static Screen correctGenericScrn(int w, int h, Text footer) { + return switch (PlayerLocator.getPlayerLocation()) { + case GARDEN -> new GardenInfoScreen(w, h, footer); // ok + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new GenericInfoScreen(w, h, footer); // ok + }; + } + + private static Screen correctPlayerScrn(int w, int h, Text footer) { + return switch (PlayerLocator.getPlayerLocation()) { + case GUEST_ISLAND -> new GuestPlayerScreen(w, h, footer); // ok + case HOME_ISLAND, GARDEN -> new HomePlayerScreen(w, h, footer); // ok for 1 player + case DUNGEON -> new DungeonPlayerScreen(w, h, footer); + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new PlayerListScreen(w, h, footer); // ok + }; + } + + private static Screen correctMainScrn(int w, int h, Text footer) { + return switch (PlayerLocator.getPlayerLocation()) { + case PARK -> new ParkServerScreen(w, h, footer); // ok + case HUB -> new HubServerScreen(w, h, footer); // ok when fire sale incoming + case HOME_ISLAND -> new HomeServerScreen(w, h, footer); // ok + case GUEST_ISLAND -> new GuestServerScreen(w, h, footer); // ok + case CRYSTAL_HOLLOWS, DWARVEN_MINES -> new MineServerScreen(w, h, footer); // ok, TODO active forge + case FARMING_ISLAND -> new FarmingServerScreen(w, h, footer); + case DUNGEON_HUB -> new DungeonHubScreen(w, h, footer); // ok + case DUNGEON -> new DungeonScreen(w, h, footer); // ok + case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, footer); + case GARDEN -> new GardenScreen(w, h, footer); // ok + case UNKNOWN -> new EmptyScreen(w, h, footer); // ok + default -> new GenericServerScreen(w, h, footer); // ok + }; + } + + /** + * Add a widget to this screen + */ + public void addWidget(Widget w) { + widgets.add(w); + } + + /** + * Add many widgets to this screen + */ + public void addWidgets(Widget... ws) { + for (Widget w : ws) { + widgets.add(w); + } + } + + public void render(MatrixStack ms) { + for (Widget w : widgets) { + w.render(ms); + } + } + + /** + * Stack these widgets on top of each other as determined by the lists's order + */ + public void stackWidgetsH(Widget... list) { + int compHeight = -5; + for (Widget wid : list) { + compHeight += wid.getHeight() + 5; + } + + int y = (h - compHeight) / 2; + for (Widget wid : list) { + wid.setY(y); + y += wid.getHeight() + 5; + } + } + + /** + * Arrange these widgets next to each other as determined by the lists's order + */ + public void stackWidgetsW(Widget... list) { + // TODO not centered + int compWidth = -5; + for (Widget wid : list) { + compWidth += wid.getWidth() + 5; + } + + int x = (w - compWidth) / 2; + for (Widget wid : list) { + wid.setX(x); + x += wid.getWidth() + 5; + } + } + + /** + * Center a widget vertically, keeping X pos + */ + public void centerH(Widget wid) { + wid.setY((h - wid.getHeight()) / 2); + } + + /** + * Center a widget horizontally, keeping Y pos + */ + public void centerW(Widget wid) { + wid.setX((w - wid.getWidth()) / 2); + } + + /** + * Center a widget vertically and horizontally + */ + public void center(Widget wid) { + this.centerH(wid); + this.centerW(wid); + } + + /** + * Let a widget's left border be on the screen's center, keeping Y pos + */ + public void offCenterL(Widget wid) { + int wHalf = this.w / 2; + wid.setX(wHalf - 3 - wid.getWidth()); + } + + /** + |
