diff options
| author | Walker Selby <git@walkerselby.com> | 2023-10-21 07:31:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-21 08:31:19 +0200 |
| commit | 68abc8ade546de62aee76e0b786993fc59fbc3cc (patch) | |
| tree | bfc1e6fe389c7daf5cbf2ca109be70233d014590 /src/main/java/at/hannibal2/skyhanni/features/commands | |
| parent | c5745ed4ee07759261da1dc9c0f654617276f163 (diff) | |
| download | skyhanni-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')
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 |
