aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-11-16 22:35:49 +0300
committerGitHub <noreply@github.com>2024-11-16 14:35:49 -0500
commit8d0af6411e69893da5f561bf2397c7788de22c9d (patch)
tree3cdb44b4ea1e9ec6fd30d95b677ec4b8d11038a0 /src/main/java
parent27ed4facb050af32fb328393dfc840386120d891 (diff)
downloadSkyblocker-8d0af6411e69893da5f561bf2397c7788de22c9d.tar.gz
Skyblocker-8d0af6411e69893da5f561bf2397c7788de22c9d.tar.bz2
Skyblocker-8d0af6411e69893da5f561bf2397c7788de22c9d.zip
Add more slot text adders (#1025)
* Add EvolvingItemAdder * Add NewYearCakeAdder This is untested due to an ongoing maintenance of skyblock * Add NewYearCakeAdder to the adders array in SlotTextManager * Fix NewYearCakeAdder and change its color as well * Add wardrobe slot text
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java22
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java64
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/NewYearCakeAdder.java23
4 files changed, 109 insertions, 6 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java b/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java
index 795acf1c..3aa5ffc7 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/WardrobeKeybinds.java
@@ -2,7 +2,8 @@ package de.hysky.skyblocker.skyblock;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.utils.container.RegexContainerMatcher;
+import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder;
+import de.hysky.skyblocker.skyblock.item.slottext.SlotText;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.fabricmc.fabric.api.client.screen.v1.ScreenKeyboardEvents;
import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents;
@@ -11,14 +12,18 @@ import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
+import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.lwjgl.glfw.GLFW;
+import java.util.List;
import java.util.function.Predicate;
-@SuppressWarnings("unused")
-public class WardrobeKeybinds extends RegexContainerMatcher {
- private static final WardrobeKeybinds INSTANCE = new WardrobeKeybinds();
+public class WardrobeKeybinds extends SimpleSlotTextAdder {
+ public static final WardrobeKeybinds INSTANCE = new WardrobeKeybinds();
public WardrobeKeybinds() {
super("Wardrobe \\([12]/2\\)");
@@ -51,7 +56,7 @@ public class WardrobeKeybinds extends RegexContainerMatcher {
i += 9 * 4;
ItemStack itemStack = handledScreen.getScreenHandler().getSlot(i).getStack();
// Check if the item in the slot is a swap/unequip item before going further.
- // This prevents usage when the inventory hasn't loaded fully or when the slot pressed is locked (which would be meaningless to click)
+ // This prevents usage when the inventory hasn't loaded fully or when the slot pressed is locked or when the slot has no armor (which would be meaningless to click)
if (!itemStack.isOf(Items.PINK_DYE) && !itemStack.isOf(Items.LIME_DYE)) return true;
assert client.interactionManager != null;
client.interactionManager.clickSlot(handledScreen.getScreenHandler().syncId, i, GLFW.GLFW_MOUSE_BUTTON_1, SlotActionType.PICKUP, client.player);
@@ -59,6 +64,13 @@ public class WardrobeKeybinds extends RegexContainerMatcher {
}
@Override
+ public @NotNull List<SlotText> getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) {
+ if (!stack.isOf(Items.PINK_DYE) && !stack.isOf(Items.LIME_DYE)) return List.of();
+ if (!(slotId >= 36 && slotId <= 44)) return List.of();
+ return SlotText.bottomLeftList(Text.literal(String.valueOf(slotId - 35)).withColor(0x74c7ec));
+ }
+
+ @Override
public boolean isEnabled() {
return SkyblockerConfigManager.get().helpers.enableWardrobeHelper;
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java
index 2d8c4b9f..da1dc6fe 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/SlotTextManager.java
@@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.item.slottext;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.WardrobeKeybinds;
import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper;
import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver;
import de.hysky.skyblocker.skyblock.item.slottext.adders.*;
@@ -47,7 +48,10 @@ public class SlotTextManager {
new PowerStonesGuideAdder(),
new BazaarHelper(),
new StatsTuningAdder(),
- ChocolateFactorySolver.INSTANCE
+ ChocolateFactorySolver.INSTANCE,
+ new EvolvingItemAdder(),
+ new NewYearCakeAdder(),
+ WardrobeKeybinds.INSTANCE
};
private static final ArrayList<SlotTextAdder> currentScreenAdders = new ArrayList<>();
private static final KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding("key.skyblocker.slottext", GLFW.GLFW_KEY_LEFT_ALT, "key.categories.skyblocker"));
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java
new file mode 100644
index 00000000..8c213347
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/EvolvingItemAdder.java
@@ -0,0 +1,64 @@
+package de.hysky.skyblocker.skyblock.item.slottext.adders;
+
+import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder;
+import de.hysky.skyblocker.skyblock.item.slottext.SlotText;
+import de.hysky.skyblocker.utils.ItemUtils;
+import de.hysky.skyblocker.utils.RegexUtils;
+import net.minecraft.item.ItemStack;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.text.NumberFormat;
+import java.util.List;
+import java.util.Locale;
+import java.util.OptionalDouble;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+// Evolving items are those that get upgraded after holding them in your inventory for a certain amount of time.
+public class EvolvingItemAdder extends SimpleSlotTextAdder {
+ private static final Pattern BONUS_PATTERN = Pattern.compile("\\+?([\\d.]+)");
+ private static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance(Locale.US);
+
+ public EvolvingItemAdder() {
+ super();
+ }
+
+ @Override
+ public @NotNull List<SlotText> getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) {
+ switch (stack.getSkyblockId()) {
+ case "NEW_BOTTLE_OF_JYRRE", "DARK_CACAO_TRUFFLE" -> {
+ return actualLogic(stack, "Current Bonus: ");
+ }
+ case "TRAINING_WEIGHTS" -> {
+ return actualLogic(stack, "Strength Gain: ");
+ }
+ // This is the old item called "Lost Bottle of Jyrre" now, this version of the item can't evolve
+ // but its intelligence bonus similarly increases as it's held.
+ // It's unobtainable but there are still some in the game.
+ case "BOTTLE_OF_JYRRE" -> {
+ return actualLogic(stack, "Intelligence Bonus: ");
+ }
+ }
+ return List.of();
+ }
+
+ // This method was extracted to avoid duplicating the whole method multiple times with just 1 different string equality check.
+ private List<SlotText> actualLogic(ItemStack stack, String equal) {
+ List<Text> lore = ItemUtils.getLore(stack);
+ if (lore.isEmpty()) return List.of();
+ for (Text line : lore) {
+ List<Text> siblings = line.getSiblings();
+ if (siblings.size() < 2) continue;
+ if (siblings.getFirst().getString().equals(equal)) {
+ Text bonus = siblings.get(1);
+ Matcher matcher = BONUS_PATTERN.matcher(bonus.getString());
+ OptionalDouble result = RegexUtils.findDoubleFromMatcher(matcher);
+ if (result.isPresent()) return SlotText.bottomLeftList(Text.literal(NUMBER_FORMAT.format(result.getAsDouble())).setStyle(bonus.getStyle()));
+ }
+ }
+ return List.of();
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/NewYearCakeAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/NewYearCakeAdder.java
new file mode 100644
index 00000000..f81c0df8
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/NewYearCakeAdder.java
@@ -0,0 +1,23 @@
+package de.hysky.skyblocker.skyblock.item.slottext.adders;
+
+import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder;
+import de.hysky.skyblocker.skyblock.item.slottext.SlotText;
+import de.hysky.skyblocker.utils.ItemUtils;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+public class NewYearCakeAdder extends SimpleSlotTextAdder {
+ @Override
+ public @NotNull List<SlotText> getText(@Nullable Slot slot, @NotNull ItemStack stack, int slotId) {
+ if (!stack.isOf(Items.CAKE)) return List.of();
+ int year = ItemUtils.getCustomData(stack).getInt("new_years_cake");
+ if (year <= 0) return List.of();
+ return SlotText.bottomLeftList(Text.literal(String.valueOf(year)).withColor(0x74c7ec));
+ }
+}