diff options
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt | 64 |
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) { |