package net.t2code.opsecurity.events; import net.t2code.opsecurity.check.OpCheck; import net.t2code.opsecurity.config.language.Language; import net.t2code.opsecurity.config.opWhitelist.OPWhitelist; import net.t2code.opsecurity.enums.OpCommandRequest; import net.t2code.opsecurity.objects.PlayerCash; import net.t2code.opsecurity.objects.PlayerObject; import net.t2code.opsecurity.system.Main; import net.t2code.t2codelib.SPIGOT.api.messages.T2Csend; import net.t2code.t2codelib.SPIGOT.api.player.T2CnameHistory; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.server.ServerCommandEvent; import java.io.IOException; import java.util.Map; public class OpCommand implements Listener { @EventHandler public void onOPServer(ServerCommandEvent event) { if (!OPWhitelist.enable.valueBoolean) return; if ((event.getCommand().toLowerCase().startsWith("op ") || event.getCommand().toLowerCase().startsWith("minecraft:op "))) { switch (isNotOPWTL(event.getCommand())) { case mustOnline: T2Csend.sender(event.getSender(), Language.playerMustBeOnlineToOp.value); event.setCancelled(true); break; case notWhitelisted: T2Csend.sender(event.getSender(), Language.opWhitelistOpCommand.value); event.setCancelled(true); break; } } } @EventHandler public void onOpPlayer(PlayerCommandPreprocessEvent event) { if (!OPWhitelist.enable.valueBoolean) return; if ((event.getMessage().toLowerCase().startsWith("/op ") || event.getMessage().toLowerCase().startsWith("/minecraft:op "))) { switch (isNotOPWTL(event.getMessage())) { case mustOnline: T2Csend.player(event.getPlayer(), Language.playerMustBeOnlineToOp.value); event.setCancelled(true); break; case notWhitelisted: T2Csend.player(event.getPlayer(), Language.opWhitelistOpCommand.value); event.setCancelled(true); break; } } } private OpCommandRequest isNotOPWTL(String command) { if (command.charAt(0) == '/') command = command.replaceFirst("/", ""); String arg = command.replace("op ", ""); Player target = Bukkit.getPlayer(arg); if (OPWhitelist.playerMustBeOnlineToOp.valueBoolean) { if (target == null) return OpCommandRequest.mustOnline; if (!opWhitelist(target.getName(), target.getUniqueId().toString())) return OpCommandRequest.notWhitelisted; } String targetUUID; if (target != null) { targetUUID = target.getUniqueId().toString(); } else { try { targetUUID = T2CnameHistory.NameLookup.getPlayerUUID(arg); } catch (IOException e) { throw new RuntimeException(e); } } if (!opWhitelist(arg, targetUUID)) return OpCommandRequest.notWhitelisted; return OpCommandRequest.ok; } private static Boolean opWhitelist(String playerName, String playerUuid) { for (Map.Entry playerObject : PlayerCash.getOpHashMap().entrySet()) { T2Csend.debug(Main.getPlugin(), "--------- " + playerName); T2Csend.debug(Main.getPlugin(),"opWhitelist (op command) playerObject Name: "+playerObject.getValue().playerName ); T2Csend.debug(Main.getPlugin(),"opWhitelist (op command) Player Name: "+ playerName ); T2Csend.debug(Main.getPlugin(),"opWhitelist (op command) playerObject UUID: "+playerObject.getValue().uuid ); T2Csend.debug(Main.getPlugin(),"opWhitelist (op command) Player UUID: "+ playerUuid ); if (playerObject.getValue().playerName.equals(playerName) && playerObject.getValue().uuid.equals(playerUuid.replace("-", ""))) { T2Csend.debug(Main.getPlugin(),"opWhitelist (op command) on list!"); return true; } } return false; } }