From 3ba39d40c2867706a96e4b50c115437afba95ae0 Mon Sep 17 00:00:00 2001 From: Steven Lawson Date: Mon, 26 Sep 2011 18:28:01 -0400 Subject: [PATCH] Added prelog Fixed annoying commands More config junk --- .../TotalFreedomMod/TotalFreedomMod.java | 1050 +++++++++-------- .../TotalFreedomModPlayerListener.java | 30 +- src/plugin.yml | 5 +- 3 files changed, 601 insertions(+), 484 deletions(-) diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index 5cd6dec7..e26fdb3b 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -1,6 +1,7 @@ package me.StevenLawson.TotalFreedomMod; import java.io.File; +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -23,16 +24,18 @@ public class TotalFreedomMod extends JavaPlugin { private final TotalFreedomModEntityListener entityListener = new TotalFreedomModEntityListener(this); private final TotalFreedomModBlockListener blockListener = new TotalFreedomModBlockListener(this); - //private final TotalFreedomModPlayerListener playerListener = new TotalFreedomModPlayerListener(this); + private final TotalFreedomModPlayerListener playerListener = new TotalFreedomModPlayerListener(this); private static final Logger log = Logger.getLogger("Minecraft"); protected static Configuration CONFIG; private List superadmins = new ArrayList(); + private List superadmin_ips = new ArrayList(); public Boolean allowExplosions = false; public Boolean allowLavaDamage = false; public Boolean allowFire = false; public double explosiveRadius = 4.0; + public Boolean preprocessLogEnabled = false; public final static String MSG_NO_PERMS = ChatColor.YELLOW + "You do not have permission to use this command."; public final static String YOU_ARE_OP = ChatColor.YELLOW + "You are now op!"; @@ -49,18 +52,25 @@ public class TotalFreedomMod extends JavaPlugin { "Madgeek1450", "markbyron" }); + CONFIG.setProperty("superadmin_ips", new String[] + { + "0.0.0.0" + }); CONFIG.setProperty("allow_explosions", false); CONFIG.setProperty("allow_lava_damage", false); CONFIG.setProperty("allow_fire", false); CONFIG.setProperty("explosiveRadius", 4.0); + CONFIG.setProperty("preprocess_log", false); CONFIG.save(); } CONFIG.load(); superadmins = CONFIG.getStringList("superadmins", null); + superadmin_ips = CONFIG.getStringList("superadmin_ips", null); allowExplosions = CONFIG.getBoolean("allow_explosions", false); allowLavaDamage = CONFIG.getBoolean("allow_lava_damage", false); allowFire = CONFIG.getBoolean("allow_fire", false); explosiveRadius = CONFIG.getDouble("explosiveRadius", 4.0); + preprocessLogEnabled = CONFIG.getBoolean("preprocess_log", false); PluginManager pm = this.getServer().getPluginManager(); pm.registerEvent(Event.Type.ENTITY_EXPLODE, entityListener, Event.Priority.High, this); @@ -70,6 +80,7 @@ public class TotalFreedomMod extends JavaPlugin pm.registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Event.Priority.High, this); pm.registerEvent(Event.Type.BLOCK_BURN, blockListener, Event.Priority.High, this); pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Event.Priority.High, this); + pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Event.Priority.High, this); log.log(Level.INFO, "[Total Freedom Mod] - Enabled! - Version: " + this.getDescription().getVersion() + " by Madgeek1450"); log.log(Level.INFO, "[Total Freedom Mod] - Loaded superadmins: " + implodeStringList(", ", superadmins)); @@ -82,604 +93,642 @@ public class TotalFreedomMod extends JavaPlugin public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { - Player player = null; - if (sender instanceof Player) + try { - player = (Player) sender; - log.log(Level.INFO, String.format("[PLAYER_COMMAND] %s(%s): /%s %s", player.getName(), player.getDisplayName().replaceAll("\\xA7.", ""), commandLabel, implodeStringList(" ", Arrays.asList(args)))); - } - else - { - log.log(Level.INFO, String.format("[CONSOLE_COMMAND] %s: /%s %s", sender.getName(), commandLabel, implodeStringList(" ", Arrays.asList(args)))); - } - - if (cmd.getName().equalsIgnoreCase("opme")) - { - if (player == null) + Player player = null; + if (sender instanceof Player) { - sender.sendMessage("This command only works in-game."); + player = (Player) sender; + log.log(Level.INFO, String.format("[PLAYER_COMMAND] %s(%s): /%s %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), commandLabel, implodeStringList(" ", Arrays.asList(args)))); } else { - if (isUserSuperadmin(sender.getName())) + log.log(Level.INFO, String.format("[CONSOLE_COMMAND] %s: /%s %s", sender.getName(), commandLabel, implodeStringList(" ", Arrays.asList(args)))); + } + + if (cmd.getName().equalsIgnoreCase("opme")) + { + if (player == null) { - tfBroadcastMessage(String.format("(%s: Opping %s)", sender.getName(), sender.getName()), ChatColor.GRAY); - sender.setOp(true); - sender.sendMessage(YOU_ARE_OP); + sender.sendMessage("This command only works in-game."); } else { - sender.sendMessage(MSG_NO_PERMS); + if (isUserSuperadmin(sender)) + { + tfBroadcastMessage(String.format("(%s: Opping %s)", sender.getName(), sender.getName()), ChatColor.GRAY); + sender.setOp(true); + sender.sendMessage(YOU_ARE_OP); + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } } + + return true; } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("listreal") || cmd.getName().equalsIgnoreCase("list")) - { - StringBuilder onlineStats = new StringBuilder(); - StringBuilder onlineUsers = new StringBuilder(); - - if (player == null) + else if (cmd.getName().equalsIgnoreCase("listreal") || cmd.getName().equalsIgnoreCase("list")) { - onlineStats.append(String.format("There are %d out of a maximum %d players online.", Bukkit.getOnlinePlayers().length, Bukkit.getMaxPlayers())); + StringBuilder onlineStats = new StringBuilder(); + StringBuilder onlineUsers = new StringBuilder(); - onlineUsers.append("Connected players: "); - boolean first = true; - for (Player p : Bukkit.getOnlinePlayers()) + if (player == null) { - if (first) - { - first = false; - } - else - { - onlineUsers.append(", "); - } + onlineStats.append(String.format("There are %d out of a maximum %d players online.", Bukkit.getOnlinePlayers().length, Bukkit.getMaxPlayers())); - if (sender.getName().equalsIgnoreCase("remotebukkit")) + onlineUsers.append("Connected players: "); + boolean first = true; + for (Player p : Bukkit.getOnlinePlayers()) { - onlineUsers.append(p.getName()); + if (first) + { + first = false; + } + else + { + onlineUsers.append(", "); + } + + if (sender.getName().equalsIgnoreCase("remotebukkit")) + { + onlineUsers.append(p.getName()); + } + else + { + if (p.isOp()) + { + onlineUsers.append("[OP]").append(p.getName()); + } + else + { + onlineUsers.append(p.getName()); + } + } } - else + } + else + { + onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(Bukkit.getOnlinePlayers().length); + onlineStats.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(Bukkit.getMaxPlayers()); + onlineStats.append(ChatColor.BLUE).append(" players online."); + + onlineUsers.append("Connected players: "); + boolean first = true; + for (Player p : Bukkit.getOnlinePlayers()) { + if (first) + { + first = false; + } + else + { + onlineUsers.append(", "); + } + if (p.isOp()) { - onlineUsers.append("[OP]").append(p.getName()); + onlineUsers.append(ChatColor.RED).append(p.getName()); } else { onlineUsers.append(p.getName()); } + + onlineUsers.append(ChatColor.WHITE); } } + + sender.sendMessage(onlineStats.toString()); + sender.sendMessage(onlineUsers.toString()); + + return true; } - else + else if (cmd.getName().equalsIgnoreCase("deopall")) { - onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(Bukkit.getOnlinePlayers().length); - onlineStats.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(Bukkit.getMaxPlayers()); - onlineStats.append(ChatColor.BLUE).append(" players online."); - - onlineUsers.append("Connected players: "); - boolean first = true; - for (Player p : Bukkit.getOnlinePlayers()) + if (isUserSuperadmin(sender) || player == null) { - if (first) - { - first = false; - } - else - { - onlineUsers.append(", "); - } + tfBroadcastMessage(String.format("(%s: De-opping everyone)", sender.getName()), ChatColor.GRAY); - if (p.isOp()) + for (Player p : Bukkit.getOnlinePlayers()) { - onlineUsers.append(ChatColor.RED).append(p.getName()); + if (!isUserSuperadmin(p) && !p.getName().equals(sender.getName())) + { + p.setOp(false); + p.sendMessage(YOU_ARE_NOT_OP); + } } - else - { - onlineUsers.append(p.getName()); - } - - onlineUsers.append(ChatColor.WHITE); } - } - - sender.sendMessage(onlineStats.toString()); - sender.sendMessage(onlineUsers.toString()); - - return true; - } - else if (cmd.getName().equalsIgnoreCase("deopall")) - { - if (isUserSuperadmin(sender.getName()) || player == null) - { - tfBroadcastMessage(String.format("(%s: De-opping everyone)", sender.getName()), ChatColor.GRAY); - - for (Player p : Bukkit.getOnlinePlayers()) + else { - if (!isUserSuperadmin(p.getName()) && !p.getName().equals(sender.getName())) + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("opall")) + { + if (isUserSuperadmin(sender) || player == null) + { + tfBroadcastMessage(String.format("(%s: Opping everyone)", sender.getName()), ChatColor.GRAY); + + boolean doSetGamemode = false; + GameMode targetGamemode = GameMode.CREATIVE; + if (args.length != 0) { + if (args[0].equals("-c")) + { + doSetGamemode = true; + targetGamemode = GameMode.CREATIVE; + } + else if (args[0].equals("-s")) + { + doSetGamemode = true; + targetGamemode = GameMode.SURVIVAL; + } + } + + for (Player p : Bukkit.getOnlinePlayers()) + { + p.setOp(true); + p.sendMessage(YOU_ARE_OP); + + if (doSetGamemode) + { + p.setGameMode(targetGamemode); + } + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("qop")) //Quick OP + { + if (args.length != 1) + { + return false; + } + + if (sender.isOp() || player == null || isUserSuperadmin(sender)) + { + boolean matched_player = false; + for (Player p : Bukkit.matchPlayer(args[0])) + { + matched_player = true; + + tfBroadcastMessage(String.format("(%s: Opping %s)", sender.getName(), p.getName()), ChatColor.GRAY); + p.setOp(true); + p.sendMessage(YOU_ARE_OP); + } + if (!matched_player) + { + sender.sendMessage("No targets matched."); + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("qdeop")) //Quick De-op + { + if (args.length != 1) + { + return false; + } + + if (sender.isOp() || player == null || isUserSuperadmin(sender)) + { + boolean matched_player = false; + for (Player p : Bukkit.matchPlayer(args[0])) + { + matched_player = true; + + tfBroadcastMessage(String.format("(%s: De-opping %s)", sender.getName(), p.getName()), ChatColor.GRAY); p.setOp(false); p.sendMessage(YOU_ARE_NOT_OP); } - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("opall")) - { - if (isUserSuperadmin(sender.getName()) || player == null) - { - tfBroadcastMessage(String.format("(%s: Opping everyone)", sender.getName()), ChatColor.GRAY); - - boolean doSetGamemode = false; - GameMode targetGamemode = GameMode.CREATIVE; - if (args.length != 0) - { - if (args[0].equals("-c")) + if (!matched_player) { - doSetGamemode = true; - targetGamemode = GameMode.CREATIVE; + sender.sendMessage("No targets matched."); } - else if (args[0].equals("-s")) - { - doSetGamemode = true; - targetGamemode = GameMode.SURVIVAL; - } - } - - for (Player p : Bukkit.getOnlinePlayers()) - { - p.setOp(true); - p.sendMessage(YOU_ARE_OP); - - if (doSetGamemode) - { - p.setGameMode(targetGamemode); - } - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("qop")) //Quick OP - { - if (args.length != 1) - { - return false; - } - - if (sender.isOp() || player == null || isUserSuperadmin(sender.getName())) - { - boolean matched_player = false; - for (Player p : Bukkit.matchPlayer(args[0])) - { - matched_player = true; - - tfBroadcastMessage(String.format("(%s: Opping %s)", sender.getName(), p.getName()), ChatColor.GRAY); - p.setOp(true); - p.sendMessage(YOU_ARE_OP); - } - if (!matched_player) - { - sender.sendMessage("No targets matched."); - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("qdeop")) //Quick De-op - { - if (args.length != 1) - { - return false; - } - - if (sender.isOp() || player == null || isUserSuperadmin(sender.getName())) - { - boolean matched_player = false; - for (Player p : Bukkit.matchPlayer(args[0])) - { - matched_player = true; - - tfBroadcastMessage(String.format("(%s: De-opping %s)", sender.getName(), p.getName()), ChatColor.GRAY); - p.setOp(false); - p.sendMessage(YOU_ARE_NOT_OP); - } - if (!matched_player) - { - sender.sendMessage("No targets matched."); - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("survival")) - { - if (player == null) - { - if (args.length == 0) - { - sender.sendMessage("When used from the console, you must define a target user to change gamemode on."); - return true; - } - } - else - { - if (!sender.isOp()) - { - sender.sendMessage(MSG_NO_PERMS); - return true; - } - } - - Player p; - if (args.length == 0) - { - p = Bukkit.getPlayerExact(sender.getName()); - } - else - { - List matches = Bukkit.matchPlayer(args[0]); - if (matches.isEmpty()) - { - sender.sendMessage("Can't find user " + args[0]); - return true; } else - { - p = matches.get(0); - } - } - - sender.sendMessage("Setting " + p.getName() + " to game mode 'Survival'."); - p.sendMessage(sender.getName() + " set your game mode to 'Survival'."); - p.setGameMode(GameMode.SURVIVAL); - - return true; - } - else if (cmd.getName().equalsIgnoreCase("creative")) - { - if (player == null) - { - if (args.length == 0) - { - sender.sendMessage("When used from the console, you must define a target user to change gamemode on."); - return true; - } - } - else - { - if (!sender.isOp()) { sender.sendMessage(MSG_NO_PERMS); - return true; } - } - Player p; - if (args.length == 0) - { - p = Bukkit.getPlayerExact(sender.getName()); + return true; } - else + else if (cmd.getName().equalsIgnoreCase("survival")) { - List matches = Bukkit.matchPlayer(args[0]); - if (matches.isEmpty()) + if (player == null) { - sender.sendMessage("Can't find user " + args[0]); - return true; + if (args.length == 0) + { + sender.sendMessage("When used from the console, you must define a target user to change gamemode on."); + return true; + } } else { - p = matches.get(0); - } - } - - sender.sendMessage("Setting " + p.getName() + " to game mode 'Creative'."); - p.sendMessage(sender.getName() + " set your game mode to 'Creative'."); - p.setGameMode(GameMode.CREATIVE); - - return true; - } - else if (cmd.getName().equalsIgnoreCase("wildcard")) - { - if (player == null || isUserSuperadmin(sender.getName())) - { - if (args[0].equals("wildcard")) - { - sender.sendMessage("What the hell are you trying to do, you stupid idiot..."); - return true; + if (!sender.isOp()) + { + sender.sendMessage(MSG_NO_PERMS); + return true; + } } - String base_command = implodeStringList(" ", Arrays.asList(args)); - - for (Player p : Bukkit.getOnlinePlayers()) - { - String out_command = base_command.replaceAll("\\x3f", p.getName()); - sender.sendMessage("Running Command: " + out_command); - Bukkit.getServer().dispatchCommand(sender, out_command); - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("say")) - { - if (args.length == 0) - { - return false; - } - - if (player == null || sender.isOp()) - { - String message = implodeStringList(" ", Arrays.asList(args)); - tfBroadcastMessage(String.format("[Server:%s] %s", sender.getName(), message), ChatColor.LIGHT_PURPLE); - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("gtfo")) - { - if (args.length != 1) - { - return false; - } - - if (player == null || isUserSuperadmin(sender.getName())) - { Player p; - List matches = Bukkit.matchPlayer(args[0]); - if (matches.isEmpty()) + if (args.length == 0) { - sender.sendMessage("Can't find user " + args[0]); - return true; + p = Bukkit.getPlayerExact(sender.getName()); } else { - p = matches.get(0); + List matches = Bukkit.matchPlayer(args[0]); + if (matches.isEmpty()) + { + sender.sendMessage("Can't find user " + args[0]); + return true; + } + else + { + p = matches.get(0); + } } - Bukkit.getServer().dispatchCommand(sender, "smite " + p.getName()); + sender.sendMessage("Setting " + p.getName() + " to game mode 'Survival'."); + p.sendMessage(sender.getName() + " set your game mode to 'Survival'."); + p.setGameMode(GameMode.SURVIVAL); - p.setOp(false); - - String user_ip = p.getAddress().getAddress().toString().replaceAll("/", "").trim(); - - tfBroadcastMessage(String.format("Banning: %s, IP: %s.", p.getName(), user_ip), ChatColor.RED); - Bukkit.banIP(user_ip); - Bukkit.getOfflinePlayer(p.getName()).setBanned(true); - - p.kickPlayer("GTFO"); + return true; } - else + else if (cmd.getName().equalsIgnoreCase("creative")) { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("stop")) - { - if (player == null || isUserSuperadmin(sender.getName())) - { - tfBroadcastMessage("Server is going offline.", ChatColor.GRAY); - - for (Player p : Bukkit.getOnlinePlayers()) + if (player == null) { - p.kickPlayer("Server is going offline, come back in a few minutes."); + if (args.length == 0) + { + sender.sendMessage("When used from the console, you must define a target user to change gamemode on."); + return true; + } + } + else + { + if (!sender.isOp()) + { + sender.sendMessage(MSG_NO_PERMS); + return true; + } } - Bukkit.shutdown(); - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } + Player p; + if (args.length == 0) + { + p = Bukkit.getPlayerExact(sender.getName()); + } + else + { + List matches = Bukkit.matchPlayer(args[0]); + if (matches.isEmpty()) + { + sender.sendMessage("Can't find user " + args[0]); + return true; + } + else + { + p = matches.get(0); + } + } - return true; - } - else if (cmd.getName().equalsIgnoreCase("explosives")) - { - if (player == null || isUserSuperadmin(sender.getName())) + sender.sendMessage("Setting " + p.getName() + " to game mode 'Creative'."); + p.sendMessage(sender.getName() + " set your game mode to 'Creative'."); + p.setGameMode(GameMode.CREATIVE); + + return true; + } + else if (cmd.getName().equalsIgnoreCase("wildcard")) + { + if (player == null || isUserSuperadmin(sender)) + { + if (args[0].equals("wildcard")) + { + sender.sendMessage("What the hell are you trying to do, you stupid idiot..."); + return true; + } + + String base_command = implodeStringList(" ", Arrays.asList(args)); + + for (Player p : Bukkit.getOnlinePlayers()) + { + String out_command = base_command.replaceAll("\\x3f", p.getName()); + sender.sendMessage("Running Command: " + out_command); + Bukkit.getServer().dispatchCommand(sender, out_command); + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("say")) { if (args.length == 0) { return false; } - if (args.length == 2) + if (player == null || sender.isOp()) { - explosiveRadius = Double.parseDouble(args[1]); - } - - if (args[0].equalsIgnoreCase("on")) - { - this.allowExplosions = true; - sender.sendMessage("Explosives are now enabled, radius set to " + explosiveRadius + " blocks."); + String message = implodeStringList(" ", Arrays.asList(args)); + tfBroadcastMessage(String.format("[Server:%s] %s", sender.getName(), message), ChatColor.LIGHT_PURPLE); } else { - this.allowExplosions = false; - sender.sendMessage("Explosives are now disabled."); + sender.sendMessage(MSG_NO_PERMS); } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - return true; - } - else if (cmd.getName().equalsIgnoreCase("fire")) - { - if (player == null || isUserSuperadmin(sender.getName())) + return true; + } + else if (cmd.getName().equalsIgnoreCase("gtfo")) { if (args.length != 1) { return false; } - if (args[0].equalsIgnoreCase("on")) + if (player == null || isUserSuperadmin(sender)) { - this.allowFire = true; - sender.sendMessage("Fire is now enabled."); + Player p; + List matches = Bukkit.matchPlayer(args[0]); + if (matches.isEmpty()) + { + sender.sendMessage("Can't find user " + args[0]); + return true; + } + else + { + p = matches.get(0); + } + + Bukkit.getServer().dispatchCommand(sender, "smite " + p.getName()); + + p.setOp(false); + + String user_ip = p.getAddress().getAddress().toString().replaceAll("/", "").trim(); + + tfBroadcastMessage(String.format("Banning: %s, IP: %s.", p.getName(), user_ip), ChatColor.RED); + Bukkit.banIP(user_ip); + Bukkit.getOfflinePlayer(p.getName()).setBanned(true); + + p.kickPlayer("GTFO"); } else { - this.allowFire = false; - sender.sendMessage("Fire is now disabled."); - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("lavadmg")) - { - if (player == null || isUserSuperadmin(sender.getName())) - { - if (args.length != 1) - { - return false; + sender.sendMessage(MSG_NO_PERMS); } - if (args[0].equalsIgnoreCase("on")) + return true; + } + else if (cmd.getName().equalsIgnoreCase("stop")) + { + if (player == null || isUserSuperadmin(sender)) { - this.allowLavaDamage = true; - sender.sendMessage("Lava damage is now enabled."); + tfBroadcastMessage("Server is going offline.", ChatColor.GRAY); + + for (Player p : Bukkit.getOnlinePlayers()) + { + p.kickPlayer("Server is going offline, come back in a few minutes."); + } + + Bukkit.shutdown(); } else { - this.allowLavaDamage = false; - sender.sendMessage("Lava damage is now disabled."); + sender.sendMessage(MSG_NO_PERMS); } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - return true; - } - else if (cmd.getName().equalsIgnoreCase("radar")) - { - if (player == null) - { - sender.sendMessage("This command can only be used in-game."); return true; } - - Player sender_player = Bukkit.getPlayerExact(sender.getName()); - Location sender_pos = sender_player.getLocation(); - String sender_world = sender_player.getWorld().getName(); - - List radar_data = new ArrayList(); - - for (Player p : Bukkit.getOnlinePlayers()) + else if (cmd.getName().equalsIgnoreCase("explosives")) { - if (sender_world.equals(p.getWorld().getName()) && !p.getName().equals(sender.getName())) + if (player == null || isUserSuperadmin(sender)) { - radar_data.add(new RadarData(p, sender_pos.distance(p.getLocation()), p.getLocation())); + if (args.length == 0) + { + return false; + } + + if (args.length == 2) + { + explosiveRadius = Double.parseDouble(args[1]); + } + + if (args[0].equalsIgnoreCase("on")) + { + this.allowExplosions = true; + sender.sendMessage("Explosives are now enabled, radius set to " + explosiveRadius + " blocks."); + } + else + { + this.allowExplosions = false; + sender.sendMessage("Explosives are now disabled."); + } } - } - - Collections.sort(radar_data, new RadarData()); - - sender.sendMessage(ChatColor.YELLOW + "People nearby in " + sender_world + ":"); - - int countmax = 5; - if (args.length == 1) - { - countmax = Integer.parseInt(args[0]); - } - - int count = 0; - for (RadarData i : radar_data) - { - if (count++ > countmax) + else { - break; + sender.sendMessage(MSG_NO_PERMS); } - sender.sendMessage(ChatColor.YELLOW + String.format("%s - %d blocks away @ %s.", i.player.getName(), Math.round(i.distance), formatLocation(i.location))); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("rd")) - { - if (player == null) - { - sender.sendMessage("This command can only be used in-game."); return true; } - - if (sender.isOp()) + else if (cmd.getName().equalsIgnoreCase("fire")) { - sender.sendMessage(ChatColor.GRAY + "Using WorldEdit to remove all dropped items, arrows, and TNT."); + if (player == null || isUserSuperadmin(sender)) + { + if (args.length != 1) + { + return false; + } - Bukkit.getServer().dispatchCommand(sender, "remove items -1"); - Bukkit.getServer().dispatchCommand(sender, "remove arrows -1"); - Bukkit.getServer().dispatchCommand(sender, "remove tnt -1"); - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } + if (args[0].equalsIgnoreCase("on")) + { + this.allowFire = true; + sender.sendMessage("Fire is now enabled."); + } + else + { + this.allowFire = false; + sender.sendMessage("Fire is now disabled."); + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } - return true; - } - else if (cmd.getName().equalsIgnoreCase("mp")) - { - if (player == null) - { - sender.sendMessage("This command can only be used in-game."); return true; } - - if (sender.isOp()) + else if (cmd.getName().equalsIgnoreCase("lavadmg")) { - sender.sendMessage(ChatColor.GRAY + "Using MobLimiter to purge all mobs."); + if (player == null || isUserSuperadmin(sender)) + { + if (args.length != 1) + { + return false; + } - Bukkit.getServer().dispatchCommand(sender, "moblimiter purge"); + if (args[0].equalsIgnoreCase("on")) + { + this.allowLavaDamage = true; + sender.sendMessage("Lava damage is now enabled."); + } + else + { + this.allowLavaDamage = false; + sender.sendMessage("Lava damage is now disabled."); + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; } - else + else if (cmd.getName().equalsIgnoreCase("radar")) { - sender.sendMessage(MSG_NO_PERMS); - } + if (player == null) + { + sender.sendMessage("This command can only be used in-game."); + return true; + } - return true; + Player sender_player = Bukkit.getPlayerExact(sender.getName()); + Location sender_pos = sender_player.getLocation(); + String sender_world = sender_player.getWorld().getName(); + + List radar_data = new ArrayList(); + + for (Player p : Bukkit.getOnlinePlayers()) + { + if (sender_world.equals(p.getWorld().getName()) && !p.getName().equals(sender.getName())) + { + radar_data.add(new RadarData(p, sender_pos.distance(p.getLocation()), p.getLocation())); + } + } + + Collections.sort(radar_data, new RadarData()); + + sender.sendMessage(ChatColor.YELLOW + "People nearby in " + sender_world + ":"); + + int countmax = 5; + if (args.length == 1) + { + countmax = Integer.parseInt(args[0]); + } + + int count = 0; + for (RadarData i : radar_data) + { + if (count++ > countmax) + { + break; + } + + sender.sendMessage(ChatColor.YELLOW + String.format("%s - %d blocks away @ %s.", i.player.getName(), Math.round(i.distance), formatLocation(i.location))); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("rd")) + { + if (player == null) + { + sender.sendMessage("This command can only be used in-game."); + return true; + } + + if (sender.isOp()) + { + sender.sendMessage(ChatColor.GRAY + "Using WorldEdit to remove all dropped items, arrows, and TNT."); + + Bukkit.getServer().dispatchCommand(sender, "remove items -1"); + Bukkit.getServer().dispatchCommand(sender, "remove arrows -1"); + Bukkit.getServer().dispatchCommand(sender, "remove tnt -1"); + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("mp")) + { + if (player == null) + { + sender.sendMessage("This command can only be used in-game."); + return true; + } + + if (sender.isOp()) + { + sender.sendMessage(ChatColor.GRAY + "Using MobLimiter to purge all mobs."); + + Bukkit.getServer().dispatchCommand(sender, "moblimiter purge"); + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("prelog")) + { + if (player == null || isUserSuperadmin(sender)) + { + if (args.length != 1) + { + return false; + } + + if (args[0].equalsIgnoreCase("on")) + { + this.preprocessLogEnabled = true; + sender.sendMessage("Command preprocess logging is now enabled. This will be spammy in the log."); + } + else + { + this.preprocessLogEnabled = false; + sender.sendMessage("Command preprocess logging is now disabled."); + } + + CONFIG.load(); + CONFIG.setProperty("preprocess_log", this.preprocessLogEnabled); + CONFIG.save(); + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + } + catch (Exception ex) + { + log.severe("Exception in TotalFreedomMod.onCommand: " + ex.getMessage()); } return false; @@ -718,8 +767,45 @@ public class TotalFreedomMod extends JavaPlugin Math.round(in_loc.getZ())); } - public boolean isUserSuperadmin(String userName) + public boolean isUserSuperadmin(CommandSender user) { - return superadmins.contains(userName); + try + { + if (!(user instanceof Player)) + { + return true; + } + + if (Bukkit.getOnlineMode()) + { + if (superadmins.contains(user.getName())) + { + return true; + } + } + + Player p = (Player) user; + if (p != null) + { + InetSocketAddress ip_address_obj = p.getAddress(); + if (ip_address_obj != null) + { + String user_ip = ip_address_obj.getAddress().toString().replaceAll("/", "").trim(); + if (user_ip != null && !user_ip.isEmpty()) + { + if (superadmin_ips.contains(user_ip)) + { + return true; + } + } + } + } + } + catch (Exception ex) + { + log.severe("Exception in TotalFreedomMod.isUserSuperadmin: " + ex.getMessage()); + } + + return false; } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java index 9b40a45d..d9d036c3 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java @@ -1,13 +1,41 @@ package me.StevenLawson.TotalFreedomMod; +import java.util.logging.Logger; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerListener; class TotalFreedomModPlayerListener extends PlayerListener { public static TotalFreedomMod plugin; - + private static final Logger log = Logger.getLogger("Minecraft"); + TotalFreedomModPlayerListener(TotalFreedomMod instance) { plugin = instance; } + + @Override + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) + { + String command = event.getMessage(); + Player player = event.getPlayer(); + + if (plugin.preprocessLogEnabled) + { + log.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), command)); + } + + if (command.startsWith("/stop") && !command.equals("/stop")) + { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + "Piss off."); + } + else if (command.startsWith("/zeus") || command.startsWith("/vulcan")) + { + event.setCancelled(true); + player.sendMessage(ChatColor.RED + "Piss off."); + } + } } diff --git a/src/plugin.yml b/src/plugin.yml index c6545f36..4803eb03 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TotalFreedomMod main: me.StevenLawson.TotalFreedomMod.TotalFreedomMod -version: 1.3 +version: 1.4 description: Plugin for the Total Freedom server author: StevenLawson / Madgeek1450 commands: @@ -37,6 +37,9 @@ commands: opme: description: Superadmin command - Automatically ops user. usage: / + prelog: + description: Superadmin command - Enable/disable the command prelogger. When this is on, logs will be filled with many duplicate messages. + usage: / qdeop: description: Quick De-Op - deop someone based on a partial name. usage: /