aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt64
1 files changed, 44 insertions, 20 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt
index b4f6050dd..86ccb243c 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt
@@ -26,6 +26,7 @@ import net.minecraft.network.play.server.S02PacketChat
import net.minecraftforge.event.entity.EntityJoinWorldEvent
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import java.util.regex.Matcher
import kotlin.time.Duration.Companion.seconds
object InquisitorWaypointShare {
@@ -33,9 +34,21 @@ object InquisitorWaypointShare {
private val config get() = SkyHanniMod.feature.event.diana.inquisitorSharing
private val patternGroup = RepoPattern.group("diana.waypoints")
+ /**
+ * REGEX-TEST: §9Party §8> User Name§f: §rx: 2.3, y: 4.5, z: 6.7
+ */
private val partyPattern by patternGroup.pattern(
"party",
- "§9Party §8> (?<playerName>.*)§f: §rx: (?<x>-?[0-9]{1,4}), y: (?<y>-?[0-9]{1,4}), z: (?<z>-?[0-9]{1,4})\\b"
+ "§9Party §8> (?<playerName>.+)§f: §rx: (?<x>[^ ]+),? y: (?<y>[^ ]+),? z: (?<z>[^ ]+)"
+ )
+
+ //Support for https://www.chattriggers.com/modules/v/inquisitorchecker
+ /**
+ * REGEX-TEST: §9Party §8> UserName§f: §rA MINOS INQUISITOR has spawned near [Foraging Island ] at Coords 1 2 3
+ */
+ private val inquisitorCheckerPattern by patternGroup.pattern(
+ "party.inquisitorchecker",
+ "§9Party §8> (?<playerName>.+)§f: §rA MINOS INQUISITOR has spawned near \\[(?<area>.*)] at Coords (?<x>[^ ]+) (?<y>[^ ]+) (?<z>[^ ]+)"
)
private val diedPattern by patternGroup.pattern(
"died",
@@ -233,27 +246,16 @@ object InquisitorWaypointShare {
val message = LorenzUtils.stripVanillaMessage(messageComponent.formattedText)
if (packet.type.toInt() != 0) return
- partyPattern.matchMatcher(message) {
- val rawName = group("playerName")
- val x = group("x").trim().toInt()
- val y = group("y").trim().toInt()
- val z = group("z").trim().toInt()
- val location = LorenzVec(x, y, z)
-
- val name = rawName.cleanPlayerName()
- val displayName = rawName.cleanPlayerName(displayName = true)
- if (!waypoints.containsKey(name)) {
- ChatUtils.chat("$displayName §l§efound an inquisitor at §l§c$x $y $z!")
- if (name != LorenzUtils.getPlayerName()) {
- LorenzUtils.sendTitle("§dINQUISITOR §efrom §b$displayName", 5.seconds)
- SoundUtils.playBeepSound()
- }
+ inquisitorCheckerPattern.matchMatcher(message) {
+ if (detectFromChat()) {
+ event.isCanceled = true
}
- val inquis = SharedInquisitor(name, displayName, location, SimpleTimeMark.now())
- waypoints = waypoints.editCopy { this[name] = inquis }
- GriffinBurrowHelper.update()
+ }
- event.isCanceled = true
+ partyPattern.matchMatcher(message) {
+ if (detectFromChat()) {
+ event.isCanceled = true
+ }
}
diedPattern.matchMatcher(message) {
val rawName = group("playerName")
@@ -265,6 +267,28 @@ object InquisitorWaypointShare {
}
}
+ private fun Matcher.detectFromChat(): Boolean {
+ val rawName = group("playerName")
+ val x = group("x").trim().toDoubleOrNull() ?: return false
+ val y = group("y").trim().toDoubleOrNull() ?: return false
+ val z = group("z").trim().toDoubleOrNull() ?: return false
+ val location = LorenzVec(x, y, z)
+
+ val name = rawName.cleanPlayerName()
+ val displayName = rawName.cleanPlayerName(displayName = true)
+ if (!waypoints.containsKey(name)) {
+ ChatUtils.chat("$displayName §l§efound an inquisitor at §l§c${x.toInt()} ${y.toInt()} ${z.toInt()}!")
+ if (name != LorenzUtils.getPlayerName()) {
+ LorenzUtils.sendTitle("§dINQUISITOR §efrom §b$displayName", 5.seconds)
+ SoundUtils.playBeepSound()
+ }
+ }
+ val inquis = SharedInquisitor(name, displayName, location, SimpleTimeMark.now())
+ waypoints = waypoints.editCopy { this[name] = inquis }
+ GriffinBurrowHelper.update()
+ return true
+ }
+
private fun isEnabled() = DianaAPI.isDoingDiana() && config.enabled
fun maybeRemove(inquis: SharedInquisitor) {