aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/MouseMixin.java19
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java33
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java79
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java5
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java40
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java6
10 files changed, 213 insertions, 2 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
index e334ef86..64f1bf37 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -23,6 +23,7 @@ import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud;
import de.hysky.skyblocker.skyblock.end.BeaconHighlighter;
import de.hysky.skyblocker.skyblock.end.TheEnd;
import de.hysky.skyblocker.skyblock.garden.FarmingHud;
+import de.hysky.skyblocker.skyblock.garden.LowerSensitivity;
import de.hysky.skyblocker.skyblock.garden.VisitorHelper;
import de.hysky.skyblocker.skyblock.item.*;
import de.hysky.skyblocker.skyblock.item.tooltip.BackpackPreview;
@@ -113,6 +114,7 @@ public class SkyblockerMod implements ClientModInitializer {
DwarvenHud.init();
CrystalsHud.init();
FarmingHud.init();
+ LowerSensitivity.init();
CrystalsLocationsManager.init();
ChatMessageListener.init();
Shortcuts.init();
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
index 2c260e3f..29678683 100644
--- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
@@ -178,6 +178,9 @@ public class SkyblockerConfig {
public boolean dungeonQuality = true;
@SerialEntry
+ public boolean enableNewYearCakesHelper = true;
+
+ @SerialEntry
public TabHudConf tabHud = new TabHudConf();
@SerialEntry
@@ -1094,6 +1097,12 @@ public class SkyblockerConfig {
@SerialEntry
public boolean visitorHelper = true;
+
+ @SerialEntry
+ public boolean lockMouseTool = false;
+
+ @SerialEntry
+ public boolean lockMouseGroundOnly = false;
}
public static class FarmingHud {
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 23ce7bb6..fe73a6a7 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
@@ -86,6 +86,14 @@ public class GeneralCategory {
newValue -> config.general.dungeonQuality = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.enableNewYearCakesHelper"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.enableNewYearCakesHelper.@Tooltip")))
+ .binding(defaults.general.enableNewYearCakesHelper,
+ () -> config.general.enableNewYearCakesHelper,
+ newValue -> config.general.enableNewYearCakesHelper = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
//Tab Hud
.group(OptionGroup.createBuilder()
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java
index 86ed3f6c..67512b78 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java
@@ -166,6 +166,20 @@ public class LocationsCategory {
newValue -> config.locations.garden.visitorHelper = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.lockMouseTool"))
+ .binding(defaults.locations.garden.lockMouseTool,
+ () -> config.locations.garden.lockMouseTool,
+ newValue -> config.locations.garden.lockMouseTool = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.locations.garden.lockMouseGround"))
+ .binding(defaults.locations.garden.lockMouseGroundOnly,
+ () -> config.locations.garden.lockMouseGroundOnly,
+ newValue -> config.locations.garden.lockMouseGroundOnly = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
.build())
.build();
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/MouseMixin.java b/src/main/java/de/hysky/skyblocker/mixin/MouseMixin.java
new file mode 100644
index 00000000..33c3f487
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/mixin/MouseMixin.java
@@ -0,0 +1,19 @@
+package de.hysky.skyblocker.mixin;
+
+import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
+import de.hysky.skyblocker.skyblock.garden.LowerSensitivity;
+import net.minecraft.client.Mouse;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+
+@Mixin(Mouse.class)
+public class MouseMixin {
+
+ @ModifyExpressionValue(method = "updateMouse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/SimpleOption;getValue()Ljava/lang/Object;", ordinal = 0))
+ public Object skyblocker$gardenMouseLock(Object original) {
+ if (LowerSensitivity.isSensitivityLowered())
+ return -1 / 3d;
+ else return original;
+
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java
new file mode 100644
index 00000000..e0d67fbe
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakeBagHelper.java
@@ -0,0 +1,33 @@
+package de.hysky.skyblocker.skyblock.accessories.newyearcakes;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.item.ItemStack;
+import net.minecraft.screen.slot.Slot;
+
+import java.util.List;
+import java.util.Map;
+
+public class NewYearCakeBagHelper extends ContainerSolver {
+ public NewYearCakeBagHelper() {
+ super("New Year Cake Bag");
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return SkyblockerConfigManager.get().general.enableNewYearCakesHelper;
+ }
+
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.player != null) {
+ for (Slot slot : client.player.currentScreenHandler.slots) {
+ NewYearCakesHelper.INSTANCE.addCake(NewYearCakesHelper.getCakeYear(slot.getStack()));
+ }
+ }
+ return List.of();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java
new file mode 100644
index 00000000..b722849b
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/accessories/newyearcakes/NewYearCakesHelper.java
@@ -0,0 +1,79 @@
+package de.hysky.skyblocker.skyblock.accessories.newyearcakes;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.Utils;
+import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
+import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
+import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
+import it.unimi.dsi.fastutil.ints.IntSet;
+import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.minecraft.item.ItemStack;
+import net.minecraft.text.Text;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class NewYearCakesHelper extends ContainerSolver {
+ private static final Logger LOGGER = LoggerFactory.getLogger(NewYearCakeBagHelper.class);
+ private static final Pattern NEW_YEAR_CAKE = Pattern.compile("New Year Cake \\(Year (?<year>\\d+)\\)");
+ private static final Pattern NEW_YEAR_CAKE_PURCHASE = Pattern.compile("You purchased New Year Cake \\(Year (?<year>\\d+)\\) for .+ coins!");
+ private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US);
+ public static final NewYearCakesHelper INSTANCE = new NewYearCakesHelper();
+ private final Map<String, IntSet> cakes = new HashMap<>();
+
+ private NewYearCakesHelper() {
+ super("Auctions: \".*\"");
+ ClientReceiveMessageEvents.GAME.register(this::onChatMessage);
+ }
+
+ public static int getCakeYear(ItemStack stack) {
+ return getCakeYear(NEW_YEAR_CAKE, stack.getName().getString());
+ }
+
+ public static int getCakeYear(Pattern pattern, String name) {
+ Matcher matcher = pattern.matcher(name);
+ if (matcher.matches()) {
+ try {
+ return NUMBER_FORMAT.parse(matcher.group("year")).intValue();
+ } catch (ParseException e) {
+ LOGGER.info("Failed to parse year from New Year Cake: " + name, e);
+ }
+ }
+ return -1;
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return SkyblockerConfigManager.get().general.enableNewYearCakesHelper;
+ }
+
+ public boolean addCake(int year) {
+ if (year < 0) return false;
+ return cakes.computeIfAbsent(Utils.getProfile(), _profile -> new IntOpenHashSet()).add(year);
+ }
+
+ private void onChatMessage(Text message, boolean overlay) {
+ if (isEnabled()) {
+ addCake(getCakeYear(NEW_YEAR_CAKE_PURCHASE, message.getString()));
+ }
+ }
+
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ String profile = Utils.getProfile();
+ if (cakes.isEmpty() || !cakes.containsKey(profile) || cakes.containsKey(profile) && cakes.get(profile).isEmpty()) return List.of();
+ List<ColorHighlight> highlights = new ArrayList<>();
+ for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ int year = getCakeYear(entry.getValue());
+ if (year >= 0 && cakes.containsKey(profile)) {
+ highlights.add(cakes.get(profile).contains(year) ? ColorHighlight.red(entry.getKey()) : ColorHighlight.green(entry.getKey()));
+ }
+ }
+ return highlights;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
index 72efb207..febbe825 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/FarmingHudWidget.java
@@ -18,7 +18,7 @@ import java.util.Map;
public class FarmingHudWidget extends Widget {
private static final MutableText TITLE = Text.literal("Farming").formatted(Formatting.YELLOW, Formatting.BOLD);
- private static final Map<String, ItemStack> FARMING_TOOLS = Map.ofEntries(
+ public static final Map<String, ItemStack> FARMING_TOOLS = Map.ofEntries(
Map.entry("THEORETICAL_HOE_WHEAT_1", Ico.WHEAT),
Map.entry("THEORETICAL_HOE_WHEAT_2", Ico.WHEAT),
Map.entry("THEORETICAL_HOE_WHEAT_3", Ico.WHEAT),
@@ -65,5 +65,8 @@ public class FarmingHudWidget extends Widget {
double pitch = cameraEntity == null ? 0.0d : cameraEntity.getPitch();
addComponent(new PlainTextComponent(Text.literal("Yaw: " + String.format("%.3f", MathHelper.wrapDegrees(yaw))).formatted(Formatting.YELLOW)));
addComponent(new PlainTextComponent(Text.literal("Pitch: " + String.format("%.3f", MathHelper.wrapDegrees(pitch))).formatted(Formatting.YELLOW)));
+ if (LowerSensitivity.isSensitivityLowered()) {
+ addComponent(new PlainTextComponent(Text.translatable("skyblocker.garden.hud.mouseLocked").formatted(Formatting.ITALIC)));
+ }
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java
new file mode 100644
index 00000000..edea50de
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/LowerSensitivity.java
@@ -0,0 +1,40 @@
+package de.hysky.skyblocker.skyblock.garden;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.Location;
+import de.hysky.skyblocker.utils.Utils;
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.item.ItemStack;
+
+public class LowerSensitivity {
+
+ private static boolean sensitivityLowered = false;
+
+ public static void init() {
+ ClientTickEvents.END_WORLD_TICK.register(world -> {
+ if (!Utils.isOnSkyblock() || Utils.getLocation() != Location.GARDEN || MinecraftClient.getInstance().player == null) {
+ if (sensitivityLowered) lowerSensitivity(false);
+ return;
+ }
+ if (SkyblockerConfigManager.get().locations.garden.lockMouseTool) {
+ ItemStack mainHandStack = MinecraftClient.getInstance().player.getMainHandStack();
+ String itemId = ItemUtils.getItemId(mainHandStack);
+ boolean shouldLockMouse = FarmingHudWidget.FARMING_TOOLS.containsKey(itemId) && (!SkyblockerConfigManager.get().locations.garden.lockMouseGroundOnly || MinecraftClient.getInstance().player.isOnGround());
+ if (shouldLockMouse && !sensitivityLowered) lowerSensitivity(true);
+ else if (!shouldLockMouse && sensitivityLowered) lowerSensitivity(false);
+
+ }
+ });
+ }
+
+ public static void lowerSensitivity(boolean lowerSensitivity) {
+ if (sensitivityLowered == lowerSensitivity) return;
+ sensitivityLowered = lowerSensitivity;
+ }
+
+ public static boolean isSensitivityLowered() {
+ return sensitivityLowered;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
index 460f34dd..d506ffe1 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
@@ -2,6 +2,8 @@ package de.hysky.skyblocker.utils.render.gui;
import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.mixin.accessor.HandledScreenAccessor;
+import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakeBagHelper;
+import de.hysky.skyblocker.skyblock.accessories.newyearcakes.NewYearCakesHelper;
import de.hysky.skyblocker.skyblock.dungeon.CroesusHelper;
import de.hysky.skyblocker.skyblock.dungeon.CroesusProfit;
import de.hysky.skyblocker.skyblock.dungeon.terminal.ColorTerminal;
@@ -44,7 +46,9 @@ public class ContainerSolverManager {
new CroesusProfit(),
new ChronomatronSolver(),
new SuperpairsSolver(),
- UltrasequencerSolver.INSTANCE
+ UltrasequencerSolver.INSTANCE,
+ new NewYearCakeBagHelper(),
+ NewYearCakesHelper.INSTANCE
};
}