diff --git a/README.md b/README.md index f7f8297..63ec98e 100644 --- a/README.md +++ b/README.md @@ -4,18 +4,18 @@ I made this plugin by request of a friend, and because I didn't have anything to - PlaceholderAPI support - Staffmode - Freezing (through command or freeze wand in staffmode) -- Open inventory (through command or inventory wand in staffmode) +- Open inventory (through command or inventory wand in staffmode) - To move items in someone elses inventory, you need the permission "staff.invsee.move" - Knockback Stick (in staffmode) # Commands and permissions: - /staffmode - staff.staffmode - /freeze - staff.freeze -- /openinv - staff.openinv +- /invsee - staff.invsee - /vanish - /v - staff.vanish # Staff mode items: - Disable staffmode item - staff.staffmode - Freeze wand - staff.freeze.wand -- Inventory wand - staff.openinv.wand +- Inventory wand - staff.invsee.wand - Knockback Stick - staff.kbstick - Vanish item - staff.vanish.item \ No newline at end of file diff --git a/src/main/java/me/fivevl/staff/Config.kt b/src/main/java/me/fivevl/staff/Config.kt index 5849123..c98c14f 100644 --- a/src/main/java/me/fivevl/staff/Config.kt +++ b/src/main/java/me/fivevl/staff/Config.kt @@ -3,10 +3,14 @@ package me.fivevl.staff object Config { val mustBePlayer = Utils.instance!!.config.getString("must-be-player")!! val noPermission = Utils.instance!!.config.getString("no-permission")!! + val playerNotFound = Utils.instance!!.config.getString("player-not-found")!! val toggleStaffmodeOn = Utils.instance!!.config.getString("toggle-staffmode-on")!! val toggleStaffmodeOff = Utils.instance!!.config.getString("toggle-staffmode-off")!! val toggleVanishOn = Utils.instance!!.config.getString("toggle-vanish-on")!! val toggleVanishOff = Utils.instance!!.config.getString("toggle-vanish-off")!! + val toggleFreezeOn = Utils.instance!!.config.getString("toggle-freeze-on")!! + val toggleFreezeOff = Utils.instance!!.config.getString("toggle-freeze-off")!! + val currentlyFrozen = Utils.instance!!.config.getString("currently-frozen")!! val staffmodeHotbar = HashMap().apply { Utils.instance!!.config.getConfigurationSection("staffmode-hotbar")?.getKeys(false)?.forEach { put(it.toInt(), Utils.instance!!.config.getString("staffmode-hotbar.$it")!!) diff --git a/src/main/java/me/fivevl/staff/Main.kt b/src/main/java/me/fivevl/staff/Main.kt index 58283c2..0b6eba8 100644 --- a/src/main/java/me/fivevl/staff/Main.kt +++ b/src/main/java/me/fivevl/staff/Main.kt @@ -1,9 +1,10 @@ package me.fivevl.staff import me.fivevl.staff.commands.InvseeCommand -import me.fivevl.staff.commands.StaffModeCommand +import me.fivevl.staff.commands.StaffmodeCommand import me.fivevl.staff.commands.VanishCommand import me.fivevl.staff.listeners.JoinListener +import me.fivevl.staff.listeners.StaffmodeListener import org.bukkit.Bukkit import org.bukkit.plugin.java.JavaPlugin @@ -13,29 +14,16 @@ class Main : JavaPlugin() { saveDefaultConfig() - getCommand("staffmode")!!.setExecutor(StaffModeCommand()) + getCommand("staffmode")!!.setExecutor(StaffmodeCommand()) getCommand("vanish")!!.setExecutor(VanishCommand()) getCommand("invsee")!!.setExecutor(InvseeCommand()) Bukkit.getPluginManager().registerEvents(JoinListener(), this) + Bukkit.getPluginManager().registerEvents(StaffmodeListener(), this) logger.info("Staff plugin enabled.") } override fun onDisable() { logger.info("Staff plugin disabled.") } - - - /* - FEATURES: - DONE: - - PlaceholderAPI support - - Config - - Vanish command - NOT DONE: - - Staff mode (Invisibility/vanish, fly, items) - - Freeze (Command and freeze wand in staff mode) - - Open inventory (Command and wand in staff mode) with permission for being able to edit it - - Knockback Stick (Extra, useful to check if the player has no kb) - */ } diff --git a/src/main/java/me/fivevl/staff/Utils.kt b/src/main/java/me/fivevl/staff/Utils.kt index 1622c8f..e4e774c 100644 --- a/src/main/java/me/fivevl/staff/Utils.kt +++ b/src/main/java/me/fivevl/staff/Utils.kt @@ -14,6 +14,8 @@ object Utils { var instance: Main? = null val inStaffmode = HashMap() val inVanish = ArrayList() + val inOtherInv = ArrayList() + val frozen = ArrayList() @Suppress("deprecation") fun mm(s: String): Component { return MiniMessage.miniMessage().deserialize(s) @@ -36,11 +38,11 @@ object Utils { for (i: Int in Config.staffmodeHotbar.keys) { var item = ItemStack(Material.AIR) when (Config.staffmodeHotbar[i]) { - "DISABLE_STAFFMODE" -> item = Items.DISABLE_STAFFMODE.item - "FREEZE_WAND" -> item = Items.FREEZE_WAND.item - "INVENTORY_WAND" -> item = Items.INVENTORY_WAND.item - "KB_STICK" -> item = Items.KB_STICK.item - "VANISH_ITEM" -> item = Items.VANISH_ITEM.item + "DISABLE_STAFFMODE" -> if (p.hasPermission("staff.staffmode")) item = Items.DISABLE_STAFFMODE.item + "FREEZE_WAND" -> if (p.hasPermission("staff.freeze.wand")) item = Items.FREEZE_WAND.item + "INVENTORY_WAND" -> if (p.hasPermission("staff.invsee.wand")) item = Items.INVENTORY_WAND.item + "KB_STICK" -> if (p.hasPermission("staff.kbstick")) item = Items.KB_STICK.item + "VANISH_ITEM" -> if (p.hasPermission("staff.vanish.item")) item = Items.VANISH_ITEM.item } p.inventory.setItem(i - 1, item) } @@ -62,4 +64,13 @@ object Utils { p.sendMessage(mm(getPlaceholders(p, Config.toggleVanishOn))) } } + fun toggleFreeze(p: Player) { + if (frozen.contains(p)) { + p.sendMessage(mm(getPlaceholders(p, Config.toggleFreezeOff))) + frozen.remove(p) + } else { + p.sendMessage(mm(getPlaceholders(p, Config.toggleFreezeOn))) + frozen.add(p) + } + } } \ No newline at end of file diff --git a/src/main/java/me/fivevl/staff/commands/InvseeCommand.kt b/src/main/java/me/fivevl/staff/commands/InvseeCommand.kt index 9e68c49..9c14a1a 100644 --- a/src/main/java/me/fivevl/staff/commands/InvseeCommand.kt +++ b/src/main/java/me/fivevl/staff/commands/InvseeCommand.kt @@ -2,6 +2,7 @@ package me.fivevl.staff.commands import me.fivevl.staff.Config import me.fivevl.staff.Utils +import org.bukkit.Bukkit import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender @@ -22,6 +23,13 @@ class InvseeCommand : CommandExecutor { p.sendMessage(Utils.mm("Usage: /invsee ")) return true } + val target = Bukkit.getPlayer(args[0]) + if (target == null) { + p.sendMessage(Utils.mm(Utils.getPlaceholders(p, Config.playerNotFound))) + return true + } + p.openInventory(target.inventory) + Utils.inOtherInv.add(p) return true } } \ No newline at end of file diff --git a/src/main/java/me/fivevl/staff/commands/StaffModeCommand.kt b/src/main/java/me/fivevl/staff/commands/StaffmodeCommand.kt similarity index 94% rename from src/main/java/me/fivevl/staff/commands/StaffModeCommand.kt rename to src/main/java/me/fivevl/staff/commands/StaffmodeCommand.kt index 9e99110..db4a116 100644 --- a/src/main/java/me/fivevl/staff/commands/StaffModeCommand.kt +++ b/src/main/java/me/fivevl/staff/commands/StaffmodeCommand.kt @@ -7,7 +7,7 @@ import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender import org.bukkit.entity.Player -class StaffModeCommand : CommandExecutor { +class StaffmodeCommand : CommandExecutor { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array): Boolean { if (sender !is Player) { sender.sendMessage(Utils.mm(Utils.getPlaceholders(null, Config.mustBePlayer))) diff --git a/src/main/java/me/fivevl/staff/listeners/StaffmodeListener.kt b/src/main/java/me/fivevl/staff/listeners/StaffmodeListener.kt new file mode 100644 index 0000000..74843b2 --- /dev/null +++ b/src/main/java/me/fivevl/staff/listeners/StaffmodeListener.kt @@ -0,0 +1,74 @@ +package me.fivevl.staff.listeners + +import me.fivevl.staff.Config +import me.fivevl.staff.Items +import me.fivevl.staff.Utils +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.inventory.InventoryCloseEvent +import org.bukkit.event.player.PlayerDropItemEvent +import org.bukkit.event.player.PlayerInteractAtEntityEvent +import org.bukkit.event.player.PlayerInteractEvent +import org.bukkit.event.player.PlayerMoveEvent + + +class StaffmodeListener : Listener { + @EventHandler + fun onDrop(e: PlayerDropItemEvent) { + if (Utils.inStaffmode.containsKey(e.player)) { + e.isCancelled = true + } + } + @EventHandler + fun onInvClick(e: InventoryClickEvent) { + if (Utils.inOtherInv.contains(e.whoClicked) && !e.whoClicked.hasPermission("staff.invsee.move")) { + e.isCancelled = true + } + if (!Utils.inStaffmode.containsKey(e.whoClicked)) {return} + if (!e.whoClicked.hasPermission("staff.inventory")) { + e.isCancelled = true + } + } + @EventHandler + fun onInvClose(e: InventoryCloseEvent) { + Utils.inOtherInv.remove(e.player) + } + @EventHandler + fun onInteract(e: PlayerInteractEvent) { + if (!Utils.inStaffmode.containsKey(e.player)) { + return + } + val p = e.player + if (p.inventory.itemInMainHand.equals(Items.DISABLE_STAFFMODE)) { + Utils.toggleStaffmode(p) + } + if (p.inventory.itemInMainHand.equals(Items.VANISH_ITEM)) { + Utils.toggleVanish(p) + } + } + @EventHandler + fun onEntityInteract(e: PlayerInteractAtEntityEvent) { + if (!Utils.inStaffmode.containsKey(e.player)) { + return + } + if (e.rightClicked !is Player) return + val p = e.player + val target = e.rightClicked as Player + if (p.inventory.itemInMainHand.equals(Items.INVENTORY_WAND)) { + p.openInventory(target.inventory) + Utils.inOtherInv.add(p) + } + if (p.inventory.itemInMainHand.equals(Items.FREEZE_WAND)) { + Utils.toggleFreeze(target) + } + } + @EventHandler + fun onMove(e: PlayerMoveEvent) { + if (Utils.frozen.contains(e.player)) { + e.isCancelled = true + e.player.sendMessage(Utils.mm(Utils.getPlaceholders(e.player, Config.currentlyFrozen))) + } + } +} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a2ac7f9..b88eed0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,12 +2,14 @@ # For messages please use the minimessage formatting, see https://docs.adventure.kyori.net/minimessage/format.html#minimessage-format must-be-player: "You must be a player to use this command!" # Message shown when a player tries to use a command that requires them to be a player no-permission: "You do not have permission to use this command!" # Message shown when a player tries to use a command that they don't have permission to use +player-not-found: "Player not found!" # Message shown when a player does not exist toggle-staffmode-on: "Toggled staffmode on!" # Message shown when a player toggles staffmode on toggle-staffmode-off: "Toggled staffmode off!" # Message shown when a player toggles staffmode off toggle-vanish-on: "Toggled vanish on!" # Message shown when a player toggles vanish on toggle-vanish-off: "Toggled vanish off!" # Message shown when a player toggles vanish off -toggle-fly-on: "Toggled fly on!" # Message shown when a player toggles fly on -toggle-fly-off: "Toggled fly off!" # Message shown when a player toggles fly off +toggle-freeze-on: "You have been frozen! Do not log out." # Message shown when a player gets frozen. +toggle-freeze-off: "You have been unfrozen!" # Message shown when a player gets unfrozen. +currently-frozen: "You are currently frozen! Do not log out." # Message shown when a player tries to use a move while they are frozen. # In this section of the config you can change the items given to you in staffmode. Please do not use colors here. staffmode-hotbar: # List of items to give the player when they toggle staffmode, available items: "DISABLE_STAFFMODE", "FREEZE_WAND", "INVENTORY_WAND", "KB_STICK", "VANISH_ITEM"