diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index c717d84..5cd6dec 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -1,5 +1,6 @@ package me.StevenLawson.TotalFreedomMod; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -20,680 +21,705 @@ import org.bukkit.util.config.Configuration; 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 static final Logger log = Logger.getLogger("Minecraft"); - protected static Configuration CONFIG; - private List superadmins = new ArrayList(); - public Boolean allowExplosions = false; - public Boolean allowLavaDamage = false; - public Boolean allowFire = false; - public double explosiveRadius = 2.0; - 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!"; - public final static String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!"; - - public void onEnable() - { - CONFIG = getConfiguration(); - CONFIG.load(); - if (CONFIG.getString("superadmins", null) == null) //Generate config file: - { - log.log(Level.INFO, "[Total Freedom Mod] - Generating default config file (plugins/TotalFreedomMod/config.yml)..."); - CONFIG.setProperty("superadmins", new String[] - { - "Madgeek1450", "markbyron" - }); - CONFIG.setProperty("allow_explosions", false); - CONFIG.setProperty("allow_lava_damage", false); - CONFIG.setProperty("allow_fire", false); - CONFIG.setProperty("explosiveRadius", 2.0); - CONFIG.save(); - CONFIG.load(); - } - superadmins = CONFIG.getStringList("superadmins", null); - allowExplosions = CONFIG.getBoolean("allow_explosions", false); - allowLavaDamage = CONFIG.getBoolean("allow_lava_damage", false); - allowFire = CONFIG.getBoolean("allow_fire", false); - explosiveRadius = CONFIG.getDouble("explosiveRadius", 2.0); - - PluginManager pm = this.getServer().getPluginManager(); - pm.registerEvent(Event.Type.ENTITY_EXPLODE, entityListener, Event.Priority.Highest, this); - pm.registerEvent(Event.Type.ENTITY_COMBUST, entityListener, Event.Priority.Highest, this); - pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.Highest, this); - pm.registerEvent(Event.Type.BLOCK_IGNITE, blockListener, Event.Priority.Highest, this); - pm.registerEvent(Event.Type.BLOCK_BURN, blockListener, Event.Priority.Highest, this); - //pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Event.Priority.Highest, 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)); - } - - public void onDisable() - { - log.log(Level.INFO, "[Total Freedom Mod] - Disabled."); - } - - public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) - { - Player player = null; - if (sender instanceof Player) - { - 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) - { - sender.sendMessage("This command only works in-game."); - } - else - { - if (isUserSuperadmin(sender.getName())) - { - 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; - } - else if (cmd.getName().equalsIgnoreCase("listreal") || cmd.getName().equalsIgnoreCase("list")) - { - StringBuilder onlineStats = new StringBuilder(); - StringBuilder onlineUsers = new StringBuilder(); - - if (player == null) - { - onlineStats.append(String.format("There are %d out of a maximum %d players online.", Bukkit.getOnlinePlayers().length, Bukkit.getMaxPlayers())); - - onlineUsers.append("Connected players: "); - boolean first = true; - for (Player p : Bukkit.getOnlinePlayers()) - { - 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 - { - 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(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 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()) - { - if (!isUserSuperadmin(p.getName()) && !p.getName().equals(sender.getName())) - { - 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")) - { - 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.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()); - } - 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 '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; - } - - 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()) - { - 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 - { - 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()) - { - p.kickPlayer("Server is going offline, come back in a few minutes."); - } - - Bukkit.shutdown(); - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("explosives")) - { - if (player == null || isUserSuperadmin(sender.getName())) - { - 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."); - } - } - else - { - sender.sendMessage(MSG_NO_PERMS); - } - - return true; - } - else if (cmd.getName().equalsIgnoreCase("fire")) - { - if (player == null || isUserSuperadmin(sender.getName())) - { - if (args.length != 1) - { - return false; - } - - 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("lavadmg")) - { - if (player == null || isUserSuperadmin(sender.getName())) - { - if (args.length != 1) - { - return false; - } - - 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 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()) - { - 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 @ ", 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"); + private final TotalFreedomModEntityListener entityListener = new TotalFreedomModEntityListener(this); + private final TotalFreedomModBlockListener blockListener = new TotalFreedomModBlockListener(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(); + public Boolean allowExplosions = false; + public Boolean allowLavaDamage = false; + public Boolean allowFire = false; + public double explosiveRadius = 4.0; + + 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!"; + public final static String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!"; + + public void onEnable() + { + CONFIG = getConfiguration(); + File configfile = new File("plugins/TotalFreedomMod/config.yml"); + if (!configfile.exists()) + { + log.log(Level.INFO, "[Total Freedom Mod] - Generating default config file (plugins/TotalFreedomMod/config.yml)..."); + CONFIG.setProperty("superadmins", new String[] + { + "Madgeek1450", "markbyron" + }); + CONFIG.setProperty("allow_explosions", false); + CONFIG.setProperty("allow_lava_damage", false); + CONFIG.setProperty("allow_fire", false); + CONFIG.setProperty("explosiveRadius", 4.0); + CONFIG.save(); + } + CONFIG.load(); + superadmins = CONFIG.getStringList("superadmins", 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); + + PluginManager pm = this.getServer().getPluginManager(); + pm.registerEvent(Event.Type.ENTITY_EXPLODE, entityListener, Event.Priority.High, this); + pm.registerEvent(Event.Type.ENTITY_COMBUST, entityListener, Event.Priority.High, this); + pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Event.Priority.High, this); + pm.registerEvent(Event.Type.EXPLOSION_PRIME, entityListener, Event.Priority.High, this); + 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); + + 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)); + } + + public void onDisable() + { + log.log(Level.INFO, "[Total Freedom Mod] - Disabled."); + } + + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) + { + Player player = null; + if (sender instanceof Player) + { + 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) + { + sender.sendMessage("This command only works in-game."); + } + else + { + if (isUserSuperadmin(sender.getName())) + { + 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; + } + else if (cmd.getName().equalsIgnoreCase("listreal") || cmd.getName().equalsIgnoreCase("list")) + { + StringBuilder onlineStats = new StringBuilder(); + StringBuilder onlineUsers = new StringBuilder(); + + if (player == null) + { + onlineStats.append(String.format("There are %d out of a maximum %d players online.", Bukkit.getOnlinePlayers().length, Bukkit.getMaxPlayers())); + + onlineUsers.append("Connected players: "); + boolean first = true; + for (Player p : Bukkit.getOnlinePlayers()) + { + 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 + { + 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(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 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()) + { + if (!isUserSuperadmin(p.getName()) && !p.getName().equals(sender.getName())) + { + 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")) + { + 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.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()); + } + 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 '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; + } + + 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()) + { + 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 + { + 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()) + { + p.kickPlayer("Server is going offline, come back in a few minutes."); + } + + Bukkit.shutdown(); + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("explosives")) + { + if (player == null || isUserSuperadmin(sender.getName())) + { + 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."); + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("fire")) + { + if (player == null || isUserSuperadmin(sender.getName())) + { + if (args.length != 1) + { + return false; + } + + 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("lavadmg")) + { + if (player == null || isUserSuperadmin(sender.getName())) + { + if (args.length != 1) + { + return false; + } + + 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 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()) + { + 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); - } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } - return true; - } + return true; + } + else if (cmd.getName().equalsIgnoreCase("mp")) + { + if (player == null) + { + sender.sendMessage("This command can only be used in-game."); + return true; + } - return false; - } + if (sender.isOp()) + { + sender.sendMessage(ChatColor.GRAY + "Using MobLimiter to purge all mobs."); - public void tfBroadcastMessage(String message, ChatColor color) - { - log.info(message); + Bukkit.getServer().dispatchCommand(sender, "moblimiter purge"); + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } - for (Player p : Bukkit.getOnlinePlayers()) - { - p.sendMessage(color + message); - } - } + return true; + } - public String implodeStringList(String glue, List pieces) - { - StringBuilder output = new StringBuilder(); - for (int i = 0; i < pieces.size(); i++) - { - if (i != 0) - { - output.append(glue); - } - output.append(pieces.get(i)); - } - return output.toString(); - } + return false; + } - public String formatLocation(Location in_loc) - { - return String.format("%s: (%d, %d, %d)", - in_loc.getWorld().getName(), - Math.round(in_loc.getX()), - Math.round(in_loc.getY()), - Math.round(in_loc.getZ())); - } + public void tfBroadcastMessage(String message, ChatColor color) + { + log.info(message); - public boolean isUserSuperadmin(String userName) - { - return superadmins.contains(userName); - } + for (Player p : Bukkit.getOnlinePlayers()) + { + p.sendMessage(color + message); + } + } + + public String implodeStringList(String glue, List pieces) + { + StringBuilder output = new StringBuilder(); + for (int i = 0; i < pieces.size(); i++) + { + if (i != 0) + { + output.append(glue); + } + output.append(pieces.get(i)); + } + return output.toString(); + } + + public String formatLocation(Location in_loc) + { + return String.format("%s: (%d, %d, %d)", + in_loc.getWorld().getName(), + Math.round(in_loc.getX()), + Math.round(in_loc.getY()), + Math.round(in_loc.getZ())); + } + + public boolean isUserSuperadmin(String userName) + { + return superadmins.contains(userName); + } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java index 3e9d904..fb5b2f8 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java @@ -1,17 +1,19 @@ package me.StevenLawson.TotalFreedomMod; -//import org.bukkit.ChatColor; -//import org.bukkit.Material; -//import org.bukkit.entity.Player; +import java.util.logging.Logger; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockListener; -//import org.bukkit.event.block.BlockPlaceEvent; -//import org.bukkit.inventory.ItemStack; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.inventory.ItemStack; public class TotalFreedomModBlockListener extends BlockListener { public static TotalFreedomMod plugin; + private static final Logger log = Logger.getLogger("Minecraft"); TotalFreedomModBlockListener(TotalFreedomMod instance) { @@ -38,43 +40,41 @@ public class TotalFreedomModBlockListener extends BlockListener } } -// @Override -// public void onBlockPlace(BlockPlaceEvent event) -// { -// ItemStack is = new ItemStack(event.getBlockPlaced().getType(), 1, (short) 0, event.getBlockPlaced().getData()); -// if (is.getType() == Material.LAVA || is.getType() == Material.STATIONARY_LAVA || is.getType() == Material.LAVA_BUCKET) -// { -// Player p = event.getPlayer(); -// -// plugin.tfBroadcastMessage(String.format("%s placed lava @ %s", -// p.getName(), -// plugin.formatLocation(p.getLocation()) -// ), ChatColor.GRAY); -// } -// else if (is.getType() == Material.WATER || is.getType() == Material.STATIONARY_WATER || is.getType() == Material.WATER_BUCKET) -// { -// Player p = event.getPlayer(); -// -// plugin.tfBroadcastMessage(String.format("%s placed water @ %s", -// p.getName(), -// plugin.formatLocation(p.getLocation()) -// ), ChatColor.GRAY); -// } -// else if (is.getType() == Material.TNT) -// { -// Player p = event.getPlayer(); -// -// plugin.tfBroadcastMessage(String.format("%s placed TNT @ %s", -// p.getName(), -// plugin.formatLocation(p.getLocation()) -// ), ChatColor.GRAY); -// -// if (!plugin.allowExplosions) -// { -// p.sendMessage(ChatColor.GRAY + "TNT is currently disabled."); -// event.setCancelled(true); -// return; -// } -// } -// } + @Override + public void onBlockPlace(BlockPlaceEvent event) + { + ItemStack is = new ItemStack(event.getBlockPlaced().getType(), 1, (short) 0, event.getBlockPlaced().getData()); + if (is.getType() == Material.LAVA || is.getType() == Material.STATIONARY_LAVA) + { + log.info(String.format("%s placed lava @ %s", + event.getPlayer().getName(), + plugin.formatLocation(event.getBlock().getLocation()) + )); + } + else if (is.getType() == Material.WATER || is.getType() == Material.STATIONARY_WATER) + { + log.info(String.format("%s placed water @ %s", + event.getPlayer().getName(), + plugin.formatLocation(event.getBlock().getLocation()) + )); + } + else if (is.getType() == Material.TNT) + { + Player p = event.getPlayer(); + + if (!plugin.allowExplosions) + { + p.sendMessage(ChatColor.GRAY + "TNT is currently disabled."); + event.setCancelled(true); + return; + } + else + { + log.info(String.format("%s placed TNT @ %s", + p.getName(), + plugin.formatLocation(event.getBlock().getLocation()) + )); + } + } + } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModEntityListener.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModEntityListener.java index 0eb8d12..bcd7754 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModEntityListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModEntityListener.java @@ -5,6 +5,7 @@ import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityListener; +import org.bukkit.event.entity.ExplosionPrimeEvent; public class TotalFreedomModEntityListener extends EntityListener { @@ -17,6 +18,16 @@ public class TotalFreedomModEntityListener extends EntityListener @Override public void onEntityExplode(EntityExplodeEvent event) + { + if (!plugin.allowExplosions) + { + event.setCancelled(true); + return; + } + } + + @Override + public void onExplosionPrime(ExplosionPrimeEvent event) { if (!plugin.allowExplosions) { @@ -24,7 +35,7 @@ public class TotalFreedomModEntityListener extends EntityListener return; } - event.setYield((float)plugin.explosiveRadius); + event.setRadius((float)plugin.explosiveRadius); } @Override diff --git a/src/plugin.yml b/src/plugin.yml index 0b6abcb..c6545f3 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: TotalFreedomMod main: me.StevenLawson.TotalFreedomMod.TotalFreedomMod -version: 1.2.0 +version: 1.3 description: Plugin for the Total Freedom server author: StevenLawson / Madgeek1450 commands: @@ -11,7 +11,7 @@ commands: description: Superadmin command - Deop everyone on the server. usage: / explosives: - description: Superadmin command - Enable/disable explosives and set yield radius. + description: Superadmin command - Enable/disable explosives and set effect radius. usage: / [radius] fire: description: Superadmin command - Enable/disable fire. @@ -28,9 +28,12 @@ commands: listreal: description: Lists the real names of all online players. usage: / - opall: - description: Superadmin command - Op everyone on the server. + mp: + description: Use moblimiter to purge all mobs. usage: / + opall: + description: Superadmin command - Op everyone on the server, optionally change everyone's gamemode at the same time. + usage: / [-c|-s] opme: description: Superadmin command - Automatically ops user. usage: / @@ -44,7 +47,7 @@ commands: description: Shows nearby people sorted by distance. usage: / rd: - description: Removes drops, arrows, etc. + description: Use WorldEdit to remove drops, arrows, and primed TNT. usage: / say: description: Broadcasts the given message as the console, includes sender.