aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-03-31 20:08:47 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-03-31 20:08:47 +0200
commit58eccf5c7bf37c6279e15cd9e107b1fafd6e4509 (patch)
treeef98c7cfcc0ef2032a635393eda2a3c0a39a87be
parent33c7a5c0a13e98af7895aeb7eaf3109a3c841a5f (diff)
downloadskyhanni-58eccf5c7bf37c6279e15cd9e107b1fafd6e4509.tar.gz
skyhanni-58eccf5c7bf37c6279e15cd9e107b1fafd6e4509.tar.bz2
skyhanni-58eccf5c7bf37c6279e15cd9e107b1fafd6e4509.zip
Added Composter Upgrade Price - Show the price for the composter upgrade in the lore
Added Highlight Upgrade - Highlight Upgrades that can be bought right now. Added Number Composter Upgrades - Show the number of upgrades in the composter upgrades inventory.
-rw-r--r--CHANGELOG.md9
-rw-r--r--FEATURES.md3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java1
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/Garden.java24
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenComposterInventoryFeatures.kt82
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenInventoryNumbers.kt18
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBLockLevelGuideHelper.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt15
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt1
9 files changed, 148 insertions, 9 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 009d5fef0..2e034c470 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -48,9 +48,12 @@
+ Added **Colored Name** - Show the visitor name in the color of the rarity.
+ Added **Visitor Item Preview** - Show the base type for the required items next to new visitors (Note that some visitors may require any crop)
+ Added **Teleport Pad Compact Name** - Hide the 'Warp to' and 'No Destination' texts over teleport pads.
-+ Added Money per Hour Advanced stats - Show not only Sell Offer price but also Instant Sell price and NPC Sell price (Suggestion: Enable Compact Price as well for this)
-+ Added Anita Medal Profit - Helps to identify profitable items to buy at the Anita item shop and potential profit from selling the item at the auction house.
-+ Added Composter Compact Display - Displays the compost data from the tab list in a compact form as gui element.
++ Added **Money per Hour Advanced stats** - Show not only Sell Offer price but also Instant Sell price and NPC Sell price (Suggestion: Enable Compact Price as well for this)
++ Added **Anita Medal Profit** - Helps to identify profitable items to buy at the Anita item shop and potential profit from selling the item at the auction house.
++ Added **Composter Compact Display** - Displays the compost data from the tab list in a compact form as gui element.
++ Added **Composter Upgrade Price** - Show the price for the composter upgrade in the lore
++ Added **Highlight Upgrade** - Highlight Upgrades that can be bought right now.
++ Added **Number Composter Upgrades** - Show the number of upgrades in the composter upgrades inventory.
### Features from other Mods
diff --git a/FEATURES.md b/FEATURES.md
index 1720b90f5..54098e876 100644
--- a/FEATURES.md
+++ b/FEATURES.md
@@ -199,6 +199,9 @@
+ **Money per Hour Advanced stats** - Show not only Sell Offer price but also Instant Sell price and NPC Sell price (Suggestion: Enable Compact Price as well for this)
+ **Anita Medal Profit** - Helps to identify profitable items to buy at the Anita item shop and potential profit from selling the item at the auction house.
+ **Composter Compact Display** - Displays the compost data from the tab list in a compact form as gui element.
++ **Composter Upgrade Price** - Show the price for the composter upgrade in the lore
++ **Highlight Upgrade** - Highlight Upgrades that can be bought right now.
++ **Number Composter Upgrades** - Show the number of upgrades in the composter upgrades inventory.
## Commands
- /wiki (using hypixel-skyblock.fandom.com instead of Hypixel wiki)
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java
index 1fcd4eb68..f8db6d0e6 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java
@@ -237,6 +237,7 @@ public class SkyHanniMod {
loadModule(new GardenTeleportPadCompactName());
loadModule(new AnitaMedalProfit());
loadModule(new ComposterDisplay());
+ loadModule(new GardenComposterInventoryFeatures());
Commands.INSTANCE.init();
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java
index 1a46c3785..f6879a86d 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java
@@ -164,6 +164,12 @@ public class Garden {
public boolean numberCropUpgrades = true;
@Expose
+ @ConfigOption(name = "Composter Upgrades", desc = "Show the number of upgrades in the composter upgrades inventory.")
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 5)
+ public boolean numberComposterUpgrades = true;
+
+ @Expose
@ConfigOption(name = "Crop Milestones", desc = "")
@ConfigEditorAccordion(id = 6)
public boolean cropMilestones = false;
@@ -686,6 +692,24 @@ public class Garden {
public boolean composterDisplayEnabled = true;
@Expose
+ @ConfigOption(
+ name = "Upgrade Price",
+ desc = "Show the price for the composter upgrade in the lore."
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 17)
+ public boolean composterUpgradePrice = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Highlight Upgrade",
+ desc = "Highlight Upgrades that can be bought right now."
+ )
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 17)
+ public boolean composterHighLightUpgrade = true;
+
+ @Expose
public Position composterDisplayPos = new Position(-363, 13, false, true);
@Expose
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenComposterInventoryFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenComposterInventoryFeatures.kt
new file mode 100644
index 000000000..a14d5ac39
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenComposterInventoryFeatures.kt
@@ -0,0 +1,82 @@
+package at.hannibal2.skyhanni.features.garden
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.GuiContainerEvent
+import at.hannibal2.skyhanni.utils.*
+import at.hannibal2.skyhanni.utils.ItemUtils.getLore
+import at.hannibal2.skyhanni.utils.RenderUtils.highlight
+import net.minecraft.client.gui.inventory.GuiChest
+import net.minecraft.inventory.ContainerChest
+import net.minecraftforge.event.entity.player.ItemTooltipEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class GardenComposterInventoryFeatures {
+ val config get() = SkyHanniMod.feature.garden
+
+ @SubscribeEvent
+ fun onTooltip(event: ItemTooltipEvent) {
+ if (!GardenAPI.inGarden()) return
+ if (!config.composterUpgradePrice) return
+
+ if (InventoryUtils.openInventoryName() != "Composter Upgrades") return
+
+ var next = false
+ val list = event.toolTip
+ var i = -1
+ var indexFullCost = 0
+ var fullPrice = 0.0
+ var amountItems = 0
+ for (originalLine in list) {
+ i++
+ val line = originalLine.substring(4)
+ if (line == "§7Upgrade Cost:") {
+ next = true
+ indexFullCost = i
+ continue
+ }
+
+ if (next) {
+ if (line.endsWith(" Copper")) continue
+ if (line == "") break
+ val (itemName, amount) = ItemUtils.readItemAmount(line)
+ if (itemName == null) {
+ LorenzUtils.error("§c[SkyHanni] Could not read item '$line'")
+ continue
+ }
+ val lowestBin = NEUItems.getPrice(NEUItems.getInternalName(itemName))
+ val price = lowestBin * amount
+ fullPrice += price
+ val format = NumberUtil.format(price)
+ list[i] = list[i] + " §7(§6$format§7)"
+ amountItems++
+ }
+ }
+
+ if (amountItems > 1) {
+ val format = NumberUtil.format(fullPrice)
+ list[indexFullCost] = list[indexFullCost] + " §7(§6$format§7)"
+ }
+ }
+
+ @SubscribeEvent
+ fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) {
+ if (!LorenzUtils.inSkyBlock) return
+ if (!config.composterHighLightUpgrade) return
+
+ if (InventoryUtils.openInventoryName() == "Composter Upgrades") {
+ if (event.gui !is GuiChest) return
+ val guiChest = event.gui
+ val chest = guiChest.inventorySlots as ContainerChest
+
+ for (slot in chest.inventorySlots) {
+ if (slot == null) continue
+ if (slot.slotNumber != slot.slotIndex) continue
+ val stack = slot.stack ?: continue
+
+ if (stack.getLore().any { it == "§eClick to upgrade!" }) {
+ slot highlight LorenzColor.GOLD
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenInventoryNumbers.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenInventoryNumbers.kt
index 6655fdf10..76770e182 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenInventoryNumbers.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenInventoryNumbers.kt
@@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.RenderItemTipEvent
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
+import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNeeded
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.util.regex.Pattern
@@ -12,6 +13,8 @@ class GardenInventoryNumbers {
private var patternTierProgress = Pattern.compile("§7Progress to Tier (.*): §e(?:.*)")
private var patternUpgradeTier = Pattern.compile("§7Current Tier: §e(.*)§7/§a.*")
+ private val patternComposterUpgrades =
+ Pattern.compile("§a(?:Composter Speed|Multi Drop|Fuel Cap|Organic Matter Cap|Cost Reduction) ?(.*)?")
@SubscribeEvent
fun onRenderItemTip(event: RenderItemTipEvent) {
@@ -23,7 +26,6 @@ class GardenInventoryNumbers {
event.stack.getLore()
.map { patternTierProgress.matcher(it) }
.filter { it.matches() }
-
.map { it.group(1).romanToDecimalIfNeeded() - 1 }
.forEach { event.stackTip = "" + it }
}
@@ -37,5 +39,19 @@ class GardenInventoryNumbers {
.map { it.group(1) }
.forEach { event.stackTip = "" + it }
}
+
+ if (InventoryUtils.openInventoryName() == "Composter Upgrades") {
+ if (!SkyHanniMod.feature.garden.numberComposterUpgrades) return
+
+ event.stack.name?.let {
+ val matcher = patternComposterUpgrades.matcher(it)
+ if (matcher.matches()) {
+ event.stackTip = if (matcher.groupCount() != 0) {
+ val group = matcher.group(1)
+ "" + group.romanToDecimalIfNeeded()
+ } else "0"
+ }
+ }
+ }
}
} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBLockLevelGuideHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBLockLevelGuideHelper.kt
index 634aa5758..063f17612 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBLockLevelGuideHelper.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBLockLevelGuideHelper.kt
@@ -29,9 +29,7 @@ class SkyBLockLevelGuideHelper {
if (slot.slotNumber != slot.slotIndex) continue
val name = slot.stack?.name ?: continue
- if (name.startsWith("§a✔")) {
-// slot highlight LorenzColor.GREEN
- } else if (name.startsWith("§c✖")) {
+ if (name.startsWith("§c✖")) {
slot highlight LorenzColor.RED
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
index bbd420743..cf0192ca4 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
@@ -137,7 +137,8 @@ object ItemUtils {
fun isSkyBlockMenuItem(stack: ItemStack?): Boolean = stack?.getInternalName() == "SKYBLOCK_MENU"
- private val pattern = Pattern.compile("(?<name>(?:['\\w-]+ ?)+)(?:§8x(?<amount>[\\d,]+))?")
+ private val patternInFront = Pattern.compile("(?: *§8(?<amount>[\\d,]+)x )?(?<name>.*)")
+ private val patternBehind = Pattern.compile("(?<name>(?:['\\w-]+ ?)+)(?:§8x(?<amount>[\\d,]+))?")
private val itemAmountCache = mutableMapOf<String, Pair<String, Int>>()
@@ -145,10 +146,20 @@ object ItemUtils {
if (itemAmountCache.containsKey(input)) {
return itemAmountCache[input]!!
}
+
+ var matcher = patternInFront.matcher(input)
+ if (matcher.matches()) {
+ val itemName = matcher.group("name")
+ val amount = matcher.group("amount")?.replace(",", "")?.toInt() ?: 1
+ val pair = Pair(itemName, amount)
+ itemAmountCache[input] = pair
+ return pair
+ }
+
var string = input.trim()
val color = string.substring(0, 2)
string = string.substring(2)
- val matcher = pattern.matcher(string)
+ matcher = patternBehind.matcher(string)
if (!matcher.matches()) return Pair(null, 0)
val itemName = color + matcher.group("name").trim()
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
index 8e9b9de9e..921229e05 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
@@ -62,6 +62,7 @@ object LorenzUtils {
}
fun error(message: String) {
+ println("error: '$message'")
internalChat("§c$message")
}