From 254ddf5a184e2ef240cef64af83109cdf50e6c79 Mon Sep 17 00:00:00 2001 From: ThanhZ <89237062+thqnhz@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:12:46 +0700 Subject: [PATCH 1/2] feat: Slot text for crop milestones and crop/greenhouse upgrades --- .../item/slottext/SlotTextManager.java | 4 ++ .../slottext/adders/CropMilestonesAdder.java | 49 +++++++++++++++++++ .../slottext/adders/GardenUpgradesAdder.java | 39 +++++++++++++++ .../assets/skyblocker/lang/en_us.json | 4 ++ 4 files changed, 96 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/GardenUpgradesAdder.java 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 cb17a27a539..e51205d7669 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 @@ -15,10 +15,12 @@ import de.hysky.skyblocker.skyblock.item.slottext.adders.ChoosePetLevelAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.CollectionAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.CommunityShopAdder; +import de.hysky.skyblocker.skyblock.item.slottext.adders.CropMilestonesAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.EnchantmentAbbreviationAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.EnchantmentLevelAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.EssenceShopAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.EvolvingItemAdder; +import de.hysky.skyblocker.skyblock.item.slottext.adders.GardenUpgradesAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.HotfPerkLevelAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.HotmPerkLevelAdder; import de.hysky.skyblocker.skyblock.item.slottext.adders.HuntingToolkitIndicatorAdder; @@ -94,6 +96,8 @@ public class SlotTextManager { new BestiaryLevelAdder(), new HuntingToolkitIndicatorAdder(), new ChipLevelAdder(), + new CropMilestonesAdder(), + new GardenUpgradesAdder(), }; private static final ArrayList currentScreenAdders = new ArrayList<>(); private static final KeyMapping keyBinding = KeyMappingHelper.registerKeyMapping(new KeyMapping("key.skyblocker.slottext", GLFW.GLFW_KEY_LEFT_ALT, SkyblockerMod.KEYBINDING_CATEGORY)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java new file mode 100644 index 00000000000..5c2cc51f093 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java @@ -0,0 +1,49 @@ +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 java.util.List; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import org.jspecify.annotations.Nullable; + +public class CropMilestonesAdder extends SimpleSlotTextAdder { + + private static final ConfigInformation CONFIG_INFORMATION = + new ConfigInformation( + "crop_milestones", + "skyblocker.config.uiAndVisuals.slotText.cropMilestones", + "skyblocker.config.uiAndVisuals.slotText.cropMilestones.@Tooltip" + ); + + public CropMilestonesAdder() { + super("^Crop Milestones", CONFIG_INFORMATION); + } + + @Override + public List getText( + @Nullable Slot slot, + ItemStack stack, + int slotId + ) { + String name = stack.getHoverName().getString(); + int lastSpace = name.lastIndexOf(' '); + if (lastSpace == -1) return List.of(); + + String number = name.substring(lastSpace + 1); + if (!number.matches("\\d+")) return List.of(); + + // TODO: Change the max milestone line + boolean maxed = ItemUtils.getLoreLineIf(stack, s -> + s.contains("Max milestone reached!") + ) != null; + + return SlotText.bottomRightList( + Component.literal(number).withColor( + maxed ? SlotText.GOLD : SlotText.CREAM + ) + ); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/GardenUpgradesAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/GardenUpgradesAdder.java new file mode 100644 index 00000000000..2dcf45ec0e3 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/GardenUpgradesAdder.java @@ -0,0 +1,39 @@ +package de.hysky.skyblocker.skyblock.item.slottext.adders; + +import de.hysky.skyblocker.skyblock.item.slottext.SlotText; +import de.hysky.skyblocker.skyblock.item.slottext.SimpleSlotTextAdder; +import de.hysky.skyblocker.utils.ItemUtils; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import org.jspecify.annotations.Nullable; + +public class GardenUpgradesAdder extends SimpleSlotTextAdder { + + private static final Pattern TIER_PATTERN = Pattern.compile("Current Tier: (?\\d+)/(?\\d+)"); + private static final ConfigInformation CONFIG_INFORMATION = new ConfigInformation( + "garden_upgrades", + "skyblocker.config.uiAndVisuals.slotText.gardenUpgrades", + "skyblocker.config.uiAndVisuals.slotText.gardenUpgrades.@Tooltip" + ); + + public GardenUpgradesAdder() { + super("^(?:Crop|Greenhouse) Upgrades", CONFIG_INFORMATION); + } + + @Override + public List getText(@Nullable Slot slot, ItemStack stack, int slotId) { + Matcher matcher = ItemUtils.getLoreLineIfMatch(stack, TIER_PATTERN); + if (matcher == null) return List.of(); + + String tier = matcher.group("tier"); + boolean maxed = tier.equals(matcher.group("max")); + + return SlotText.bottomRightList( + Component.literal(String.valueOf(tier)).withColor(maxed ? SlotText.GOLD : SlotText.CREAM) + ); + } +} diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index f676c2b91a2..ed325566b4b 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -1341,12 +1341,16 @@ "skyblocker.config.uiAndVisuals.slotText.collectionLevel": "Collection Level", "skyblocker.config.uiAndVisuals.slotText.communityShop": "Community Shop", "skyblocker.config.uiAndVisuals.slotText.communityShop.@Tooltip": "Displays the level of the upgrades in the community shop.", + "skyblocker.config.uiAndVisuals.slotText.cropMilestones": "Crop Milestones", + "skyblocker.config.uiAndVisuals.slotText.cropMilestones.@Tooltip": "Displays the crop milestone levels", "skyblocker.config.uiAndVisuals.slotText.enchantmentAbbreviation": "Enchantment Abbreviation", "skyblocker.config.uiAndVisuals.slotText.enchantmentLevel": "Enchantment Book Level", "skyblocker.config.uiAndVisuals.slotText.essenceShop": "Essence Shop", "skyblocker.config.uiAndVisuals.slotText.essenceShop.@Tooltip": "Displays the levels and your current amount of essence while in essence shops.", "skyblocker.config.uiAndVisuals.slotText.evolvingItems": "Evolving Items", "skyblocker.config.uiAndVisuals.slotText.evolvingItems.@Tooltip": "Displays the time held for Bottle of Jyrre, Moby Duck, Discrite, Dark Cacao Truffle, Training Weights.", + "skyblocker.config.uiAndVisuals.slotText.gardenUpgrades": "Garden Upgrades", + "skyblocker.config.uiAndVisuals.slotText.gardenUpgrades.@Tooltip": "Displays the level of crop and greenhouse upgrades", "skyblocker.config.uiAndVisuals.slotText.hotfPerkLevel": "HOTF Perk Level", "skyblocker.config.uiAndVisuals.slotText.hotmPerkLevel": "HOTM Perk Level", "skyblocker.config.uiAndVisuals.slotText.huntingToolkitIndicator": "Toolkit Indicator", From 0085d15394b40437428a04a9bf095ff4ad462a23 Mon Sep 17 00:00:00 2001 From: ThanhZ <89237062+thqnhz@users.noreply.github.com> Date: Sat, 6 Jun 2026 00:13:08 +0700 Subject: [PATCH 2/2] chore: correct max milestone check --- .../skyblock/item/slottext/adders/CropMilestonesAdder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java index 5c2cc51f093..1d6f2e3c763 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CropMilestonesAdder.java @@ -35,9 +35,8 @@ public List getText( String number = name.substring(lastSpace + 1); if (!number.matches("\\d+")) return List.of(); - // TODO: Change the max milestone line boolean maxed = ItemUtils.getLoreLineIf(stack, s -> - s.contains("Max milestone reached!") + s.contains("Max tier reached!") ) != null; return SlotText.bottomRightList(