From 65dd269c266650724c392b121855f87cdf4dbe2b Mon Sep 17 00:00:00 2001 From: akarahdev Date: Thu, 18 Jan 2024 08:29:01 -0500 Subject: test --- .../hysky/skyblocker/config/SkyblockerConfig.java | 11 +++++ .../config/categories/SlayersCategory.java | 18 ++++++++ .../skyblock/endermanslayer/BeaconHighlighter.java | 51 ++++++++++++++++++++++ .../hysky/skyblocker/skyblock/entity/MobGlow.java | 40 +++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 9477fbed..b8606b87 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -918,6 +918,17 @@ public class SkyblockerConfig { public static class Slayer { @SerialEntry public VampireSlayer vampireSlayer = new VampireSlayer(); + + @SerialEntry + public EndermanSlayer endermanSlayer = new EndermanSlayer(); + } + + public static class EndermanSlayer { + @SerialEntry + public boolean highlightNukekubiHeads = true; + + @SerialEntry + public boolean highlightBeacons = true; } public static class VampireSlayer { diff --git a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java index 7df95172..15e6f4a6 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/SlayersCategory.java @@ -16,6 +16,24 @@ public class SlayersCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.category.slayer")) + .group(OptionGroup.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightNukekubiHeads")) + .binding(defaults.slayer.endermanSlayer.highlightNukekubiHeads, + () -> config.slayer.endermanSlayer.highlightNukekubiHeads, + newValue -> config.slayer.endermanSlayer.highlightNukekubiHeads = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.slayer.endermanSlayer.highlightBeacons")) + .binding(defaults.slayer.endermanSlayer.highlightBeacons, + () -> config.slayer.endermanSlayer.highlightBeacons, + newValue -> config.slayer.endermanSlayer.highlightBeacons = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) //Vampire Slayer .group(OptionGroup.createBuilder() diff --git a/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java new file mode 100644 index 00000000..2dc64aff --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java @@ -0,0 +1,51 @@ +package de.hysky.skyblocker.skyblock.endermanslayer; + +import de.hysky.skyblocker.utils.Tickable; +import de.hysky.skyblocker.utils.render.RenderHelper; +import de.hysky.skyblocker.utils.render.Renderable; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.Block; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtString; +import net.minecraft.util.math.BlockPos; + +public class BeaconHighlighter implements Tickable, Renderable { + BlockPos pos = null; + @Override + public void tick(MinecraftClient client) { + var player = MinecraftClient.getInstance().player; + var world = MinecraftClient.getInstance().world; + pos = null; + if(player != null && world != null) { + for(int x = (int) (player.getX()-20); x Date: Thu, 18 Jan 2024 09:20:11 -0500 Subject: improve beacons --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/skyblock/end/BeaconHighlighter.java | 68 ++++++++++++++++++++++ .../skyblock/endermanslayer/BeaconHighlighter.java | 62 -------------------- src/main/java/de/hysky/skyblocker/utils/Utils.java | 8 +++ 4 files changed, 77 insertions(+), 63 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index 905478ce..3fca09ce 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -14,7 +14,7 @@ import de.hysky.skyblocker.skyblock.dungeon.puzzle.waterboard.Waterboard; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.skyblock.dungeon.secrets.SecretsTracker; import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud; -import de.hysky.skyblocker.skyblock.endermanslayer.BeaconHighlighter; +import de.hysky.skyblocker.skyblock.end.BeaconHighlighter; import de.hysky.skyblocker.skyblock.item.*; import de.hysky.skyblocker.skyblock.item.tooltip.BackpackPreview; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java new file mode 100644 index 00000000..1815179f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java @@ -0,0 +1,68 @@ +package de.hysky.skyblocker.skyblock.end; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.render.RenderHelper; +import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.math.BlockPos; + +import java.util.ArrayList; +import java.util.List; + +public class BeaconHighlighter { + static List pos = new ArrayList<>(); + + /** + * Initializes the beacon highlighting system. + * `BeaconHighlighter::render` is called after translucent rendering. + * `BeaconHighlighter::update` should be called every 5 ticks. + */ + public static void init() { + WorldRenderEvents.AFTER_TRANSLUCENT.register(BeaconHighlighter::render); + Scheduler.INSTANCE.scheduleCyclic(BeaconHighlighter::update, 5); + } + + /** + * Updates the position of the beacon. + * It checks in a 15 block radius on the X/Z axis, and a ~5 block radius on the Y axis. + * If a beacon is found, `pos` is updated to the beacon's position. + */ + + public static void update() { + var player = MinecraftClient.getInstance().player; + var world = MinecraftClient.getInstance().world; + pos.clear(); + if(player != null && world != null && + SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) { + for(int x = (player.getBlockPos().getX()-15); x { + RenderHelper.renderFilled( + context, + it, + new float[]{1.0f, 0.0f, 0.0f}, + 0.5f, + true + ); + }); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java deleted file mode 100644 index 44e86966..00000000 --- a/src/main/java/de/hysky/skyblocker/skyblock/endermanslayer/BeaconHighlighter.java +++ /dev/null @@ -1,62 +0,0 @@ -package de.hysky.skyblocker.skyblock.endermanslayer; - -import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.entity.MobGlow; -import de.hysky.skyblocker.utils.Tickable; -import de.hysky.skyblocker.utils.render.RenderHelper; -import de.hysky.skyblocker.utils.render.Renderable; -import de.hysky.skyblocker.utils.scheduler.Scheduler; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.client.MinecraftClient; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtString; -import net.minecraft.util.math.BlockPos; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class BeaconHighlighter { - static BlockPos pos = null; - - public static void init() { - WorldRenderEvents.AFTER_TRANSLUCENT.register(BeaconHighlighter::render); - Scheduler.INSTANCE.scheduleCyclic(BeaconHighlighter::update, 20); - } - - public static void update() { - Logger logger = LoggerFactory.getLogger(BeaconHighlighter.class); - - var player = MinecraftClient.getInstance().player; - var world = MinecraftClient.getInstance().world; - pos = null; - if(player != null && world != null && - SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) { - for(int x = (player.getBlockPos().getX()-15); x Date: Thu, 18 Jan 2024 09:21:58 -0500 Subject: improve nukekubi highlighting --- .../java/de/hysky/skyblocker/skyblock/entity/MobGlow.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index fdaa0d6c..2d0eed4e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -67,10 +67,13 @@ public class MobGlow { } // Enderman Slayer - // Nukekubi Heads - Logger logger = LoggerFactory.getLogger(MobGlow.class); - if(entity instanceof ArmorStandEntity) { + // Highlights Nukekubi Heads + if(SkyblockerConfigManager.get().slayer.endermanSlayer.highlightNukekubiHeads + && entity instanceof ArmorStandEntity) { + // check for items in the armor sets for (net.minecraft.item.ItemStack it : entity.getArmorItems()) { + // hacky way to check if an item is a player head w/o + // some shenanigans if(!it.toString().startsWith("1 player_head")) continue; @@ -81,6 +84,8 @@ public class MobGlow { // for the nukekubi head, compare against it to exclusively find // armorstands that are nukekubi heads if (it.getNbt().contains("SkullOwner")) { + // get the texture of the nukekubi head item itself and + // compare it var texture = it .getNbt() .getCompound("SkullOwner") @@ -88,8 +93,8 @@ public class MobGlow { .getList("textures", NbtElement.COMPOUND_TYPE) .getCompound(0) .getString("Value"); - return SkyblockerConfigManager.get().slayer.endermanSlayer.highlightNukekubiHeads - && texture.contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0="); + + return texture.contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0="); } } -- cgit From 932cd36d51d505396552478e184d86b4a3a2eb94 Mon Sep 17 00:00:00 2001 From: akarahdev Date: Thu, 18 Jan 2024 09:24:13 -0500 Subject: make this not bannable --- src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java index 1815179f..0da5cc97 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java @@ -61,7 +61,7 @@ public class BeaconHighlighter { it, new float[]{1.0f, 0.0f, 0.0f}, 0.5f, - true + false ); }); } -- cgit From 8b9f2d8bed28c0e2867871d4017eb63ebb904482 Mon Sep 17 00:00:00 2001 From: akarahdev Date: Thu, 18 Jan 2024 09:26:50 -0500 Subject: add nukekubi glow coloring --- .../hysky/skyblocker/skyblock/entity/MobGlow.java | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index 2d0eed4e..ef61271d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -123,6 +123,39 @@ public class MobGlow { }; } + // copypaste nukekubi head logic + if(entity instanceof ArmorStandEntity) { + for (net.minecraft.item.ItemStack it : entity.getArmorItems()) { + // hacky way to check if an item is a player head w/o + // some shenanigans + if(!it.toString().startsWith("1 player_head")) + continue; + + + if (it.hasNbt()) { + assert it.getNbt() != null; + // eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3 is texture id + // for the nukekubi head, compare against it to exclusively find + // armorstands that are nukekubi heads + if (it.getNbt().contains("SkullOwner")) { + // get the texture of the nukekubi head item itself and + // compare it + var texture = it + .getNbt() + .getCompound("SkullOwner") + .getCompound("Properties") + .getList("textures", NbtElement.COMPOUND_TYPE) + .getCompound(0) + .getString("Value"); + + if(texture.contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0=")) { + return 0x990099; + } + } + } + } + } + return 0xf57738; } } -- cgit From 1c11eadc90ab43a0fdddfac9a65fd6b8f043837c Mon Sep 17 00:00:00 2001 From: akarahdev Date: Thu, 18 Jan 2024 09:36:35 -0500 Subject: finish up --- src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index ef61271d..f7fb7a3e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -123,7 +123,7 @@ public class MobGlow { }; } - // copypaste nukekubi head logic + // copypaste nukekebi head logic if(entity instanceof ArmorStandEntity) { for (net.minecraft.item.ItemStack it : entity.getArmorItems()) { // hacky way to check if an item is a player head w/o @@ -138,7 +138,7 @@ public class MobGlow { // for the nukekubi head, compare against it to exclusively find // armorstands that are nukekubi heads if (it.getNbt().contains("SkullOwner")) { - // get the texture of the nukekubi head item itself and + // get the texture of the nukekebi head item itself and // compare it var texture = it .getNbt() -- cgit From ffb7d6a489934ee8429146c451a54f5d7627bf64 Mon Sep 17 00:00:00 2001 From: akarahdev Date: Thu, 18 Jan 2024 12:02:57 -0500 Subject: please work --- .../mixin/ClientPlayNetworkHandlerMixin.java | 12 +++++- .../skyblocker/skyblock/end/BeaconHighlighter.java | 49 +++++----------------- 2 files changed, 21 insertions(+), 40 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java index a8537088..15339c78 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -6,6 +6,7 @@ import com.llamalad7.mixinextras.sugar.Local; import de.hysky.skyblocker.skyblock.FishingHelper; import de.hysky.skyblocker.skyblock.dungeon.DungeonScore; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; +import de.hysky.skyblocker.skyblock.end.BeaconHighlighter; import de.hysky.skyblocker.skyblock.waypoint.MythologicalRitual; import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; @@ -15,6 +16,7 @@ import net.minecraft.entity.EntityStatuses; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.network.packet.s2c.play.EntityStatusS2CPacket; +import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; import net.minecraft.util.Identifier; @@ -71,7 +73,15 @@ public abstract class ClientPlayNetworkHandlerMixin { @ModifyExpressionValue(method = "onEntityStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/packet/s2c/play/EntityStatusS2CPacket;getEntity(Lnet/minecraft/world/World;)Lnet/minecraft/entity/Entity;")) private Entity skyblocker$onEntityDeath(Entity entity, @Local(argsOnly = true) EntityStatusS2CPacket packet) { - if (packet.getStatus() == EntityStatuses.PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES) DungeonScore.handleEntityDeath(entity); + if (packet.getStatus() == EntityStatuses.PLAY_DEATH_SOUND_OR_ADD_PROJECTILE_HIT_PARTICLES) + DungeonScore.handleEntityDeath(entity); return entity; } + @Inject(method = "onBlockUpdate", at = @At("RETURN")) + private void skyblocker$onBlockUpdate(BlockUpdateS2CPacket packet, CallbackInfo ci) { + BeaconHighlighter.positions.remove(packet.getPos()); + if(packet.getState().toString().contains("minecraft:beacon")) { + BeaconHighlighter.positions.add(packet.getPos()); + } + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java index 0da5cc97..98929e7c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java @@ -1,52 +1,24 @@ package de.hysky.skyblocker.skyblock.end; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; -import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; -import net.minecraft.client.MinecraftClient; import net.minecraft.util.math.BlockPos; import java.util.ArrayList; import java.util.List; public class BeaconHighlighter { - static List pos = new ArrayList<>(); + public static List positions = new ArrayList<>(); /** * Initializes the beacon highlighting system. * `BeaconHighlighter::render` is called after translucent rendering. - * `BeaconHighlighter::update` should be called every 5 ticks. */ public static void init() { WorldRenderEvents.AFTER_TRANSLUCENT.register(BeaconHighlighter::render); - Scheduler.INSTANCE.scheduleCyclic(BeaconHighlighter::update, 5); - } - - /** - * Updates the position of the beacon. - * It checks in a 15 block radius on the X/Z axis, and a ~5 block radius on the Y axis. - * If a beacon is found, `pos` is updated to the beacon's position. - */ - - public static void update() { - var player = MinecraftClient.getInstance().player; - var world = MinecraftClient.getInstance().world; - pos.clear(); - if(player != null && world != null && - SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) { - for(int x = (player.getBlockPos().getX()-15); x { - RenderHelper.renderFilled( - context, - it, - new float[]{1.0f, 0.0f, 0.0f}, - 0.5f, - false - ); - }); + if(Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) + positions.forEach((it) -> RenderHelper.renderFilled( + context, + it, + new float[]{1.0f, 0.0f, 0.0f}, + 0.5f, + false + )); } } -- cgit From 954ccdb5ef1c0cbe658bfae43edd9cf832854ead Mon Sep 17 00:00:00 2001 From: akarahdev Date: Thu, 18 Jan 2024 15:27:27 -0500 Subject: refactor variable names --- .../mixin/ClientPlayNetworkHandlerMixin.java | 4 ++-- .../skyblocker/skyblock/end/BeaconHighlighter.java | 6 +++--- .../hysky/skyblocker/skyblock/entity/MobGlow.java | 24 +++++++++++----------- 3 files changed, 17 insertions(+), 17 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java index 15339c78..9e11e5ff 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java @@ -79,9 +79,9 @@ public abstract class ClientPlayNetworkHandlerMixin { } @Inject(method = "onBlockUpdate", at = @At("RETURN")) private void skyblocker$onBlockUpdate(BlockUpdateS2CPacket packet, CallbackInfo ci) { - BeaconHighlighter.positions.remove(packet.getPos()); + BeaconHighlighter.beaconPositions.remove(packet.getPos()); if(packet.getState().toString().contains("minecraft:beacon")) { - BeaconHighlighter.positions.add(packet.getPos()); + BeaconHighlighter.beaconPositions.add(packet.getPos()); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java index 98929e7c..667318a4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/end/BeaconHighlighter.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.List; public class BeaconHighlighter { - public static List positions = new ArrayList<>(); + public static List beaconPositions = new ArrayList<>(); /** * Initializes the beacon highlighting system. @@ -28,9 +28,9 @@ public class BeaconHighlighter { */ public static void render(WorldRenderContext context) { if(Utils.isInTheEnd() && SkyblockerConfigManager.get().slayer.endermanSlayer.highlightBeacons) - positions.forEach((it) -> RenderHelper.renderFilled( + beaconPositions.forEach((position) -> RenderHelper.renderFilled( context, - it, + position, new float[]{1.0f, 0.0f, 0.0f}, 0.5f, false diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index f7fb7a3e..4f789f7b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -71,22 +71,22 @@ public class MobGlow { if(SkyblockerConfigManager.get().slayer.endermanSlayer.highlightNukekubiHeads && entity instanceof ArmorStandEntity) { // check for items in the armor sets - for (net.minecraft.item.ItemStack it : entity.getArmorItems()) { + for (net.minecraft.item.ItemStack armorItem : entity.getArmorItems()) { // hacky way to check if an item is a player head w/o // some shenanigans - if(!it.toString().startsWith("1 player_head")) + if(!armorItem.toString().startsWith("1 player_head")) continue; - if (it.hasNbt()) { - assert it.getNbt() != null; + if (armorItem.hasNbt()) { + assert armorItem.getNbt() != null; // eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3 is texture id // for the nukekubi head, compare against it to exclusively find // armorstands that are nukekubi heads - if (it.getNbt().contains("SkullOwner")) { + if (armorItem.getNbt().contains("SkullOwner")) { // get the texture of the nukekubi head item itself and // compare it - var texture = it + var texture = armorItem .getNbt() .getCompound("SkullOwner") .getCompound("Properties") @@ -125,22 +125,22 @@ public class MobGlow { // copypaste nukekebi head logic if(entity instanceof ArmorStandEntity) { - for (net.minecraft.item.ItemStack it : entity.getArmorItems()) { + for (net.minecraft.item.ItemStack armorItem : entity.getArmorItems()) { // hacky way to check if an item is a player head w/o // some shenanigans - if(!it.toString().startsWith("1 player_head")) + if(!armorItem.toString().startsWith("1 player_head")) continue; - if (it.hasNbt()) { - assert it.getNbt() != null; + if (armorItem.hasNbt()) { + assert armorItem.getNbt() != null; // eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3 is texture id // for the nukekubi head, compare against it to exclusively find // armorstands that are nukekubi heads - if (it.getNbt().contains("SkullOwner")) { + if (armorItem.getNbt().contains("SkullOwner")) { // get the texture of the nukekebi head item itself and // compare it - var texture = it + var texture = armorItem .getNbt() .getCompound("SkullOwner") .getCompound("Properties") -- cgit From b00506f518135dd4d062a311908e4506390513db Mon Sep 17 00:00:00 2001 From: akarahdev Date: Sat, 20 Jan 2024 15:40:32 -0500 Subject: again! --- .../hysky/skyblocker/config/SkyblockerConfig.java | 1501 ++++++++++---------- .../mixin/ClientPlayNetworkHandlerMixin.java | 11 +- .../skyblocker/skyblock/end/BeaconHighlighter.java | 13 +- .../hysky/skyblocker/skyblock/entity/MobGlow.java | 245 ++-- 4 files changed, 871 insertions(+), 899 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index b8606b87..5cc0f1b8 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -17,1008 +17,997 @@ import java.util.ArrayList; import java.util.List; public class SkyblockerConfig { - @SerialEntry - public int version = 1; - - @SerialEntry - public General general = new General(); - - @SerialEntry - public Locations locations = new Locations(); - - @SerialEntry - public Slayer slayer = new Slayer(); - - @SerialEntry - public QuickNav quickNav = new QuickNav(); - - @SerialEntry - public Messages messages = new Messages(); - - @SerialEntry - public RichPresence richPresence = new RichPresence(); - - public static class QuickNav { - @SerialEntry - public boolean enableQuickNav = true; - - @SerialEntry - public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); - - @SerialEntry - public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); - - /* REGEX Explanation - * "Pets" : simple match on letters - * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" - */ - @SerialEntry - public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets"); - - /* REGEX Explanation - * "Wardrobe" : simple match on letters - * " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)" - */ - @SerialEntry - public QuickNavItem button4 = new QuickNavItem(true, - new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", - "/wardrobe"); - - @SerialEntry - public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;-2081424676,-57521078,-2073572414,158072763],Properties:{textures:[{Value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}}}"), - "Sack of Sacks", "/sacks"); - - /* REGEX Explanation - * "(?:Rift )?" : optional match on the non-capturing group "Rift " - * "Storage" : simple match on letters - * "(?: \\([12]\\/2\\))?" : optional match on the non-capturing group " (1/2)" or " (2/2)" - */ - @SerialEntry - public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), - "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); - - @SerialEntry - public QuickNavItem button7 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}"), - "none", "/hub"); - - @SerialEntry - public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), - "none", "/warp dungeon_hub"); + @SerialEntry + public int version = 1; + + @SerialEntry + public General general = new General(); + + @SerialEntry + public Locations locations = new Locations(); + + @SerialEntry + public Slayer slayer = new Slayer(); + + @SerialEntry + public QuickNav quickNav = new QuickNav(); + + @SerialEntry + public Messages messages = new Messages(); + + @SerialEntry + public RichPresence richPresence = new RichPresence(); + + public static class QuickNav { + @SerialEntry + public boolean enableQuickNav = true; + + @SerialEntry + public QuickNavItem button1 = new QuickNavItem(true, new ItemData("diamond_sword"), "Your Skills", "/skills"); + + @SerialEntry + public QuickNavItem button2 = new QuickNavItem(true, new ItemData("painting"), "Collections", "/collection"); + + /* REGEX Explanation + * "Pets" : simple match on letters + * "(?: \\(\\d+\\/\\d+\\))?" : optional match on the non-capturing group for the page in the format " ($number/$number)" + */ + @SerialEntry + public QuickNavItem button3 = new QuickNavItem(true, new ItemData("bone"), "Pets(:? \\(\\d+\\/\\d+\\))?", "/pets"); + + /* REGEX Explanation + * "Wardrobe" : simple match on letters + * " \\([12]\\/2\\)" : match on the page either " (1/2)" or " (2/2)" + */ + @SerialEntry + public QuickNavItem button4 = new QuickNavItem(true, + new ItemData("leather_chestplate", 1, "tag:{display:{color:8991416}}"), "Wardrobe \\([12]/2\\)", + "/wardrobe"); + + @SerialEntry + public QuickNavItem button5 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-2081424676,-57521078,-2073572414,158072763],Properties:{textures:[{Value:\"ewogICJ0aW1lc3RhbXAiIDogMTU5MTMxMDU4NTYwOSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBhMDc3ZTI0OGQxNDI3NzJlYTgwMDg2NGY4YzU3OGI5ZDM2ODg1YjI5ZGFmODM2YjY0YTcwNjg4MmI2ZWMxMCIKICAgIH0KICB9Cn0=\"}]}}}"), + "Sack of Sacks", "/sacks"); + + /* REGEX Explanation + * "(?:Rift )?" : optional match on the non-capturing group "Rift " + * "Storage" : simple match on letters + * "(?: \\([12]\\/2\\))?" : optional match on the non-capturing group " (1/2)" or " (2/2)" + */ + @SerialEntry + public QuickNavItem button6 = new QuickNavItem(true, new ItemData("ender_chest"), + "(?:Rift )?Storage(?: \\(1/2\\))?", "/storage"); + + @SerialEntry + public QuickNavItem button7 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-300151517,-631415889,-1193921967,-1821784279],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDdjYzY2ODc0MjNkMDU3MGQ1NTZhYzUzZTA2NzZjYjU2M2JiZGQ5NzE3Y2Q4MjY5YmRlYmVkNmY2ZDRlN2JmOCJ9fX0=\"}]}}}"), + "none", "/hub"); - @SerialEntry - public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1, - "tag:{SkullOwner:{Id:[I;-562285948,532499670,-1705302742,775653035],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjVkZjU1NTkyNjQzMGQ1ZDc1YWRlZDIxZGQ5NjE5Yjc2YzViN2NhMmM3ZjU0MDE0NDA1MjNkNTNhOGJjZmFhYiJ9fX0=\"}]}}}"), - "Visit prtl", "/visit prtl"); - - @SerialEntry - public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", - "/etable"); + @SerialEntry + public QuickNavItem button8 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;1605800870,415127827,-1236127084,15358548],Properties:{textures:[{Value:\"e3RleHR1cmVzOntTS0lOOnt1cmw6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg5MWQ1YjI3M2ZmMGJjNTBjOTYwYjJjZDg2ZWVmMWM0MGExYjk0MDMyYWU3MWU3NTQ3NWE1NjhhODI1NzQyMSJ9fX0=\"}]}}}"), + "none", "/warp dungeon_hub"); - @SerialEntry - public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); + @SerialEntry + public QuickNavItem button9 = new QuickNavItem(true, new ItemData("player_head", 1, + "tag:{SkullOwner:{Id:[I;-562285948,532499670,-1705302742,775653035],Properties:{textures:[{Value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjVkZjU1NTkyNjQzMGQ1ZDc1YWRlZDIxZGQ5NjE5Yjc2YzViN2NhMmM3ZjU0MDE0NDA1MjNkNTNhOGJjZmFhYiJ9fX0=\"}]}}}"), + "Visit prtl", "/visit prtl"); - @SerialEntry - public QuickNavItem button12 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft"); - } + @SerialEntry + public QuickNavItem button10 = new QuickNavItem(true, new ItemData("enchanting_table"), "Enchant Item", + "/etable"); - public static class QuickNavItem { - public QuickNavItem(Boolean render, ItemData itemData, String uiTitle, String clickEvent) { - this.render = render; - this.item = itemData; - this.clickEvent = clickEvent; - this.uiTitle = uiTitle; - } + @SerialEntry + public QuickNavItem button11 = new QuickNavItem(true, new ItemData("anvil"), "Anvil", "/anvil"); - @SerialEntry - public Boolean render; + @SerialEntry + public QuickNavItem button12 = new QuickNavItem(true, new ItemData("crafting_table"), "Craft Item", "/craft"); + } - @SerialEntry - public ItemData item; + public static class QuickNavItem { + public QuickNavItem(Boolean render, ItemData itemData, String uiTitle, String clickEvent) { + this.render = render; + this.item = itemData; + this.clickEvent = clickEvent; + this.uiTitle = uiTitle; + } - @SerialEntry - public String uiTitle; + @SerialEntry + public Boolean render; - @SerialEntry - public String clickEvent; - } + @SerialEntry + public ItemData item; - public static class ItemData { - public ItemData(String itemName, int count, String nbt) { - this.itemName = itemName; - this.count = count; - this.nbt = nbt; - } + @SerialEntry + public String uiTitle; - public ItemData(String itemName) { - this.itemName = itemName; - this.count = 1; - this.nbt = ""; - } + @SerialEntry + public String clickEvent; + } - @SerialEntry - public String itemName; + public static class ItemData { + public ItemData(String itemName, int count, String nbt) { + this.itemName = itemName; + this.count = count; + this.nbt = nbt; + } - @SerialEntry - public int count; + public ItemData(String itemName) { + this.itemName = itemName; + this.count = 1; + this.nbt = ""; + } - @SerialEntry - public String nbt; - } + @SerialEntry + public String itemName; - public static class General { - @SerialEntry - public boolean enableTips = true; + @SerialEntry + public int count; - @SerialEntry - public boolean acceptReparty = true; + @SerialEntry + public String nbt; + } - @SerialEntry - public boolean betterPartyFinder = true; + public static class General { + @SerialEntry + public boolean enableTips = true; - @SerialEntry - public boolean backpackPreviewWithoutShift = false; + @SerialEntry + public boolean acceptReparty = true; - @SerialEntry - public boolean compactorDeletorPreview = true; + @SerialEntry + public boolean betterPartyFinder = true; - @SerialEntry - public boolean hideEmptyTooltips = true; + @SerialEntry + public boolean backpackPreviewWithoutShift = false; - @SerialEntry - public boolean hideStatusEffectOverlay = false; - - @SerialEntry - public boolean dontStripSkinAlphaValues = true; + @SerialEntry + public boolean compactorDeletorPreview = true; - @SerialEntry - public TabHudConf tabHud = new TabHudConf(); + @SerialEntry + public boolean hideEmptyTooltips = true; - @SerialEntry - public Bars bars = new Bars(); + @SerialEntry + public boolean hideStatusEffectOverlay = false; - @SerialEntry - public Experiments experiments = new Experiments(); + @SerialEntry + public boolean dontStripSkinAlphaValues = true; - @SerialEntry - public Fishing fishing = new Fishing(); + @SerialEntry + public TabHudConf tabHud = new TabHudConf(); - @SerialEntry - public FairySouls fairySouls = new FairySouls(); + @SerialEntry + public Bars bars = new Bars(); - @SerialEntry - public MythologicalRitual mythologicalRitual = new MythologicalRitual(); + @SerialEntry + public Experiments experiments = new Experiments(); - @SerialEntry - public ItemCooldown itemCooldown = new ItemCooldown(); + @SerialEntry + public Fishing fishing = new Fishing(); - @SerialEntry - public Shortcuts shortcuts = new Shortcuts(); + @SerialEntry + public FairySouls fairySouls = new FairySouls(); - @SerialEntry - public Waypoints waypoints = new Waypoints(); + @SerialEntry + public MythologicalRitual mythologicalRitual = new MythologicalRitual(); - @SerialEntry - public QuiverWarning quiverWarning = new QuiverWarning(); + @SerialEntry + public ItemCooldown itemCooldown = new ItemCooldown(); - @SerialEntry - public ItemList itemList = new ItemList(); + @SerialEntry + public Shortcuts shortcuts = new Shortcuts(); - @SerialEntry - public ItemTooltip itemTooltip = new ItemTooltip(); + @SerialEntry + public Waypoints waypoints = new Waypoints(); - @SerialEntry - public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); + @SerialEntry + public QuiverWarning quiverWarning = new QuiverWarning(); - @SerialEntry - public WikiLookup wikiLookup = new WikiLookup(); + @SerialEntry + public ItemList itemList = new ItemList(); - @SerialEntry - public ChestValue chestValue = new ChestValue(); + @SerialEntry + public ItemTooltip itemTooltip = new ItemTooltip(); - @SerialEntry - public SpecialEffects specialEffects = new SpecialEffects(); + @SerialEntry + public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); - @SerialEntry - public Hitbox hitbox = new Hitbox(); + @SerialEntry + public WikiLookup wikiLookup = new WikiLookup(); - @SerialEntry - public TitleContainer titleContainer = new TitleContainer(); + @SerialEntry + public ChestValue chestValue = new ChestValue(); - @SerialEntry - public TeleportOverlay teleportOverlay = new TeleportOverlay(); + @SerialEntry + public SpecialEffects specialEffects = new SpecialEffects(); - @SerialEntry - public FlameOverlay flameOverlay = new FlameOverlay(); + @SerialEntry + public Hitbox hitbox = new Hitbox(); - @SerialEntry - public List lockedSlots = new ArrayList<>(); + @SerialEntry + public TitleContainer titleContainer = new TitleContainer(); - @SerialEntry - public ObjectOpenHashSet protectedItems = new ObjectOpenHashSet<>(); + @SerialEntry + public TeleportOverlay teleportOverlay = new TeleportOverlay(); - @SerialEntry - public Object2ObjectOpenHashMap customItemNames = new Object2ObjectOpenHashMap<>(); + @SerialEntry + public FlameOverlay flameOverlay = new FlameOverlay(); - @SerialEntry - public Object2IntOpenHashMap customDyeColors = new Object2IntOpenHashMap<>(); + @SerialEntry + public List lockedSlots = new ArrayList<>(); - @SerialEntry - public Object2ObjectOpenHashMap customArmorTrims = new Object2ObjectOpenHashMap<>(); - } + @SerialEntry + public ObjectOpenHashSet protectedItems = new ObjectOpenHashSet<>(); - public static class TabHudConf { - @SerialEntry - public boolean tabHudEnabled = true; + @SerialEntry + public Object2ObjectOpenHashMap customItemNames = new Object2ObjectOpenHashMap<>(); - @SerialEntry - public int tabHudScale = 100; + @SerialEntry + public Object2IntOpenHashMap customDyeColors = new Object2IntOpenHashMap<>(); - @SerialEntry - public boolean plainPlayerNames = false; + @SerialEntry + public Object2ObjectOpenHashMap customArmorTrims = new Object2ObjectOpenHashMap<>(); + } - @SerialEntry - public NameSorting nameSorting = NameSorting.DEFAULT; - } + public static class TabHudConf { + @SerialEntry + public boolean tabHudEnabled = true; - public enum NameSorting { - DEFAULT, ALPHABETICAL; + @SerialEntry + public int tabHudScale = 100; - @Override - public String toString() { - return switch (this) { - case DEFAULT -> "Default"; - case ALPHABETICAL -> "Alphabetical"; - }; - } - } + @SerialEntry + public boolean plainPlayerNames = false; - public static class Bars { - @SerialEntry - public boolean enableBars = true; + @SerialEntry + public NameSorting nameSorting = NameSorting.DEFAULT; + } - @SerialEntry - public BarPositions barPositions = new BarPositions(); - } + public enum NameSorting { + DEFAULT, ALPHABETICAL; - public static class BarPositions { - @SerialEntry - public BarPosition healthBarPosition = BarPosition.LAYER1; + @Override + public String toString() { + return switch (this) { + case DEFAULT -> "Default"; + case ALPHABETICAL -> "Alphabetical"; + }; + } + } - @SerialEntry - public BarPosition manaBarPosition = BarPosition.LAYER1; + public static class Bars { + @SerialEntry + public boolean enableBars = true; - @SerialEntry - public BarPosition defenceBarPosition = BarPosition.LAYER1; + @SerialEntry + public BarPositions barPositions = new BarPositions(); + } - @SerialEntry - public BarPosition experienceBarPosition = BarPosition.LAYER1; + public static class BarPositions { + @SerialEntry + public BarPosition healthBarPosition = BarPosition.LAYER1; - } + @SerialEntry + public BarPosition manaBarPosition = BarPosition.LAYER1; - public enum BarPosition { - LAYER1, LAYER2, RIGHT, NONE; + @SerialEntry + public BarPosition defenceBarPosition = BarPosition.LAYER1; - @Override - public String toString() { - return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name()); - } + @SerialEntry + public BarPosition experienceBarPosition = BarPosition.LAYER1; - public int toInt() { - return switch (this) { - case LAYER1 -> 0; - case LAYER2 -> 1; - case RIGHT -> 2; - case NONE -> -1; - }; - } - } + } - public static class Experiments { - @SerialEntry - public boolean enableChronomatronSolver = true; + public enum BarPosition { + LAYER1, LAYER2, RIGHT, NONE; - @SerialEntry - public boolean enableSuperpairsSolver = true; + @Override + public String toString() { + return I18n.translate("text.autoconfig.skyblocker.option.general.bars.barpositions." + name()); + } - @SerialEntry - public boolean enableUltrasequencerSolver = true; - } + public int toInt() { + return switch (this) { + case LAYER1 -> 0; + case LAYER2 -> 1; + case RIGHT -> 2; + case NONE -> -1; + }; + } + } - public static class Fishing { - @SerialEntry - public boolean enableFishingHelper = true; - } + public static class Experiments { + @SerialEntry + public boolean enableChronomatronSolver = true; - public static class FairySouls { - @SerialEntry - public boolean enableFairySoulsHelper = false; + @SerialEntry + public boolean enableSuperpairsSolver = true; - @SerialEntry - public boolean highlightFoundSouls = true; + @SerialEntry + public boolean enableUltrasequencerSolver = true; + } - @SerialEntry - public boolean highlightOnlyNearbySouls = false; - } + public static class Fishing { + @SerialEntry + public boolean enableFishingHelper = true; + } - public static class MythologicalRitual { - @SerialEntry - public boolean enableMythologicalRitualHelper = true; - } + public static class FairySouls { + @SerialEntry + public boolean enableFairySoulsHelper = false; - public static class ItemCooldown { - @SerialEntry - public boolean enableItemCooldowns = true; - } + @SerialEntry + public boolean highlightFoundSouls = true; - public static class Shortcuts { - @SerialEntry - public boolean enableShortcuts = true; - - @SerialEntry - public boolean enableCommandShortcuts = true; - - @SerialEntry - public boolean enableCommandArgShortcuts = true; - } - - public static class Waypoints { - @SerialEntry - public boolean enableWaypoints = true; - - @SerialEntry - public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; - } + @SerialEntry + public boolean highlightOnlyNearbySouls = false; + } - public static class QuiverWarning { - @SerialEntry - public boolean enableQuiverWarning = true; + public static class MythologicalRitual { + @SerialEntry + public boolean enableMythologicalRitualHelper = true; + } - @SerialEntry - public boolean enableQuiverWarningInDungeons = true; + public static class ItemCooldown { + @SerialEntry + public boolean enableItemCooldowns = true; + } - @SerialEntry - public boolean enableQuiverWarningAfterDungeon = true; - } + public static class Shortcuts { + @SerialEntry + public boolean enableShortcuts = true; + + @SerialEntry + public boolean enableCommandShortcuts = true; + + @SerialEntry + public boolean enableCommandArgShortcuts = true; + } + + public static class Waypoints { + @SerialEntry + public boolean enableWaypoints = true; + + @SerialEntry + public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; + } - public static class Hitbox { - @SerialEntry - public boolean oldFarmlandHitbox = false; + public static class QuiverWarning { + @SerialEntry + public boolean enableQuiverWarning = true; - @SerialEntry - public boolean oldLeverHitbox = false; - } - - public static class TitleContainer { - @SerialEntry - public float titleContainerScale = 100; - - @SerialEntry - public int x = 540; - - @SerialEntry - public int y = 10; - - @SerialEntry - public Direction direction = Direction.HORIZONTAL; - - @SerialEntry - public Alignment alignment = Alignment.MIDDLE; - } + @SerialEntry + public boolean enableQuiverWarningInDungeons = true; - public static class TeleportOverlay { - @SerialEntry - public boolean enableTeleportOverlays = true; + @SerialEntry + public boolean enableQuiverWarningAfterDungeon = true; + } - @SerialEntry - public boolean enableWeirdTransmission = true; + public static class Hitbox { + @SerialEntry + public boolean oldFarmlandHitbox = false; - @SerialEntry - public boolean enableInstantTransmission = true; + @SerialEntry + public boolean oldLeverHitbox = false; + } + + public static class TitleContainer { + @SerialEntry + public float titleContainerScale = 100; + + @SerialEntry + public int x = 540; + + @SerialEntry + public int y = 10; + + @SerialEntry + public Direction direction = Direction.HORIZONTAL; + + @SerialEntry + public Alignment alignment = Alignment.MIDDLE; + } - @SerialEntry - public boolean enableEtherTransmission = true; + public static class TeleportOverlay { + @SerialEntry + public boolean enableTeleportOverlays = true; - @SerialEntry - public boolean enableSinrecallTransmission = true; + @SerialEntry + public boolean enableWeirdTransmission = true; - @SerialEntry - public boolean enableWitherImpact = true; - } + @SerialEntry + public boolean enableInstantTransmission = true; - public static class FlameOverlay { - @SerialEntry - public float flameHeight = 0f; + @SerialEntry + public boolean enableEtherTransmission = true; - @SerialEntry - public float flameOpacity = 0f; - } + @SerialEntry + public boolean enableSinrecallTransmiss