aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/Diana.java28
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt21
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt64
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt199
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt12
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt12
9 files changed, 311 insertions, 40 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index 081e6a5b0..a5dab1a48 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -22,10 +22,7 @@ import at.hannibal2.skyhanni.features.chat.playerchat.PlayerChatModifier
import at.hannibal2.skyhanni.features.commands.WikiCommand
import at.hannibal2.skyhanni.features.damageindicator.DamageIndicatorManager
import at.hannibal2.skyhanni.features.dungeon.*
-import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper
-import at.hannibal2.skyhanni.features.event.diana.GriffinBurrowHelper
-import at.hannibal2.skyhanni.features.event.diana.GriffinBurrowParticleFinder
-import at.hannibal2.skyhanni.features.event.diana.SoopyGuessBurrow
+import at.hannibal2.skyhanni.features.event.diana.*
import at.hannibal2.skyhanni.features.fishing.*
import at.hannibal2.skyhanni.features.garden.*
import at.hannibal2.skyhanni.features.garden.composter.ComposterDisplay
@@ -200,7 +197,7 @@ class SkyHanniMod {
loadModule(StatsTuning())
loadModule(NonGodPotEffectDisplay())
loadModule(SoopyGuessBurrow())
- loadModule(GriffinBurrowHelper())
+ loadModule(GriffinBurrowHelper)
loadModule(GriffinBurrowParticleFinder())
loadModule(BurrowWarpHelper())
loadModule(CollectionCounter())
@@ -267,6 +264,7 @@ class SkyHanniMod {
loadModule(MovementSpeedDisplay())
loadModule(ChumBucketHider())
loadModule(GardenRecentTeleportPadsDisplay())
+ loadModule(InquisitorWaypointShare)
init()
diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
index 2ecdb2d98..985692b57 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
+++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt
@@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.data.GuiEditManager
import at.hannibal2.skyhanni.features.bingo.BingoCardDisplay
import at.hannibal2.skyhanni.features.bingo.BingoNextStepHelper
import at.hannibal2.skyhanni.features.event.diana.BurrowWarpHelper
+import at.hannibal2.skyhanni.features.event.diana.InquisitorWaypointShare
import at.hannibal2.skyhanni.features.garden.GardenAPI
import at.hannibal2.skyhanni.features.garden.GardenCropTimeCommand
import at.hannibal2.skyhanni.features.garden.composter.ComposterOverlay
@@ -67,6 +68,7 @@ object Commands {
registerCommand("shclearminiondata") { MinionFeatures.clearMinionData() }
registerCommand("shtestbingo") { TestBingo.toggle() }
registerCommand("shtestmessage") { TestChatCommand.command(it) }
+ registerCommand("shshareinquis") { InquisitorWaypointShare.sendInquisitor() }
}
private fun registerCommand(name: String, function: (Array<String>) -> Unit) {
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java b/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java
index 578586bcb..d193aa872 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/Diana.java
@@ -1,9 +1,7 @@
package at.hannibal2.skyhanni.config.features;
import com.google.gson.annotations.Expose;
-import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean;
-import io.github.moulberry.moulconfig.annotations.ConfigEditorKeybind;
-import io.github.moulberry.moulconfig.annotations.ConfigOption;
+import io.github.moulberry.moulconfig.annotations.*;
import org.lwjgl.input.Keyboard;
public class Diana {
@@ -33,4 +31,28 @@ public class Diana {
@ConfigEditorKeybind(defaultKey = Keyboard.KEY_NONE)
public int keyBindWarp = Keyboard.KEY_NONE;
+ @Expose
+ @ConfigOption(name = "Inquisitor Waypoint Sharing", desc = "")
+ @Accordion
+ @ConfigAccordionId(id = 9)
+ public InquisitorSharing inquisitorSharing = new InquisitorSharing();
+
+ public static class InquisitorSharing {
+
+ @Expose
+ @ConfigOption(name = "Enabled", desc = "Shares your Inquisitor and receiving other Inquisitors via Party Chat.")
+ @ConfigEditorBoolean
+ public boolean enabled = true;
+
+ @Expose
+ @ConfigOption(name = "Focus", desc = "Hide other waypoints when your party finds a inquisitor.")
+ @ConfigEditorBoolean
+ public boolean focusInquisitor = false;
+
+ @Expose
+ @ConfigOption(name = "Share Key", desc = "Press this key to share your Inquisitor Waypoint.")
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_NONE)
+ public int keyBindShare = Keyboard.KEY_Y;
+ }
+
}
diff --git a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt
new file mode 100644
index 000000000..2203ab724
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt
@@ -0,0 +1,5 @@
+package at.hannibal2.skyhanni.events
+
+import at.hannibal2.skyhanni.features.damageindicator.EntityData
+
+class DamageIndicatorDetectedEvent(val entityData: EntityData) : LorenzEvent() \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
index 93886069c..0b7f14f2f 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/damageindicator/DamageIndicatorManager.kt
@@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.damageindicator
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.ScoreboardData
import at.hannibal2.skyhanni.events.BossHealthChangeEvent
+import at.hannibal2.skyhanni.events.DamageIndicatorDetectedEvent
import at.hannibal2.skyhanni.events.DamageIndicatorFinalBossEvent
import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.features.dungeon.DungeonData
@@ -342,6 +343,7 @@ class DamageIndicatorManager {
val lastHealth = data[entity.uniqueID]!!.lastHealth
checkDamage(entityData, health, lastHealth)
tickDamage(entityData.damageCounter)
+
BossHealthChangeEvent(entityData, lastHealth, health, maxHealth).postAndCatch()
}
entityData.lastHealth = health
@@ -355,6 +357,7 @@ class DamageIndicatorManager {
entityData.timeLastTick = System.currentTimeMillis()
data[entity.uniqueID] = entityData
+
} catch (e: Throwable) {
e.printStackTrace()
}
@@ -710,15 +713,19 @@ class DamageIndicatorManager {
private fun grabData(entity: EntityLivingBase): EntityData? {
if (data.contains(entity.uniqueID)) return data[entity.uniqueID]
+
val entityResult = mobFinder?.tryAdd(entity) ?: return null
- return EntityData(
- entity,
- entityResult.ignoreBlocks,
- entityResult.delayedStart,
- entityResult.finalDungeonBoss,
- entityResult.bossType,
- foundTime = System.currentTimeMillis()
+
+ val entityData = EntityData(
+ entity,
+ entityResult.ignoreBlocks,
+ entityResult.delayedStart,
+ entityResult.finalDungeonBoss,
+ entityResult.bossType,
+ foundTime = System.currentTimeMillis()
)
+ DamageIndicatorDetectedEvent(entityData).postAndCatch()
+ return entityData
}
private fun checkFinalBoss(finalBoss: Boolean, id: Int) {
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt
index 65ce760aa..3e427bb4b 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt
@@ -20,11 +20,13 @@ import net.minecraftforge.client.event.RenderWorldLastEvent
import net.minecraftforge.event.world.WorldEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-class GriffinBurrowHelper {
+object GriffinBurrowHelper {
+ private val config get() = SkyHanniMod.feature.diana
private var guessLocation: LorenzVec? = null
+ private var targetLocation: LorenzVec? = null
private var particleBurrows = mapOf<LorenzVec, BurrowType>()
- private var animationLocation: LorenzVec? = null
+ var animationLocation: LorenzVec? = null
private var lastDug: LorenzVec? = null
private var teleportedLocation: LorenzVec? = null
private var lastGuessTime = 0L
@@ -38,12 +40,17 @@ class GriffinBurrowHelper {
}
lastGuessTime = System.currentTimeMillis()
- if (SkyHanniMod.feature.diana.burrowNearestWarp) {
- BurrowWarpHelper.shouldUseWarps(event.guessLocation)
- }
-
guessLocation = event.guessLocation
- if (SkyHanniMod.feature.diana.burrowsNearbyDetection) {
+ setTargetLocation(event.guessLocation)
+ }
+
+ fun setTargetLocation(location: LorenzVec) {
+ targetLocation = location
+
+ if (config.burrowNearestWarp) {
+ BurrowWarpHelper.shouldUseWarps(location)
+ }
+ if (config.burrowsNearbyDetection) {
checkRemoveGuess(false)
}
}
@@ -53,7 +60,7 @@ class GriffinBurrowHelper {
EntityMovementData.addToTrack(Minecraft.getMinecraft().thePlayer)
particleBurrows = particleBurrows.editCopy { this[event.burrowLocation] = event.type }
- if (SkyHanniMod.feature.diana.burrowsNearbyDetection) {
+ if (config.burrowsNearbyDetection) {
checkRemoveGuess(true)
}
}
@@ -99,6 +106,7 @@ class GriffinBurrowHelper {
@SubscribeEvent
fun onWorldChange(event: WorldEvent.Load) {
guessLocation = null
+ targetLocation = null
animationLocation = null
lastDug = null
particleBurrows = particleBurrows.editCopy { clear() }
@@ -132,22 +140,38 @@ class GriffinBurrowHelper {
sendTip(event)
val playerLocation = LocationUtils.playerLocation()
- if (SkyHanniMod.feature.diana.burrowsNearbyDetection) {
+ for ((playerName, location) in InquisitorWaypointShare.waypoints) {
+ event.drawColor(location, LorenzColor.LIGHT_PURPLE)
+ val distance = location.distance(playerLocation)
+ if (distance > 10) {
+ val formattedDistance = LorenzUtils.formatInteger(distance.toInt())
+ event.drawDynamicText(location.add(0, 1, 0), "§d§lInquisitor §e${formattedDistance}m", 1.7)
+ } else {
+ event.drawDynamicText(location.add(0, 1, 0), "§d§lInquisitor", 1.7)
+ }
+ if (distance < 5) {
+ InquisitorWaypointShare.maybeRemove(playerName)
+ }
+ event.drawDynamicText(location.add(0, 1, 0), "§eFrom §b$playerName", 1.6, yOff = 9f)
+ }
+
+ if (InquisitorWaypointShare.waypoints.isNotEmpty()) {
+ if (SkyHanniMod.feature.diana.inquisitorSharing.focusInquisitor) {
+ return
+ }
+ }
+
+ if (config.burrowsNearbyDetection) {
for (burrow in particleBurrows) {
val location = burrow.key
val distance = location.distance(playerLocation)
val burrowType = burrow.value
-// if (distance < 30) {
event.drawColor(location, burrowType.color, distance > 10)
-// }
event.drawDynamicText(location.add(0, 1, 0), burrowType.text, 1.5)
-// if (distance < 10) {
-// event.drawString(location.add(0.5, 1.5, 0.5), burrowType.text, true)
-// }
}
}
- if (SkyHanniMod.feature.diana.burrowsSoopyGuess) {
+ if (config.burrowsSoopyGuess) {
guessLocation?.let {
val guessLocation = findBlock(it)
val distance = guessLocation.distance(playerLocation)
@@ -167,14 +191,14 @@ class GriffinBurrowHelper {
if (BurrowWarpHelper.currentWarp != null) {
BurrowWarpHelper.currentWarp = null
- if (SkyHanniMod.feature.diana.burrowNearestWarp) {
+ if (config.burrowNearestWarp) {
animationLocation = it
return
}
}
}
- if (SkyHanniMod.feature.diana.burrowNearestWarp) {
+ if (config.burrowNearestWarp) {
BurrowWarpHelper.currentWarp?.let { warp ->
animationLocation?.let {
event.drawColor(it.add(0.0, 1.0, 0.0), LorenzColor.AQUA)
@@ -185,7 +209,7 @@ class GriffinBurrowHelper {
}
}
}
- if (SkyHanniMod.feature.diana.burrowSmoothTransition) {
+ if (config.burrowSmoothTransition) {
animationLocation?.let {
event.drawColor(it, LorenzColor.WHITE)
animationLocation = moveAnimation(it, event)
@@ -195,10 +219,10 @@ class GriffinBurrowHelper {
private fun moveAnimation(animation: LorenzVec, event: RenderWorldLastEvent): LorenzVec? {
val list = mutableListOf<LorenzVec>()
- if (SkyHanniMod.feature.diana.burrowsNearbyDetection) {
+ if (config.burrowsNearbyDetection) {
list.addAll(particleBurrows.keys)
}
- guessLocation?.let {
+ targetLocation?.let {
val loc = findBlock(it)
if (loc.y > 200) {
list.add(LorenzVec(loc.x, LocationUtils.playerLocation().y, loc.z))
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
new file mode 100644
index 000000000..c223cf386
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/InquisitorWaypointShare.kt
@@ -0,0 +1,199 @@
+package at.hannibal2.skyhanni.features.event.diana
+
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.data.IslandType
+import at.hannibal2.skyhanni.data.TitleUtils
+import at.hannibal2.skyhanni.events.BossHealthChangeEvent
+import at.hannibal2.skyhanni.events.DamageIndicatorDetectedEvent
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.events.PacketEvent
+import at.hannibal2.skyhanni.features.damageindicator.BossType
+import at.hannibal2.skyhanni.features.damageindicator.DamageIndicatorManager
+import at.hannibal2.skyhanni.utils.*
+import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
+import at.hannibal2.skyhanni.utils.StringUtils.cleanPlayerName
+import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import io.github.moulberry.moulconfig.internal.KeybindHelper
+import net.minecraft.client.Minecraft
+import net.minecraft.network.play.server.S02PacketChat
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.EventPriority
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import net.minecraftforge.fml.common.gameevent.InputEvent
+import org.lwjgl.input.Keyboard
+
+object InquisitorWaypointShare {
+ private val config get() = SkyHanniMod.feature.diana.inquisitorSharing
+ private val partyPattern = "§9Party §8> (?<playerName>.*)§f: §rx: (?<x>.*), y: (?<y>.*), z: (?<z>.*)".toPattern()
+ private val diedPattern = "§9Party §8> (?<playerName>.*)§f: §rInquisitor dead!".toPattern()
+
+ private var time = 0L
+ private var testTime = 0L
+ private var lastTestMessage = ""
+ private var inquisitor = -1
+ private var lastShareTime = 0L
+
+ var waypoints = mapOf<String, LorenzVec>()
+
+ @SubscribeEvent
+ fun onWorldChange(event: WorldEvent.Load) {
+ waypoints = waypoints.editCopy { clear() }
+ }
+
+ @SubscribeEvent
+ fun onChatMessage(event: LorenzChatEvent) {
+ if (!isEnabled()) return
+ val message = event.message
+ // TODO use inquisitor
+// if (message.endsWith("§r§eYou dug out §r§2a Minotaur§r§e!")) {
+ if (message.endsWith("§r§eYou dug out §r§2a Minos Champion§r§e!")) {
+ time = System.currentTimeMillis()
+ LorenzUtils.debug("found Champion/Inquisitor")
+ }
+ if (message.contains("§eYou dug out")) {
+ testTime = System.currentTimeMillis()
+ lastTestMessage = message
+ }
+ }
+
+ @SubscribeEvent
+ fun onDamageIndicatorDetected(event: DamageIndicatorDetectedEvent) {
+ if (!isEnabled()) return
+ val bossType = event.entityData.bossType
+ // TODO use inquisitor
+// if (bossType == BossType.MINOTAUR) {
+ if (bossType == BossType.MINOS_INQUISITOR) {
+ val diff = System.currentTimeMillis() - time
+ LorenzUtils.debug("diff: $diff")
+ if (diff > 100 || diff < 0) {
+ val testDiff = System.currentTimeMillis() - testTime
+ if (testDiff > 100 || testDiff < 0) {
+ LorenzUtils.debug("testDiff: $diff")
+ return
+ } else {
+ LorenzUtils.debug("wrong Inquisitor message!")
+ println("lastTestMessage: '$lastTestMessage'")
+
+ }
+ }
+ val keyName = KeybindHelper.getKeyName(config.keyBindShare)
+ val message =
+ "§e[SkyHanni] §l§bYou found a Inquisitor! Press §l§chere §l§bor §c$keyName to share the location!"
+ LorenzUtils.clickableChat(message, "shshareinquis")
+ inquisitor = event.entityData.entity.entityId
+ }
+ }
+
+ @SubscribeEvent
+ fun onBossHealthChange(event: BossHealthChangeEvent) {
+ if (event.health <= 0) {
+ val entityData = event.entityData
+ val bossType = entityData.bossType
+ // TODO use inquisitor
+// if (bossType == BossType.MINOTAUR) {
+ if (bossType == BossType.MINOS_INQUISITOR) {
+ sendDeath()
+ }
+ }
+ }
+
+ @SubscribeEvent
+ fun onKeyBindPressed(event: InputEvent.KeyInputEvent) {
+ if (!isEnabled()) return
+ if (!Keyboard.getEventKeyState()) return
+ val key = if (Keyboard.getEventKey() == 0) Keyboard.getEventCharacter().code + 256 else Keyboard.getEventKey()
+ if (config.keyBindShare == key) {
+ sendInquisitor()
+ }
+ }
+
+ private fun sendDeath() {
+ if (!isEnabled()) return
+ if (lastShareTime + 5000 > System.currentTimeMillis()) return
+ lastShareTime = System.currentTimeMillis()
+
+ if (inquisitor == -1) {
+ LorenzUtils.debug("Inquisitor is already null!")
+ return
+ }
+ inquisitor = -1
+ LorenzUtils.sendCommandToServer("pc Inquisitor dead!")
+ }
+
+ fun sendInquisitor() {
+ if (!isEnabled()) return
+ if (lastShareTime + 5000 > System.currentTimeMillis()) return
+ lastShareTime = System.currentTimeMillis()
+
+ if (inquisitor == -1) {
+ LorenzUtils.chat("§c[SkyHanni] No Inquisitor Found!")
+ return
+ }
+
+ val inquisitor = Minecraft.getMinecraft().theWorld.getEntityByID(inquisitor)
+ if (inquisitor == null) {
+ LorenzUtils.chat("§cInquisitor out of range!")
+ return
+ }
+
+ if (inquisitor.isDead) {
+ LorenzUtils.chat("§cInquisitor is ded")
+ return
+ }
+ val location = inquisitor.getLorenzVec()
+ val x = location.x.toInt()
+ val y = location.y.toInt()
+ val z = location.z.toInt()
+ LorenzUtils.sendCommandToServer("pc x: $x, y: $y, z: $z ")
+ }
+
+ @SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true)
+ fun onFirstChatEvent(event: PacketEvent.ReceiveEvent) {
+ if (!isEnabled()) return
+ val packet = event.packet
+ if (packet !is S02PacketChat) return
+ val messageComponent = packet.chatComponent
+
+ val message = LorenzUtils.stripVanillaMessage(messageComponent.formattedText)
+ if (packet.type.toInt() != 0) return
+
+ partyPattern.matchMatcher(message) {
+ val playerName = 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 cleanName = playerName.cleanPlayerName()
+ if (!waypoints.containsKey(cleanName)) {
+ LorenzUtils.chat("§e[SkyHanni] $playerName §l§efound an inquisitor at §l§c$x $y $z!")
+ if (cleanName != LorenzUtils.getPlayerName()) {
+ TitleUtils.sendTitle("§dINQUISITOR §efrom §b$cleanName", 5_000)
+ SoundUtils.playBeepSound()
+ }
+ }
+ waypoints = waypoints.editCopy { this[cleanName] = location }
+ if (config.focusInquisitor) {
+ GriffinBurrowHelper.setTargetLocation(location.add(0, 1, 0))
+ GriffinBurrowHelper.animationLocation = LocationUtils.playerLocation()
+ }
+
+ event.isCanceled = true
+ }
+ diedPattern.matchMatcher(message) {
+ val playerName = group("playerName").cleanPlayerName()
+ waypoints = waypoints.editCopy { remove(playerName) }
+ LorenzUtils.debug("Inquisitor died from '$playerName'")
+ }
+ }
+
+ fun isEnabled() = LorenzUtils.inSkyBlock && LorenzUtils.skyBlockIsland == IslandType.HUB && config.enabled
+
+ fun maybeRemove(playerName: String) {
+ if (!DamageIndicatorManager.isBossSpawned(BossType.MINOTAUR)) {
+ waypoints = waypoints.editCopy { remove(playerName) }
+ LorenzUtils.chat("§e[SkyHanni] Inquisitor from $playerName not found, deleting.")
+ }
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
index 4a67184f2..df636e0ae 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt
@@ -234,13 +234,17 @@ object LorenzUtils {
return this
}
- private var lastCommandSent = 0L
+ private var lastMessageSent = 0L
fun sendCommandToServer(command: String) {
- if (System.currentTimeMillis() > lastCommandSent + 2_000) {
- lastCommandSent = System.currentTimeMillis()
+ sendMessageToServer("/$command")
+ }
+
+ fun sendMessageToServer(message: String) {
+ if (System.currentTimeMillis() > lastMessageSent + 2_000) {
+ lastMessageSent = System.currentTimeMillis()
val thePlayer = Minecraft.getMinecraft().thePlayer
- thePlayer.sendChatMessage("/$command")
+ thePlayer.sendChatMessage(message)
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt
index 06187da3c..b13dbc59a 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt
@@ -57,9 +57,19 @@ object StringUtils {
fun String.matchRegex(@Language("RegExp") regex: String): Boolean = regex.toRegex().matches(this)
- private fun String.removeAtBeginning(text: String): String = if (this.startsWith(text)) substring(text.length) else this
+ private fun String.removeAtBeginning(text: String): String =
+ if (this.startsWith(text)) substring(text.length) else this
// TODO find better name for this method
inline fun <T> Pattern.matchMatcher(text: String, consumer: Matcher.() -> T) =
matcher(text).let { if (it.matches()) consumer(it) else null }
+
+ fun String.cleanPlayerName(): String {
+ val split = split(" ")
+ return if (split.size > 1) {
+ split[1].removeColor()
+ } else {
+ split[0].removeColor()
+ }
+ }
}