package at.hannibal2.skyhanni.features.commands 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.MessageSendToServerEvent import at.hannibal2.skyhanni.features.misc.limbo.LimboTimeTracker import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.EntityUtils import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object PartyCommands { private val config get() = SkyHanniMod.feature.misc.commands fun kickOffline() { if (!config.shortCommands) return if (PartyAPI.partyMembers.isEmpty()) return ChatUtils.sendCommandToServer("party kickoffline") } fun disband() { if (!config.shortCommands) return if (PartyAPI.partyMembers.isEmpty()) return ChatUtils.sendCommandToServer("party disband") } fun warp() { if (!config.shortCommands) return if (PartyAPI.partyMembers.isEmpty()) return ChatUtils.sendCommandToServer("party warp") } fun kick(args: Array) { if (!config.shortCommands) return if (PartyAPI.partyMembers.isEmpty()) return if (args.isEmpty()) return if (args.size > 1 && config.partyKickReason) { ChatUtils.sendCommandToServer("pc Kicking ${args[0]}: ${args.drop(1).joinToString(" ").trim()}") } ChatUtils.sendCommandToServer("party kick ${args[0]}") } fun transfer(args: Array) { if (args.isEmpty()) { if (LimboTimeTracker.inLimbo) { LimboTimeTracker.printStats(true) return } ChatUtils.sendCommandToServer("pt") return } if (!config.shortCommands) return if (PartyAPI.partyMembers.isEmpty()) return ChatUtils.sendCommandToServer("party transfer ${args[0]}") } fun promote(args: Array) { if (!config.shortCommands) return if (PartyAPI.partyMembers.isEmpty()) return if (args.isEmpty()) return ChatUtils.sendCommandToServer("party promote ${args[0]}") } @SubscribeEvent fun onMessageSendToServer(event: MessageSendToServerEvent) { if (!config.partyKickReason) { return } if (!event.message.startsWith("/party kick ", ignoreCase = true) && !event.message.startsWith("/p kick ", ignoreCase = true) ) { return } val args = event.message.split(" ") if (args.size < 3) return val kickedPlayer = args[2] val kickReason = args.drop(3).joinToString(" ").trim() if (kickReason.isEmpty()) return event.cancel() ChatUtils.sendCommandToServer("pc Kicking $kickedPlayer: $kickReason") ChatUtils.sendCommandToServer("p kick $kickedPlayer") } fun customTabComplete(command: String): List? { if (command == "pk" || command == "pt" || command == "pp" && config.shortCommands) { return PartyAPI.partyMembers } if (command == "p" || command == "party") { val friends = if (config.tabComplete.friends) { FriendAPI.getAllFriends().filter { it.bestFriend || config.tabComplete.onlyBestFriends }.map { it.name } } else { emptyList() } val allOnLobby = EntityUtils.getPlayerEntities().map { it.name } return friends + getPartyCommands() + allOnLobby } return null } private fun getPartyCommands(): List { return if (config.tabComplete.partyCommands && PartyAPI.partyMembers.isNotEmpty()) { otherPartyCommands } else emptyList() } @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(5, "commands.usePartyTransferAlias", "commands.shortCommands") event.move(31, "commands", "misc.commands") } } private val otherPartyCommands = listOf( "Disband", "KickOffline", "Leave", "List", "Mute", "Private", "Warp", "Settings" )