diff --git a/pom.xml b/pom.xml index 50cf326..5e9ad5b 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ com.songoda UltimateModeration 4.0.0 - 1.2.5 + 1.2.6 clean install UltimateModeration-${project.version} @@ -84,6 +84,14 @@ private http://repo.songoda.com/artifactory/private/ + + public + https://repo.songoda.com/artifactory/public/ + + + jitpack.io + https://jitpack.io + @@ -91,6 +99,12 @@ spigot 1.15 + + com.github.MilkBowl + VaultAPI + 1.7 + provided + com.songoda abledskyblock @@ -100,7 +114,7 @@ com.songoda SongodaCore - maven-version-number + LATEST compile diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java index 4667c03..b3887e4 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandBan.java @@ -1,10 +1,12 @@ package com.songoda.ultimatemoderation.commands; import com.songoda.core.commands.AbstractCommand; +import com.songoda.core.utils.PlayerUtils; import com.songoda.ultimatemoderation.UltimateModeration; import com.songoda.ultimatemoderation.punish.Punishment; import com.songoda.ultimatemoderation.punish.PunishmentType; import com.songoda.ultimatemoderation.utils.Methods; +import com.songoda.ultimatemoderation.utils.VaultPermissions; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; @@ -48,12 +50,12 @@ public class CommandBan extends AbstractCommand { OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); - if (player == null) { + if (!player.hasPlayedBefore()) { instance.getLocale().newMessage("That player does not exist.").sendMessage(sender); return ReturnType.FAILURE; } - if (sender instanceof Player && player.getPlayer().hasPermission("um.ban.exempt")) { + if (sender instanceof Player && VaultPermissions.hasPermission(Bukkit.getWorlds().get(0).getName(), player, "um.ban.exempt")) { instance.getLocale().newMessage("You cannot ban this player.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java index c314c93..340b4fc 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandMute.java @@ -5,6 +5,7 @@ import com.songoda.ultimatemoderation.UltimateModeration; import com.songoda.ultimatemoderation.punish.Punishment; import com.songoda.ultimatemoderation.punish.PunishmentType; import com.songoda.ultimatemoderation.utils.Methods; +import com.songoda.ultimatemoderation.utils.VaultPermissions; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; @@ -48,12 +49,12 @@ public class CommandMute extends AbstractCommand { OfflinePlayer player = Bukkit.getOfflinePlayer(args[0]); - if (player == null) { + if (!player.hasPlayedBefore()) { instance.getLocale().newMessage("That player does not exist.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } - if (sender instanceof Player && player.getPlayer().hasPermission("um.mute.exempt")) { + if (sender instanceof Player && VaultPermissions.hasPermission(Bukkit.getWorlds().get(0).getName(), player, "um.mute.exempt")) { instance.getLocale().newMessage("You cannot mute that player.").sendPrefixedMessage(sender); return ReturnType.FAILURE; } diff --git a/src/main/java/com/songoda/ultimatemoderation/commands/CommandSpy.java b/src/main/java/com/songoda/ultimatemoderation/commands/CommandSpy.java index 5e70670..876dba9 100644 --- a/src/main/java/com/songoda/ultimatemoderation/commands/CommandSpy.java +++ b/src/main/java/com/songoda/ultimatemoderation/commands/CommandSpy.java @@ -3,7 +3,9 @@ package com.songoda.ultimatemoderation.commands; import com.songoda.core.commands.AbstractCommand; import com.songoda.core.compatibility.ServerVersion; import com.songoda.ultimatemoderation.UltimateModeration; +import com.songoda.ultimatemoderation.listeners.SpyingDismountListener; import org.bukkit.Bukkit; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; @@ -25,11 +27,22 @@ public class CommandSpy extends AbstractCommand { public static void spy(OfflinePlayer oPlayer, Player senderP) { UltimateModeration instance = UltimateModeration.getInstance(); + if (isSpying(senderP) && oPlayer == null) { + CommandSpy.Spy spyingEntry = CommandSpy.getSpying().remove(senderP.getUniqueId()); + senderP.teleport(spyingEntry.getLastLocation()); + if (spyingEntry.isVanishApplied() && CommandVanish.isVanished(senderP)) + CommandVanish.vanish(senderP); + senderP.setGameMode(SpyingDismountListener.getGamemodes().get(senderP.getUniqueId())); + + UltimateModeration.getInstance().getLocale().getMessage("command.spy.returned").sendPrefixedMessage(senderP); + } + if (!ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12)) { instance.getLocale().newMessage("This feature is not compatible with this version of spigot.").sendPrefixedMessage(senderP); return; } + if (oPlayer == null) return; Player player = oPlayer.getPlayer(); if (player == null) { diff --git a/src/main/java/com/songoda/ultimatemoderation/listeners/SpyingDismountListener.java b/src/main/java/com/songoda/ultimatemoderation/listeners/SpyingDismountListener.java index 5110825..6d58505 100644 --- a/src/main/java/com/songoda/ultimatemoderation/listeners/SpyingDismountListener.java +++ b/src/main/java/com/songoda/ultimatemoderation/listeners/SpyingDismountListener.java @@ -2,7 +2,6 @@ package com.songoda.ultimatemoderation.listeners; import com.songoda.ultimatemoderation.UltimateModeration; import com.songoda.ultimatemoderation.commands.CommandSpy; -import com.songoda.ultimatemoderation.commands.CommandVanish; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.Player; @@ -12,13 +11,14 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerToggleSneakEvent; import org.spigotmc.event.entity.EntityDismountEvent; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.UUID; public class SpyingDismountListener implements Listener { - private Map gamemodes = new HashMap<>(); + private static Map gamemodes = new HashMap<>(); @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onEntityDismountEvent(EntityDismountEvent event) { @@ -28,8 +28,11 @@ public class SpyingDismountListener implements Listener { Player player = (Player) event.getEntity(); gamemodes.put(player.getUniqueId(), player.getGameMode()); player.setGameMode(GameMode.SPECTATOR); - Bukkit.getScheduler().scheduleSyncDelayedTask(UltimateModeration.getInstance(), () -> - player.setSpectatorTarget(event.getDismounted()), 5L); + Bukkit.getScheduler().scheduleSyncDelayedTask(UltimateModeration.getInstance(), () -> { + + if (player.getGameMode() == GameMode.SPECTATOR) + player.setSpectatorTarget(event.getDismounted()); + }, 5L); } } @@ -37,12 +40,10 @@ public class SpyingDismountListener implements Listener { public void onSneak(PlayerToggleSneakEvent event) { Player player = event.getPlayer(); if (player.isSneaking() || !CommandSpy.isSpying(player) || player.getGameMode() != GameMode.SPECTATOR) return; - CommandSpy.Spy spyingEntry = CommandSpy.getSpying().remove(player.getUniqueId()); - player.teleport(spyingEntry.getLastLocation()); - if (spyingEntry.isVanishApplied() && CommandVanish.isVanished(player)) - CommandVanish.vanish(player); - player.setGameMode(gamemodes.get(player.getUniqueId())); + CommandSpy.spy(null, player); + } - UltimateModeration.getInstance().getLocale().getMessage("command.spy.returned").sendPrefixedMessage(player); + public static Map getGamemodes() { + return Collections.unmodifiableMap(gamemodes); } } diff --git a/src/main/java/com/songoda/ultimatemoderation/staffchat/StaffChannel.java b/src/main/java/com/songoda/ultimatemoderation/staffchat/StaffChannel.java index 3b8bd84..b76f38d 100644 --- a/src/main/java/com/songoda/ultimatemoderation/staffchat/StaffChannel.java +++ b/src/main/java/com/songoda/ultimatemoderation/staffchat/StaffChannel.java @@ -38,19 +38,15 @@ public class StaffChannel { chatLog.stream().skip(chatLog.size() - 3).forEach(message -> player.sendMessage(Methods.formatText(message))); } messageAll(UltimateModeration.getInstance().getLocale() - .getMessage("event.staffchat.format.join") - .processPlaceholder("color", chatChar) - .processPlaceholder("channel", channelName) - .processPlaceholder("player", player.getDisplayName()).getMessage()); + .getMessage("event.staffchat.join") + .processPlaceholder("channel", channelName).getMessage()); } public void removeMember(Player player) { members.remove(player.getUniqueId()); messageAll(UltimateModeration.getInstance().getLocale() - .getMessage("event.staffchat.format.leave") - .processPlaceholder("color", chatChar) - .processPlaceholder("channel", channelName) - .processPlaceholder("player", player.getDisplayName()).getMessage()); + .getMessage("event.staffchat.leave") + .processPlaceholder("channel", channelName).getMessage()); } public void processMessage(String message, Player player) { diff --git a/src/main/java/com/songoda/ultimatemoderation/utils/VaultPermissions.java b/src/main/java/com/songoda/ultimatemoderation/utils/VaultPermissions.java new file mode 100644 index 0000000..8da8525 --- /dev/null +++ b/src/main/java/com/songoda/ultimatemoderation/utils/VaultPermissions.java @@ -0,0 +1,24 @@ +package com.songoda.ultimatemoderation.utils; + +import net.milkbowl.vault.permission.Permission; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.plugin.RegisteredServiceProvider; + +public class VaultPermissions { + + // Vault + private static Permission vaultPermission = null; + + static { + if (Bukkit.getServer().getPluginManager().getPlugin("Vault") != null) { + RegisteredServiceProvider permissionRsp = Bukkit.getServer().getServicesManager().getRegistration(Permission.class); + if (permissionRsp != null) vaultPermission = permissionRsp.getProvider(); + } + } + + public static boolean hasPermission(String world, OfflinePlayer offlinePlayer, String perm) { + if (vaultPermission != null) return vaultPermission.playerHas(world, offlinePlayer, perm); + return false; + } +} diff --git a/src/main/resources/en_US.lang b/src/main/resources/en_US.lang index 11ac870..d3dac06 100644 --- a/src/main/resources/en_US.lang +++ b/src/main/resources/en_US.lang @@ -69,6 +69,7 @@ event: message: '&7You have been warned' staffchat: leave: '&7You left &6%channel% &7successfully.' + leave: '&7You joined &6%channel% &7successfully.' nochannels: '&cYou are not in any channels.' format: '&%color%[%channel%] %player%&%color%: %message%' slowmode: