aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java17
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/TrophyFishMessages.kt73
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt21
3 files changed, 75 insertions, 36 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java b/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java
index d745db119..3d4dc3df5 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/Fishing.java
@@ -20,6 +20,23 @@ public class Fishing {
public boolean trophyCounter = false;
@Expose
+ @ConfigOption(
+ name = "Trophy Counter Design",
+ desc = "§fStyle 1: §72. §6§lGOLD §5Moldfin\n" +
+ "§fStyle 2: §bYou caught a §5Moldfin §6§lGOLD§b. §7(2)\n" +
+ "§fStyle 3: §bYou caught your 2nd §6§lGOLD §5Moldfin§b."
+ )
+ @ConfigEditorDropdown(values = {"Style 1", "Style 2", "Style 3"})
+ @ConfigAccordionId(id = 0)
+ public int trophyDesign = 0;
+
+ @Expose
+ @ConfigOption(name = "Hide Repeated Catches", desc = "Delete past catches of the same trophy fish from chat.")
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 0)
+ public boolean trophyFishDuplicateHider = false;
+
+ @Expose
@ConfigOption(name = "Bronze Duplicates", desc = "Hide duplicate messages for bronze trophy fishes from chat.")
@ConfigEditorBoolean
@ConfigAccordionId(id = 0)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/TrophyFishMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/TrophyFishMessages.kt
index 080fa89c4..e48df80e8 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/fishing/TrophyFishMessages.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/TrophyFishMessages.kt
@@ -3,20 +3,33 @@ package at.hannibal2.skyhanni.features.fishing
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.events.ProfileApiDataLoadedEvent
+import at.hannibal2.skyhanni.events.ProfileJoinEvent
import at.hannibal2.skyhanni.utils.LorenzUtils
-import at.hannibal2.skyhanni.utils.LorenzUtils.between
+import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
+import at.hannibal2.skyhanni.utils.NumberUtil.ordinal
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import net.minecraft.client.Minecraft
+import net.minecraft.util.ChatComponentText
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class TrophyFishMessages {
+ private var hasLoadedTrophyFish = false
+ private val fishAmounts = mutableMapOf<String, Int>()
+ private val trophyFishPattern =
+ Regex("§6§lTROPHY FISH! §r§bYou caught an? §r(?<displayName>§[0-9a-f](?:§k)?[\\w -]+)§r§r§r §r§l§r(?<displayRarity>§[0-9a-f]§l\\w+)§r§b\\.")
+ private val config get() = SkyHanniMod.feature.fishing
- private val map = mutableMapOf<String, Int>()
+ @SubscribeEvent
+ fun onProfileJoin(event: ProfileJoinEvent) {
+ hasLoadedTrophyFish = false
+ }
@SubscribeEvent
fun onProfileDataLoad(event: ProfileApiDataLoadedEvent) {
+ if (hasLoadedTrophyFish) return
val profileData = event.profileData
- map.clear()
+ fishAmounts.clear()
val trophyFishes = profileData["trophy_fish"].asJsonObject
for ((rawName, value) in trophyFishes.entrySet()) {
val rarity = when {
@@ -30,48 +43,48 @@ class TrophyFishMessages {
val displayName = text.substring(0, text.length - rarity.length)
val amount = value.asInt
-
// LorenzDebug.log("$rarity: $displayName: $amount")
- val name = rarity + "_" + displayName
- map[name] = amount
-// LorenzDebug.log("loaded trophy: $name = $amount")
+ val fish = rarity + "_" + displayName
+ fishAmounts[fish] = amount
+// LorenzDebug.log("loaded trophy: $fish = $amount")
+ hasLoadedTrophyFish = true
}
}
@SubscribeEvent
fun onStatusBar(event: LorenzChatEvent) {
- if (!LorenzUtils.inSkyBlock) return
- if (!SkyHanniMod.feature.fishing.trophyCounter) return
+ if (!LorenzUtils.inSkyBlock || !config.trophyCounter) return
- val message = event.message
- //TODO replace logic with regex
- if (!message.startsWith("§6§lTROPHY FISH! §r§bYou caught a")) return
+ val match = trophyFishPattern.matchEntire(event.message)?.groups ?: return
+ val displayName = match["displayName"]!!.value.replace("§k", "")
+ val displayRarity = match["displayRarity"]!!.value
- var displayName =
- if (message.contains(" a §r")) message.between(" a §r", "§r §r") else message.between(" an §r", "§r §r")
- if (displayName.contains("§k")) {
- displayName = displayName.replace("§k", "")
- displayName = displayName.replace("Obfuscated", "Obfuscated Fish")
- }
- val rarity = message.between("§r §r", "§b.").lowercase().replace("§l", "")
+ val name = displayName.replace("Obfuscated", "Obfuscated Fish")
+ .replace("[- ]".toRegex(), "").lowercase().removeColor()
+ val rarity = displayRarity.lowercase().removeColor()
- val name = (rarity + "_" + displayName).removeColor().lowercase().replace(" ", "").replace("-", "")
- val amount = map.getOrDefault(name, 0) + 1
- map[name] = amount
+ val fish = "${rarity}_${name}"
+ val amount = fishAmounts.getOrDefault(fish, 0) + 1
+ fishAmounts[fish] = amount
event.blockedReason = "trophy_fish"
- if (amount == 1) {
- LorenzUtils.chat("§6TROPHY FISH! §c§lFIRST §r$rarity $displayName")
+ if (config.trophyDesign == 0 && amount == 1) {
+ LorenzUtils.chat("§6§lTROPHY FISH! §c§lFIRST §r$displayRarity $displayName")
return
}
- if (rarity.contains("bronze")) {
- if (SkyHanniMod.feature.fishing.trophyFishBronzeHider) return
- }
- if (rarity.contains("silver")) {
- if (SkyHanniMod.feature.fishing.trophyFishSilverHider) return
+ if (config.trophyFishBronzeHider && rarity == "bronze" && amount != 1) return
+ if (config.trophyFishSilverHider && rarity == "silver" && amount != 1) return
+
+ val trophyMessage = "§6§lTROPHY FISH! " + when (config.trophyDesign) {
+ 0 -> "§7$amount. §r$displayRarity $displayName"
+ 1 -> "§bYou caught a $displayName $displayRarity§b. §7(${amount.addSeparators()})"
+ else -> "§bYou caught your ${amount.addSeparators()}${amount.ordinal()} $displayRarity $displayName§b."
}
- LorenzUtils.chat("§6TROPHY FISH! §7$amount. §r$rarity $displayName")
+ Minecraft.getMinecraft().ingameGUI.chatGUI.printChatMessageWithOptionalDeletion(
+ ChatComponentText(trophyMessage),
+ if (config.trophyFishDuplicateHider) fish.hashCode() else 0
+ )
}
} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt
index 6da701b78..397613f40 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt
@@ -1,5 +1,6 @@
package at.hannibal2.skyhanni.utils
+import at.hannibal2.skyhanni.utils.NumberUtil.addSuffix
import java.text.NumberFormat
import java.util.*
import java.util.regex.Pattern
@@ -74,17 +75,25 @@ object NumberUtil {
return (this * scale).roundToInt().toFloat() / scale
}
- fun Number.addSuffix(): String {
+ fun Number.ordinal(): String {
val long = this.toLong()
- if (long in 11..13) return "${this}th"
+ if (long % 100 in 11..13) return "th"
return when (long % 10) {
- 1L -> "${this}st"
- 2L -> "${this}nd"
- 3L -> "${this}rd"
- else -> "${this}th"
+ 1L -> "st"
+ 2L -> "nd"
+ 3L -> "rd"
+ else -> "th"
}
}
+ fun Number.addSuffix(): String {
+ return this.toString() + this.ordinal()
+ }
+
+ fun Number.addSeparators(): String {
+ return NumberFormat.getNumberInstance().format(this)
+ }
+
fun String.romanToDecimalIfNeeded() = toIntOrNull() ?: romanToDecimal()
/**