diff --git a/src/main/kotlin/org/easyadmin/easyadmin/Easyadmin.kt b/src/main/kotlin/org/easyadmin/easyadmin/Easyadmin.kt index 252effb..cce8dc4 100644 --- a/src/main/kotlin/org/easyadmin/easyadmin/Easyadmin.kt +++ b/src/main/kotlin/org/easyadmin/easyadmin/Easyadmin.kt @@ -5,22 +5,29 @@ package org.easyadmin.easyadmin import org.bukkit.Bukkit import org.bukkit.ChatColor import org.bukkit.Material +import org.bukkit.Particle +import org.bukkit.Sound +import org.bukkit.FireworkEffect import org.bukkit.command.Command import org.bukkit.command.CommandSender +import org.bukkit.entity.Firework import org.bukkit.entity.Player import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.inventory.InventoryClickEvent +import org.bukkit.event.player.PlayerChatEvent +import org.bukkit.event.EventPriority import org.bukkit.inventory.ItemStack -import org.bukkit.inventory.meta.ItemMeta // Don't remove! -import org.bukkit.plugin.java.JavaPlugin // Don't remove! +import org.bukkit.inventory.meta.ItemMeta +import org.bukkit.inventory.meta.FireworkMeta +import org.bukkit.plugin.java.JavaPlugin +import java.util.* -@Suppress("DEPRECATION") class Easyadmin : JavaPlugin(), Listener { private val menuName = "${ChatColor.DARK_PURPLE}${ChatColor.BOLD}EasyAdmin" + private val banReasons = mutableMapOf>() override fun onEnable() { - // Register events and commands server.pluginManager.registerEvents(this, this) logger.info("${ChatColor.GREEN}EasyAdmin plugin enabled!") } @@ -51,31 +58,24 @@ class Easyadmin : JavaPlugin(), Listener { private fun openAdminMenu(player: Player) { val inventory = Bukkit.createInventory(null, 27, menuName) - // Time control inventory.setItem(10, createGuiItem(Material.CLOCK, "${ChatColor.YELLOW}Time Control", "${ChatColor.GRAY}Click to cycle time")) - // Weather control inventory.setItem(11, createGuiItem(Material.WATER_BUCKET, "${ChatColor.BLUE}Weather Control", "${ChatColor.GRAY}Click to cycle weather")) - // Kick all players inventory.setItem(12, createGuiItem(Material.IRON_BOOTS, "${ChatColor.RED}Kick All", "${ChatColor.GRAY}Kick all non-admin players")) - // Player management inventory.setItem(13, createGuiItem(Material.PLAYER_HEAD, "${ChatColor.GREEN}Player Management", "${ChatColor.GRAY}Manage online players")) - // World management inventory.setItem(14, createGuiItem(Material.GRASS_BLOCK, "${ChatColor.GOLD}World Management", "${ChatColor.GRAY}Manage worlds")) - // Server properties inventory.setItem(15, createGuiItem(Material.COMMAND_BLOCK, "${ChatColor.LIGHT_PURPLE}Server Settings", "${ChatColor.GRAY}View and modify server properties")) - // Plugin management inventory.setItem(16, createGuiItem(Material.BOOK, "${ChatColor.AQUA}Plugin Management", "${ChatColor.GRAY}Enable/disable plugins")) @@ -85,17 +85,100 @@ class Easyadmin : JavaPlugin(), Listener { private fun createGuiItem(material: Material, name: String, vararg lore: String): ItemStack { val item = ItemStack(material, 1) val meta = item.itemMeta!! - meta.setDisplayName(name) - - if (lore.isNotEmpty()) { - meta.lore = lore.toList() - } - + if (lore.isNotEmpty()) meta.lore = lore.toList() item.itemMeta = meta return item } + private fun getRandomKickMessage(playerName: String): String { + val messages = listOf( + /* + + Schema: + "$playerName, blalblalblsalablsbl", + "nexte", + "ende" + + */ + "$playerName wurde von Marians Hund getreten", + "$playerName wurde rausgeschmissen", + "$playerName wurde von Temu versandt" + ) + return "${ChatColor.GOLD}${messages.random()}" + } + + private fun getRandomBanMessage(playerName: String): String { + val messages = listOf( + + /* + + Schema: + "$playerName, blalblalblsalablsbl", + "nexte", + "ende" + + */ + + "$playerName, Salvete Servus!", + "$playerName wurde von Marians Hund gegessen!", + "$playerName ist Analgefickt worden" + ) + return "${ChatColor.RED}${messages.random()}" + } + + private fun spawnFireworks(player: Player) { + val loc = player.location + val firework = player.world.spawn(loc, Firework::class.java) + val meta = firework.fireworkMeta + + val effect = FireworkEffect.builder() + .with(FireworkEffect.Type.BURST) + .withColor(org.bukkit.Color.RED) + .withFade(org.bukkit.Color.ORANGE) + .withFlicker() + .build() + + meta.addEffect(effect) + meta.power = 1 + firework.fireworkMeta = meta + + player.world.playSound(loc, Sound.ENTITY_FIREWORK_ROCKET_BLAST, 1f, 1f) + player.world.spawnParticle(Particle.FIREWORK, loc, 100, 0.5, 0.5, 0.5, 0.1) + } + + @EventHandler(priority = EventPriority.HIGH) + fun onPlayerChat(event: PlayerChatEvent) { + val player = event.player + val banData = banReasons[player.uniqueId] ?: return + + event.isCancelled = true + val reason = event.message + + val targetPlayer = banData.second + val targetName = targetPlayer.name + + if (reason.equals("cancel", ignoreCase = true)) { + player.sendMessage("${ChatColor.RED}Cancelled ban for $targetName") + } else { + val banMessage = getRandomBanMessage(targetName) + Bukkit.broadcastMessage(banMessage) + + if (targetPlayer.isOnline) spawnFireworks(targetPlayer) + + targetPlayer.banPlayer("${ChatColor.RED}You have been banned by ${player.name}\n" + + "${ChatColor.RED}Reason: $reason") + player.sendMessage("${ChatColor.RED}Banned $targetName for: $reason") + + if (targetPlayer.isOnline) { + targetPlayer.kickPlayer("${ChatColor.RED}You have been banned by ${player.name}\n" + + "${ChatColor.RED}Reason: $reason") + } + } + + banReasons.remove(player.uniqueId) + } + @EventHandler fun onInventoryClick(event: InventoryClickEvent) { val title = event.view.title @@ -103,10 +186,9 @@ class Easyadmin : JavaPlugin(), Listener { if (!player.hasPermission("easyadmin.use")) return - // Handle clicks in the main menu + // Main menu if (title == menuName) { event.isCancelled = true - when (event.slot) { 10 -> handleTimeControl(player) 11 -> handleWeatherControl(player) @@ -119,44 +201,39 @@ class Easyadmin : JavaPlugin(), Listener { return } - // Handle player management menu + // Player management if (title == "${ChatColor.GREEN}${ChatColor.BOLD}Player Management") { event.isCancelled = true + if (event.slot == 53) { openAdminMenu(player); return } val clickedItem = event.currentItem ?: return - if (clickedItem.type != Material.PLAYER_HEAD) return + if (clickedItem.type != Material.PLAYER_HEAD && clickedItem.type != Material.ARROW) return + if (clickedItem.type == Material.ARROW) { openAdminMenu(player); return } val itemMeta = clickedItem.itemMeta ?: return - val displayName = itemMeta.displayName - val targetPlayerName = ChatColor.stripColor(displayName) ?: return + val targetPlayer = Bukkit.getPlayerExact(ChatColor.stripColor(itemMeta.displayName) ?: return) ?: return - val targetPlayer = Bukkit.getPlayerExact(targetPlayerName) ?: return - - // Left click: teleport to player if (event.isLeftClick) { player.teleport(targetPlayer.location) player.sendMessage("${ChatColor.GREEN}Teleported to ${targetPlayer.name}!") player.closeInventory() - } - // Right click: open player options menu - else if (event.isRightClick) { + } else if (event.isRightClick) { openPlayerOptionsMenu(player, targetPlayer) } return } - // Handle world management menu + // World management if (title == "${ChatColor.GOLD}${ChatColor.BOLD}World Management") { event.isCancelled = true + if (event.slot == 26) { openAdminMenu(player); return } val clickedItem = event.currentItem ?: return - if (clickedItem.type !in listOf(Material.GRASS_BLOCK, Material.NETHERRACK, Material.END_STONE)) return + if (clickedItem.type !in listOf(Material.GRASS_BLOCK, Material.NETHERRACK, Material.END_STONE, Material.ARROW)) return + if (clickedItem.type == Material.ARROW) { openAdminMenu(player); return } val itemMeta = clickedItem.itemMeta ?: return - val displayName = itemMeta.displayName - val worldName = ChatColor.stripColor(displayName) ?: return - - val world = Bukkit.getWorld(worldName) ?: return + val world = Bukkit.getWorld(ChatColor.stripColor(itemMeta.displayName) ?: return) ?: return player.teleport(world.spawnLocation) player.sendMessage("${ChatColor.GREEN}Teleported to ${world.name}'s spawn point!") @@ -164,9 +241,10 @@ class Easyadmin : JavaPlugin(), Listener { return } - // Handle server settings menu + // Server settings if (title == "${ChatColor.LIGHT_PURPLE}${ChatColor.BOLD}Server Settings") { event.isCancelled = true + if (event.slot == 26) { openAdminMenu(player); return } when (event.slot) { 10 -> cycleDifficulty(player) @@ -177,24 +255,21 @@ class Easyadmin : JavaPlugin(), Listener { 15 -> saveAllWorlds(player) 16 -> player.sendMessage("${ChatColor.YELLOW}Server restart requires additional configuration.") } - - // Refresh the menu to show updated settings openServerSettings(player) return } - // Handle plugin management menu + // Plugin management if (title == "${ChatColor.AQUA}${ChatColor.BOLD}Plugin Management") { event.isCancelled = true + if (event.slot == 53) { openAdminMenu(player); return } val clickedItem = event.currentItem ?: return - if (clickedItem.type !in listOf(Material.LIME_DYE, Material.GRAY_DYE)) return + if (clickedItem.type !in listOf(Material.LIME_DYE, Material.GRAY_DYE, Material.ARROW)) return + if (clickedItem.type == Material.ARROW) { openAdminMenu(player); return } val itemMeta = clickedItem.itemMeta ?: return - val displayName = itemMeta.displayName - val pluginName = ChatColor.stripColor(displayName) ?: return - - val plugin = Bukkit.getPluginManager().getPlugin(pluginName) ?: return + val plugin = Bukkit.getPluginManager().getPlugin(ChatColor.stripColor(itemMeta.displayName) ?: return) ?: return if (plugin.name == "EasyAdmin") { player.sendMessage("${ChatColor.RED}You cannot disable the EasyAdmin plugin from within itself!") @@ -208,16 +283,13 @@ class Easyadmin : JavaPlugin(), Listener { Bukkit.getPluginManager().enablePlugin(plugin) player.sendMessage("${ChatColor.GREEN}Enabled plugin: ${plugin.name}") } - - // Refresh the plugin management menu openPluginManagement(player) return } - // Handle player options menu + // Player options if (title.startsWith("${ChatColor.YELLOW}Player: ")) { event.isCancelled = true - val targetPlayerName = title.substring("${ChatColor.YELLOW}Player: ".length) val targetPlayer = Bukkit.getPlayerExact(targetPlayerName) ?: return @@ -236,11 +308,22 @@ class Easyadmin : JavaPlugin(), Listener { 13 -> healPlayer(player, targetPlayer) 14 -> kickPlayer(player, targetPlayer) 15 -> { - // Open ban interface (simplified for this example) - player.sendMessage("${ChatColor.YELLOW}Use /ban ${targetPlayer.name} to ban this player.") + banReasons[player.uniqueId] = Pair("", targetPlayer) + player.closeInventory() + player.sendMessage("${ChatColor.YELLOW}Please enter a ban reason in chat.") + player.sendMessage("${ChatColor.YELLOW}Type 'cancel' to cancel the ban.") + } + 16 -> { + if (targetPlayer == player) { + player.sendMessage("${ChatColor.RED}You can't spectate yourself!") + return + } + player.gameMode = org.bukkit.GameMode.SPECTATOR + player.teleport(targetPlayer) + player.sendMessage("${ChatColor.GREEN}Now spectating ${targetPlayer.name}!") player.closeInventory() } - 26 -> openPlayerManagement(player) // Back button + 26 -> openPlayerManagement(player) } return } @@ -249,10 +332,10 @@ class Easyadmin : JavaPlugin(), Listener { private fun handleTimeControl(player: Player) { val world = player.world when (world.time) { - in 0..6000 -> world.time = 6000 // Set to noon - in 6001..12000 -> world.time = 12000 // Set to sunset - in 12001..18000 -> world.time = 18000 // Set to midnight - else -> world.time = 0 // Set to sunrise + in 0..6000 -> world.time = 6000 + in 6001..12000 -> world.time = 12000 + in 12001..18000 -> world.time = 18000 + else -> world.time = 0 } player.sendMessage("${ChatColor.GREEN}Time changed in ${world.name}!") } @@ -283,6 +366,8 @@ class Easyadmin : JavaPlugin(), Listener { for (onlinePlayer in Bukkit.getOnlinePlayers()) { if (!onlinePlayer.hasPermission("easyadmin.exempt") && onlinePlayer != player) { + Bukkit.broadcastMessage(getRandomKickMessage(onlinePlayer.name)) + spawnFireworks(onlinePlayer) onlinePlayer.kickPlayer(kickMessage) kickCount++ } @@ -296,60 +381,59 @@ class Easyadmin : JavaPlugin(), Listener { var slot = 0 for (onlinePlayer in Bukkit.getOnlinePlayers()) { - if (slot >= 54) break + if (slot >= 53) break val playerHead = ItemStack(Material.PLAYER_HEAD, 1) val meta = playerHead.itemMeta!! meta.setDisplayName("${ChatColor.YELLOW}${onlinePlayer.name}") - val lore = mutableListOf() - lore.add("${ChatColor.GRAY}Health: ${ChatColor.RED}${onlinePlayer.health}") - lore.add("${ChatColor.GRAY}Gamemode: ${ChatColor.GOLD}${onlinePlayer.gameMode}") - lore.add("${ChatColor.GRAY}World: ${ChatColor.GREEN}${onlinePlayer.world.name}") - lore.add("") - lore.add("${ChatColor.GREEN}Left-click: ${ChatColor.WHITE}Teleport to player") - lore.add("${ChatColor.RED}Right-click: ${ChatColor.WHITE}More options") + val lore = mutableListOf( + "${ChatColor.GRAY}Health: ${ChatColor.RED}${onlinePlayer.health}", + "${ChatColor.GRAY}Gamemode: ${ChatColor.GOLD}${onlinePlayer.gameMode}", + "${ChatColor.GRAY}World: ${ChatColor.GREEN}${onlinePlayer.world.name}", + "", + "${ChatColor.GREEN}Left-click: ${ChatColor.WHITE}Teleport to player", + "${ChatColor.RED}Right-click: ${ChatColor.WHITE}More options" + ) meta.lore = lore playerHead.itemMeta = meta - inventory.setItem(slot, playerHead) slot++ } + inventory.setItem(53, createGuiItem(Material.ARROW, "${ChatColor.YELLOW}Back", + "${ChatColor.GRAY}Return to main menu")) + player.openInventory(inventory) } private fun openPlayerOptionsMenu(player: Player, targetPlayer: Player) { val inventory = Bukkit.createInventory(null, 27, "${ChatColor.YELLOW}Player: ${targetPlayer.name}") - // Teleport to player inventory.setItem(10, createGuiItem(Material.ENDER_PEARL, "${ChatColor.GREEN}Teleport to Player", "${ChatColor.GRAY}Teleport to ${targetPlayer.name}")) - // Teleport player to you inventory.setItem(11, createGuiItem(Material.ENDER_EYE, "${ChatColor.BLUE}Teleport Player to You", "${ChatColor.GRAY}Teleport ${targetPlayer.name} to your location")) - // Change player gamemode inventory.setItem(12, createGuiItem(Material.DIAMOND_SWORD, "${ChatColor.GOLD}Change Gamemode", "${ChatColor.GRAY}Current: ${ChatColor.WHITE}${targetPlayer.gameMode}", "${ChatColor.GRAY}Click to cycle")) - // Heal player inventory.setItem(13, createGuiItem(Material.GOLDEN_APPLE, "${ChatColor.LIGHT_PURPLE}Heal Player", "${ChatColor.GRAY}Health: ${ChatColor.RED}${targetPlayer.health}/${targetPlayer.maxHealth}", "${ChatColor.GRAY}Click to restore health and hunger")) - // Kick player inventory.setItem(14, createGuiItem(Material.IRON_BOOTS, "${ChatColor.RED}Kick Player", "${ChatColor.GRAY}Kick ${targetPlayer.name} from the server")) - // Ban player inventory.setItem(15, createGuiItem(Material.BARRIER, "${ChatColor.DARK_RED}Ban Player", "${ChatColor.GRAY}Ban ${targetPlayer.name} from the server")) - // Back button + inventory.setItem(16, createGuiItem(Material.ENDER_EYE, "${ChatColor.AQUA}Spectate Player", + "${ChatColor.GRAY}Spectate ${targetPlayer.name}")) + inventory.setItem(26, createGuiItem(Material.ARROW, "${ChatColor.YELLOW}Back", "${ChatColor.GRAY}Return to player list")) @@ -357,9 +441,7 @@ class Easyadmin : JavaPlugin(), Listener { } private fun cycleGamemode(player: Player, targetPlayer: Player) { - val currentGamemode = targetPlayer.gameMode - - val newGamemode = when (currentGamemode) { + val newGamemode = when (targetPlayer.gameMode) { org.bukkit.GameMode.SURVIVAL -> org.bukkit.GameMode.CREATIVE org.bukkit.GameMode.CREATIVE -> org.bukkit.GameMode.ADVENTURE org.bukkit.GameMode.ADVENTURE -> org.bukkit.GameMode.SPECTATOR @@ -369,8 +451,6 @@ class Easyadmin : JavaPlugin(), Listener { targetPlayer.gameMode = newGamemode player.sendMessage("${ChatColor.GREEN}Set ${targetPlayer.name}'s gamemode to $newGamemode.") targetPlayer.sendMessage("${ChatColor.GREEN}Your gamemode was set to $newGamemode by ${player.name}.") - - // Refresh the player options menu openPlayerOptionsMenu(player, targetPlayer) } @@ -382,20 +462,22 @@ class Easyadmin : JavaPlugin(), Listener { player.sendMessage("${ChatColor.GREEN}Healed ${targetPlayer.name}.") targetPlayer.sendMessage("${ChatColor.GREEN}You were healed by ${player.name}.") - - // Refresh the player options menu openPlayerOptionsMenu(player, targetPlayer) } - private fun kickPlayer(player: Player, targetPlayer: Player) { + private fun kickPlayer(admin: Player, targetPlayer: Player) { if (targetPlayer.hasPermission("easyadmin.exempt")) { - player.sendMessage("${ChatColor.RED}You cannot kick ${targetPlayer.name} as they are exempt!") + admin.sendMessage("${ChatColor.RED}You cannot kick ${targetPlayer.name} as they are exempt!") return } + val kickMessage = getRandomKickMessage(targetPlayer.name) + Bukkit.broadcastMessage(kickMessage) + + spawnFireworks(targetPlayer) targetPlayer.kickPlayer("${ChatColor.RED}You have been kicked by an administrator.") - player.sendMessage("${ChatColor.GREEN}Kicked ${targetPlayer.name} from the server.") - player.closeInventory() + admin.sendMessage("${ChatColor.GREEN}Kicked ${targetPlayer.name} from the server.") + admin.closeInventory() } private fun openWorldManagement(player: Player) { @@ -403,100 +485,91 @@ class Easyadmin : JavaPlugin(), Listener { var slot = 0 for (world in Bukkit.getWorlds()) { - if (slot >= 27) break + if (slot >= 26) break - val worldIcon = ItemStack(Material.GRASS_BLOCK, 1) - if (world.environment == org.bukkit.World.Environment.NETHER) { - worldIcon.type = Material.NETHERRACK - } else if (world.environment == org.bukkit.World.Environment.THE_END) { - worldIcon.type = Material.END_STONE - } + val worldIcon = ItemStack(when (world.environment) { + org.bukkit.World.Environment.NETHER -> Material.NETHERRACK + org.bukkit.World.Environment.THE_END -> Material.END_STONE + else -> Material.GRASS_BLOCK + }, 1) val meta = worldIcon.itemMeta!! meta.setDisplayName("${ChatColor.YELLOW}${world.name}") - val lore = mutableListOf() - lore.add("${ChatColor.GRAY}Players: ${ChatColor.WHITE}${world.players.size}") - lore.add("${ChatColor.GRAY}Time: ${ChatColor.WHITE}${world.time}") - lore.add("${ChatColor.GRAY}Weather: ${ChatColor.WHITE}${if (world.hasStorm()) "Raining" else "Clear"}") - lore.add("") - lore.add("${ChatColor.GREEN}Click: ${ChatColor.WHITE}Teleport to world spawn") + meta.lore = listOf( + "${ChatColor.GRAY}Players: ${ChatColor.WHITE}${world.players.size}", + "${ChatColor.GRAY}Time: ${ChatColor.WHITE}${world.time}", + "${ChatColor.GRAY}Weather: ${ChatColor.WHITE}${if (world.hasStorm()) "Raining" else "Clear"}", + "", + "${ChatColor.GREEN}Click: ${ChatColor.WHITE}Teleport to world spawn" + ) - meta.lore = lore worldIcon.itemMeta = meta - inventory.setItem(slot, worldIcon) slot++ } + inventory.setItem(26, createGuiItem(Material.ARROW, "${ChatColor.YELLOW}Back", + "${ChatColor.GRAY}Return to main menu")) + player.openInventory(inventory) } private fun openServerSettings(player: Player) { val inventory = Bukkit.createInventory(null, 27, "${ChatColor.LIGHT_PURPLE}${ChatColor.BOLD}Server Settings") - // Difficulty setting inventory.setItem(10, createGuiItem(Material.ZOMBIE_HEAD, "${ChatColor.RED}Difficulty", "${ChatColor.GRAY}Current: ${ChatColor.WHITE}${player.world.difficulty}", "${ChatColor.GRAY}Click to cycle")) - // Gamemode setting inventory.setItem(11, createGuiItem(Material.DIAMOND_SWORD, "${ChatColor.BLUE}Default Gamemode", "${ChatColor.GRAY}Current: ${ChatColor.WHITE}${Bukkit.getDefaultGameMode()}", "${ChatColor.GRAY}Click to cycle")) - // Toggle mob spawning val spawnMobs = player.world.getGameRuleValue(org.bukkit.GameRule.DO_MOB_SPAWNING) ?: true inventory.setItem(12, createGuiItem(Material.SPAWNER, "${ChatColor.GREEN}Mob Spawning", "${ChatColor.GRAY}Current: ${if (spawnMobs) "${ChatColor.GREEN}Enabled" else "${ChatColor.RED}Disabled"}", "${ChatColor.GRAY}Click to toggle mob spawning")) - // PVP toggle inventory.setItem(13, createGuiItem(Material.GOLDEN_SWORD, "${ChatColor.GOLD}PVP", "${ChatColor.GRAY}Current: ${if (player.world.pvp) "${ChatColor.GREEN}Enabled" else "${ChatColor.RED}Disabled"}", "${ChatColor.GRAY}Click to toggle PVP")) - // Whitelist inventory.setItem(14, createGuiItem(Material.PAPER, "${ChatColor.WHITE}Whitelist", "${ChatColor.GRAY}Current: ${if (Bukkit.hasWhitelist()) "${ChatColor.GREEN}Enabled" else "${ChatColor.RED}Disabled"}", "${ChatColor.GRAY}Click to toggle whitelist")) - // Save all worlds inventory.setItem(15, createGuiItem(Material.FLOWER_POT, "${ChatColor.AQUA}Save All", "${ChatColor.GRAY}Click to save all worlds")) - // Restart server (placeholder) inventory.setItem(16, createGuiItem(Material.REDSTONE_BLOCK, "${ChatColor.DARK_RED}Restart Server", "${ChatColor.GRAY}Click to restart server", "${ChatColor.RED}This requires additional setup")) + inventory.setItem(26, createGuiItem(Material.ARROW, "${ChatColor.YELLOW}Back", + "${ChatColor.GRAY}Return to main menu")) + player.openInventory(inventory) } private fun cycleDifficulty(player: Player) { val world = player.world - val difficulty = world.difficulty - - world.difficulty = when (difficulty) { + world.difficulty = when (world.difficulty) { org.bukkit.Difficulty.PEACEFUL -> org.bukkit.Difficulty.EASY org.bukkit.Difficulty.EASY -> org.bukkit.Difficulty.NORMAL org.bukkit.Difficulty.NORMAL -> org.bukkit.Difficulty.HARD org.bukkit.Difficulty.HARD -> org.bukkit.Difficulty.PEACEFUL } - player.sendMessage("${ChatColor.GREEN}Difficulty set to ${world.difficulty} in ${world.name}.") } private fun cycleDefaultGamemode(player: Player) { - val currentGamemode = Bukkit.getDefaultGameMode() - - val newGamemode = when (currentGamemode) { + val newGamemode = when (Bukkit.getDefaultGameMode()) { org.bukkit.GameMode.SURVIVAL -> org.bukkit.GameMode.CREATIVE org.bukkit.GameMode.CREATIVE -> org.bukkit.GameMode.ADVENTURE org.bukkit.GameMode.ADVENTURE -> org.bukkit.GameMode.SPECTATOR org.bukkit.GameMode.SPECTATOR -> org.bukkit.GameMode.SURVIVAL } - Bukkit.setDefaultGameMode(newGamemode) player.sendMessage("${ChatColor.GREEN}Default gamemode set to $newGamemode.") } @@ -504,7 +577,6 @@ class Easyadmin : JavaPlugin(), Listener { private fun toggleMobSpawning(player: Player) { val world = player.world val currentValue = world.getGameRuleValue(org.bukkit.GameRule.DO_MOB_SPAWNING) ?: true - world.setGameRule(org.bukkit.GameRule.DO_MOB_SPAWNING, !currentValue) player.sendMessage("${ChatColor.GREEN}Mob spawning ${if (!currentValue) "enabled" else "disabled"} in ${world.name}.") } @@ -512,22 +584,17 @@ class Easyadmin : JavaPlugin(), Listener { private fun togglePvP(player: Player) { val world = player.world world.pvp = !world.pvp - player.sendMessage("${ChatColor.GREEN}PvP ${if (world.pvp) "enabled" else "disabled"} in ${world.name}.") } private fun toggleWhitelist(player: Player) { val currentValue = Bukkit.hasWhitelist() Bukkit.setWhitelist(!currentValue) - player.sendMessage("${ChatColor.GREEN}Whitelist ${if (!currentValue) "enabled" else "disabled"}.") } private fun saveAllWorlds(player: Player) { - for (world in Bukkit.getWorlds()) { - world.save() - } - + Bukkit.getWorlds().forEach { it.save() } player.sendMessage("${ChatColor.GREEN}All worlds have been saved.") } @@ -536,22 +603,25 @@ class Easyadmin : JavaPlugin(), Listener { var slot = 0 for (plugin in Bukkit.getPluginManager().plugins) { - if (slot >= 54) break + if (slot >= 53) break val enabled = plugin.isEnabled - val material = if (enabled) Material.LIME_DYE else Material.GRAY_DYE - - val pluginItem = createGuiItem(material, + val pluginItem = createGuiItem( + if (enabled) Material.LIME_DYE else Material.GRAY_DYE, "${if (enabled) ChatColor.GREEN else ChatColor.RED}${plugin.name}", "${ChatColor.GRAY}Version: ${ChatColor.WHITE}${plugin.description.version}", "${ChatColor.GRAY}Status: ${if (enabled) "${ChatColor.GREEN}Enabled" else "${ChatColor.RED}Disabled"}", "", - "${ChatColor.YELLOW}Click to ${if (enabled) "disable" else "enable"}") + "${ChatColor.YELLOW}Click to ${if (enabled) "disable" else "enable"}" + ) inventory.setItem(slot, pluginItem) slot++ } + inventory.setItem(53, createGuiItem(Material.ARROW, "${ChatColor.YELLOW}Back", + "${ChatColor.GRAY}Return to main menu")) + player.openInventory(inventory) } } \ No newline at end of file