aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-05-10 21:00:00 +0300
committerRime <81419447+Emirlol@users.noreply.github.com>2024-05-23 13:31:48 +0300
commit05a18be31a137148bcd446654c550eb2d713990c (patch)
treee87ab887bc7a3b1388662e93df924b3430d278ce /src/main/java
parent9fea533e30fdb5c825a72d2cf560958187764c6f (diff)
downloadSkyblocker-05a18be31a137148bcd446654c550eb2d713990c.tar.gz
Skyblocker-05a18be31a137148bcd446654c550eb2d713990c.tar.bz2
Skyblocker-05a18be31a137148bcd446654c550eb2d713990c.zip
Add configs and minor code refactor
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java42
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java18
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java72
4 files changed, 107 insertions, 33 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
index 1528f853..d9824a23 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
@@ -2,11 +2,14 @@ package de.hysky.skyblocker.config.categories;
import de.hysky.skyblocker.config.ConfigUtils;
import de.hysky.skyblocker.config.SkyblockerConfig;
+import de.hysky.skyblocker.utils.waypoint.Waypoint;
import dev.isxander.yacl3.api.*;
import dev.isxander.yacl3.api.ConfigCategory;
import dev.isxander.yacl3.api.Option;
import dev.isxander.yacl3.api.OptionDescription;
import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder;
+import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
+import dev.isxander.yacl3.config.v2.api.autogen.TickBox;
import net.minecraft.text.Text;
public class HelperCategory {
@@ -137,6 +140,45 @@ public class HelperCategory {
.build())
.build())
+ //Chocolate Factory
+ .group(OptionGroup.createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.chocolateFactory"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.chocolateFactory.enableChocolateFactoryHelper"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.chocolateFactory.enableChocolateFactoryHelper.@Tooltip")))
+ .binding(defaults.helpers.chocolateFactory.enableChocolateFactoryHelper,
+ () -> config.helpers.chocolateFactory.enableChocolateFactoryHelper,
+ newValue -> config.helpers.chocolateFactory.enableChocolateFactoryHelper = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.chocolateFactory.enableEggFinder"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.chocolateFactory.enableEggFinder.@Tooltip")))
+ .binding(defaults.helpers.chocolateFactory.enableEggFinder,
+ () -> config.helpers.chocolateFactory.enableEggFinder,
+ newValue -> config.helpers.chocolateFactory.enableEggFinder = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.chocolateFactory.sendEggFoundMessages"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.chocolateFactory.sendEggFoundMessages.@Tooltip")))
+ .binding(defaults.helpers.chocolateFactory.sendEggFoundMessages,
+ () -> config.helpers.chocolateFactory.sendEggFoundMessages,
+ newValue -> config.helpers.chocolateFactory.sendEggFoundMessages = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Waypoint.Type>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.chocolateFactory.waypointType"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.chocolateFactory.waypointType.@Tooltip")))
+ .binding(defaults.helpers.chocolateFactory.waypointType,
+ () -> config.helpers.chocolateFactory.waypointType,
+ newValue -> config.helpers.chocolateFactory.waypointType = newValue)
+ .controller(ConfigUtils::createEnumCyclingListController)
+ .build())
+
+ .build())
+
.build();
}
}
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
index 2abff6ac..8721e35c 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.config.configs;
+import de.hysky.skyblocker.utils.waypoint.Waypoint;
import dev.isxander.yacl3.config.v2.api.SerialEntry;
public class HelperConfig {
@@ -19,6 +20,9 @@ public class HelperConfig {
@SerialEntry
public FairySouls fairySouls = new FairySouls();
+ @SerialEntry
+ public ChocolateFactory chocolateFactory = new ChocolateFactory();
+
public static class MythologicalRitual {
@SerialEntry
public boolean enableMythologicalRitualHelper = true;
@@ -62,4 +66,18 @@ public class HelperConfig {
@SerialEntry
public boolean highlightOnlyNearbySouls = false;
}
+
+ public static class ChocolateFactory {
+ @SerialEntry
+ public boolean enableChocolateFactoryHelper = true;
+
+ @SerialEntry
+ public boolean enableEggFinder = true;
+
+ @SerialEntry
+ public boolean sendEggFoundMessages = true;
+
+ @SerialEntry
+ public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT;
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
index cc5ae471..a59a5147 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.skyblock.chocolatefactory;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.experiment.ExperimentSolver;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
@@ -33,7 +34,7 @@ public class ChocolateFactorySolver extends ContainerSolver {
@Override
protected boolean isEnabled() {
- return true; //Todo: add a config option and check if it's enabled from there
+ return SkyblockerConfigManager.get().helpers.chocolateFactory.enableChocolateFactoryHelper;
}
@Override
@@ -41,7 +42,6 @@ public class ChocolateFactorySolver extends ContainerSolver {
markHighlightsDirty(); //Recalculate highlights when the screen is opened, which happens when upgrading rabbits
}
-
//Todo: Handle unemployed rabbits as well. They have a different lore format.
@Override
protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
@@ -70,8 +70,8 @@ public class ChocolateFactorySolver extends ContainerSolver {
.stream()
.map(Text::getString)
.collect(Collectors.joining(" ")); //Join all lore lines into one string for ease of regexing
- //The space is so that the regex pattern still matches even if the word is split into 2 lines,
- //as normally the line end and line start contain no spaces and would not match the pattern when concatenated
+// The space is so that the regex pattern still matches even if the word is split into 2 lines,
+// as normally the line end and line start contain no spaces and would not match the pattern when concatenated
}
/**
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java
index d5e1a540..7f8e9879 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinder.java
@@ -1,8 +1,10 @@
package de.hysky.skyblocker.skyblock.chocolatefactory;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.utils.ColorUtils;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.waypoint.Waypoint;
+import it.unimi.dsi.fastutil.objects.ObjectImmutableList;
import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
@@ -21,29 +23,27 @@ import org.slf4j.LoggerFactory;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder.EggType.BREAKFAST;
+import static de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder.EggType.DINNER;
+import static de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder.EggType.LUNCH;
+
public class EggFinder {
private static final Pattern eggFoundPattern = Pattern.compile("^(?:HOPPITY'S HUNT You found a Chocolate|You have already collected this Chocolate) (Breakfast|Lunch|Dinner)");
private static final Pattern newEggPattern = Pattern.compile("^HOPPITY'S HUNT A Chocolate (Breakfast|Lunch|Dinner) Egg has appeared!$");
- private static final MutableObject<Egg> breakfastEgg = new MutableObject<>(null);
- private static final MutableObject<Egg> lunchEgg = new MutableObject<>(null);
- private static final MutableObject<Egg> dinnerEgg = new MutableObject<>(null);
private static final Logger logger = LoggerFactory.getLogger("Skyblocker Egg Finder");
private EggFinder() {
}
public static void init() {
- ClientPlayConnectionEvents.JOIN.register((ignored, ignored2, ignored3) -> {
- breakfastEgg.setValue(null);
- lunchEgg.setValue(null);
- dinnerEgg.setValue(null);
- });
+ ClientPlayConnectionEvents.JOIN.register((ignored, ignored2, ignored3) -> clearEggs());
ClientReceiveMessageEvents.GAME.register(EggFinder::onChatMessage);
WorldRenderEvents.AFTER_TRANSLUCENT.register(EggFinder::renderWaypoints);
}
public static void checkIfEgg(Entity entity) {
- if (breakfastEgg.getValue() != null && dinnerEgg.getValue() != null && lunchEgg.getValue() != null) return; //Don't check for eggs if we already found all of them
+ if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return;
+ if (BREAKFAST.egg.getValue() != null && DINNER.egg.getValue() != null && LUNCH.egg.getValue() != null) return; //Don't check for eggs if we already found all of them
if (!(entity instanceof ArmorStandEntity armorStand) || armorStand.hasCustomName() || !armorStand.isInvisible() || !armorStand.shouldHideBasePlate()) return;
for (ItemStack itemStack : armorStand.getArmorItems()) {
try {
@@ -56,13 +56,11 @@ public class EggFinder {
.next()
.value();
- //Don't turn this into a switch statement, it's unreadable
- if (texture.equals("ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjY3MzE0OSwKICAicHJvZmlsZUlkIiA6ICJiN2I4ZTlhZjEwZGE0NjFmOTY2YTQxM2RmOWJiM2U4OCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbmFiYW5hbmFZZzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTQ5MzMzZDg1YjhhMzE1ZDAzMzZlYjJkZjM3ZDhhNzE0Y2EyNGM1MWI4YzYwNzRmMWI1YjkyN2RlYjUxNmMyNCIKICAgIH0KICB9Cn0")) {
- handleFoundEgg(armorStand, EggType.BREAKFAST);
- } else if (texture.equals("ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjY0OTcwMSwKICAicHJvZmlsZUlkIiA6ICI3NGEwMzQxNWY1OTI0ZTA4YjMyMGM2MmU1NGE3ZjJhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZXp6aXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTVlMzYxNjU4MTlmZDI4NTBmOTg1NTJlZGNkNzYzZmY5ODYzMTMxMTkyODNjMTI2YWNlMGM0Y2M0OTVlNzZhOCIKICAgIH0KICB9Cn0")) {
- handleFoundEgg(armorStand, EggType.DINNER);
- } else if (texture.equals("ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjU2ODExMiwKICAicHJvZmlsZUlkIiA6ICI3NzUwYzFhNTM5M2Q0ZWQ0Yjc2NmQ4ZGUwOWY4MjU0NiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZWVkcmVsIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdhZTZkMmQzMWQ4MTY3YmNhZjk1MjkzYjY4YTRhY2Q4NzJkNjZlNzUxZGI1YTM0ZjJjYmM2NzY2YTAzNTZkMGEiCiAgICB9CiAgfQp9")) {
- handleFoundEgg(armorStand, EggType.LUNCH);
+ for (EggType type : EggType.entries) {
+ if (texture.equals(type.texture)) {
+ handleFoundEgg(armorStand, type);
+ return;
+ }
}
}
} catch (Exception e) {
@@ -71,26 +69,37 @@ public class EggFinder {
}
}
+ private static void clearEggs() {
+ if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return;
+ for (EggType type : EggType.entries) {
+ type.egg.setValue(null);
+ }
+ }
+
private static void handleFoundEgg(ArmorStandEntity entity, EggType eggType) {
- eggType.egg.setValue(new Egg(entity, new Waypoint(entity.getBlockPos().up(2), () -> Waypoint.Type.WAYPOINT, ColorUtils.getFloatComponents(eggType.color))));
+ eggType.egg.setValue(new Egg(entity, new Waypoint(entity.getBlockPos().up(2), SkyblockerConfigManager.get().helpers.chocolateFactory.waypointType, ColorUtils.getFloatComponents(eggType.color))));
+
+ if (!SkyblockerConfigManager.get().helpers.chocolateFactory.sendEggFoundMessages) return;
MinecraftClient.getInstance().player.sendMessage(Constants.PREFIX.get().append("Found a ").append(Text.literal("Chocolate " + eggType + " Egg").withColor(eggType.color)).append(" at " + entity.getBlockPos().up(2).toShortString() + "!"));
}
private static void renderWaypoints(WorldRenderContext context) {
- if (breakfastEgg.getValue() != null && breakfastEgg.getValue().waypoint.shouldRender()) breakfastEgg.getValue().waypoint.render(context);
- if (lunchEgg.getValue() != null && lunchEgg.getValue().waypoint.shouldRender()) lunchEgg.getValue().waypoint.render(context);
- if (dinnerEgg.getValue() != null && dinnerEgg.getValue().waypoint.shouldRender()) dinnerEgg.getValue().waypoint.render(context);
+ if (!SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return;
+ for (EggType type : EggType.entries) {
+ Egg egg = type.egg.getValue();
+ if (egg != null && egg.waypoint.shouldRender()) egg.waypoint.render(context);
+ }
}
private static void onChatMessage(Text text, boolean overlay) {
- if (overlay) return;
+ if (overlay || !SkyblockerConfigManager.get().helpers.chocolateFactory.enableEggFinder) return;
Matcher matcher = eggFoundPattern.matcher(text.getString());
if (matcher.matches()) {
try {
Egg egg = EggType.valueOf(matcher.group(1).toUpperCase()).egg.getValue();
if (egg != null) egg.waypoint.setFound();
} catch (IllegalArgumentException e) {
- logger.error("Failed to find egg type for egg found message. Tried to match against: " + matcher.group(0), e);
+ logger.error("[Skyblocker Egg Finder] Failed to find egg type for egg found message. Tried to match against: " + matcher.group(0), e);
}
}
@@ -100,24 +109,29 @@ public class EggFinder {
try {
EggType.valueOf(matcher.group(1).toUpperCase()).egg.setValue(null);
} catch (IllegalArgumentException e) {
- logger.error("Failed to find egg type for egg spawn message. Tried to match against: " + matcher.group(0), e);
+ logger.error("[Skyblocker Egg Finder] Failed to find egg type for egg spawn message. Tried to match against: " + matcher.group(0), e);
}
}
}
- private record Egg(ArmorStandEntity entity, Waypoint waypoint) { }
+ record Egg(ArmorStandEntity entity, Waypoint waypoint) { }
- private enum EggType {
- LUNCH(lunchEgg, 0x5555FF),
- DINNER(dinnerEgg, 0x55FF55),
- BREAKFAST(breakfastEgg, 0xFFAA00);
+ enum EggType {
+ LUNCH(new MutableObject<>(), 0x5555FF, "ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjY3MzE0OSwKICAicHJvZmlsZUlkIiA6ICJiN2I4ZTlhZjEwZGE0NjFmOTY2YTQxM2RmOWJiM2U4OCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbmFiYW5hbmFZZzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTQ5MzMzZDg1YjhhMzE1ZDAzMzZlYjJkZjM3ZDhhNzE0Y2EyNGM1MWI4YzYwNzRmMWI1YjkyN2RlYjUxNmMyNCIKICAgIH0KICB9Cn0"),
+ DINNER(new MutableObject<>(), 0x55FF55, "ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjY0OTcwMSwKICAicHJvZmlsZUlkIiA6ICI3NGEwMzQxNWY1OTI0ZTA4YjMyMGM2MmU1NGE3ZjJhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZXp6aXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTVlMzYxNjU4MTlmZDI4NTBmOTg1NTJlZGNkNzYzZmY5ODYzMTMxMTkyODNjMTI2YWNlMGM0Y2M0OTVlNzZhOCIKICAgIH0KICB9Cn0"),
+ BREAKFAST(new MutableObject<>(), 0xFFAA00, "ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjU2ODExMiwKICAicHJvZmlsZUlkIiA6ICI3NzUwYzFhNTM5M2Q0ZWQ0Yjc2NmQ4ZGUwOWY4MjU0NiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZWVkcmVsIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdhZTZkMmQzMWQ4MTY3YmNhZjk1MjkzYjY4YTRhY2Q4NzJkNjZlNzUxZGI1YTM0ZjJjYmM2NzY2YTAzNTZkMGEiCiAgICB9CiAgfQp9");
public final MutableObject<Egg> egg;
public final int color;
+ public final String texture;
+
+ //This is to not create an array each time we iterate over the values
+ public static final ObjectImmutableList<EggType> entries = ObjectImmutableList.of(BREAKFAST, DINNER);
- EggType(MutableObject<Egg> egg, int color) {
+ EggType(MutableObject<Egg> egg, int color, String texture) {
this.egg = egg;
this.color = color;
+ this.texture = texture;
}
@Override