summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/commands
diff options
context:
space:
mode:
authorWalker Selby <git@walkerselby.com>2023-10-21 07:31:19 +0100
committerGitHub <noreply@github.com>2023-10-21 08:31:19 +0200
commit68abc8ade546de62aee76e0b786993fc59fbc3cc (patch)
treebfc1e6fe389c7daf5cbf2ca109be70233d014590 /src/main/java/at/hannibal2/skyhanni/features/commands
parentc5745ed4ee07759261da1dc9c0f654617276f163 (diff)
downloadskyhanni-68abc8ade546de62aee76e0b786993fc59fbc3cc.tar.gz
skyhanni-68abc8ade546de62aee76e0b786993fc59fbc3cc.tar.bz2
skyhanni-68abc8ade546de62aee76e0b786993fc59fbc3cc.zip
Internal Change: Misc Refactoring (#551)
Internal Change: Misc Refactoring #551
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/commands')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt45
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt86
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt38
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt26
4 files changed, 195 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt
new file mode 100644
index 000000000..62e6f9e9c
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt
@@ -0,0 +1,45 @@
+package at.hannibal2.skyhanni.features.commands.tabcomplete
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.PacketEvent
+import at.hannibal2.skyhanni.events.RepositoryReloadEvent
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.jsonobjects.SackListJson
+import net.minecraft.network.play.client.C01PacketChatMessage
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+object GetFromSacksTabComplete {
+ private val config get() = SkyHanniMod.feature.commands.tabComplete
+ private var sackList = emptyList<String>()
+ private val commands = arrayOf("gfs", "getfromsacks")
+
+ @SubscribeEvent
+ fun onRepoReload(event: RepositoryReloadEvent) {
+ sackList = event.getConstant<SackListJson>("Sacks")?.sackList ?: return
+ }
+
+ fun handleTabComplete(command: String): List<String>? {
+ if (!isEnabled()) return null
+ if (command !in commands) return null
+
+ return sackList.map { it.replace(" ", "_") }
+ }
+
+ @SubscribeEvent
+ fun onSendPacket(event: PacketEvent.SendEvent) {
+ if (!isEnabled()) return
+
+ val packet = event.packet as? C01PacketChatMessage ?: return
+ val message = packet.message
+ if (commands.any { message.startsWith("/$it ") }) {
+ val rawName = message.split(" ")[1]
+ val realName = rawName.replace("_", " ")
+ if (realName == rawName) return
+ if (realName !in sackList) return
+ event.isCanceled = true
+ LorenzUtils.sendMessageToServer(message.replace(rawName, realName))
+ }
+ }
+
+ fun isEnabled() = LorenzUtils.inSkyBlock && config.gfsSack
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt
new file mode 100644
index 000000000..96bfeb83a
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt
@@ -0,0 +1,86 @@
+package at.hannibal2.skyhanni.features.commands.tabcomplete
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
+import at.hannibal2.skyhanni.data.FriendAPI
+import at.hannibal2.skyhanni.data.PartyAPI
+import at.hannibal2.skyhanni.events.RepositoryReloadEvent
+import at.hannibal2.skyhanni.utils.EntityUtils.isNPC
+import at.hannibal2.skyhanni.utils.jsonobjects.VipVisitsJson
+import net.minecraft.client.Minecraft
+import net.minecraft.client.entity.EntityOtherPlayerMP
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+object PlayerTabComplete {
+ private val config get() = SkyHanniMod.feature.commands.tabComplete
+ private var vipVisitsJson: VipVisitsJson? = null
+
+ @SubscribeEvent
+ fun onRepoReload(event: RepositoryReloadEvent) {
+ vipVisitsJson = event.getConstant<VipVisitsJson>("VipVisits")
+ }
+
+ @SubscribeEvent
+ fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) {
+ event.move(2, "misc.tabCompleteCommands", "commands.tabComplete")
+ }
+
+ enum class PlayerCategory {
+ PARTY,
+ FRIENDS,
+ ISLAND_PLAYERS,
+ }
+
+ fun handleTabComplete(command: String): List<String>? {
+ val commands = mapOf(
+ "p" to listOf(PlayerCategory.PARTY),
+ "party" to listOf(PlayerCategory.PARTY),
+ "pt" to listOf(PlayerCategory.FRIENDS, PlayerCategory.ISLAND_PLAYERS), // /party transfer
+ "f" to listOf(PlayerCategory.FRIENDS),
+ "friend" to listOf(PlayerCategory.FRIENDS),
+
+ "msg" to listOf(),
+ "w" to listOf(),
+ "tell" to listOf(),
+ "boop" to listOf(),
+
+ "visit" to listOf(),
+ "invite" to listOf(),
+ "ah" to listOf(),
+
+ "pv" to listOf(), // NEU's Profile Viewer
+ "shmarkplayer" to listOf(), // SkyHanni's Mark Player
+ )
+ val ignored = commands[command] ?: return null
+
+ return buildList {
+
+ if (config.friends && PlayerCategory.FRIENDS !in ignored) {
+ FriendAPI.getAllFriends().filter { it.bestFriend || !config.onlyBestFriends }
+ .forEach { add(it.name) }
+ }
+
+ if (config.islandPlayers && PlayerCategory.ISLAND_PLAYERS !in ignored) {
+ for (entity in Minecraft.getMinecraft().theWorld.playerEntities) {
+ if (!entity.isNPC() && entity is EntityOtherPlayerMP) {
+ add(entity.name)
+ }
+ }
+ }
+
+ if (config.party && PlayerCategory.PARTY !in ignored) {
+ for (member in PartyAPI.partyMembers) {
+ add(member)
+ }
+ }
+
+ if (config.vipVisits && command == "visit") {
+ vipVisitsJson?.let {
+ for (visit in it.vipVisits) {
+ add(visit)
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt
new file mode 100644
index 000000000..352748c0b
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/TabComplete.kt
@@ -0,0 +1,38 @@
+package at.hannibal2.skyhanni.features.commands.tabcomplete
+
+import at.hannibal2.skyhanni.features.misc.CollectionTracker
+
+object TabComplete {
+
+ @JvmStatic
+ fun handleTabComplete(leftOfCursor: String, originalArray: Array<String>): Array<String>? {
+ val splits = leftOfCursor.split(" ")
+ if (splits.size > 1) {
+ var command = splits.first().lowercase()
+ if (command.startsWith("/")) {
+ command = command.substring(1)
+ customTabComplete(command)?.let {
+ return buildResponse(splits, it).toSet().toTypedArray()
+ }
+ }
+ }
+ return null
+ }
+
+ private fun customTabComplete(command: String): List<String>? {
+ GetFromSacksTabComplete.handleTabComplete(command)?.let { return it }
+ WarpTabComplete.handleTabComplete(command)?.let { return it }
+ PlayerTabComplete.handleTabComplete(command)?.let { return it }
+ CollectionTracker.handleTabComplete(command)?.let { return it }
+
+ return null
+ }
+
+ private fun buildResponse(arguments: List<String>, fullResponse: List<String>): List<String> {
+ if (arguments.size == 2) {
+ val start = arguments[1].lowercase()
+ return fullResponse.filter { it.lowercase().startsWith(start) }
+ }
+ return emptyList()
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt
new file mode 100644
index 000000000..4120ebd9d
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt
@@ -0,0 +1,26 @@
+package at.hannibal2.skyhanni.features.commands.tabcomplete
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.RepositoryReloadEvent
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.jsonobjects.WarpsJson
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+object WarpTabComplete {
+ private val config get() = SkyHanniMod.feature.commands.tabComplete
+ private var warpsJson: WarpsJson? = null
+
+ @SubscribeEvent
+ fun onRepoReload(event: RepositoryReloadEvent) {
+ warpsJson = event.getConstant<WarpsJson>("Warps")
+ }
+
+ fun handleTabComplete(command: String): List<String>? {
+ if (!isEnabled()) return null
+ if (command != "warp") return null
+
+ return warpsJson?.warpCommands
+ }
+
+ fun isEnabled() = LorenzUtils.inSkyBlock && config.warps
+} \ No newline at end of file