diff options
| author | Rime <81419447+Emirlol@users.noreply.github.com> | 2024-11-16 22:35:49 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-16 14:35:49 -0500 |
| commit | 8d0af6411e69893da5f561bf2397c7788de22c9d (patch) | |
| tree | 3cdb44b4ea1e9ec6fd30d95b677ec4b8d11038a0 /src/main/java | |
| parent | 27ed4facb050af32fb328393dfc840386120d891 (diff) | |
| download | Skyblocker-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')
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)); + } +} |
