From 8b7b88f6e817cf2fe50528bf865953e9a6875b71 Mon Sep 17 00:00:00 2001 From: Toosiii Date: Fri, 31 Jul 2026 15:33:19 +0200 Subject: [PATCH 1/2] Added power Orb and Lantern Deploy Range indicators --- .../skyblocker/config/SkyblockerConfig.java | 3 + .../config/SkyblockerConfigManager.java | 2 + .../config/categories/CombatCategory.java | 30 +++++ .../categories/LanternDeployableConfig.java | 7 + .../config/categories/MiningCategory.java | 24 +++- .../categories/PowerOrbRangeConfig.java | 7 + .../config/configs/CombatConfig.java | 9 ++ .../config/configs/MiningConfig.java | 3 + .../skyblock/combat/PowerOrbRange.java | 122 ++++++++++++++++++ .../skyblock/combat/package-info.java | 7 + .../skyblock/mining/LanternDeployable.java | 113 ++++++++++++++++ .../skyblock/mining/package-info.java | 7 + .../utils/render/RangeCircleRenderer.java | 31 +++++ 13 files changed, 358 insertions(+), 7 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java create mode 100644 src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java create mode 100644 src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java create mode 100644 src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index c708dbf93a3..891d46737f0 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -16,6 +16,7 @@ import de.hysky.skyblocker.config.configs.QuickNavigationConfig; import de.hysky.skyblocker.config.configs.SlayersConfig; import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; +import de.hysky.skyblocker.config.configs.CombatConfig; public class SkyblockerConfig { public int version = SkyblockerConfigManager.CONFIG_VERSION; @@ -51,4 +52,6 @@ public class SkyblockerConfig { public MiscConfig misc = new MiscConfig(); public DebugConfig debug = new DebugConfig(); + + public CombatConfig combat = new CombatConfig(); } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java index 6710fd11794..14d5a574bec 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java @@ -23,6 +23,7 @@ import de.hysky.skyblocker.config.categories.QuickNavigationCategory; import de.hysky.skyblocker.config.categories.SlayersCategory; import de.hysky.skyblocker.config.categories.UIAndVisualsCategory; +import de.hysky.skyblocker.config.categories.CombatCategory; import de.hysky.skyblocker.config.datafixer.ConfigDataFixer; import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.mixins.accessors.AbstractContainerScreenAccessor; @@ -144,6 +145,7 @@ public static Screen createGUI(@Nullable Screen parent, String search) { .category(QuickNavigationCategory.create(defaults, config)) .category(EventNotificationsCategory.create(defaults, config)) .category(MiscCategory.create(defaults, config)) + .category(CombatCategory.create(defaults, config)) .categoryIf(Debug.debugEnabled(), DebugCategory.create(defaults, config)) .search(search) .platformLinks(PlatformLinks.createBuilder() diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java new file mode 100644 index 00000000000..5c88de2cefa --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java @@ -0,0 +1,30 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.SkyblockerMod; +import de.hysky.skyblocker.config.ConfigUtils; +import de.hysky.skyblocker.config.SkyblockerConfig; +import net.azureaaron.dandelion.api.ConfigCategory; +import net.azureaaron.dandelion.api.Option; +import net.minecraft.network.chat.Component; + +public class CombatCategory { + + public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .id(SkyblockerMod.id("config/combat")) + .name(Component.translatable("skyblocker.config.combat")) + + .option(Option.createBuilder() + .name(Component.translatable("skyblocker.config.combat.powerOrbRange.show")) + .description(Component.translatable("skyblocker.config.combat.powerOrbRange.show.@Tooltip")) + .binding( + defaults.combat.powerOrbRange.showPowerOrbRange, + () -> config.combat.powerOrbRange.showPowerOrbRange, + newValue -> config.combat.powerOrbRange.showPowerOrbRange = newValue + ) + .controller(ConfigUtils.createBooleanController()) + .build()) + + .build(); + } +} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java b/src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java new file mode 100644 index 00000000000..05bb55f883f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java @@ -0,0 +1,7 @@ +package de.hysky.skyblocker.config.categories; + +public class LanternDeployableConfig { + + public boolean showDeployableRange = true; + +} 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 006c4ca3273..f09e662f5ee 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/MiningCategory.java @@ -128,7 +128,7 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig .description(Component.translatable("skyblocker.config.mining.dwarvenMines.enableCarpetHighlight.@Tooltip")) .binding(defaults.mining.dwarvenMines.enableCarpetHighlighter, () -> config.mining.dwarvenMines.enableCarpetHighlighter, - newValue -> config.mining.dwarvenMines.enableCarpetHighlighter = newValue) + newValue -> config.mining.dwarvenMines.enableCarpetHighlighter = newValue) .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() @@ -185,9 +185,9 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig .binding(defaults.mining.crystalHollows.enablePowderTracker, () -> config.mining.crystalHollows.enablePowderTracker, newValue -> { - config.mining.crystalHollows.enablePowderTracker = newValue; - if (newValue) PowderMiningTracker.INSTANCE.recalculateAll(); - }) + config.mining.crystalHollows.enablePowderTracker = newValue; + if (newValue) PowderMiningTracker.INSTANCE.recalculateAll(); + }) .controller(ConfigUtils.createBooleanController()) .build()) .option(ButtonOption.createBuilder() @@ -343,8 +343,8 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig .name(Component.translatable("skyblocker.config.mining.glacite.fossilSolver")) .description(Component.translatable("skyblocker.config.mining.glacite.fossilSolver.@Tooltip")) .binding(defaults.mining.glacite.fossilSolver, - () -> config.mining.glacite.fossilSolver, - newValue -> config.mining.glacite.fossilSolver = newValue) + () -> config.mining.glacite.fossilSolver, + newValue -> config.mining.glacite.fossilSolver = newValue) .controller(ConfigUtils.createBooleanController()) .build()) .option(Option.createBuilder() @@ -417,7 +417,17 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig newValue -> config.mining.blockBreakPrediction.playSound = newValue) .controller(ConfigUtils.createBooleanController()) .build()) - + .build()) + //Lantern Deploy Range + .option(Option.createBuilder() + .name(Component.translatable("skyblocker.config.mining.lanternDeployable.show")) + .description(Component.translatable("skyblocker.config.mining.lanternDeployable.show.@Tooltip")) + .binding( + defaults.mining.lanternDeployable.showDeployableRange, + () -> config.mining.lanternDeployable.showDeployableRange, + newValue -> config.mining.lanternDeployable.showDeployableRange = newValue + ) + .controller(ConfigUtils.createBooleanController()) .build()) .build(); } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java b/src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java new file mode 100644 index 00000000000..ec43ecb7458 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java @@ -0,0 +1,7 @@ +package de.hysky.skyblocker.config.categories; + +public class PowerOrbRangeConfig { + + public boolean showPowerOrbRange = true; + +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java new file mode 100644 index 00000000000..ae915e24ca2 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java @@ -0,0 +1,9 @@ +package de.hysky.skyblocker.config.configs; + +import de.hysky.skyblocker.config.categories.PowerOrbRangeConfig; + +public class CombatConfig { + + public PowerOrbRangeConfig powerOrbRange = new PowerOrbRangeConfig(); + +} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java index 2a3d13da1e1..f2c267510c2 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java @@ -2,6 +2,7 @@ import de.hysky.skyblocker.annotations.EnumDisabledValue; import net.minecraft.client.resources.language.I18n; +import de.hysky.skyblocker.config.categories.LanternDeployableConfig; import java.awt.Color; import java.util.ArrayList; @@ -38,6 +39,8 @@ public class MiningConfig { public Glacite glacite = new Glacite(); + public LanternDeployableConfig lanternDeployable = new LanternDeployableConfig(); + public BlockBreakPrediction blockBreakPrediction = new BlockBreakPrediction(); public static class PickobulusHelper { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java b/src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java new file mode 100644 index 00000000000..59dad7c2d8d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java @@ -0,0 +1,122 @@ +package de.hysky.skyblocker.skyblock.combat; + +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.utils.render.LevelRenderExtractionCallback; +import de.hysky.skyblocker.utils.render.Renderable; +import de.hysky.skyblocker.utils.render.primitive.PrimitiveCollector; +import de.hysky.skyblocker.config.SkyblockerConfigManager; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.phys.Vec3; + +import java.util.Locale; + +public final class PowerOrbRange implements Renderable { + + public static final PowerOrbRange INSTANCE = new PowerOrbRange(); + + private static final float RANGE = 18f; + private static final float CIRCLE_HEIGHT = 2f; + private static final int SEGMENTS = 128; + private static final int COLOR = 0x5500FFFF; + + private Vec3 orbPosition; + + @Init + public static void init() { + + LevelRenderExtractionCallback.EVENT.register(INSTANCE::extractRendering); + + + ClientTickEvents.END_CLIENT_TICK.register(client -> { + + if (client.level == null || client.player == null) { + + INSTANCE.clearPosition(); + return; + } + + + INSTANCE.findOrb(); + }); + } + + private void updatePosition(Vec3 pos) { + this.orbPosition = pos; + } + + private void clearPosition() { + this.orbPosition = null; + } + + @Override + public void extractRendering(PrimitiveCollector collector) { + + if (orbPosition == null) { + return; + } + + if (!SkyblockerConfigManager.get() + .combat + .powerOrbRange + .showPowerOrbRange) { + return; + } + + collector.submitCylinder( + orbPosition, + RANGE, + 0.5f, + SEGMENTS, + COLOR + ); + } + + private void findOrb() { + + Minecraft mc = Minecraft.getInstance(); + + if (mc.level == null) return; + + + for (Entity entity : mc.level.entitiesForRendering()) { + + if (!(entity instanceof ArmorStand armorStand)) continue; + + + if (isOrb(armorStand)) { + + Vec3 pos = armorStand.position() + .add(0, CIRCLE_HEIGHT, 0); + + updatePosition(pos); + return; + } + } + + + clearPosition(); + } + + private boolean isOrb(ArmorStand armorStand) { + + if (!armorStand.hasCustomName()) return false; + + + String name = armorStand.getName() + .getString() + .replaceAll("§.", "") + .toLowerCase(Locale.ENGLISH); + + + return name.contains("radiant power orb") + || name.contains("mana flux") + || name.contains("manaflux") + || name.contains("overflux") + || name.contains("plasmaflux") + || name.contains("plasma flux"); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java b/src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java new file mode 100644 index 00000000000..7c1c063280d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java @@ -0,0 +1,7 @@ +@NullMarked +/** + * Combat related features. + */ +package de.hysky.skyblocker.skyblock.combat; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java b/src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java new file mode 100644 index 00000000000..efa1b6ea959 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java @@ -0,0 +1,113 @@ +package de.hysky.skyblocker.skyblock.mining; + +import de.hysky.skyblocker.annotations.Init; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.render.LevelRenderExtractionCallback; +import de.hysky.skyblocker.utils.render.Renderable; +import de.hysky.skyblocker.utils.render.primitive.PrimitiveCollector; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.decoration.ArmorStand; +import net.minecraft.world.phys.Vec3; +import java.util.Locale; + + +public final class LanternDeployable implements Renderable { + + public static final LanternDeployable INSTANCE = new LanternDeployable(); + + private static final float RANGE = 30; + private static final int SEGMENTS = 128; + private static final int COLOR = 0x5500FFFF; + private static final float CIRCLE_HEIGHT = 5f; + + private Vec3 lanternPosition; + + @Init + public static void init() { + + LevelRenderExtractionCallback.EVENT.register(INSTANCE::extractRendering); + + ClientTickEvents.END_CLIENT_TICK.register(client -> { + + if (client.level == null || client.player == null) { + INSTANCE.clearPosition(); + return; + } + + INSTANCE.findLantern(); + }); + } + + public void updatePosition(BlockPos pos) { + if (this.lanternPosition != null) { + return; + } + + this.lanternPosition = new Vec3( + pos.getX() + 0.5, + pos.getY(), + pos.getZ() + 0.5 + ); + } + + public void clearPosition() { + this.lanternPosition = null; + } + + @Override + public void extractRendering(PrimitiveCollector collector) { + if (lanternPosition == null) return; + + if (!SkyblockerConfigManager.get() + .mining + .lanternDeployable + .showDeployableRange) return; + + + Vec3 circlePosition = lanternPosition.add( + 0, + CIRCLE_HEIGHT, + 0 + ); + + + collector.submitCylinder( + circlePosition, + RANGE, + 0.5f, + SEGMENTS, + COLOR + ); + } + + private void findLantern() { + Minecraft mc = Minecraft.getInstance(); + + for (Entity entity : mc.level.entitiesForRendering()) { + + if (!(entity instanceof ArmorStand armorStand)) continue; + + if (isLantern(armorStand)) { + updatePosition(armorStand.blockPosition().below()); + return; + } + } + + clearPosition(); + } + + private boolean isLantern(ArmorStand armorStand) { + if (!armorStand.hasCustomName()) return false; + + String name = armorStand.getName().getString() + .replaceAll("§.", "") + .toLowerCase(Locale.ENGLISH); + + return name.contains("lantern") + || name.contains("wisp"); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java b/src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java new file mode 100644 index 00000000000..b292a36bf5d --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java @@ -0,0 +1,7 @@ +@NullMarked +/** + * Mining related features. + */ +package de.hysky.skyblocker.skyblock.mining; + +import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java b/src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java new file mode 100644 index 00000000000..387393f96b8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java @@ -0,0 +1,31 @@ +package de.hysky.skyblocker.utils.render; + +import de.hysky.skyblocker.utils.render.primitive.PrimitiveCollector; +import net.minecraft.world.phys.Vec3; + +public final class RangeCircleRenderer implements Renderable { + + private static final float LINE_WIDTH = 0.05f; + private static final int SEGMENTS = 128; + + private final Vec3 centre; + private final float radius; + private final int colour; + + public RangeCircleRenderer(Vec3 centre, float radius, int colour) { + this.centre = centre; + this.radius = radius; + this.colour = colour; + } + + @Override + public void extractRendering(PrimitiveCollector collector) { + collector.submitOutlinedCircle( + centre, + radius, + LINE_WIDTH, + SEGMENTS, + colour + ); + } +} From bee63448e5a58fa3edd7dd2b42b29a33246e6701 Mon Sep 17 00:00:00 2001 From: Toosiii Date: Sat, 1 Aug 2026 20:19:18 +0200 Subject: [PATCH 2/2] Removed the separate CombatCategory - Moved Power Orb Config into HeleprCategory - Removed PowerOrbConfig.java (and the package-infos)- Removed RangeCircleRenderer.java - Moved Lantern Config into the existing structure - LanternDeployable Detects deployables from other players - Cleand Up --- .../skyblocker/config/SkyblockerConfig.java | 3 - .../config/SkyblockerConfigManager.java | 2 - .../config/categories/CombatCategory.java | 30 -------- .../config/categories/HelperCategory.java | 9 +++ .../categories/LanternDeployableConfig.java | 7 -- .../categories/PowerOrbRangeConfig.java | 7 -- .../config/configs/CombatConfig.java | 9 --- .../config/configs/HelperConfig.java | 8 +++ .../config/configs/MiningConfig.java | 7 +- .../{mining => }/LanternDeployable.java | 71 +++++-------------- .../skyblock/{combat => }/PowerOrbRange.java | 37 ++-------- .../skyblock/combat/package-info.java | 7 -- .../skyblock/mining/package-info.java | 7 -- .../utils/render/RangeCircleRenderer.java | 31 -------- 14 files changed, 46 insertions(+), 189 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java delete mode 100644 src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java delete mode 100644 src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java delete mode 100644 src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java rename src/main/java/de/hysky/skyblocker/skyblock/{mining => }/LanternDeployable.java (58%) rename src/main/java/de/hysky/skyblocker/skyblock/{combat => }/PowerOrbRange.java (74%) delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 891d46737f0..c708dbf93a3 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -16,7 +16,6 @@ import de.hysky.skyblocker.config.configs.QuickNavigationConfig; import de.hysky.skyblocker.config.configs.SlayersConfig; import de.hysky.skyblocker.config.configs.UIAndVisualsConfig; -import de.hysky.skyblocker.config.configs.CombatConfig; public class SkyblockerConfig { public int version = SkyblockerConfigManager.CONFIG_VERSION; @@ -52,6 +51,4 @@ public class SkyblockerConfig { public MiscConfig misc = new MiscConfig(); public DebugConfig debug = new DebugConfig(); - - public CombatConfig combat = new CombatConfig(); } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java index 14d5a574bec..6710fd11794 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfigManager.java @@ -23,7 +23,6 @@ import de.hysky.skyblocker.config.categories.QuickNavigationCategory; import de.hysky.skyblocker.config.categories.SlayersCategory; import de.hysky.skyblocker.config.categories.UIAndVisualsCategory; -import de.hysky.skyblocker.config.categories.CombatCategory; import de.hysky.skyblocker.config.datafixer.ConfigDataFixer; import de.hysky.skyblocker.debug.Debug; import de.hysky.skyblocker.mixins.accessors.AbstractContainerScreenAccessor; @@ -145,7 +144,6 @@ public static Screen createGUI(@Nullable Screen parent, String search) { .category(QuickNavigationCategory.create(defaults, config)) .category(EventNotificationsCategory.create(defaults, config)) .category(MiscCategory.create(defaults, config)) - .category(CombatCategory.create(defaults, config)) .categoryIf(Debug.debugEnabled(), DebugCategory.create(defaults, config)) .search(search) .platformLinks(PlatformLinks.createBuilder() diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java deleted file mode 100644 index 5c88de2cefa..00000000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/CombatCategory.java +++ /dev/null @@ -1,30 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.config.ConfigUtils; -import de.hysky.skyblocker.config.SkyblockerConfig; -import net.azureaaron.dandelion.api.ConfigCategory; -import net.azureaaron.dandelion.api.Option; -import net.minecraft.network.chat.Component; - -public class CombatCategory { - - public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { - return ConfigCategory.createBuilder() - .id(SkyblockerMod.id("config/combat")) - .name(Component.translatable("skyblocker.config.combat")) - - .option(Option.createBuilder() - .name(Component.translatable("skyblocker.config.combat.powerOrbRange.show")) - .description(Component.translatable("skyblocker.config.combat.powerOrbRange.show.@Tooltip")) - .binding( - defaults.combat.powerOrbRange.showPowerOrbRange, - () -> config.combat.powerOrbRange.showPowerOrbRange, - newValue -> config.combat.powerOrbRange.showPowerOrbRange = newValue - ) - .controller(ConfigUtils.createBooleanController()) - .build()) - - .build(); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java index 082e80211de..ccca5c7c739 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java @@ -548,6 +548,15 @@ public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig .controller(ConfigUtils.createBooleanController()) .build()) .build()) + //Power Orb Range + .option(Option.createBuilder() + .name(Component.translatable("skyblocker.config.helpers.showPowerOrbRange")) + .description(Component.translatable("skyblocker.config.helpers.showPowerOrbRange.@Tooltip")) + .binding(defaults.helpers.showPowerOrbRange, + () -> config.helpers.showPowerOrbRange, + newValue -> config.helpers.showPowerOrbRange = newValue) + .controller(ConfigUtils.createBooleanController()) + .build()) .build(); } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java b/src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java deleted file mode 100644 index 05bb55f883f..00000000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/LanternDeployableConfig.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -public class LanternDeployableConfig { - - public boolean showDeployableRange = true; - -} diff --git a/src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java b/src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java deleted file mode 100644 index ec43ecb7458..00000000000 --- a/src/main/java/de/hysky/skyblocker/config/categories/PowerOrbRangeConfig.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.hysky.skyblocker.config.categories; - -public class PowerOrbRangeConfig { - - public boolean showPowerOrbRange = true; - -} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java deleted file mode 100644 index ae915e24ca2..00000000000 --- a/src/main/java/de/hysky/skyblocker/config/configs/CombatConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.hysky.skyblocker.config.configs; - -import de.hysky.skyblocker.config.categories.PowerOrbRangeConfig; - -public class CombatConfig { - - public PowerOrbRangeConfig powerOrbRange = new PowerOrbRangeConfig(); - -} diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java index 314712c3333..377e5191590 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java @@ -23,6 +23,8 @@ public class HelperConfig { public boolean enableAccessoriesHelperWidget = true; + public boolean showPowerOrbRange = true; + public BuildersWand buildersWand = new BuildersWand(); public MythologicalRitual mythologicalRitual = new MythologicalRitual(); @@ -47,6 +49,8 @@ public class HelperConfig { public CenturyRaffle centuryRaffle = new CenturyRaffle(); + public PowerOrbRange powerOrbRange = new PowerOrbRange(); + public static class BuildersWand { public boolean enableBuildersWandPreview = true; @@ -183,4 +187,8 @@ public static class CenturyRaffle { public boolean enableRaffleRewardHighlight = true; } + + public static class PowerOrbRange { + public boolean showPowerOrbRange = true; + } } diff --git a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java index f2c267510c2..66f47bd467c 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/MiningConfig.java @@ -2,7 +2,6 @@ import de.hysky.skyblocker.annotations.EnumDisabledValue; import net.minecraft.client.resources.language.I18n; -import de.hysky.skyblocker.config.categories.LanternDeployableConfig; import java.awt.Color; import java.util.ArrayList; @@ -39,7 +38,7 @@ public class MiningConfig { public Glacite glacite = new Glacite(); - public LanternDeployableConfig lanternDeployable = new LanternDeployableConfig(); + public LanternDeployable lanternDeployable = new LanternDeployable(); public BlockBreakPrediction blockBreakPrediction = new BlockBreakPrediction(); @@ -177,6 +176,10 @@ public static class BlockBreakPrediction { } + public static class LanternDeployable { + public boolean showDeployableRange = true; + } + /** * @deprecated See {@link UIAndVisualsConfig.TabHudStyle}. */ diff --git a/src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java b/src/main/java/de/hysky/skyblocker/skyblock/LanternDeployable.java similarity index 58% rename from src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java rename to src/main/java/de/hysky/skyblocker/skyblock/LanternDeployable.java index efa1b6ea959..4d6262a4ab8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/mining/LanternDeployable.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/LanternDeployable.java @@ -1,4 +1,4 @@ -package de.hysky.skyblocker.skyblock.mining; +package de.hysky.skyblocker.skyblock; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.config.SkyblockerConfigManager; @@ -8,106 +8,71 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.minecraft.client.Minecraft; -import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.decoration.ArmorStand; import net.minecraft.world.phys.Vec3; -import java.util.Locale; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; public final class LanternDeployable implements Renderable { public static final LanternDeployable INSTANCE = new LanternDeployable(); - private static final float RANGE = 30; + private static final float RANGE = 30f; private static final int SEGMENTS = 128; private static final int COLOR = 0x5500FFFF; - private static final float CIRCLE_HEIGHT = 5f; + private static final float CIRCLE_HEIGHT = 3f; - private Vec3 lanternPosition; + private final List lanternPositions = new ArrayList<>(); @Init public static void init() { LevelRenderExtractionCallback.EVENT.register(INSTANCE::extractRendering); - ClientTickEvents.END_CLIENT_TICK.register(client -> { if (client.level == null || client.player == null) { - INSTANCE.clearPosition(); + INSTANCE.lanternPositions.clear(); return; } - INSTANCE.findLantern(); }); } - public void updatePosition(BlockPos pos) { - if (this.lanternPosition != null) { - return; - } - - this.lanternPosition = new Vec3( - pos.getX() + 0.5, - pos.getY(), - pos.getZ() + 0.5 - ); - } - - public void clearPosition() { - this.lanternPosition = null; - } - @Override public void extractRendering(PrimitiveCollector collector) { - if (lanternPosition == null) return; + if (lanternPositions.isEmpty()) return; - if (!SkyblockerConfigManager.get() - .mining - .lanternDeployable - .showDeployableRange) return; + if (!SkyblockerConfigManager.get().mining.lanternDeployable.showDeployableRange) return; + for (Vec3 position : lanternPositions) { - Vec3 circlePosition = lanternPosition.add( - 0, - CIRCLE_HEIGHT, - 0 - ); + Vec3 circlePosition = position.add(0, CIRCLE_HEIGHT, 0); - - collector.submitCylinder( - circlePosition, - RANGE, - 0.5f, - SEGMENTS, - COLOR - ); + collector.submitCylinder(circlePosition, RANGE, 0.5f, SEGMENTS, COLOR); + } } private void findLantern() { Minecraft mc = Minecraft.getInstance(); + lanternPositions.clear(); for (Entity entity : mc.level.entitiesForRendering()) { - if (!(entity instanceof ArmorStand armorStand)) continue; if (isLantern(armorStand)) { - updatePosition(armorStand.blockPosition().below()); - return; + lanternPositions.add(Vec3.atCenterOf(armorStand.blockPosition().below())); } } - - clearPosition(); } private boolean isLantern(ArmorStand armorStand) { if (!armorStand.hasCustomName()) return false; - String name = armorStand.getName().getString() - .replaceAll("§.", "") - .toLowerCase(Locale.ENGLISH); + String name = armorStand.getName().getString().replaceAll("§.", "").toLowerCase(Locale.ENGLISH); - return name.contains("lantern") - || name.contains("wisp"); + return name.contains("lantern") || name.contains("wisp"); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java b/src/main/java/de/hysky/skyblocker/skyblock/PowerOrbRange.java similarity index 74% rename from src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java rename to src/main/java/de/hysky/skyblocker/skyblock/PowerOrbRange.java index 59dad7c2d8d..163b63d76ee 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/combat/PowerOrbRange.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/PowerOrbRange.java @@ -1,4 +1,4 @@ -package de.hysky.skyblocker.skyblock.combat; +package de.hysky.skyblocker.skyblock; import de.hysky.skyblocker.annotations.Init; import de.hysky.skyblocker.utils.render.LevelRenderExtractionCallback; @@ -30,7 +30,6 @@ public static void init() { LevelRenderExtractionCallback.EVENT.register(INSTANCE::extractRendering); - ClientTickEvents.END_CLIENT_TICK.register(client -> { if (client.level == null || client.player == null) { @@ -39,7 +38,6 @@ public static void init() { return; } - INSTANCE.findOrb(); }); } @@ -59,20 +57,11 @@ public void extractRendering(PrimitiveCollector collector) { return; } - if (!SkyblockerConfigManager.get() - .combat - .powerOrbRange - .showPowerOrbRange) { + if (!SkyblockerConfigManager.get().helpers.showPowerOrbRange) { return; } - collector.submitCylinder( - orbPosition, - RANGE, - 0.5f, - SEGMENTS, - COLOR - ); + collector.submitCylinder(orbPosition, RANGE, 0.5f, SEGMENTS, COLOR); } private void findOrb() { @@ -81,23 +70,19 @@ private void findOrb() { if (mc.level == null) return; - for (Entity entity : mc.level.entitiesForRendering()) { if (!(entity instanceof ArmorStand armorStand)) continue; - if (isOrb(armorStand)) { - Vec3 pos = armorStand.position() - .add(0, CIRCLE_HEIGHT, 0); + Vec3 pos = armorStand.position().add(0, CIRCLE_HEIGHT, 0); updatePosition(pos); return; } } - clearPosition(); } @@ -105,18 +90,8 @@ private boolean isOrb(ArmorStand armorStand) { if (!armorStand.hasCustomName()) return false; + String name = armorStand.getName().getString().replaceAll("§.", "").toLowerCase(Locale.ENGLISH); - String name = armorStand.getName() - .getString() - .replaceAll("§.", "") - .toLowerCase(Locale.ENGLISH); - - - return name.contains("radiant power orb") - || name.contains("mana flux") - || name.contains("manaflux") - || name.contains("overflux") - || name.contains("plasmaflux") - || name.contains("plasma flux"); + return name.contains("radiant power orb") || name.contains("mana flux") || name.contains("manaflux") || name.contains("overflux") || name.contains("plasmaflux") || name.contains("plasma flux"); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java b/src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java deleted file mode 100644 index 7c1c063280d..00000000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/combat/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@NullMarked -/** - * Combat related features. - */ -package de.hysky.skyblocker.skyblock.combat; - -import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java b/src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java deleted file mode 100644 index b292a36bf5d..00000000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/mining/package-info.java +++ /dev/null @@ -1,7 +0,0 @@ -@NullMarked -/** - * Mining related features. - */ -package de.hysky.skyblocker.skyblock.mining; - -import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java b/src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java deleted file mode 100644 index 387393f96b8..00000000000 --- a/src/main/java/de/hysky/skyblocker/utils/render/RangeCircleRenderer.java +++ /dev/null @@ -1,31 +0,0 @@ -package de.hysky.skyblocker.utils.render; - -import de.hysky.skyblocker.utils.render.primitive.PrimitiveCollector; -import net.minecraft.world.phys.Vec3; - -public final class RangeCircleRenderer implements Renderable { - - private static final float LINE_WIDTH = 0.05f; - private static final int SEGMENTS = 128; - - private final Vec3 centre; - private final float radius; - private final int colour; - - public RangeCircleRenderer(Vec3 centre, float radius, int colour) { - this.centre = centre; - this.radius = radius; - this.colour = colour; - } - - @Override - public void extractRendering(PrimitiveCollector collector) { - collector.submitOutlinedCircle( - centre, - radius, - LINE_WIDTH, - SEGMENTS, - colour - ); - } -}