aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex <8379108+Alex33856@users.noreply.github.com>2025-07-07 13:11:07 -0400
committerGitHub <noreply@github.com>2025-07-07 13:11:07 -0400
commit6af04833db55d5958b1c045321a9e9bea5a8d23b (patch)
tree8fafccb797048422c8e9d632b0d7f9bd091e5314 /src
parentad204cdf0271143f733e590bffc339520a12ad8a (diff)
downloadSkyblocker-6af04833db55d5958b1c045321a9e9bea5a8d23b.tar.gz
Skyblocker-6af04833db55d5958b1c045321a9e9bea5a8d23b.tar.bz2
Skyblocker-6af04833db55d5958b1c045321a9e9bea5a8d23b.zip
Bazaar Quick Quantities (#1354)
* Initial implementation # Conflicts: # src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java # src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java * Add clipboard button * Move to Bazaar package, call AbstractSignEditScreen#close instead of removing screen * Fix last input not being updated when using Bazaar Quick Quantity button
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java42
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java13
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarQuickQuantities.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java3
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json6
6 files changed, 130 insertions, 2 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java
index 0685d1c6..87b8a0a3 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/UIAndVisualsCategory.java
@@ -561,6 +561,48 @@ public class UIAndVisualsCategory {
.build())
.build())
+ // Bazaar Quick Quantities
+ .group(OptionGroup.createBuilder()
+ .name(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities"))
+ .collapsed(true)
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities.enabled"))
+ .description(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities.enabled.@Tooltip"))
+ .binding(defaults.uiAndVisuals.bazaarQuickQuantities.enabled,
+ () -> config.uiAndVisuals.bazaarQuickQuantities.enabled,
+ newValue -> config.uiAndVisuals.bazaarQuickQuantities.enabled = newValue)
+ .controller(ConfigUtils.createBooleanController())
+ .build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities.closeSignOnUse"))
+ .binding(defaults.uiAndVisuals.bazaarQuickQuantities.closeSignOnUse,
+ () -> config.uiAndVisuals.bazaarQuickQuantities.closeSignOnUse,
+ newValue -> config.uiAndVisuals.bazaarQuickQuantities.closeSignOnUse = newValue)
+ .controller(ConfigUtils.createBooleanController())
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities.slotQuantity", 1))
+ .binding(defaults.uiAndVisuals.bazaarQuickQuantities.slot1Quantity,
+ () -> config.uiAndVisuals.bazaarQuickQuantities.slot1Quantity,
+ newValue -> config.uiAndVisuals.bazaarQuickQuantities.slot1Quantity = newValue)
+ .controller(IntegerController.createBuilder().range(1, 71680).build())
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities.slotQuantity", 2))
+ .binding(defaults.uiAndVisuals.bazaarQuickQuantities.slot2Quantity,
+ () -> config.uiAndVisuals.bazaarQuickQuantities.slot2Quantity,
+ newValue -> config.uiAndVisuals.bazaarQuickQuantities.slot2Quantity = newValue)
+ .controller(IntegerController.createBuilder().range(1, 71680).build())
+ .build())
+ .option(Option.<Integer>createBuilder()
+ .name(Text.translatable("skyblocker.config.uiAndVisuals.bazaarQuickQuantities.slotQuantity", 3))
+ .binding(defaults.uiAndVisuals.bazaarQuickQuantities.slot3Quantity,
+ () -> config.uiAndVisuals.bazaarQuickQuantities.slot3Quantity,
+ newValue -> config.uiAndVisuals.bazaarQuickQuantities.slot3Quantity = newValue)
+ .controller(IntegerController.createBuilder().range(1, 71680).build())
+ .build())
+ .build())
+
//Input Calculator
.group(OptionGroup.createBuilder()
.name(Text.translatable("skyblocker.config.uiAndVisuals.inputCalculator"))
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java
index 96086c02..532a87af 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/UIAndVisualsConfig.java
@@ -61,6 +61,8 @@ public class UIAndVisualsConfig {
public SearchOverlay searchOverlay = new SearchOverlay();
+ public BazaarQuickQuantities bazaarQuickQuantities = new BazaarQuickQuantities();
+
public InputCalculator inputCalculator = new InputCalculator();
public FlameOverlay flameOverlay = new FlameOverlay();
@@ -320,6 +322,18 @@ public class UIAndVisualsConfig {
public List<String> auctionHistory = new ArrayList<>();
}
+ public static class BazaarQuickQuantities {
+ public boolean enabled = false;
+
+ public boolean closeSignOnUse = false;
+
+ public int slot1Quantity = 28;
+
+ public int slot2Quantity = 2240;
+
+ public int slot3Quantity = 256;
+ }
+
public static class InputCalculator {
public boolean enabled = true;
diff --git a/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java
index 33a51c7d..a7d75b9d 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/SignEditScreenMixin.java
@@ -3,12 +3,14 @@ package de.hysky.skyblocker.mixins;
import com.llamalad7.mixinextras.sugar.Local;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.bazaar.BazaarQuickQuantities;
import de.hysky.skyblocker.skyblock.calculators.SignCalculator;
import de.hysky.skyblocker.skyblock.speedPreset.SpeedPresets;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen;
+import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
@@ -35,6 +37,17 @@ public abstract class SignEditScreenMixin extends Screen {
super(title);
}
+ @Inject(method = "init", at = @At("TAIL"))
+ private void skyblocker$init(CallbackInfo ci) {
+ if (Utils.isOnSkyblock()) {
+ var config = SkyblockerConfigManager.get();
+ if (isInputSign() && messages[3].equals("to order") && config.uiAndVisuals.bazaarQuickQuantities.enabled) {
+ ButtonWidget[] buttons = BazaarQuickQuantities.getButtons(this.width, messages);
+ for (ButtonWidget button : buttons) if (button != null) addDrawableChild(button);
+ }
+ }
+ }
+
@Inject(method = "render", at = @At("HEAD"))
private void skyblocker$render(CallbackInfo ci, @Local(argsOnly = true) DrawContext context) {
if (Utils.isOnSkyblock()) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarQuickQuantities.java b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarQuickQuantities.java
new file mode 100644
index 00000000..fc952cbe
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/bazaar/BazaarQuickQuantities.java
@@ -0,0 +1,54 @@
+package de.hysky.skyblocker.skyblock.bazaar;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.config.configs.UIAndVisualsConfig;
+import de.hysky.skyblocker.skyblock.calculators.SignCalculator;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.text.MutableText;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.apache.commons.lang3.math.NumberUtils;
+
+public class BazaarQuickQuantities {
+ private static final MinecraftClient client = MinecraftClient.getInstance();
+
+ public static ButtonWidget[] getButtons(int width, String[] messages) {
+ ButtonWidget[] buttons = new ButtonWidget[4];
+ UIAndVisualsConfig.BazaarQuickQuantities config = SkyblockerConfigManager.get().uiAndVisuals.bazaarQuickQuantities;
+
+ int x = width / 2 + 50;
+ int y = 45;
+
+ buttons[0] = ButtonWidget.builder(Text.of(String.valueOf(config.slot1Quantity)),
+ button -> onButtonPressed(messages, config.slot1Quantity)).dimensions(x, y + 20, 50, 20).build();
+ buttons[1] = ButtonWidget.builder(Text.of(String.valueOf(config.slot2Quantity)),
+ button -> onButtonPressed(messages, config.slot2Quantity)).dimensions(x, y + 40, 50, 20).build();
+ buttons[2] = ButtonWidget.builder(Text.of(String.valueOf(config.slot3Quantity)),
+ button -> onButtonPressed(messages, config.slot3Quantity)).dimensions(x, y + 60, 50, 20).build();
+
+ String clipboard = client.keyboard.getClipboard();
+ if (clipboard.length() <= 5 && NumberUtils.isCreatable(clipboard)) { // Only show option if clipboard is numeric
+ MutableText text = Text.literal(clipboard);
+ text.styled(style -> style.withColor(Formatting.AQUA));
+
+ buttons[3] = ButtonWidget.builder(text,
+ button -> onButtonPressed(messages, clipboard)).dimensions(x, y + 80, 50, 20).build();
+ }
+ return buttons;
+ }
+
+ static void onButtonPressed(String[] messages, int value) {
+ onButtonPressed(messages, String.valueOf(value));
+ }
+
+ static void onButtonPressed(String[] messages, String value) {
+ messages[0] = value;
+
+ UIAndVisualsConfig.BazaarQuickQuantities config = SkyblockerConfigManager.get().uiAndVisuals.bazaarQuickQuantities;
+ if (config.closeSignOnUse && client.currentScreen != null) {
+ SignCalculator.calculate(messages[0]); // Avoid conflict on `finishEditing` with SignCalculator
+ client.currentScreen.close();
+ }
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java
index 4a43dbff..fad2f810 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/calculators/SignCalculator.java
@@ -27,14 +27,13 @@ public class SignCalculator {
calculate(message);
render(context, message, renderX, renderY);
-
- lastInput = message;
}
@VisibleForTesting
public static void calculate(String message) {
//only update output if new input
if (!message.equals(lastInput)) {
+ lastInput = message;
try {
output = Calculator.calculate(message);
} catch (Exception e) {
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 97c6c350..8ad7f78a 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -955,6 +955,12 @@
"skyblocker.config.uiAndVisuals.healthBars.emptyBarColor": "Empty Health Bar Color",
"skyblocker.config.uiAndVisuals.healthBars.emptyBarColor.@Tooltip": "Color of health bar when mob is at full hp",
+ "skyblocker.config.uiAndVisuals.bazaarQuickQuantities": "Bazaar Quick Quantities",
+ "skyblocker.config.uiAndVisuals.bazaarQuickQuantities.enabled": "Enabled",
+ "skyblocker.config.uiAndVisuals.bazaarQuickQuantities.enabled.@Tooltip": "Adds 3 buttons to quickly fill out Bazaar buy order amounts",
+ "skyblocker.config.uiAndVisuals.bazaarQuickQuantities.closeSignOnUse": "Close Sign on Use",
+ "skyblocker.config.uiAndVisuals.bazaarQuickQuantities.slotQuantity": "Slot #%s Quantity",
+
"skyblocker.config.uiAndVisuals.inputCalculator": "Input Calculator",
"skyblocker.config.uiAndVisuals.inputCalculator.enabled": "Enable Sign Calculator",
"skyblocker.config.uiAndVisuals.inputCalculator.enabled.@Tooltip": "Enables the ability for you to do calculations when inputting values such as price for the ah.\n Key:\n S = 64\n E = 160\n K = 1,000\n M = 1,000,000\n B = 1,000,000,000\n\n purse/P = current purse value",