diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 404b1b6..9885c07 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ stages: variables: name: "UltimateModeration" path: "/builds/$CI_PROJECT_PATH" - version: "1.1.11" + version: "1.1.12" build: stage: build diff --git a/pom.xml b/pom.xml index 28b8fbf..a60026a 100644 --- a/pom.xml +++ b/pom.xml @@ -68,5 +68,10 @@ songodaupdater 1 + + net.milkbowl + vault + 1.7.1 + diff --git a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java index a07d754..a6eb949 100644 --- a/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java +++ b/src/main/java/com/songoda/ultimatemoderation/UltimateModeration.java @@ -29,9 +29,11 @@ import com.songoda.ultimatemoderation.utils.settings.SettingsManager; import com.songoda.ultimatemoderation.utils.updateModules.LocaleModule; import com.songoda.update.Plugin; import com.songoda.update.SongodaUpdate; +import net.milkbowl.vault.permission.Permission; import org.apache.commons.lang.ArrayUtils; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; +import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; import java.util.UUID; @@ -52,6 +54,8 @@ public class UltimateModeration extends JavaPlugin { private Locale locale; private Storage storage; + private Permission perms = null; + public static UltimateModeration getInstance() { return INSTANCE; } @@ -105,6 +109,11 @@ public class UltimateModeration extends JavaPlugin { // Starting Metrics new Metrics(this); + if (getServer().getPluginManager().getPlugin("Vault") != null) { + setupPermissions(); + console.sendMessage("Hooked Vault."); + } + int timeout = Setting.AUTOSAVE.getInt() * 60 * 20; Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> storage.doSave(), timeout, timeout); console.sendMessage(Methods.formatText("&a=============================")); @@ -200,6 +209,12 @@ public class UltimateModeration extends JavaPlugin { storage.doSave(); } + private boolean setupPermissions() { + RegisteredServiceProvider rsp = getServer().getServicesManager().getRegistration(Permission.class); + perms = rsp.getProvider(); + return perms != null; + } + public ServerVersion getServerVersion() { return serverVersion; } @@ -248,4 +263,8 @@ public class UltimateModeration extends JavaPlugin { public StaffChatManager getStaffChatManager() { return staffChatManager; } + + public Permission getPerms() { + return perms; + } } diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandBan.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandBan.java index f6d7013..9615ec5 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandBan.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandBan.java @@ -50,12 +50,23 @@ public class CommandBan extends AbstractCommand { return ReturnType.FAILURE; } + if (instance.getPerms() != null && sender instanceof Player + && instance.getPerms().playerHas(Bukkit.getWorlds().get(0).getName(), player, "um.ban.exempt")) { + instance.getLocale().newMessage("You cannot ban this player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + if (instance.getPunishmentManager().getPlayer(player).getActivePunishments() .stream().anyMatch(appliedPunishment -> appliedPunishment.getPunishmentType() == PunishmentType.BAN)) { instance.getLocale().newMessage("That player is already banned.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } + if (duration == 0 && !sender.hasPermission("um.ban.permanent")) { + instance.getLocale().getMessage("event.general.nopermission").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + new Punishment(PunishmentType.BAN, duration == 0 ? -1 : duration, reason.equals("") ? null : reason) .execute(sender, player); diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandFreeze.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandFreeze.java index e4f88f2..52dc789 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandFreeze.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandFreeze.java @@ -48,6 +48,11 @@ public class CommandFreeze extends AbstractCommand { return ReturnType.FAILURE; } + if (sender instanceof Player && player.hasPermission("um.freeze.exempt")) { + instance.getLocale().newMessage("That player cannot be frozen.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + freeze(player, (Player) sender); return ReturnType.SUCCESS; diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandInvSee.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandInvSee.java index 9c3ccdc..0ecaf84 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandInvSee.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandInvSee.java @@ -29,6 +29,11 @@ public class CommandInvSee extends AbstractCommand { return ReturnType.FAILURE; } + if (player.hasPermission("um.invsee.exempt")) { + instance.getLocale().newMessage("You cannot invsee that player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + ((Player) sender).openInventory(player.getInventory()); return ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandKick.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandKick.java index 2f23391..1e84345 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandKick.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandKick.java @@ -43,6 +43,11 @@ public class CommandKick extends AbstractCommand { return ReturnType.FAILURE; } + if (sender instanceof Player && player.getPlayer().hasPermission("um.kick.exempt")) { + instance.getLocale().newMessage("You cannot kick this player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + new Punishment(PunishmentType.KICK, reason.equals("") ? null : reason) .execute(sender, player); diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandMute.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandMute.java index 734219f..712ed20 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandMute.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandMute.java @@ -50,6 +50,11 @@ public class CommandMute extends AbstractCommand { return ReturnType.FAILURE; } + if (sender instanceof Player && player.getPlayer().hasPermission("um.mute.exempt")) { + instance.getLocale().newMessage("You cannot mute that player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + if (instance.getPunishmentManager().getPlayer(player).getActivePunishments() .stream().anyMatch(appliedPunishment -> appliedPunishment.getPunishmentType() == PunishmentType.MUTE)) { instance.getLocale().newMessage("That player is already muted.").sendPrefixedMessage(sender); diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandSpy.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandSpy.java index cddd563..7311ea5 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandSpy.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandSpy.java @@ -79,6 +79,11 @@ public class CommandSpy extends AbstractCommand { return ReturnType.FAILURE; } + if (player.hasPermission("um.spy.exempt")) { + instance.getLocale().newMessage("You cannot spy on that player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + spy(player, senderP); return ReturnType.SUCCESS; diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandViewEnderChest.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandViewEnderChest.java index a0aa29c..e365437 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandViewEnderChest.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandViewEnderChest.java @@ -7,8 +7,6 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; public class CommandViewEnderChest extends AbstractCommand { @@ -30,6 +28,11 @@ public class CommandViewEnderChest extends AbstractCommand { return ReturnType.FAILURE; } + if (player.hasPermission("um.viewenderchest.exempt")) { + instance.getLocale().newMessage("You cannot view the enderchest of that player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + ((Player) sender).openInventory(player.getEnderChest()); return ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandWarn.java b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandWarn.java index 40bbabf..8a5d029 100644 --- a/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandWarn.java +++ b/src/main/java/com/songoda/ultimatemoderation/command/commands/CommandWarn.java @@ -50,6 +50,12 @@ public class CommandWarn extends AbstractCommand { return ReturnType.FAILURE; } + if (instance.getPerms() != null && sender instanceof Player + && instance.getPerms().playerHas(Bukkit.getWorlds().get(0).getName(), player, "um.warning.exempt")) { + instance.getLocale().newMessage("You cannot warn that player.").sendPrefixedMessage(sender); + return ReturnType.FAILURE; + } + new Punishment(PunishmentType.WARNING, duration == 0 ? -1 : duration, reason.equals("") ? null : reason) .execute(sender, player); diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUIModerate.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUIModerate.java index acb9a21..10b36f5 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUIModerate.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUIModerate.java @@ -15,13 +15,18 @@ import org.bukkit.inventory.meta.SkullMeta; public class GUIModerate extends AbstractGUI { private final UltimateModeration plugin; - private final OfflinePlayer toModerate; + private boolean freeze, spy, invsee, enderview, revive; public GUIModerate(UltimateModeration plugin, OfflinePlayer toModerate, Player player) { super(player); this.plugin = plugin; this.toModerate = toModerate; + this.freeze = !toModerate.getPlayer().hasPermission("um.freeze.exempt") && player.hasPermission("um.freeze"); + this.spy = !toModerate.getPlayer().hasPermission("um.spy.exempt") && player.hasPermission("um.spy"); + this.invsee = !toModerate.getPlayer().hasPermission("um.invsee.exempt") && player.hasPermission("um.invsee"); + this.enderview = !toModerate.getPlayer().hasPermission("um.viewenderchest.exempt") && player.hasPermission("um.viewenderchest"); + this.revive = player.hasPermission("um.revive"); init(plugin.getLocale().getMessage("gui.moderate.title") .processPlaceholder("toModerate", toModerate.getName()).getMessage(), 45); @@ -34,12 +39,11 @@ public class GUIModerate extends AbstractGUI { ? Material.OAK_DOOR : Material.valueOf("WOOD_DOOR"), plugin.getLocale().getMessage("gui.general.back").getMessage()); - createButton(10, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.BLUE_ICE : Material.valueOf("PACKED_ICE"), "&6&lFreeze", "&7Stop this player from moving.", "", "&7Currently:&6 " + (CommandFreeze.isFrozen(toModerate) ? "Frozen" : "Unfrozen")); - createButton(12, Material.SADDLE, "&6&lSpy", "&7Spy on this player"); - createButton(14, Material.CHEST, "&c&lInventory", "&7Access this players Inventory."); - createButton(16, Material.ENDER_CHEST, "&a&lEnderchest", "&7Access this players Enderchest"); - - createButton(28, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.SPLASH_POTION : Material.valueOf("POTION"), "&c&lRevive", "&7Revive this player."); + if (freeze) createButton(10, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.BLUE_ICE : Material.valueOf("PACKED_ICE"), "&6&lFreeze", "&7Stop this player from moving.", "", "&7Currently:&6 " + (CommandFreeze.isFrozen(toModerate) ? "Frozen" : "Unfrozen")); + if (spy) createButton(12, Material.SADDLE, "&6&lSpy", "&7Spy on this player"); + if (invsee) createButton(14, Material.CHEST, "&c&lInventory", "&7Access this players Inventory."); + if (enderview) createButton(16, Material.ENDER_CHEST, "&a&lEnderchest", "&7Access this players Enderchest"); + if (revive) createButton(28, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.SPLASH_POTION : Material.valueOf("POTION"), "&c&lRevive", "&7Revive this player."); } @Override @@ -47,24 +51,34 @@ public class GUIModerate extends AbstractGUI { registerClickable(8, ((player1, inventory1, cursor, slot, type) -> new GUIPlayer(plugin, toModerate, player1))); - registerClickable(10, ((player1, inventory1, cursor, slot, type) -> { - CommandFreeze.freeze(toModerate, player); - constructGUI(); - })); + if (freeze) { + registerClickable(10, ((player1, inventory1, cursor, slot, type) -> { + CommandFreeze.freeze(toModerate, player); + constructGUI(); + })); + } - registerClickable(12, ((player1, inventory1, cursor, slot, type) -> { - CommandSpy.spy(toModerate, player); - player.closeInventory(); - })); + if (spy) { + registerClickable(12, ((player1, inventory1, cursor, slot, type) -> { + CommandSpy.spy(toModerate, player); + player.closeInventory(); + })); + } - registerClickable(14, ((player1, inventory1, cursor, slot, type) -> - player.openInventory(toModerate.getPlayer().getInventory()))); + if (invsee) { + registerClickable(14, ((player1, inventory1, cursor, slot, type) -> + player.openInventory(toModerate.getPlayer().getInventory()))); + } - registerClickable(16, ((player1, inventory1, cursor, slot, type) -> - player.openInventory(toModerate.getPlayer().getEnderChest()))); + if (enderview) { + registerClickable(16, ((player1, inventory1, cursor, slot, type) -> + player.openInventory(toModerate.getPlayer().getEnderChest()))); + } - registerClickable(28, ((player1, inventory1, cursor, slot, type) -> - CommandRevive.revive(toModerate.getPlayer(), player))); + if (revive) { + registerClickable(28, ((player1, inventory1, cursor, slot, type) -> + CommandRevive.revive(toModerate.getPlayer(), player))); + } } @Override diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUINotesManager.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUINotesManager.java index 12c5d80..a13e9a4 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUINotesManager.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUINotesManager.java @@ -27,10 +27,14 @@ public class GUINotesManager extends AbstractGUI { private int page = 0; + private boolean create, delete; + public GUINotesManager(UltimateModeration plugin, OfflinePlayer toModerate, Player player) { super(player); this.plugin = plugin; this.toModerate = toModerate; + this.create = player.hasPermission("um.notes.create"); + this.delete = player.hasPermission("um.notes.delete"); init(plugin.getLocale().getMessage("gui.notes.title") .processPlaceholder("tonotes", player.getName()).getMessage(), 54); @@ -71,7 +75,7 @@ public class GUINotesManager extends AbstractGUI { ? Material.OAK_DOOR : Material.valueOf("WOOD_DOOR"), plugin.getLocale().getMessage("gui.general.back").getMessage()); - createButton(6, Material.REDSTONE, plugin.getLocale().getMessage("gui.notes.create").getMessage()); + if (create) createButton(6, Material.REDSTONE, plugin.getLocale().getMessage("gui.notes.create").getMessage()); for (int i = 0; i < notes.size(); i++) { PunishmentNote note = notes.get(i); @@ -106,14 +110,16 @@ public class GUINotesManager extends AbstractGUI { lore.add(plugin.getLocale().getMessage("gui.notes.createdon") .processPlaceholder("sent", format.format(new Date(note.getCreationDate()))) .getMessage()); - lore.add(plugin.getLocale().getMessage("gui.notes.remove").getMessage()); + if (delete) lore.add(plugin.getLocale().getMessage("gui.notes.remove").getMessage()); createButton(18 + i, Material.MAP, name, lore); - registerClickable(18 + i, ((player1, inventory1, cursor, slot, type) -> { - plugin.getPunishmentManager().getPlayer(toModerate).removeNote(note); - constructGUI(); - })); + if (delete) { + registerClickable(18 + i, ((player1, inventory1, cursor, slot, type) -> { + plugin.getPunishmentManager().getPlayer(toModerate).removeNote(note); + constructGUI(); + })); + } } } @@ -123,17 +129,19 @@ public class GUINotesManager extends AbstractGUI { registerClickable(8, ((player1, inventory1, cursor, slot, type) -> new GUIPlayer(plugin, toModerate, player1))); - registerClickable(6, ((player1, inventory1, cursor, slot, type) -> { - plugin.getLocale().getMessage("gui.notes.type").sendMessage(player); - AbstractChatConfirm abstractChatConfirm = new AbstractChatConfirm(player, event -> { - plugin.getPunishmentManager().getPlayer(toModerate).addNotes(new PunishmentNote(event.getMessage(), - player.getUniqueId(), toModerate.getUniqueId(), System.currentTimeMillis())); - constructGUI(); - }); + if (create) { + registerClickable(6, ((player1, inventory1, cursor, slot, type) -> { + plugin.getLocale().getMessage("gui.notes.type").sendMessage(player); + AbstractChatConfirm abstractChatConfirm = new AbstractChatConfirm(player, event -> { + plugin.getPunishmentManager().getPlayer(toModerate).addNotes(new PunishmentNote(event.getMessage(), + player.getUniqueId(), toModerate.getUniqueId(), System.currentTimeMillis())); + constructGUI(); + }); - abstractChatConfirm.setOnClose(() -> - init(setTitle, inventory.getSize())); - })); + abstractChatConfirm.setOnClose(() -> + init(setTitle, inventory.getSize())); + })); + } } @Override diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayer.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayer.java index 94e0133..af04e6a 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayer.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayer.java @@ -15,10 +15,17 @@ public class GUIPlayer extends AbstractGUI { private final OfflinePlayer toModerate; + private boolean punish, tickets, punishments, notes, moderate; + public GUIPlayer(UltimateModeration plugin, OfflinePlayer toModerate, Player player) { super(player); this.plugin = plugin; this.toModerate = toModerate; + this.punish = player.hasPermission("um.punish"); + this.tickets = player.hasPermission("um.tickets"); + this.punishments = player.hasPermission("um.punishments"); + this.notes = player.hasPermission("um.notes"); + this.moderate = player.hasPermission("um.moderation"); init(plugin.getLocale().getMessage("gui.player.title") .processPlaceholder("toModerate", toModerate.getName()).getMessage(), 54); @@ -41,12 +48,12 @@ public class GUIPlayer extends AbstractGUI { ? Material.OAK_DOOR : Material.valueOf("WOOD_DOOR"), plugin.getLocale().getMessage("gui.general.back").getMessage()); - createButton(38, Material.ANVIL, plugin.getLocale().getMessage("gui.player.punish").getMessage()); - createButton(30, Material.CHEST, plugin.getLocale().getMessage("gui.player.tickets").getMessage()); - if (player.isOnline()) + if (punish) createButton(38, Material.ANVIL, plugin.getLocale().getMessage("gui.player.punish").getMessage()); + if (tickets) createButton(30, Material.CHEST, plugin.getLocale().getMessage("gui.player.tickets").getMessage()); + if (player.isOnline() && punishments) createButton(32, Material.DIAMOND_SWORD, plugin.getLocale().getMessage("gui.player.punishments").getMessage()); - createButton(42, Material.MAP, plugin.getLocale().getMessage("gui.player.notes").getMessage()); - createButton(40, Material.DIAMOND_CHESTPLATE, plugin.getLocale().getMessage("gui.player.moderate").getMessage()); + if (notes) createButton(42, Material.MAP, plugin.getLocale().getMessage("gui.player.notes").getMessage()); + if (moderate) createButton(40, Material.DIAMOND_CHESTPLATE, plugin.getLocale().getMessage("gui.player.moderate").getMessage()); } @Override @@ -54,20 +61,30 @@ public class GUIPlayer extends AbstractGUI { registerClickable(8, ((player1, inventory1, cursor, slot, type) -> new GUIPlayers(plugin, player1))); - registerClickable(38, ((player1, inventory1, cursor, slot, type) -> - new GUIPunish(plugin, toModerate, null, player1))); + if (punish) { + registerClickable(38, ((player1, inventory1, cursor, slot, type) -> + new GUIPunish(plugin, toModerate, null, player1))); + } - registerClickable(30, ((player1, inventory1, cursor, slot, type) -> - new GUITicketManager(plugin, toModerate, player1))); + if (tickets) { + registerClickable(30, ((player1, inventory1, cursor, slot, type) -> + new GUITicketManager(plugin, toModerate, player1))); + } - registerClickable(32, ((player1, inventory1, cursor, slot, type) -> - new GUIPunishments(plugin, toModerate, player1))); + if (punishments) { + registerClickable(32, ((player1, inventory1, cursor, slot, type) -> + new GUIPunishments(plugin, toModerate, player1))); + } - registerClickable(42, ((player1, inventory1, cursor, slot, type) -> - new GUINotesManager(plugin, toModerate, player1))); + if (notes) { + registerClickable(42, ((player1, inventory1, cursor, slot, type) -> + new GUINotesManager(plugin, toModerate, player1))); + } - registerClickable(40, ((player1, inventory1, cursor, slot, type) -> - new GUIModerate(plugin, toModerate, player1))); + if (moderate) { + registerClickable(40, ((player1, inventory1, cursor, slot, type) -> + new GUIModerate(plugin, toModerate, player1))); + } } @Override diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayers.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayers.java index cb36608..d7d0bce 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayers.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUIPlayers.java @@ -132,8 +132,11 @@ public class GUIPlayers extends AbstractGUI { createButton(46, Material.ENDER_PEARL, plugin.getLocale().getMessage("gui.players.search").getMessage()); createButton(47, Material.HOPPER, "&6" + currentOnline.getTranslation()); - createButton(51, Material.CHEST, plugin.getLocale().getMessage("gui.players.button.tickets").getMessage()); - createButton(52, Material.MAP, plugin.getLocale().getMessage("gui.players.button.templatemanager").getMessage()); + if (player.hasPermission("um.tickets")) + createButton(51, Material.CHEST, plugin.getLocale().getMessage("gui.players.button.tickets").getMessage()); + + if (player.hasPermission("um.templates")) + createButton(52, Material.MAP, plugin.getLocale().getMessage("gui.players.button.templatemanager").getMessage()); } @@ -194,11 +197,17 @@ public class GUIPlayers extends AbstractGUI { constructGUI(); })); - registerClickable(51, (player1, inventory1, cursor, slot, type) -> - new GUITicketManager(plugin, null, player)); + if (player.hasPermission("um.tickets")) { + registerClickable(51, (player1, inventory1, cursor, slot, type) -> { + new GUITicketManager(plugin, null, player); + }); + } - registerClickable(52, (player1, inventory1, cursor, slot, type) -> - new GUITemplateManager(plugin, player)); + if (player.hasPermission("um.templates")) { + registerClickable(52, (player1, inventory1, cursor, slot, type) -> { + if (player.hasPermission("um.templates")) new GUITemplateManager(plugin, player); + }); + } } @Override diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUIPunish.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUIPunish.java index 82c459c..a9a57dd 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUIPunish.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUIPunish.java @@ -69,7 +69,8 @@ public class GUIPunish extends AbstractGUI { createButton(13, head, "&7&l" + toModerate.getName()); } - createButton(22, Material.EMERALD_BLOCK, plugin.getLocale().getMessage("gui.punish.submit").getMessage()); + if (player.hasPermission("um." + type.toString().toLowerCase())) + createButton(22, Material.EMERALD_BLOCK, plugin.getLocale().getMessage("gui.punish.submit").getMessage()); createButton(8, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.OAK_DOOR @@ -188,8 +189,9 @@ public class GUIPunish extends AbstractGUI { } if (plugin.getTemplateManager().getTemplates().size() == 0) return; - new GUITemplateSelector(plugin, this, player); + if (player.hasPermission("um.templates.use")) new GUITemplateSelector(plugin, this, player); })); + registerClickable(32, ((player1, inventory1, cursor, slot, type) -> { if (this.type == PunishmentType.KICK) return; if (type == ClickType.LEFT) { @@ -233,6 +235,9 @@ public class GUIPunish extends AbstractGUI { })); registerClickable(22, ((player1, inventory1, cursor, slot, type1) -> { + if (!player.hasPermission("um." + type.toString().toLowerCase())) return; + if (duration == -1 && type == PunishmentType.BAN && !player.hasPermission("um.ban.permanent")) return; + if (toModerate == null) { if (reason == null || duration == 0 || templateName == null) return; @@ -253,6 +258,7 @@ public class GUIPunish extends AbstractGUI { new Punishment(type, reason).execute(player, toModerate); break; } + new GUIPlayer(plugin, toModerate, player); })); } diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUITemplateManager.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUITemplateManager.java index fa45217..0da3909 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUITemplateManager.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUITemplateManager.java @@ -66,7 +66,8 @@ public class GUITemplateManager extends AbstractGUI { : Material.valueOf("WOOD_DOOR"), plugin.getLocale().getMessage("gui.general.back").getMessage()); - createButton(7, Material.REDSTONE, plugin.getLocale().getMessage("gui.templatemanager.create").getMessage()); + if (player.hasPermission("um.templates.create")) + createButton(7, Material.REDSTONE, plugin.getLocale().getMessage("gui.templatemanager.create").getMessage()); for (int i = 0; i < 9; i++) createButton(9 + i, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.GRAY_STAINED_GLASS_PANE : new ItemStack(Material.valueOf("STAINED_GLASS_PANE")), "&1"); @@ -81,9 +82,9 @@ public class GUITemplateManager extends AbstractGUI { registerClickable(18 + i, ((player1, inventory1, cursor, slot, type) -> { if (type == ClickType.LEFT) { - new GUIPunish(plugin, null, template, player); + if (player.hasPermission("um.templates.edit")) new GUIPunish(plugin, null, template, player); } else if (type == ClickType.RIGHT) { - plugin.getTemplateManager().removeTemplate(template.getUUID()); + if (player.hasPermission("um.templates.destroy")) plugin.getTemplateManager().removeTemplate(template.getUUID()); constructGUI(); } })); @@ -95,8 +96,11 @@ public class GUITemplateManager extends AbstractGUI { registerClickable(8, ((player1, inventory1, cursor, slot, type) -> new GUIPlayers(plugin, player))); - registerClickable(7, ((player1, inventory1, cursor, slot, type) -> - new GUIPunish(plugin, null, null, player))); + if (player.hasPermission("um.templates.create")) { + registerClickable(7, ((player1, inventory1, cursor, slot, type) -> { + new GUIPunish(plugin, null, null, player); + })); + } registerClickable(3, ((player1, inventory1, cursor, slot, type) -> { this.punishmentType = punishmentType.nextFilter(); diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUITicket.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUITicket.java index a444c6c..6c106f2 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUITicket.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUITicket.java @@ -80,7 +80,7 @@ public class GUITicket extends AbstractGUI { createButton(7, Material.REDSTONE, plugin.getLocale().getMessage("gui.ticket.clicktotele").getMessage()); - createButton(6, Material.REDSTONE, plugin.getLocale().getMessage("gui.ticket.respond").getMessage()); + if (player.hasPermission("um.tickets.respond")) createButton(6, Material.REDSTONE, plugin.getLocale().getMessage("gui.ticket.respond").getMessage()); for (int i = 0; i < 9; i++) createButton(9 + i, plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.GRAY_STAINED_GLASS_PANE : new ItemStack(Material.valueOf("STAINED_GLASS_PANE")), "&1"); @@ -139,16 +139,18 @@ public class GUITicket extends AbstractGUI { })); } - registerClickable(6, ((player1, inventory1, cursor, slot, type) -> { - player.sendMessage(plugin.getLocale().getMessage("gui.ticket.what").getMessage()); - AbstractChatConfirm abstractChatConfirm = new AbstractChatConfirm(player, event2 -> { - ticket.addResponse(new TicketResponse(player, event2.getMessage(), System.currentTimeMillis())); - constructGUI(); - }); + if (player.hasPermission("um.ticket.respond")) { + registerClickable(6, ((player1, inventory1, cursor, slot, type) -> { + player.sendMessage(plugin.getLocale().getMessage("gui.ticket.what").getMessage()); + AbstractChatConfirm abstractChatConfirm = new AbstractChatConfirm(player, event2 -> { + ticket.addResponse(new TicketResponse(player, event2.getMessage(), System.currentTimeMillis())); + constructGUI(); + }); - abstractChatConfirm.setOnClose(() -> - init(setTitle, inventory.getSize())); - })); + abstractChatConfirm.setOnClose(() -> + init(setTitle, inventory.getSize())); + })); + } } @Override diff --git a/src/main/java/com/songoda/ultimatemoderation/gui/GUITicketManager.java b/src/main/java/com/songoda/ultimatemoderation/gui/GUITicketManager.java index c3be5ed..8d8e0c4 100644 --- a/src/main/java/com/songoda/ultimatemoderation/gui/GUITicketManager.java +++ b/src/main/java/com/songoda/ultimatemoderation/gui/GUITicketManager.java @@ -73,8 +73,8 @@ public class GUITicketManager extends AbstractGUI { createButton(3 ,Material.DIAMOND_SWORD, Methods.formatText("&6" + status.getStatus())); - if (toModerate != null) - createButton(7, Material.REDSTONE, plugin.getLocale().getMessage("gui.tickets.create").getMessage()); + if (toModerate != null && player.hasPermission("um.tickets.create")) + createButton(7, Material.REDSTONE, plugin.getLocale().getMessage("gui.tickets.create").getMessage()); if (player.hasPermission("um.ticket")) createButton(8, plugin.isServerVersionAtLeast(ServerVersion.V1_13) @@ -149,9 +149,9 @@ public class GUITicketManager extends AbstractGUI { constructGUI(); })); - if (toModerate != null) { - registerClickable(7, ((player1, inventory1, cursor, slot, type) -> - createNew(player, toModerate))); + if (toModerate != null && player.hasPermission("um.tickets.create")) { + registerClickable(7, ((player1, inventory1, cursor, slot, type) -> + createNew(player, toModerate))); } } diff --git a/src/main/java/com/songoda/ultimatemoderation/listeners/ChatListener.java b/src/main/java/com/songoda/ultimatemoderation/listeners/ChatListener.java index 529544d..263d3eb 100644 --- a/src/main/java/com/songoda/ultimatemoderation/listeners/ChatListener.java +++ b/src/main/java/com/songoda/ultimatemoderation/listeners/ChatListener.java @@ -8,6 +8,7 @@ import com.songoda.ultimatemoderation.utils.Methods; import com.songoda.ultimatemoderation.utils.settings.Setting; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index efb3e32..2bd703e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,6 +4,7 @@ main: com.songoda.ultimatemoderation.UltimateModeration version: maven-version-number author: Songoda api-version: 1.13 +softdepend: [Vault] commands: UltimateModeration: description: View information on this plugin.