diff options
Diffstat (limited to 'src/main/java/de/hysky/skyblocker')
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 }; } |
