From ce246cfa2b15be67e10fbaf68970e5615a30dfe8 Mon Sep 17 00:00:00 2001 From: viciscat <51047087+viciscat@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:34:06 +0200 Subject: clean up, dungeons config and other little things --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 4 +- .../hysky/skyblocker/config/HudConfigScreen.java | 4 +- .../config/categories/FarmingCategory.java | 5 +- .../config/categories/MiningCategory.java | 15 +- .../config/categories/OtherLocationsCategory.java | 2 +- .../config/categories/UIAndVisualsCategory.java | 13 +- .../config/configs/UIAndVisualsConfig.java | 3 + .../skyblocker/skyblock/dwarven/CrystalsHud.java | 156 --------------- .../skyblock/dwarven/CrystalsHudConfigScreen.java | 45 ----- .../skyblock/dwarven/CrystalsHudWidget.java | 219 +++++++++++++++++++++ .../skyblocker/skyblock/dwarven/DwarvenHud.java | 215 -------------------- .../skyblock/dwarven/DwarvenHudConfigScreen.java | 56 ------ .../skyblocker/skyblock/end/EndHudWidget.java | 3 +- .../skyblock/garden/FarmingHudWidget.java | 9 +- .../hysky/skyblocker/skyblock/tabhud/TabHud.java | 6 +- .../tabhud/config/DungeonsTabPlaceholder.java | 109 ++++++++++ .../skyblock/tabhud/config/PreviewTab.java | 87 ++++++-- .../tabhud/config/WidgetsConfigurationScreen.java | 35 +++- .../skyblock/tabhud/config/WidgetsElementList.java | 8 +- .../skyblock/tabhud/config/WidgetsOrderingTab.java | 30 ++- .../tabhud/config/entries/EditableEntry.java | 3 +- .../tabhud/config/entries/WidgetsListEntry.java | 4 +- .../tabhud/screenbuilder/ScreenBuilder.java | 9 - .../tabhud/screenbuilder/ScreenMaster.java | 6 +- .../skyblock/tabhud/util/PlayerListMgr.java | 41 ++-- .../tabhud/widget/CameraPositionWidget.java | 32 --- .../tabhud/widget/ComponentBasedWidget.java | 200 +++++++++++++++++++ .../skyblock/tabhud/widget/ComposterWidget.java | 6 - .../skyblock/tabhud/widget/CookieWidget.java | 52 ----- .../skyblock/tabhud/widget/DungeonDeathWidget.java | 2 +- .../tabhud/widget/DungeonDownedWidget.java | 2 +- .../skyblock/tabhud/widget/EffectWidget.java | 38 +++- .../skyblock/tabhud/widget/EmptyWidget.java | 20 -- .../skyblock/tabhud/widget/ErrorWidget.java | 37 ---- .../skyblock/tabhud/widget/HudWidget.java | 207 ++----------------- .../tabhud/widget/JacobsContestWidget.java | 26 +-- .../skyblock/tabhud/widget/TabHudWidget.java | 2 +- .../skyblock/tabhud/widget/hud/HudCommsWidget.java | 77 -------- .../tabhud/widget/hud/HudPowderWidget.java | 138 ------------- 39 files changed, 799 insertions(+), 1127 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/DungeonsTabPlaceholder.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/CameraPositionWidget.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ComponentBasedWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/CookieWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/EmptyWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/ErrorWidget.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/hud/HudCommsWidget.java (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index d673aca4..fd6a2eaa 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -68,8 +68,8 @@ public class SkyblockerMod implements ClientModInitializer { Scheduler.INSTANCE.scheduleCyclic(Utils::update, 20); Scheduler.INSTANCE.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 200); Scheduler.INSTANCE.scheduleCyclic(BackpackPreview::tick, 50); - Scheduler.INSTANCE.scheduleCyclic(DwarvenHud::update, 40); - Scheduler.INSTANCE.scheduleCyclic(CrystalsHud::update, 40); + //Scheduler.INSTANCE.scheduleCyclic(DwarvenHud::update, 40); + //Scheduler.INSTANCE.scheduleCyclic(CrystalsHudWidget::update, 40); Scheduler.INSTANCE.scheduleCyclic(PlayerListMgr::updateList, 20); } diff --git a/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java b/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java index 2e4b8977..ac1d8966 100644 --- a/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/config/HudConfigScreen.java @@ -56,13 +56,13 @@ public abstract class HudConfigScreen extends Screen { } /** - * Renders the widgets using the default {@link HudWidget#render(DrawContext, boolean)} method. Override to change the behavior. + * Renders the widgets using the default {@link HudWidget#render(DrawContext)} method. Override to change the behavior. * @param context the context to render in * @param widgets the widgets to render */ protected void renderWidget(DrawContext context, List widgets) { for (HudWidget widget : widgets) { - widget.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); + widget.render(context); } } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java index 90b36c72..c540502c 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/FarmingCategory.java @@ -3,6 +3,9 @@ package de.hysky.skyblocker.config.categories; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.skyblock.garden.FarmingHudConfigScreen; +import de.hysky.skyblocker.skyblock.garden.FarmingHudWidget; +import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen; +import de.hysky.skyblocker.utils.Location; import dev.isxander.yacl3.api.ButtonOption; import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.Option; @@ -30,7 +33,7 @@ public class FarmingCategory { .option(ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.farming.garden.farmingHud")) .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new FarmingHudConfigScreen(screen))) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.GARDEN, FarmingHudWidget.INSTANCE.getInternalID(), screen))) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.farming.garden.dicerTitlePrevent")) diff --git a/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java index 364e9b07..f53fb562 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java @@ -3,10 +3,11 @@ package de.hysky.skyblocker.config.categories; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.configs.MiningConfig; -import de.hysky.skyblocker.skyblock.dwarven.CrystalsHudConfigScreen; -import de.hysky.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.ColorControllerBuilder; +import de.hysky.skyblocker.skyblock.tabhud.config.WidgetsConfigurationScreen; +import de.hysky.skyblocker.utils.Location; +import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import net.minecraft.client.MinecraftClient; @@ -57,15 +58,18 @@ public class MiningCategory { .build()) //Dwarven HUD + // TODO remove .group(OptionGroup.createBuilder() .name(Text.translatable("skyblocker.config.mining.dwarvenHud")) .collapsed(false) + .option(LabelOption.create(Text.literal("Use the hypixel widget."))) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.mining.dwarvenHud.enabledCommissions")) .binding(defaults.mining.dwarvenHud.enabledCommissions, () -> config.mining.dwarvenHud.enabledCommissions, newValue -> config.mining.dwarvenHud.enabledCommissions = newValue) .controller(ConfigUtils::createBooleanController) + .available(false) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.mining.dwarvenHud.enabledPowder")) @@ -73,6 +77,7 @@ public class MiningCategory { () -> config.mining.dwarvenHud.enabledPowder, newValue -> config.mining.dwarvenHud.enabledPowder = newValue) .controller(ConfigUtils::createBooleanController) + .available(false) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.mining.dwarvenHud.style")) @@ -83,11 +88,13 @@ public class MiningCategory { () -> config.mining.dwarvenHud.style, newValue -> config.mining.dwarvenHud.style = newValue) .controller(ConfigUtils::createEnumCyclingListController) + .available(false) .build()) .option(ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.mining.dwarvenHud.screen")) .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new DwarvenHudConfigScreen(screen))) + .action((screen, opt) -> screen.tick()) + .available(false) .build()) .build()) @@ -142,7 +149,7 @@ public class MiningCategory { .option(ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.mining.crystalsHud.screen")) .text(Text.translatable("text.skyblocker.open")) - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new CrystalsHudConfigScreen(screen))) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.CRYSTAL_HOLLOWS, "hud_crystals", screen))) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.mining.crystalsHud.mapScaling")) diff --git a/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java index c670c898..d8e87697 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/OtherLocationsCategory.java @@ -130,7 +130,7 @@ public class OtherLocationsCategory { .option(ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.otherLocations.end.screen")) .text(Text.translatable("text.skyblocker.open")) // Reusing again lol - .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.THE_END, EndHudWidget.INSTANCE.getInternalID()))) + .action((screen, opt) -> MinecraftClient.getInstance().setScreen(new WidgetsConfigurationScreen(Location.THE_END, EndHudWidget.INSTANCE.getInternalID(), screen))) .build()) .option(ButtonOption.createBuilder() .name(Text.translatable("skyblocker.config.otherLocations.end.resetName")) diff --git a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java index 4e890316..d4f39346 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java @@ -193,6 +193,15 @@ public class UIAndVisualsCategory { newValue -> config.uiAndVisuals.tabHud.enableHudBackground = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.createBuilder() + .name(Text.literal("Effects from footer")) + .description(OptionDescription.of(Text.literal("If on, will fetch current effects from the tab footer if the hypixel Effects widget is disabled"))) + .controller(ConfigUtils::createBooleanController) + .binding(defaults.uiAndVisuals.tabHud.effectsFromFooter, + () -> config.uiAndVisuals.tabHud.effectsFromFooter, + newValue -> config.uiAndVisuals.tabHud.effectsFromFooter = newValue) + .build()) + // TODO Decide what to do with these options .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.plainPlayerNames")) .description(OptionDescription.of(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.plainPlayerNames.@Tooltip"))) @@ -200,6 +209,7 @@ public class UIAndVisualsCategory { () -> config.uiAndVisuals.tabHud.plainPlayerNames, newValue -> config.uiAndVisuals.tabHud.plainPlayerNames = newValue) .controller(ConfigUtils::createBooleanController) + .available(false) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.uiAndVisuals.tabHud.nameSorting")) @@ -208,6 +218,7 @@ public class UIAndVisualsCategory { () -> config.uiAndVisuals.tabHud.nameSorting, newValue -> config.uiAndVisuals.tabHud.nameSorting = newValue) .controller(ConfigUtils::createEnumCyclingListController) + .available(false) .build()) .build()) @@ -439,7 +450,7 @@ public class UIAndVisualsCategory { .binding(defaults.uiAndVisuals.compactDamage.precision, () -> config.uiAndVisuals.compactDamage.precision, newValue -> config.uiAndVisuals.compactDamage.precision = newValue) - .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1,3).step(1)) + .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(1, 3).step(1)) .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.config.uiAndVisuals.compactDamage.normalDamageColor")) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java index 755fb46e..2982804b 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java @@ -161,6 +161,9 @@ public class UIAndVisualsConfig { @SerialEntry public boolean enableHudBackground = true; + @SerialEntry + public boolean effectsFromFooter = false; + @SerialEntry public boolean plainPlayerNames = false; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java deleted file mode 100644 index 8689df83..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHud.java +++ /dev/null @@ -1,156 +0,0 @@ -package de.hysky.skyblocker.skyblock.dwarven; - -import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.annotations.Init; -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.events.HudRenderEvents; -import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.scheduler.Scheduler; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.Identifier; -import net.minecraft.util.math.RotationAxis; -import org.joml.Vector2i; -import org.joml.Vector2ic; - -import java.util.List; -import java.util.Map; - -public class CrystalsHud { - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - protected static final Identifier MAP_TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/crystals_map.png"); - private static final Identifier MAP_ICON = Identifier.ofVanilla("textures/map/decorations/player.png"); - private static final List SMALL_LOCATIONS = List.of("Fairy Grotto", "King Yolkar", "Corleone", "Odawa", "Key Guardian", "Unknown"); - - - public static boolean visible = false; - - @Init - public static void init() { - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") - .then(ClientCommandManager.literal("hud") - .then(ClientCommandManager.literal("crystals") - .executes(Scheduler.queueOpenScreenCommand(CrystalsHudConfigScreen::new)))))); - - HudRenderEvents.AFTER_MAIN_HUD.register((context, tickCounter) -> { - if (!SkyblockerConfigManager.get().mining.crystalsHud.enabled - || CLIENT.player == null - || !visible) { - return; - } - render(context, SkyblockerConfigManager.get().mining.crystalsHud.x, - SkyblockerConfigManager.get().mining.crystalsHud.y); - }); - } - - protected static int getDimensionsForConfig() { - return (int) (62 * SkyblockerConfigManager.get().mining.crystalsHud.mapScaling); - } - - - /** - * Renders the map to the players UI. renders the background image ({@link CrystalsHud#MAP_TEXTURE}) of the map then if enabled special locations on the map. then finally the player to the map. - * - * @param context DrawContext to draw map to - * @param hudX Top left X coordinate of the map - * @param hudY Top left Y coordinate of the map - */ - private static void render(DrawContext context, int hudX, int hudY) { - float scale = SkyblockerConfigManager.get().mining.crystalsHud.mapScaling; - - //make sure the map renders infront of some stuff - improve this in the future with better layering (1.20.5?) - //and set position and scale - MatrixStack matrices = context.getMatrices(); - matrices.push(); - matrices.translate(hudX, hudY, 0f); - matrices.scale(scale, scale, 0f); - - //draw map texture - context.drawTexture(RenderLayer::getGuiTextured, MAP_TEXTURE, 0, 0, 0, 0, 62, 62, 62, 62); - - //if enabled add waypoint locations to map - if (SkyblockerConfigManager.get().mining.crystalsHud.showLocations) { - for (MiningLocationLabel waypoint : CrystalsLocationsManager.activeWaypoints.values()) { - MiningLocationLabel.Category category = waypoint.category(); - Vector2ic renderPos = transformLocation(waypoint.centerPos.getX(), waypoint.centerPos.getZ()); - int locationSize = SkyblockerConfigManager.get().mining.crystalsHud.locationSize; - - if (SMALL_LOCATIONS.contains(category.getName())) {//if small location half the location size - locationSize /= 2; - } - - //fill square of size locationSize around the coordinates of the location - context.fill(renderPos.x() - locationSize / 2, renderPos.y() - locationSize / 2, renderPos.x() + locationSize / 2, renderPos.y() + locationSize / 2, category.getColor()); - } - } - - //draw player on map - if (CLIENT.player == null || CLIENT.getNetworkHandler() == null) { - return; - } - //get player location - double playerX = CLIENT.player.getX(); - double playerZ = CLIENT.player.getZ(); - float playerRotation = CLIENT.player.getYaw(); //TODO make the transitions more rough? - Vector2ic renderPos = transformLocation(playerX, playerZ); - - int renderX = renderPos.x() - 2; - int renderY = renderPos.y() - 3; - - //position, scale and rotate the player marker - matrices.translate(renderX, renderY, 0f); - matrices.scale(0.75f, 0.75f, 0f); - matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(yaw2Cardinal(playerRotation)), 2.5f, 3.5f, 0); - - //draw marker on map - context.drawTexture(RenderLayer::getGuiTextured, MAP_ICON, 0, 0, 2, 0, 5, 7, 8, 8); - matrices.pop(); - } - - /** - * Converts an X and Z coordinate in the crystal hollow to an X and Y coordinate on the map. - * - * @param x the world X coordinate - * @param z the world Z coordinate - * @return a vector representing the x and y values - */ - protected static Vector2ic transformLocation(double x, double z) { - //converts an x and z to a location on the map - int transformedX = (int) ((x - 202) / 621 * 62); - int transformedY = (int) ((z - 202) / 621 * 62); - transformedX = Math.clamp(transformedX, 0, 62); - transformedY = Math.clamp(transformedY, 0, 62); - - return new Vector2i(transformedX, transformedY); - } - - /** - * Converts yaw to the cardinal directions that a player marker can be rotated towards on a map. - * The rotations of a marker follow this order: N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW. - *

- * Based off code from {@link net.minecraft.client.render.MapRenderer} - */ - private static float yaw2Cardinal(float yaw) { - yaw += 180; //flip direction - byte clipped = (byte) ((yaw + (yaw < 0.0 ? -8.0 : 8.0)) * 16.0 / 360.0); - - return (clipped * 360f) / 16f; - } - - /** - * Works out if the crystals map should be rendered and sets {@link CrystalsHud#visible} accordingly. - */ - public static void update() { - if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().mining.crystalsHud.enabled) { - visible = false; - return; - } - - //get if the player is in the crystals - visible = Utils.isInCrystalHollows(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java deleted file mode 100644 index 1858b214..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudConfigScreen.java +++ /dev/null @@ -1,45 +0,0 @@ -package de.hysky.skyblocker.skyblock.dwarven; - -import de.hysky.skyblocker.config.HudConfigScreen; -import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.skyblock.tabhud.widget.EmptyWidget; -import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; -import it.unimi.dsi.fastutil.ints.IntIntMutablePair; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.text.Text; - -import java.util.List; - -public class CrystalsHudConfigScreen extends HudConfigScreen { - private static final EmptyWidget WIDGET = new EmptyWidget(); - - protected CrystalsHudConfigScreen() { - this(null); - } - - public CrystalsHudConfigScreen(Screen parent) { - super(Text.of("Crystals HUD Config"), parent, WIDGET); - WIDGET.setDimensions(CrystalsHud.getDimensionsForConfig()); - } - - @SuppressWarnings("SuspiciousNameCombination") - @Override - protected List getConfigPos(SkyblockerConfig config) { - return List.of(IntIntMutablePair.of(config.mining.crystalsHud.x, config.mining.crystalsHud.y)); - } - - @Override - protected void renderWidget(DrawContext context, List widgets) { - int size = CrystalsHud.getDimensionsForConfig(); - WIDGET.setDimensions(size); - context.drawTexture(RenderLayer::getGuiTextured, CrystalsHud.MAP_TEXTURE, WIDGET.getX(), WIDGET.getY(), 0, 0, size, size, size, size); - } - - @Override - protected void savePos(SkyblockerConfig configManager, List widgets) { - configManager.mining.crystalsHud.x = widgets.getFirst().getX(); - configManager.mining.crystalsHud.y = widgets.getFirst().getY(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java new file mode 100644 index 00000000..a47ce135 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/CrystalsHudWidget.java @@ -0,0 +1,219 @@ +package de.hysky.skyblocker.skyblock.dwarven; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.events.HudRenderEvents; +import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; +import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.RotationAxis; +import org.joml.Vector2i; +import org.joml.Vector2ic; + +import java.util.List; +import java.util.Map; + +public class CrystalsHudWidget extends HudWidget { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + protected static final Identifier MAP_TEXTURE = Identifier.of(SkyblockerMod.NAMESPACE, "textures/gui/crystals_map.png"); + private static final Identifier MAP_ICON = Identifier.ofVanilla("textures/map/decorations/player.png"); + private static final List SMALL_LOCATIONS = List.of("Fairy Grotto", "King Yolkar", "Corleone", "Odawa", "Key Guardian", "Unknown"); + + public static final CrystalsHudWidget INSTANCE = new CrystalsHudWidget(); + + public static boolean visible = false; + + public CrystalsHudWidget() { + super("hud_crystals"); + } + + @Init + public static void init() { + /*ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("hud") + .then(ClientCommandManager.literal("crystals") + .executes(Scheduler.queueOpenScreenCommand(CrystalsHudConfigScreen::new))))));*/ + + /*HudRenderEvents.AFTER_MAIN_HUD.register((context, tickCounter) -> { + if (!SkyblockerConfigManager.get().mining.crystalsHud.enabled + || CLIENT.player == null + || !visible) { + return; + } + render(context, SkyblockerConfigManager.get().mining.crystalsHud.x, + SkyblockerConfigManager.get().mining.crystalsHud.y); + });*/ + } + + protected static int getDimensionsForConfig() { + return (int) (62 * SkyblockerConfigManager.get().mining.crystalsHud.mapScaling); + } + + + /** + * Renders the map to the players UI. renders the background image ({@link CrystalsHudWidget#MAP_TEXTURE}) of the map then if enabled special locations on the map. then finally the player to the map. + * + * @param context DrawContext to draw map to + * @param hudX Top left X coordinate of the map + * @param hudY Top left Y coordinate of the map + */ + private static void render(DrawContext context, int hudX, int hudY) { + + } + + /** + * Converts an X and Z coordinate in the crystal hollow to an X and Y coordinate on the map. + * + * @param x the world X coordinate + * @param z the world Z coordinate + * @return a vector representing the x and y values + */ + protected static Vector2ic transformLocation(double x, double z) { + //converts an x and z to a location on the map + int transformedX = (int) ((x - 202) / 621 * 62); + int transformedY = (int) ((z - 202) / 621 * 62); + transformedX = Math.clamp(transformedX, 0, 62); + transformedY = Math.clamp(transformedY, 0, 62); + + return new Vector2i(transformedX, transformedY); + } + + /** + * Converts yaw to the cardinal directions that a player marker can be rotated towards on a map. + * The rotations of a marker follow this order: N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW. + *

+ * Based off code from {@link net.minecraft.client.render.MapRenderer} + */ + private static float yaw2Cardinal(float yaw) { + yaw += 180; //flip direction + byte clipped = (byte) ((yaw + (yaw < 0.0 ? -8.0 : 8.0)) * 16.0 / 360.0); + + return (clipped * 360f) / 16f; + } + + @Override + public boolean shouldRender(Location location) { + return location.equals(Location.CRYSTAL_HOLLOWS) && SkyblockerConfigManager.get().mining.crystalsHud.enabled; + } + + /** + * Works out if the crystals map should be rendered and sets {@link CrystalsHudWidget#visible} accordingly. + * + */ + public void update() { + if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().mining.crystalsHud.enabled) { + visible = false; + return; + } + + //get if the player is in the crystals + visible = Utils.isInCrystalHollows(); + } + + @Override + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + float scale = SkyblockerConfigManager.get().mining.crystalsHud.mapScaling; + + //make sure the map renders infront of some stuff - improve this in the future with better layering (1.20.5?) + //and set position and scale + MatrixStack matrices = context.getMatrices(); + matrices.push(); + matrices.translate(x, y, 0f); + matrices.scale(scale, scale, 0f); + w = h = (int) (62 * scale); + + //draw map texture + context.drawTexture(RenderLayer::getGuiTextured, MAP_TEXTURE, 0, 0, 0, 0, 62, 62, 62, 62); + + //if enabled add waypoint locations to map + if (SkyblockerConfigManager.get().mining.crystalsHud.showLocations) { + for (MiningLocationLabel waypoint : CrystalsLocationsManager.activeWaypoints.values()) { + MiningLocationLabel.Category category = waypoint.category(); + Vector2ic renderPos = transformLocation(waypoint.centerPos.getX(), waypoint.centerPos.getZ()); + int locationSize = SkyblockerConfigManager.get().mining.crystalsHud.locationSize; + + if (SMALL_LOCATIONS.contains(category.getName())) {//if small location half the location size + locationSize /= 2; + } + + //fill square of size locationSize around the coordinates of the location + context.fill(renderPos.x() - locationSize / 2, renderPos.y() - locationSize / 2, renderPos.x() + locationSize / 2, renderPos.y() + locationSize / 2, category.getColor()); + } + } + + //draw player on map + if (CLIENT.player == null || CLIENT.getNetworkHandler() == null) { + matrices.pop(); + return; + } + //get player location + double playerX = CLIENT.player.getX(); + double playerZ = CLIENT.player.getZ(); + float playerRotation = CLIENT.player.getYaw(); //TODO make the transitions more rough? + Vector2ic renderPos = transformLocation(playerX, playerZ); + + int renderX = renderPos.x() - 2; + int renderY = renderPos.y() - 3; + + //position, scale and rotate the player marker + matrices.translate(renderX, renderY, 0f); + matrices.scale(0.75f, 0.75f, 0f); + matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(yaw2Cardinal(playerRotation)), 2.5f, 3.5f, 0); + + //draw marker on map + context.drawTexture(RenderLayer::getGuiTextured, MAP_ICON, 0, 0, 2, 0, 5, 7, 8, 8); + matrices.pop(); + } + + /** + * Converts an X and Z coordinate in the crystal hollow to an X and Y coordinate on the map. + * + * @param x the world X coordinate + * @param z the world Z coordinate + * @return a vector representing the x and y values + */ + protected static Vector2ic transformLocation(double x, double z) { + //converts an x and z to a location on the map + int transformedX = (int) ((x - 202) / 621 * 62); + int transformedY = (int) ((z - 202) / 621 * 62); + transformedX = Math.clamp(transformedX, 0, 62); + transformedY = Math.clamp(transformedY, 0, 62); + + return new Vector2i(transformedX, transformedY); + } + + /** + * Converts yaw to the cardinal directions that a player marker can be rotated towards on a map. + * The rotations of a marker follow this order: N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW. + *

+ * Based off code from {@link net.minecraft.client.render.MapRenderer} + */ + private static float yaw2Cardinal(float yaw) { + yaw += 180; //flip direction + byte clipped = (byte) ((yaw + (yaw < 0.0 ? -8.0 : 8.0)) * 16.0 / 360.0); + + return (clipped * 360f) / 16f; + } + + /** + * Works out if the crystals map should be rendered and sets {@link CrystalsHud#visible} accordingly. + */ + public static void update() { + if (CLIENT.player == null || CLIENT.getNetworkHandler() == null || !SkyblockerConfigManager.get().mining.crystalsHud.enabled) { + visible = false; + return; + } + + //get if the player is in the crystals + visible = Utils.isInCrystalHollows(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java index 6d0a13c2..e69de29b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -1,215 +0,0 @@ -package de.hysky.skyblocker.skyblock.dwarven; - -import de.hysky.skyblocker.annotations.Init; -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.config.configs.MiningConfig; -import de.hysky.skyblocker.events.HudRenderEvents; -import de.hysky.skyblocker.mixins.accessors.PlayerListHudAccessor; -import de.hysky.skyblocker.skyblock.tabhud.util.Colors; -import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; -import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudPowderWidget; -import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.scheduler.Scheduler; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; - -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Stream; - -public class DwarvenHud { - - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static List commissionList = new ArrayList<>(); - - public static String mithrilPowder = "0"; - public static String gemStonePowder = "0"; - public static String glacitePowder = "0"; - - private static final List COMMISSIONS = Stream.of( - "(?:Titanium|Mithril|Hard Stone) Miner", - "(?:Glacite Walker|Golden Goblin|(? Pattern.compile("(" + s + "): (\\d+\\.?\\d*%|DONE)") - ).toList(); - private static final Pattern MITHRIL_PATTERN = Pattern.compile("Mithril: [0-9,]+"); - private static final Pattern GEMSTONE_PATTERN = Pattern.compile("Gemstone: [0-9,]+"); - private static final Pattern GLACITE_PATTERN = Pattern.compile("Glacite: [0-9,]+"); - - @Init - public static void init() { - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(ClientCommandManager.literal("skyblocker") - .then(ClientCommandManager.literal("hud") - .then(ClientCommandManager.literal("dwarven") - .executes(Scheduler.queueOpenScreenCommand(DwarvenHudConfigScreen::new)) - ) - ) - )); - - HudRenderEvents.AFTER_MAIN_HUD.register((context, tickCounter) -> { - if (!SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions && !SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder - || CLIENT.options.playerListKey.isPressed() - || CLIENT.player == null - || (!Utils.isInDwarvenMines() && !Utils.isInCrystalHollows())) { - return; - } - - render(HudCommsWidget.INSTANCE, HudPowderWidget.INSTANCE, context, - SkyblockerConfigManager.get().mining.dwarvenHud.commissionsX, - SkyblockerConfigManager.get().mining.dwarvenHud.commissionsY, - SkyblockerConfigManager.get().mining.dwarvenHud.powderX, - SkyblockerConfigManager.get().mining.dwarvenHud.powderY, - commissionList); - }); - } - - protected static void render(HudCommsWidget hcw, HudPowderWidget hpw, DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List commissions) { - switch (SkyblockerConfigManager.get().mining.dwarvenHud.style) { - case SIMPLE -> renderSimple(hcw, hpw, context, comHudX, comHudY, powderHudX, powderHudY, commissions); - case FANCY -> renderFancy(hcw, hpw, context, comHudX, comHudY, powderHudX, powderHudY, commissions); - case CLASSIC -> renderClassic(context, comHudX, comHudY, powderHudX, powderHudY, commissions); - } - } - - /** - * Renders hud to window without using the widget rendering - * @param context DrawContext to draw the hud to - * @param comHudX X coordinate of the commissions hud - * @param comHudY Y coordinate of the commissions hud - * @param powderHudX X coordinate of the powder hud - * @param powderHudY Y coordinate of the powder hud - * @param commissions the commissions to render to the commissions hud - */ - @Deprecated(since = "1.20.3+1.20.6", forRemoval = true) - private static void renderClassic(DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List commissions) { - if (SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground) { - context.fill(comHudX, comHudY, comHudX + 200, comHudY + (20 * commissions.size()), 0x64000000); - context.fill(powderHudX, powderHudY, powderHudX + 200, powderHudY + 40, 0x64000000); - } - if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions) { - int y = 0; - for (Commission commission : commissions) { - float percentage; - if (!commission.progression().contains("DONE")) { - percentage = Float.parseFloat(commission.progression().substring(0, commission.progression().length() - 1)); - } else { - percentage = 100f; - } - - context.drawTextWithShadow(CLIENT.textRenderer, - Text.literal(commission.commission + ": ").formatted(Formatting.AQUA).append( - Text.literal(commission.progression).withColor(Colors.pcntToCol(percentage)) - ), - comHudX + 5, comHudY + y + 5, 0xFFFFFFFF); - y += 20; - } - } - if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder) { - //render mithril powder then gemstone - context.drawTextWithShadow(CLIENT.textRenderer, - Text.literal("Mithril: " + mithrilPowder).formatted(Formatting.AQUA), - powderHudX + 5, powderHudY + 5, 0xFFFFFFFF); - context.drawTextWithShadow(CLIENT.textRenderer, - Text.literal("Gemstone: " + gemStonePowder).formatted(Formatting.DARK_PURPLE), - powderHudX + 5, powderHudY + 25, 0xFFFFFFFF); - } - } - - private static void renderSimple(HudCommsWidget hcw, HudPowderWidget hpw, DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List commissions) { - if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions) { - hcw.updateData(commissions, false); - hcw.update(); - hcw.setX(comHudX); - hcw.setY(comHudY); - hcw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); - } - if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder) { - hpw.update(); - hpw.setX(powderHudX); - hpw.setY(powderHudY); - hpw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); - } - } - - private static void renderFancy(HudCommsWidget hcw, HudPowderWidget hpw, DrawContext context, int comHudX, int comHudY, int powderHudX, int powderHudY, List commissions) { - if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions) { - hcw.updateData(commissions, true); - hcw.update(); - hcw.setX(comHudX); - hcw.setY(comHudY); - hcw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); - } - if (SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder) { - hpw.update(); - hpw.setX(powderHudX); - hpw.setY(powderHudY); - hpw.render(context, SkyblockerConfigManager.get().uiAndVisuals.tabHud.enableHudBackground); - } - } - - public static void update() { - if (CLIENT.player == null || CLIENT.getNetworkHandler() == null - || !SkyblockerConfigManager.get().mining.dwarvenHud.enabledCommissions - && !SkyblockerConfigManager.get().mining.dwarvenHud.enabledPowder - && SkyblockerConfigManager.get().mining.commissionWaypoints.mode == MiningConfig.CommissionWaypointMode.OFF - || !Utils.isInCrystalHollows() && !Utils.isInDwarvenMines()) { - return; - } - List oldCommissionNames = commissionList.stream().map(Commission::commission).toList(); - boolean oldCompleted = commissionList.stream().anyMatch(commission -> commission.progression.equals("DONE")); - commissionList = new ArrayList<>(); - for (PlayerListEntry playerListEntry : CLIENT.getNetworkHandler().getPlayerList().stream().sorted(PlayerListHudAccessor.getOrdering()).toList()) { - if (playerListEntry.getDisplayName() == null) { - continue; - } - //find commissions - String name = playerListEntry.getDisplayName().getString().strip(); - for (Pattern pattern : COMMISSIONS) { - Matcher matcher = pattern.matcher(name); - if (matcher.matches()) { - commissionList.add(new Commission(matcher.group(1), matcher.group(2))); - } - } - //find powder - Matcher mithrilMatcher = MITHRIL_PATTERN.matcher(name); - if (mithrilMatcher.matches()) { - mithrilPowder = mithrilMatcher.group(0).split(": ")[1]; - } - Matcher gemstoneMatcher = GEMSTONE_PATTERN.matcher(name); - if (gemstoneMatcher.matches()) { - gemStonePowder = gemstoneMatcher.group(0).split(": ")[1]; - } - Matcher glaciteMatcher = GLACITE_PATTERN.matcher(name); - if (glaciteMatcher.matches()) { - glacitePowder = glaciteMatcher.group(0).split(": ")[1]; - } - } - List newCommissionNames = commissionList.stream().map(Commission::commission).toList(); - boolean newCompleted = commissionList.stream().anyMatch(commission -> commission.progression.equals("DONE")); - if (!oldCommissionNames.equals(newCommissionNames) || oldCompleted != newCompleted) { - CommissionLabels.update(newCommissionNames, newCompleted); - } - } - - // steamroller tactics to get visibility from outside classes (HudCommsWidget) - public record Commission(String commission, String progression) { - } -} \ No newline at end of file diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java deleted file mode 100644 index 40124ce0..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.hysky.skyblocker.skyblock.dwarven; - -import de.hysky.skyblocker.config.HudConfigScreen; -import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.config.configs.MiningConfig; -import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud.Commission; -import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; -import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; -import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudPowderWidget; -import it.unimi.dsi.fastutil.ints.IntIntMutablePair; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; - -import java.util.List; - -public class DwarvenHudConfigScreen extends HudConfigScreen { - private static final List CFG_COMMS = List.of(new Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%")); - - protected DwarvenHudConfigScreen() { - this(null); - } - - public DwarvenHudConfigScreen(Screen parent) { - super(Text.literal("Dwarven HUD Config"), parent, List.of(HudCommsWidget.INSTANCE_CFG, HudPowderWidget.INSTANCE_CFG)); - if (SkyblockerConfigManager.get().mining.dwarvenHud.style == MiningConfig.DwarvenHudStyle.CLASSIC) { - HudCommsWidget.INSTANCE_CFG.setWidth(200); - HudCommsWidget.INSTANCE_CFG.setHeight(20 * CFG_COMMS.size()); - HudPowderWidget.INSTANCE_CFG.setWidth(200); - HudPowderWidget.INSTANCE_CFG.setHeight(40); - } - } - - @SuppressWarnings("SuspiciousNameCombination") - @Override - protected List getConfigPos(SkyblockerConfig config) { - return List.of( - IntIntMutablePair.of(config.mining.dwarvenHud.commissionsX, config.mining.dwarvenHud.commissionsY), - IntIntMutablePair.of(config.mining.dwarvenHud.powderX, config.mining.dwarvenHud.powderY) - ); - } - - @Override - protected void renderWidget(DrawContext context, List widgets) { - DwarvenHud.render(HudCommsWidget.INSTANCE_CFG, HudPowderWidget.INSTANCE_CFG, context, widgets.getFirst().getX(), widgets.getFirst().getY(), widgets.get(1).getX(), widgets.get(1).getY(), CFG_COMMS); - } - - @Override - protected void savePos(SkyblockerConfig configManager, List widgets) { - configManager.mining.dwarvenHud.commissionsX = widgets.getFirst().getX(); - configManager.mining.dwarvenHud.commissionsY = widgets.getFirst().getY(); - configManager.mining.dwarvenHud.powderX = widgets.get(1).getX(); - configManager.mining.dwarvenHud.powderY = widgets.get(1).getY(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java index 74ee3ecb..89016dca 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/EndHudWidget.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.end; import com.mojang.authlib.properties.PropertyMap; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.tabhud.widget.ComponentBasedWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; @@ -18,7 +19,7 @@ import java.text.NumberFormat; import java.util.Locale; import java.util.Optional; -public class EndHudWidget extends HudWidget { +public class EndHudWidget extends ComponentBasedWidget { private static final MutableText TITLE = Text.literal("The End").formatted(Formatting.LIGHT_PURPLE, Formatting.BOLD); public static final EndHudWidget INSTANCE = new EndHudWidget(TITLE, Formatting.DARK_PURPLE.getColorValue()); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java index 0becb387..c51f0814 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java @@ -4,7 +4,7 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.item.tooltip.info.TooltipInfoType; import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.tabhud.util.Ico; -import de.hysky.skyblocker.skyblock.tabhud.widget.HudWidget; +import de.hysky.skyblocker.skyblock.tabhud.widget.ComponentBasedWidget; import de.hysky.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; import de.hysky.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; import de.hysky.skyblocker.utils.ItemUtils; @@ -20,7 +20,7 @@ import net.minecraft.util.math.MathHelper; import java.util.Map; -public class FarmingHudWidget extends HudWidget { +public class FarmingHudWidget extends ComponentBasedWidget { private static final MutableText TITLE = Text.literal("Farming").formatted(Formatting.YELLOW, Formatting.BOLD); public static final Map FARMING_TOOLS = Map.ofEntries( Map.entry("THEORETICAL_HOE_WHEAT_1", "WHEAT"), @@ -60,7 +60,10 @@ public class FarmingHudWidget extends HudWidget { @Override public void updateContent() { - if (client.player == null) return; + if (client.player == null) { + addComponent(new PlainTextComponent(Text.literal("Nothing to show :p"))); + return; + } ItemStack farmingToolStack = client.player.getMainHandStack(); if (farmingToolStack == null) return; String itemId = ItemUtils.getItemId(farmingToolStack); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/TabHud.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/TabHud.java index 2db5df2f..bf10dc9e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/TabHud.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/TabHud.java @@ -12,7 +12,7 @@ import net.minecraft.client.util.InputUtil; public class TabHud { public static KeyBinding toggleB; - public static KeyBinding toggleA; + public static KeyBinding toggleSecondary; // public static KeyBinding mapTgl; public static KeyBinding defaultTgl; @@ -26,10 +26,10 @@ public class TabHud { InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_B, "key.categories.skyblocker")); - toggleA = KeyBindingHelper.registerKeyBinding( + toggleSecondary = KeyBindingHelper.registerKeyBinding( new KeyBinding("key.skyblocker.toggleA", InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_N, + GLFW.GLFW_KEY_Z, "key.categories.skyblocker")); defaultTgl = KeyBindingHelper.registerKeyBinding( new KeyBinding("key.skyblocker.defaultTgl", diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/DungeonsTabPlaceholder.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/DungeonsTabPlaceholder.java new file mode 100644 index 00000000..8e264e52 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/config/DungeonsTabPlaceholder.java @@ -0,0 +1,109 @@ +package de.hysky.skyblocker.skyblock.tabhud.config; + +import com.google.common.collect.ImmutableList; +import com.google.gson.JsonElement; +import com.mojang.serialization.JsonOps; +import de.hysky.skyblocker.SkyblockerMod; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.text.TextCodecs; + +import java.util.ArrayList; +import java.util.List; + +public final class DungeonsTabPlaceholder { + + private static List placeholder = null; + + public static List get() { + if (placeholder != null) return placeholder; + List l = new ArrayList<>(); + List json = List.of( + "{\"text\":\"\",\"extra\":[\" \",{\"text\":\"Party \",\"color\":\"aqua\",\"bold\":true},{\"text\":\"(1)\",\"color\":\"white\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"[\",\"color\":\"dark_gray\"},{\"text\":\"303\",\"color\":\"blue\"},{\"text\":\"] \",\"color\":\"dark_gray\"},{\"text\":\"AzureAaron \",\"color\":\"aqua\"},{\"text\":\"⚡ \",\"color\":\"gold\",\"bold\":true},{\"text\":\"(\",\"color\":\"white\"},{\"text\":\"\",\"color\":\"light_purple\"},{\"text\":\"EMPTY\",\"color\":\"gray\"},{\"text\":\")\",\"color\":\"white\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Ultimate: \",{\"text\":\"\",\"color\":\"yellow\"},{\"text\":\"N/A\",\"color\":\"red\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Revive Stones: \",{\"text\":\"0\",\"color\":\"red\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" \",{\"text\":\"Player Stats\",\"color\":\"dark_green\",\"bold\":true}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Downed: \",\"color\":\"green\",\"bold\":true},{\"text\":\"NONE\",\"color\":\"gray\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Time: \",{\"text\":\"N/A\",\"color\":\"yellow\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Revive: \",{\"text\":\"N/A\",\"color\":\"red\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Team Deaths: \",\"color\":\"green\",\"bold\":true},{\"text\":\"0\",\"color\":\"white\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Team Damage Dealt: \",{\"text\":\"0❤\",\"color\":\"red\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Team Healing Done: \",{\"text\":\"0❤\",\"color\":\"red\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Your Milestone: \",{\"text\":\"?\",\"color\":\"yellow\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Discoveries: \",\"color\":\"green\",\"bold\":true},{\"text\":\"0\",\"color\":\"white\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Secrets Found: \",{\"text\":\"0\",\"color\":\"aqua\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Crypts: \",{\"text\":\"0\",\"color\":\"gold\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" \",{\"text\":\"Dungeon Stats\",\"color\":\"dark_aqua\",\"bold\":true}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Dungeon: \",\"color\":\"aqua\",\"bold\":true},{\"text\":\"Catacombs\",\"color\":\"gray\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Opened Rooms: \",{\"text\":\"0\",\"color\":\"dark_purple\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Completed Rooms: \",{\"text\":\"0\",\"color\":\"light_purple\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Secrets Found: \",{\"text\":\"0%\",\"color\":\"yellow\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Time: \",{\"text\":\"Soon!\",\"color\":\"gold\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Puzzles: \",\"color\":\"aqua\",\"bold\":true},{\"text\":\"(2)\",\"color\":\"white\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" ???: \",{\"text\":\"[\",\"color\":\"gray\"},{\"text\":\"✦\",\"color\":\"gold\",\"bold\":true},{\"text\":\"]\",\"color\":\"gray\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" ???: \",{\"text\":\"[\",\"color\":\"gray\"},{\"text\":\"✦\",\"color\":\"gold\",\"bold\":true},{\"text\":\"]\",\"color\":\"gray\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" \",{\"text\":\"Account Info\",\"color\":\"gold\",\"bold\":true}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Profile: \",\"color\":\"yellow\",\"bold\":true},{\"text\":\"Blueberry\",\"color\":\"green\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Pet Sitter: \",{\"text\":\"N/A\",\"color\":\"aqua\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Bank: \",{\"text\":\"1B\",\"color\":\"gold\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Interest: \",{\"text\":\"27 Hours\",\"color\":\"yellow\"}],\"italic\":false}", + "{\"text\":\"\",\"italic\":false}", + "{\"text\":\"\",\"extra\":[{\"text\":\"Skills: \",\"color\":\"yellow\",\"bold\":true},{\"text\":\"Foraging 23: \",\"color\":\"green\"},{\"text\":\"11.4%\",\"color\":\"dark_aqua\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Speed: \",{\"text\":\"✦319\",\"color\":\"white\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Strength: \",{\"text\":\"❁5222\",\"color\":\"red\"}],\"italic\":false}", + "{\"text\":\"\",\"extra\":[\" Crit Chance: \",{\"text\":\"☣168\",\"color\":\"blue\"}],\"italic\":false}", + "{\"text\":\"\",\"ext