From 9f4bea1c181532b827b16fc50f9e03066c05c543 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 17 Oct 2023 01:16:57 -0400 Subject: Codec-based Test --- .../java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java index 9242d47b..21583190 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java @@ -3,6 +3,9 @@ package de.hysky.skyblocker.skyblock.item; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.suggestion.SuggestionProvider; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; + import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.events.SkyblockEvents; import de.hysky.skyblocker.utils.ItemUtils; @@ -137,6 +140,11 @@ public class CustomArmorTrims { } public record ArmorTrimId(@SerialEntry Identifier material, @SerialEntry Identifier pattern) implements Pair { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Identifier.CODEC.fieldOf("material").forGetter(ArmorTrimId::material), + Identifier.CODEC.fieldOf("pattern").forGetter(ArmorTrimId::pattern) + ).apply(instance, ArmorTrimId::new)); + @Override public Identifier left() { return material(); -- cgit From 61b3fbd28b64cb103caaf19305e12164a80d6a40 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:25:33 -0400 Subject: Move bracket --- src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java index 21583190..ff9e13c9 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/CustomArmorTrims.java @@ -142,8 +142,8 @@ public class CustomArmorTrims { public record ArmorTrimId(@SerialEntry Identifier material, @SerialEntry Identifier pattern) implements Pair { public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( Identifier.CODEC.fieldOf("material").forGetter(ArmorTrimId::material), - Identifier.CODEC.fieldOf("pattern").forGetter(ArmorTrimId::pattern) - ).apply(instance, ArmorTrimId::new)); + Identifier.CODEC.fieldOf("pattern").forGetter(ArmorTrimId::pattern)) + .apply(instance, ArmorTrimId::new)); @Override public Identifier left() { -- cgit From bf10b5a1337d887886f2490927951a5f82532b3a Mon Sep 17 00:00:00 2001 From: Kevin <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 17 Oct 2023 18:15:19 -0400 Subject: Optimize drill fuel and picko durability with caching (#366) --- .../java/de/hysky/skyblocker/mixin/ItemMixin.java | 13 ++-- .../de/hysky/skyblocker/mixin/ItemStackMixin.java | 70 +++++++++++++++++----- .../java/de/hysky/skyblocker/utils/ItemUtils.java | 26 ++++---- 3 files changed, 71 insertions(+), 38 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/mixin/ItemMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ItemMixin.java index 98bea52b..6b49220b 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ItemMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ItemMixin.java @@ -1,22 +1,19 @@ package de.hysky.skyblocker.mixin; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.injection.Redirect; @Mixin(Item.class) public abstract class ItemMixin { - @WrapOperation( + @Redirect( method = {"getItemBarColor", "getItemBarStep"}, at = @At(value = "FIELD", target = "Lnet/minecraft/item/Item;maxDamage:I", opcode = Opcodes.GETFIELD) ) - private int skyblocker$handlePickoDrillBar(Item item, Operation original, ItemStack stack) { + private int skyblocker$handlePickoDrillBar(Item item, ItemStack stack) { return stack.getMaxDamage(); } } diff --git a/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java index 79a37d68..c5b2438a 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/ItemStackMixin.java @@ -4,48 +4,90 @@ package de.hysky.skyblocker.mixin; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.ItemUtils; -import de.hysky.skyblocker.utils.ItemUtils.Durability; import de.hysky.skyblocker.utils.Utils; +import dev.cbyrne.betterinject.annotations.Inject; +import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @Mixin(ItemStack.class) public abstract class ItemStackMixin { + + @Shadow + public abstract int getDamage(); + + @Shadow + public abstract void setDamage(int damage); + + @Unique + private int maxDamage; + @ModifyReturnValue(method = "getName", at = @At("RETURN")) private Text skyblocker$customItemNames(Text original) { - if (Utils.isOnSkyblock()) { + if (Utils.isOnSkyblock()) { return SkyblockerConfigManager.get().general.customItemNames.getOrDefault(ItemUtils.getItemUuid((ItemStack) (Object) this), original); } return original; } + /** + * Updates the durability of this item stack every tick when in the inventory. + */ + @Inject(method = "inventoryTick", at = @At("TAIL")) + private void skyblocker$updateDamage() { + if (!skyblocker$shouldProcess()) { + return; + } + skyblocker$getAndCacheDurability(); + } + @ModifyReturnValue(method = "getDamage", at = @At("RETURN")) private int skyblocker$handleDamage(int original) { - Durability dur = ItemUtils.getDurability((ItemStack) (Object) this); - if (dur != null) { - return dur.max() - dur.current(); + // If the durability is already calculated, the original value should be the damage + if (!skyblocker$shouldProcess() || maxDamage != 0) { + return original; } - return original; + return skyblocker$getAndCacheDurability() ? getDamage() : original; } @ModifyReturnValue(method = "getMaxDamage", at = @At("RETURN")) private int skyblocker$handleMaxDamage(int original) { - Durability dur = ItemUtils.getDurability((ItemStack) (Object) this); - if (dur != null) { - return dur.max(); + if (!skyblocker$shouldProcess()) { + return original; } - return original; + // If the max damage is already calculated, return it + if (maxDamage != 0) { + return maxDamage; + } + return skyblocker$getAndCacheDurability() ? maxDamage : original; } @ModifyReturnValue(method = "isDamageable", at = @At("RETURN")) private boolean skyblocker$handleDamageable(boolean original) { - Durability dur = ItemUtils.getDurability((ItemStack) (Object) this); - if (dur != null) { - return true; + return skyblocker$shouldProcess() || original; + } + + @Unique + private boolean skyblocker$shouldProcess() { + return Utils.isOnSkyblock() && SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel && ItemUtils.hasCustomDurability((ItemStack) (Object) this); + } + + @Unique + private boolean skyblocker$getAndCacheDurability() { + // Calculate the durability + IntIntPair durability = ItemUtils.getDurability((ItemStack) (Object) this); + // Return if calculating the durability failed + if (durability == null) { + return false; } - return original; + // Saves the calculated durability + maxDamage = durability.rightInt(); + setDamage(durability.rightInt() - durability.leftInt()); + return true; } } diff --git a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java index fa04acf8..50a9bcd1 100644 --- a/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java +++ b/src/main/java/de/hysky/skyblocker/utils/ItemUtils.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.utils; import com.mojang.brigadier.exceptions.CommandSyntaxException; -import de.hysky.skyblocker.config.SkyblockerConfigManager; +import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.client.MinecraftClient; import net.minecraft.client.item.TooltipContext; import net.minecraft.item.ItemStack; @@ -105,21 +105,18 @@ public class ItemUtils { return extraAttributes != null ? extraAttributes.getString(UUID) : ""; } - @Nullable - public static Durability getDurability(@NotNull ItemStack stack) { - if (!Utils.isOnSkyblock() || !SkyblockerConfigManager.get().locations.dwarvenMines.enableDrillFuel || stack.isEmpty()) { - return null; - } - - if (getExtraAttributesOptional(stack).filter(extraAttributes -> extraAttributes.contains("drill_fuel") || extraAttributes.getString(ItemUtils.ID).equals("PICKONIMBUS")).isEmpty()) { - return null; - } + public static boolean hasCustomDurability(@NotNull ItemStack stack) { + NbtCompound extraAttributes = getExtraAttributes(stack); + return extraAttributes != null && (extraAttributes.contains("drill_fuel") || extraAttributes.getString(ID).equals("PICKONIMBUS")); + } + @Nullable + public static IntIntPair getDurability(@NotNull ItemStack stack) { int current = 0; int max = 0; String clearFormatting; - for (String line : ItemUtils.getTooltipStrings(stack)) { + for (String line : getTooltipStrings(stack)) { clearFormatting = Formatting.strip(line); if (line.contains("Fuel: ")) { if (clearFormatting != null) { @@ -127,7 +124,7 @@ public class ItemUtils { String[] split = clear.split("/"); current = Integer.parseInt(split[0]); max = Integer.parseInt(split[1]) * 1000; - return new Durability(current, max); + return IntIntPair.of(current, max); } } else if (line.contains("uses.")) { if (clearFormatting != null) { @@ -138,7 +135,7 @@ public class ItemUtils { current = Integer.parseInt(usesString); max = 5000; } - return new Durability(current, max); + return IntIntPair.of(current, max); } } } @@ -153,7 +150,4 @@ public class ItemUtils { throw new RuntimeException(e); } } - - public record Durability(int current, int max) { - } } -- cgit From 9d8853474d3935bf6af0a86f3f374c114fb1e25a Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 3 Oct 2023 03:05:25 -0400 Subject: Fix some HUD options resetting sometimes --- .../skyblock/dungeon/DungeonMapConfigScreen.java | 18 +++++++++++++ .../skyblock/dwarven/DwarvenHudConfigScreen.java | 18 +++++++++++++ .../render/title/TitleContainerConfigScreen.java | 31 ++++++++++++++++++++++ 3 files changed, 67 insertions(+) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index 145ee2bc..d662e99a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -2,8 +2,13 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.render.RenderHelper; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionGroup; +import dev.isxander.yacl3.gui.YACLScreen; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.resource.language.I18n; import net.minecraft.text.Text; import java.awt.*; @@ -56,6 +61,19 @@ public class DungeonMapConfigScreen extends Screen { public void close() { SkyblockerConfigManager.get().locations.dungeons.mapX = hudX; SkyblockerConfigManager.get().locations.dungeons.mapY = hudY; + + if (parent instanceof YACLScreen yaclScreen) { + ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dungeons"))).findFirst().orElseThrow(); + OptionGroup group = category.groups().get(0); // Internally index 0 is the group created for all ungrouped options + + Option xOpt = group.options().stream().filter(opt -> opt.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dungeons.mapX"))).findFirst().orElseThrow(); + Option yOpt = group.options().stream().filter(opt -> opt.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dungeons.mapY"))).findFirst().orElseThrow(); + + // Refresh the value in the config with the bound value + xOpt.forgetPendingValue(); + yOpt.forgetPendingValue(); + } + SkyblockerConfigManager.save(); this.client.setScreen(parent); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index 2bb21568..10a73236 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -4,9 +4,14 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; import de.hysky.skyblocker.utils.render.RenderHelper; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionGroup; +import dev.isxander.yacl3.gui.YACLScreen; import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.resource.language.I18n; import net.minecraft.text.Text; import java.awt.*; @@ -61,6 +66,19 @@ public class DwarvenHudConfigScreen extends Screen { public void close() { SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.x = hudX; SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.y = hudY; + + if (parent instanceof YACLScreen yaclScreen) { + ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dwarvenMines"))).findFirst().orElseThrow(); + OptionGroup group = category.groups().stream().filter(grp -> grp.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud"))).findFirst().orElseThrow(); + + Option xOpt = group.options().get(4); + Option yOpt = group.options().get(5); + + // Refresh the value in the config with the bound value + xOpt.forgetPendingValue(); + yOpt.forgetPendingValue(); + } + SkyblockerConfigManager.save(); client.setScreen(parent); } diff --git a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java index 5a42eeb4..599aa9f1 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java @@ -3,8 +3,13 @@ package de.hysky.skyblocker.utils.render.title; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.render.RenderHelper; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionGroup; +import dev.isxander.yacl3.gui.YACLScreen; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.math.Vector2f; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -21,6 +26,7 @@ public class TitleContainerConfigScreen extends Screen { private float hudX = SkyblockerConfigManager.get().general.titleContainer.x; private float hudY = SkyblockerConfigManager.get().general.titleContainer.y; private final Screen parent; + private boolean changedScale, changedOrientation, changedAlignment; protected TitleContainerConfigScreen() { this(null); @@ -135,6 +141,7 @@ public class TitleContainerConfigScreen extends Screen { case MIDDLE -> SkyblockerConfig.Alignment.RIGHT; case RIGHT -> SkyblockerConfig.Alignment.LEFT; }; + changedAlignment = true; } if (keyCode == GLFW.GLFW_KEY_E) { SkyblockerConfig.Alignment current = SkyblockerConfigManager.get().general.titleContainer.alignment; @@ -143,6 +150,7 @@ public class TitleContainerConfigScreen extends Screen { case MIDDLE -> SkyblockerConfig.Alignment.LEFT; case RIGHT -> SkyblockerConfig.Alignment.MIDDLE; }; + changedAlignment = true; } if (keyCode == GLFW.GLFW_KEY_R) { SkyblockerConfig.Direction current = SkyblockerConfigManager.get().general.titleContainer.direction; @@ -150,20 +158,43 @@ public class TitleContainerConfigScreen extends Screen { case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL; case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; }; + changedOrientation = true; } if (keyCode == GLFW.GLFW_KEY_EQUAL) { SkyblockerConfigManager.get().general.titleContainer.titleContainerScale += 10; + changedScale = true; } if (keyCode == GLFW.GLFW_KEY_MINUS) { SkyblockerConfigManager.get().general.titleContainer.titleContainerScale -= 10; + changedScale = true; } return super.keyPressed(keyCode, scanCode, modifiers); } + @Override public void close() { SkyblockerConfigManager.get().general.titleContainer.x = (int) hudX; SkyblockerConfigManager.get().general.titleContainer.y = (int) hudY; + + if (parent instanceof YACLScreen yaclScreen) { + ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.category.general"))).findFirst().orElseThrow(); + OptionGroup group = category.groups().stream().filter(grp -> grp.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.general.titleContainer"))).findFirst().orElseThrow(); + + Option scaleOpt = group.options().get(0); + Option xOpt = group.options().get(1); + Option yOpt = group.options().get(2); + Option orientationOpt = group.options().get(3); + Option horizontalAlignmentOpt = group.options().get(4); + + // Refresh the value in the config with the bound value + if (changedScale) scaleOpt.forgetPendingValue(); + xOpt.forgetPendingValue(); + yOpt.forgetPendingValue(); + if (changedOrientation) orientationOpt.forgetPendingValue(); + if (changedAlignment) horizontalAlignmentOpt.forgetPendingValue(); + } + SkyblockerConfigManager.save(); this.client.setScreen(parent); } -- cgit From 4ac68ae960e9377c898e2af70089b5fbc27fd5e3 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Tue, 17 Oct 2023 19:07:57 -0400 Subject: Remove most antiquated hud config options --- .../config/categories/DungeonsCategory.java | 14 ----------- .../config/categories/DwarvenMinesCategory.java | 15 ----------- .../config/categories/GeneralCategory.java | 29 ---------------------- .../skyblock/dungeon/DungeonMapConfigScreen.java | 19 +------------- .../skyblock/dwarven/DwarvenHudConfigScreen.java | 19 +------------- .../render/title/TitleContainerConfigScreen.java | 13 +--------- 6 files changed, 3 insertions(+), 106 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index a9c0c26b..1fb30afe 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -210,20 +210,6 @@ public class DungeonsCategory { newValue -> config.locations.dungeons.mapScaling = newValue) .controller(FloatFieldControllerBuilder::create) .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mapX")) - .binding(defaults.locations.dungeons.mapX, - () -> config.locations.dungeons.mapX, - newValue -> config.locations.dungeons.mapX = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.mapY")) - .binding(defaults.locations.dungeons.mapY, - () -> config.locations.dungeons.mapY, - newValue -> config.locations.dungeons.mapY = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) .option(Option.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.starredMobGlow")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.starredMobGlow.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java index 35c91d64..719cbd79 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DwarvenMinesCategory.java @@ -7,7 +7,6 @@ import dev.isxander.yacl3.api.ConfigCategory; import dev.isxander.yacl3.api.Option; import dev.isxander.yacl3.api.OptionDescription; import dev.isxander.yacl3.api.OptionGroup; -import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; import de.hysky.skyblocker.skyblock.dwarven.DwarvenHudConfigScreen; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; @@ -74,20 +73,6 @@ public class DwarvenMinesCategory { newValue -> config.locations.dwarvenMines.dwarvenHud.enableBackground = newValue) .controller(ConfigUtils::createBooleanController) .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x")) - .binding(defaults.locations.dwarvenMines.dwarvenHud.x, - () -> config.locations.dwarvenMines.dwarvenHud.x, - newValue -> config.locations.dwarvenMines.dwarvenHud.x = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y")) - .binding(defaults.locations.dwarvenMines.dwarvenHud.y, - () -> config.locations.dwarvenMines.dwarvenHud.y, - newValue -> config.locations.dwarvenMines.dwarvenHud.y = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) .build()) .build(); } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index 6a393868..b4f61c36 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -5,7 +5,6 @@ import de.hysky.skyblocker.config.SkyblockerConfig; import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder; -import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder; import de.hysky.skyblocker.skyblock.shortcut.ShortcutsConfigScreen; import de.hysky.skyblocker.utils.render.title.TitleContainerConfigScreen; @@ -421,34 +420,6 @@ public class GeneralCategory { newValue -> config.general.titleContainer.titleContainerScale = newValue) .controller(opt -> FloatFieldControllerBuilder.create(opt).range(30f, 140f)) .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.x")) - .binding(defaults.general.titleContainer.x, - () -> config.general.titleContainer.x, - newValue -> config.general.titleContainer.x = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.y")) - .binding(defaults.general.titleContainer.y, - () -> config.general.titleContainer.y, - newValue -> config.general.titleContainer.y = newValue) - .controller(IntegerFieldControllerBuilder::create) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.direction")) - .binding(defaults.general.titleContainer.direction, - () -> config.general.titleContainer.direction, - newValue -> config.general.titleContainer.direction = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) - .option(Option.createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.alignment")) - .binding(defaults.general.titleContainer.alignment, - () -> config.general.titleContainer.alignment, - newValue -> config.general.titleContainer.alignment = newValue) - .controller(ConfigUtils::createEnumCyclingListController) - .build()) .option(ButtonOption.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.titleContainer.config")) .text(Text.translatable("text.skyblocker.open")) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index d662e99a..df5f36ce 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -2,13 +2,8 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.render.RenderHelper; -import dev.isxander.yacl3.api.ConfigCategory; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.OptionGroup; -import dev.isxander.yacl3.gui.YACLScreen; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.resource.language.I18n; import net.minecraft.text.Text; import java.awt.*; @@ -61,20 +56,8 @@ public class DungeonMapConfigScreen extends Screen { public void close() { SkyblockerConfigManager.get().locations.dungeons.mapX = hudX; SkyblockerConfigManager.get().locations.dungeons.mapY = hudY; - - if (parent instanceof YACLScreen yaclScreen) { - ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dungeons"))).findFirst().orElseThrow(); - OptionGroup group = category.groups().get(0); // Internally index 0 is the group created for all ungrouped options - - Option xOpt = group.options().stream().filter(opt -> opt.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dungeons.mapX"))).findFirst().orElseThrow(); - Option yOpt = group.options().stream().filter(opt -> opt.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dungeons.mapY"))).findFirst().orElseThrow(); - - // Refresh the value in the config with the bound value - xOpt.forgetPendingValue(); - yOpt.forgetPendingValue(); - } - SkyblockerConfigManager.save(); + this.client.setScreen(parent); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index 10a73236..9bd6bef1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -4,14 +4,9 @@ import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud.Commission; import de.hysky.skyblocker.skyblock.tabhud.widget.hud.HudCommsWidget; import de.hysky.skyblocker.utils.render.RenderHelper; -import dev.isxander.yacl3.api.ConfigCategory; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.OptionGroup; -import dev.isxander.yacl3.gui.YACLScreen; import it.unimi.dsi.fastutil.ints.IntIntPair; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.resource.language.I18n; import net.minecraft.text.Text; import java.awt.*; @@ -66,20 +61,8 @@ public class DwarvenHudConfigScreen extends Screen { public void close() { SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.x = hudX; SkyblockerConfigManager.get().locations.dwarvenMines.dwarvenHud.y = hudY; - - if (parent instanceof YACLScreen yaclScreen) { - ConfigCategory category = yaclScreen.config.categories().stream().filter(cat -> cat.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dwarvenMines"))).findFirst().orElseThrow(); - OptionGroup group = category.groups().stream().filter(grp -> grp.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud"))).findFirst().orElseThrow(); - - Option xOpt = group.options().get(4); - Option yOpt = group.options().get(5); - - // Refresh the value in the config with the bound value - xOpt.forgetPendingValue(); - yOpt.forgetPendingValue(); - } - SkyblockerConfigManager.save(); + client.setScreen(parent); } } diff --git a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java index 599aa9f1..7eca7444 100644 --- a/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java +++ b/src/main/java/de/hysky/skyblocker/utils/render/title/TitleContainerConfigScreen.java @@ -26,7 +26,7 @@ public class TitleContainerConfigScreen extends Screen { private float hudX = SkyblockerConfigManager.get().general.titleContainer.x; private float hudY = SkyblockerConfigManager.get().general.titleContainer.y; private final Screen parent; - private boolean changedScale, changedOrientation, changedAlignment; + private boolean changedScale; protected TitleContainerConfigScreen() { this(null); @@ -141,7 +141,6 @@ public class TitleContainerConfigScreen extends Screen { case MIDDLE -> SkyblockerConfig.Alignment.RIGHT; case RIGHT -> SkyblockerConfig.Alignment.LEFT; }; - changedAlignment = true; } if (keyCode == GLFW.GLFW_KEY_E) { SkyblockerConfig.Alignment current = SkyblockerConfigManager.get().general.titleContainer.alignment; @@ -150,7 +149,6 @@ public class TitleContainerConfigScreen extends Screen { case MIDDLE -> SkyblockerConfig.Alignment.LEFT; case RIGHT -> SkyblockerConfig.Alignment.MIDDLE; }; - changedAlignment = true; } if (keyCode == GLFW.GLFW_KEY_R) { SkyblockerConfig.Direction current = SkyblockerConfigManager.get().general.titleContainer.direction; @@ -158,7 +156,6 @@ public class TitleContainerConfigScreen extends Screen { case HORIZONTAL -> SkyblockerConfig.Direction.VERTICAL; case VERTICAL -> SkyblockerConfig.Direction.HORIZONTAL; }; - changedOrientation = true; } if (keyCode == GLFW.GLFW_KEY_EQUAL) { SkyblockerConfigManager.get().general.titleContainer.titleContainerScale += 10; @@ -182,17 +179,9 @@ public class TitleContainerConfigScreen extends Screen { OptionGroup group = category.groups().stream().filter(grp -> grp.name().getString().equals(I18n.translate("text.autoconfig.skyblocker.option.general.titleContainer"))).findFirst().orElseThrow(); Option scaleOpt = group.options().get(0); - Option xOpt = group.options().get(1); - Option yOpt = group.options().get(2); - Option orientationOpt = group.options().get(3); - Option horizontalAlignmentOpt = group.options().get(4); // Refresh the value in the config with the bound value if (changedScale) scaleOpt.forgetPendingValue(); - xOpt.forgetPendingValue(); - yOpt.forgetPendingValue(); - if (changedOrientation) orientationOpt.forgetPendingValue(); - if (changedAlignment) horizontalAlignmentOpt.forgetPendingValue(); } SkyblockerConfigManager.save(); -- cgit From 00340f5d7df495f7351159e9da86e74b1b5fd2a9 Mon Sep 17 00:00:00 2001 From: Kevin <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 17 Oct 2023 19:53:55 -0400 Subject: Refactor NEU Repo (#364) Add RepoParser Fix Golden Dragon stats leveling Add wiki option Fix recipe output count --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 10 +- .../compatibility/emi/SkyblockEmiRecipe.java | 2 +- .../compatibility/emi/SkyblockerEMIPlugin.java | 6 +- .../rei/SkyblockCraftingDisplayGenerator.java | 6 +- .../rei/SkyblockerREIClientPlugin.java | 4 +- .../hysky/skyblocker/config/SkyblockerConfig.java | 231 +++++++++++---------- .../config/categories/GeneralCategory.java | 22 ++ .../hysky/skyblocker/mixin/HandledScreenMixin.java | 2 +- .../de/hysky/skyblocker/skyblock/FairySouls.java | 28 +-- .../skyblock/item/CompactorDeletorPreview.java | 4 +- .../hysky/skyblocker/skyblock/item/WikiLookup.java | 30 +-- .../skyblock/itemlist/ItemListWidget.java | 10 +- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 129 ------------ .../skyblock/itemlist/ItemRepository.java | 136 ++++++++++++ .../skyblock/itemlist/ItemStackBuilder.java | 94 ++++----- .../skyblock/itemlist/SearchResultsWidget.java | 28 +-- .../skyblock/itemlist/SkyblockCraftingRecipe.java | 51 ++--- .../java/de/hysky/skyblocker/utils/NEURepo.java | 101 --------- .../de/hysky/skyblocker/utils/NEURepoManager.java | 107 ++++++++++ 19 files changed, 513 insertions(+), 488 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRegistry.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/itemlist/ItemRepository.java delete mode 100644 src/main/java/de/hysky/skyblocker/utils/NEURepo.java create mode 100644 src/main/java/de/hysky/skyblocker/utils/NEURepoManager.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 bd1cd5bd..115f90ec 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -9,7 +9,7 @@ import de.hysky.skyblocker.skyblock.item.*; import de.hysky.skyblocker.skyblock.tabhud.screenbuilder.ScreenMaster; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.quicknav.QuickNav; import de.hysky.skyblocker.skyblock.rift.TheRift; import de.hysky.skyblocker.skyblock.shortcut.Shortcuts; @@ -17,7 +17,7 @@ import de.hysky.skyblocker.skyblock.special.SpecialEffects; import de.hysky.skyblocker.skyblock.spidersden.Relics; import de.hysky.skyblocker.skyblock.tabhud.TabHud; import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr; -import de.hysky.skyblocker.utils.NEURepo; +import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.chat.ChatMessageListener; import de.hysky.skyblocker.utils.discord.DiscordRPCManager; @@ -68,12 +68,12 @@ public class SkyblockerMod implements ClientModInitializer { public void onInitializeClient() { ClientTickEvents.END_CLIENT_TICK.register(this::tick); Utils.init(); - HotbarSlotLock.init(); SkyblockerConfigManager.init(); + NEURepoManager.init(); + ItemRepository.init(); + HotbarSlotLock.init(); PriceInfoTooltip.init(); WikiLookup.init(); - ItemRegistry.init(); - NEURepo.init(); FairySouls.init(); Relics.init(); BackpackPreview.init(); diff --git a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java index 191da283..b52d6ff5 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockEmiRecipe.java @@ -16,7 +16,7 @@ public class SkyblockEmiRecipe extends EmiCraftingRecipe { private final String craftText; public SkyblockEmiRecipe(SkyblockCraftingRecipe recipe) { - super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()).comparison(Comparison.compareNbt()), Identifier.of("skyblock", ItemUtils.getItemId(recipe.getResult()).toLowerCase().replace(';', '_'))); + super(recipe.getGrid().stream().map(EmiStack::of).map(EmiIngredient.class::cast).toList(), EmiStack.of(recipe.getResult()).comparison(Comparison.compareNbt()), Identifier.of("skyblock", ItemUtils.getItemId(recipe.getResult()).toLowerCase().replace(';', '_') + "_" + recipe.getResult().getCount())); this.craftText = recipe.getCraftText(); } diff --git a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java index c6147016..6ed6a32a 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.compatibility.emi; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.utils.ItemUtils; import dev.emi.emi.api.EmiPlugin; import dev.emi.emi.api.EmiRegistry; @@ -21,9 +21,9 @@ public class SkyblockerEMIPlugin implements EmiPlugin { @Override public void register(EmiRegistry registry) { - ItemRegistry.getItemsStream().map(EmiStack::of).forEach(registry::addEmiStack); + ItemRepository.getItemsStream().map(EmiStack::of).forEach(registry::addEmiStack); registry.addCategory(SKYBLOCK); registry.addWorkstation(SKYBLOCK, EmiStack.of(Items.CRAFTING_TABLE)); - ItemRegistry.getRecipesStream().map(SkyblockEmiRecipe::new).forEach(registry::addRecipe); + ItemRepository.getRecipesStream().map(SkyblockEmiRecipe::new).forEach(registry::addRecipe); } } diff --git a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java index 60e39b79..33cee20b 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockCraftingDisplayGenerator.java @@ -1,6 +1,6 @@ package de.hysky.skyblocker.compatibility.rei; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import de.hysky.skyblocker.skyblock.itemlist.SkyblockCraftingRecipe; import de.hysky.skyblocker.utils.ItemUtils; import me.shedaniel.rei.api.client.registry.display.DynamicDisplayGenerator; @@ -19,7 +19,7 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator public Optional> getRecipeFor(EntryStack entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack inputItem = EntryStacks.of((ItemStack) entry.getValue()); - List filteredRecipes = ItemRegistry.getRecipesStream() + List filteredRecipes = ItemRepository.getRecipesStream() .filter(recipe -> { ItemStack itemStack = inputItem.getValue(); ItemStack itemStack1 = recipe.getResult(); @@ -34,7 +34,7 @@ public class SkyblockCraftingDisplayGenerator implements DynamicDisplayGenerator public Optional> getUsageFor(EntryStack entry) { if (!(entry.getValue() instanceof ItemStack)) return Optional.empty(); EntryStack inputItem = EntryStacks.of((ItemStack) entry.getValue()); - List filteredRecipes = ItemRegistry.getRecipesStream() + List filteredRecipes = ItemRepository.getRecipesStream() .filter(recipe -> { for (ItemStack item : recipe.getGrid()) { if(!ItemUtils.getItemId(item).isEmpty()) { diff --git a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java index 97651718..7ed322a0 100644 --- a/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java +++ b/src/main/java/de/hysky/skyblocker/compatibility/rei/SkyblockerREIClientPlugin.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.compatibility.rei; import de.hysky.skyblocker.SkyblockerMod; -import de.hysky.skyblocker.skyblock.itemlist.ItemRegistry; +import de.hysky.skyblocker.skyblock.itemlist.ItemRepository; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; @@ -29,6 +29,6 @@ public class SkyblockerREIClientPlugin implements REIClientPlugin { @Override public void registerEntries(EntryRegistry entryRegistry) { - entryRegistry.addEntries(ItemRegistry.getItemsStream().map(EntryStacks::of).toList()); + entryRegistry.addEntries(ItemRepository.getItemsStream().map(EntryStacks::of).toList()); } } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 189c6af7..107fe26e 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -16,7 +16,7 @@ import java.util.List; public class SkyblockerConfig { @SerialEntry public int version = 1; - + @SerialEntry public General general = new General(); @@ -117,7 +117,7 @@ public class SkyblockerConfig { @SerialEntry public String uiTitle; - + @SerialEntry public String clickEvent; } @@ -137,10 +137,10 @@ public class SkyblockerConfig { @SerialEntry public String itemName; - + @SerialEntry public int count; - + @SerialEntry public String nbt; } @@ -148,16 +148,16 @@ public class SkyblockerConfig { public static class General { @SerialEntry public boolean acceptReparty = true; - + @SerialEntry public boolean backpackPreviewWithoutShift = false; - + @SerialEntry public boolean compactorDeletorPreview = true; - + @SerialEntry public boolean hideEmptyTooltips = true; - + @SerialEntry public boolean hideStatusEffectOverlay = false; @@ -181,7 +181,7 @@ public class SkyblockerConfig { @SerialEntry public Shortcuts shortcuts = new Shortcuts(); - + @SerialEntry public QuiverWarning quiverWarning = new QuiverWarning(); @@ -193,7 +193,10 @@ public class SkyblockerConfig { @SerialEntry public ItemInfoDisplay itemInfoDisplay = new ItemInfoDisplay(); - + + @SerialEntry + public WikiLookup wikiLookup = new WikiLookup(); + @SerialEntry public SpecialEffects specialEffects = new SpecialEffects(); @@ -208,7 +211,7 @@ public class SkyblockerConfig { @SerialEntry public List lockedSlots = new ArrayList<>(); - + @SerialEntry public ObjectOpenHashSet protectedItems = new ObjectOpenHashSet<>(); @@ -228,10 +231,10 @@ public class SkyblockerConfig { @SerialEntry public int tabHudScale = 100; - + @SerialEntry public boolean plainPlayerNames = false; - + @SerialEntry public NameSorting nameSorting = NameSorting.DEFAULT; } @@ -259,13 +262,13 @@ public class SkyblockerConfig { public static class BarPositions { @SerialEntry public BarPosition healthBarPosition = BarPosition.LAYER1; - + @SerialEntry public BarPosition manaBarPosition = BarPosition.LAYER1; - + @SerialEntry public BarPosition defenceBarPosition = BarPosition.LAYER1; - + @SerialEntry public BarPosition experienceBarPosition = BarPosition.LAYER1; @@ -292,10 +295,10 @@ public class SkyblockerConfig { public static class Experiments { @SerialEntry public boolean enableChronomatronSolver = true; - + @SerialEntry public boolean enableSuperpairsSolver = true; - + @SerialEntry public boolean enableUltrasequencerSolver = true; } @@ -308,10 +311,10 @@ public class SkyblockerConfig { public static class FairySouls { @SerialEntry public boolean enableFairySoulsHelper = false; - + @SerialEntry public boolean highlightFoundSouls = true; - + @SerialEntry public boolean highlightOnlyNearbySouls = false; } @@ -324,14 +327,14 @@ public class SkyblockerConfig { public static class Shortcuts { @SerialEntry public boolean enableShortcuts = true; - + @SerialEntry public boolean enableCommandShortcuts = true; - + @SerialEntry public boolean enableCommandArgShortcuts = true; } - + public static class QuiverWarning { @SerialEntry public boolean enableQuiverWarning = true; @@ -346,7 +349,7 @@ public class SkyblockerConfig { public static class Hitbox { @SerialEntry public boolean oldFarmlandHitbox = true; - + @SerialEntry public boolean oldLeverHitbox = false; } @@ -354,16 +357,16 @@ public class SkyblockerConfig { 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; } @@ -371,19 +374,19 @@ public class SkyblockerConfig { public static class TeleportOverlay { @SerialEntry public boolean enableTeleportOverlays = true; - + @SerialEntry public boolean enableWeirdTransmission = true; - + @SerialEntry public boolean enableInstantTransmission = true; - + @SerialEntry public boolean enableEtherTransmission = true; - + @SerialEntry public boolean enableSinrecallTransmission = true; - + @SerialEntry public boolean enableWitherImpact = true; } @@ -419,10 +422,10 @@ public class SkyblockerConfig { @SerialEntry public Info info = Info.LOCATION; - + @SerialEntry public boolean cycleMode = false; - + @SerialEntry public String customMessage = "Playing Skyblock"; } @@ -444,22 +447,22 @@ public class SkyblockerConfig { public static class ItemTooltip { @SerialEntry public boolean enableNPCPrice = true; - + @SerialEntry public boolean enableMotesPrice = true; - + @SerialEntry public boolean enableAvgBIN = true; - + @SerialEntry public Average avg = Average.THREE_DAY; - + @SerialEntry public boolean enableLowestBIN = true; - + @SerialEntry public boolean enableBazaarPrice = true; - + @SerialEntry public boolean enableMuseumDate = true; } @@ -467,14 +470,22 @@ public class SkyblockerConfig { public static class ItemInfoDisplay { @SerialEntry public boolean attributeShardInfo = true; - + @SerialEntry public boolean itemRarityBackgrounds = false; @SerialEntry public float itemRarityBackgroundsOpacity = 1f; } - + + public static class WikiLookup { + @SerialEntry + public boolean enableWikiLookup = true; + + @SerialEntry + public boolean officialWiki = false; + } + public static class SpecialEffects { @SerialEntry public boolean rareDungeonDropEffects = true; @@ -492,7 +503,7 @@ public class SkyblockerConfig { @SerialEntry public Rift rift = new Rift(); - + @SerialEntry public SpidersDen spidersDen = new SpidersDen(); } @@ -500,46 +511,46 @@ public class SkyblockerConfig { public static class Dungeons { @SerialEntry public SecretWaypoints secretWaypoints = new SecretWaypoints(); - + @SerialEntry public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit(); - + @SerialEntry public boolean croesusHelper = true; - + @SerialEntry public boolean enableMap = true; - + @SerialEntry public float mapScaling = 1f; - + @SerialEntry public int mapX = 2; - + @SerialEntry public int mapY = 2; - + @SerialEntry public boolean starredMobGlow = true; - + @SerialEntry public boolean solveThreeWeirdos = true; - + @SerialEntry public boolean blazeSolver = true; @SerialEntry public boolean creeperSolver = true; - + @SerialEntry public boolean solveTrivia = true; - + @SerialEntry public boolean solveTicTacToe = true; - + @SerialEntry public LividColor lividColor = new LividColor(); - + @SerialEntry public Terminals terminals = new Terminals(); } @@ -547,72 +558,72 @@ public class SkyblockerConfig { public static class SecretWaypoints { @SerialEntry public boolean enableSecretWaypoints = true; - + @SerialEntry public boolean noInitSecretWaypoints = false; - + @SerialEntry public boolean enableEntranceWaypoints = true; - + @SerialEntry public boolean enableSuperboomWaypoints = true; - + @SerialEntry public boolean enableChestWaypoints = true; - + @SerialEntry public boolean enableItemWaypoints = true; - + @SerialEntry public boolean enableBatWaypoints = true; - + @SerialEntry public boolean enableWitherWaypoints = true; - + @SerialEntry public boolean enableLeverWaypoints = true; - + @SerialEntry public boolean enableFairySoulWaypoints = true; - + @SerialEntry public boolean enableStonkWaypoints = true; - + @SerialEntry public boolean enableDefaultWaypoints = true; } - + public static class DungeonChestProfit { @SerialEntry public boolean enableProfitCalculator = true; - + @SerialEntry public boolean includeKismet = false; - + @SerialEntry public boolean includeEssence = true; - + @SerialEntry public int neutralThreshold = 1000; - + @SerialEntry public Formatting neutralColor = Formatting.DARK_GRAY; - + @SerialEntry public Formatting profitColor = Formatting.DARK_GREEN; - + @SerialEntry public Formatting lossColor = Formatting.RED; - + @SerialEntry public Formatting incompleteColor = Formatting.BLUE; - + } public static class LividColor { @SerialEntry public boolean enableLividColor = true; - + @SerialEntry public String lividColorText = "The livid color is [color]"; } @@ -620,10 +631,10 @@ public class SkyblockerConfig { public static class Terminals { @SerialEntry public boolean solveColor = true; - + @SerialEntry public boolean solveOrder = true; - + @SerialEntry public boolean solveStartsWith = true; } @@ -631,13 +642,13 @@ public class SkyblockerConfig { public static class DwarvenMines { @SerialEntry public boolean enableDrillFuel = true; - + @SerialEntry public boolean solveFetchur = true; - + @SerialEntry public boolean solvePuzzler = true; - + @SerialEntry public DwarvenHud dwarvenHud = new DwarvenHud(); } @@ -645,16 +656,16 @@ public class SkyblockerConfig { public static class DwarvenHud { @SerialEntry public boolean enabled = true; - + @SerialEntry public DwarvenHudStyle style = DwarvenHudStyle.SIMPLE; - + @SerialEntry public boolean enableBackground = true; - + @SerialEntry public int x = 10; - + @SerialEntry public int y = 10; } @@ -675,7 +686,7 @@ public class SkyblockerConfig { public static class Barn { @SerialEntry public boolean solveHungryHiker = true; - + @SerialEntry public boolean solveTreasureHunter = true; } @@ -683,20 +694,20 @@ public class SkyblockerConfig { public static class Rift { @SerialEntry public boolean mirrorverseWaypoints = true; - + @SerialEntry public int mcGrubberStacks = 0; } - + public static class SpidersDen { @SerialEntry public Relics relics = new Relics(); } - + public static class Relics { @SerialEntry public boolean enableRelicsHelper = false; - + @SerialEntry public boolean highlightFoundRelics = true; } @@ -709,34 +720,34 @@ public class SkyblockerConfig { public static class VampireSlayer { @SerialEntry public boolean enableEffigyWaypoints = true; - + @SerialEntry public boolean compactEffigyWaypoints; - + @SerialEntry public int effigyUpdateFrequency = 5; - + @SerialEntry public boolean enableHolyIceIndicator = true; - + @SerialEntry public int holyIceIndicatorTickDelay = 10; @SerialEntry public int holyIceUpdateFrequency = 5; - + @SerialEntry public boolean enableHealingMelonIndicator = true; - + @SerialEntry public float healingMelonHealthThreshold = 4f; - + @SerialEntry public boolean enableSteakStakeIndicator = true; @SerialEntry public int steakStakeUpdateFrequency = 5; - + @SerialEntry public boolean enableManiaIndicator = true; @@ -747,34 +758,34 @@ public class SkyblockerConfig { public static class Messages { @SerialEntry public ChatFilterResult hideAbility = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideHeal = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideAOTE = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideImplosion = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideAds = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideCombo = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideAutopet = ChatFilterResult.PASS; - + @SerialEntry public ChatFilterResult hideShowOff = ChatFilterResult.PASS; - + @SerialEntry public boolean hideMana = false; } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index 6a393868..80792ab9 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -375,6 +375,28 @@ public class GeneralCategory { .build()) .build()) + //Wiki Lookup + .group(OptionGroup.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup")) + .collapsed(true) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup.@Tooltip"))) + .binding(defaults.general.wikiLookup.enableWikiLookup, + () -> config.general.wikiLookup.enableWikiLookup, + newValue -> config.general.wikiLookup.enableWikiLookup = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.officialWiki")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.wikiLookup.officialWiki.@Tooltip"))) + .binding(defaults.general.wikiLookup.officialWiki, + () -> config.general.wikiLookup.officialWiki, + newValue -> config.general.wikiLookup.officialWiki = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + //Special Effects .group(OptionGroup.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.specialEffects")) diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java index b037d45a..e65bc576 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java @@ -61,7 +61,7 @@ public abstract class HandledScreenMixin extends Screen @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { if (this.client != null && this.focusedSlot != null && keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) { - WikiLookup.openWiki(this.focusedSlot); + WikiLookup.openWiki(this.focusedSlot, client.player); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/FairySouls.java b/src/main/java/de/hysky/skyblocker/skyblock/FairySouls.java index 24465e06..b2ea2b16 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/FairySouls.java @@ -1,6 +1,5 @@ package de.hysky.skyblocker.skyblock; -import com.google.common.collect.ImmutableSet; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -9,7 +8,7 @@ import com.mojang.brigadier.CommandDispatcher; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.NEURepo; +import de.hysky.skyblocker.utils.NEURepoManager; import de.hysky.skyblocker.utils.PosUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.RenderHelper; @@ -32,6 +31,7 @@ import org.slf4j.LoggerFactory; import java.io.*; import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; @@ -64,25 +64,10 @@ public class FairySouls { } private static void loadFairySouls() { - fairySoulsLoaded = NEURepo.runAsyncAfterLoad(() -> { - try (BufferedReader reader = new BufferedReader(new FileReader(NEURepo.LOCAL_REPO_DIR.resolve("constants").resolve("fairy_souls.json").toFile()))) { - for (Map.Entry fairySoulJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { - if (fairySoulJson.getKey().equals("//") || fairySoulJson.getKey().equals("Max Souls")) { - if (fairySoulJson.getKey().equals("Max Souls")) { - maxSouls = fairySoulJson.getValue().getAsInt(); - } - continue; - } - ImmutableSet.Builder fairySoulsForLocation = ImmutableSet.builder(); - for (JsonElement fairySoul : fairySoulJson.getValue().getAsJsonArray().asList()) { - fairySoulsForLocation.add(PosUtils.parsePosString(fairySoul.getAsString())); - } - fairySouls.put(fairySoulJson.getKey(), fairySoulsForLocation.build()); - } - LOGGER.debug("[Skyblocker] Loaded fairy soul locations"); - } catch (IOException e) { - LOGGER.error("[Skyblocker] Failed to load fairy soul locations", e); - } + fairySoulsLoaded = NEURepoManager.runAsyncAfterLoad(() -> { + maxSouls = NEURepoManager.NEU_REPO.getConstants().getFairySouls().getMaxSouls(); + NEURepoManager.NEU_REPO.getConstants().getFairySouls().getSoulLocations().forEach((location, fairySoulsForLocation) -> fairySouls.put(location, fairySoulsForLocation.stream().map(coordinate -> new BlockPos(coordinate.getX(), coordinate.getY(), coordinate.getZ())).collect(Collectors.toUnmodifiableSet()))); + LOGGER.debug("[Skyblocker] Loaded {} fairy souls across {} locations", fairySouls.values().stream().mapToInt(Set::size).sum(), fairySouls.size()); try (BufferedReader reader = new BufferedReader(new FileReader(SkyblockerMod.CONFIG_DIR.resolve("found_fairy_souls.json").toFile()))) { for (Map.Entry foundFairiesForProfileJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { @@ -101,6 +86,7 @@ public class FairySouls { } catc