diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java index 4d7002df..16ff12f9 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomMod.java @@ -34,10 +34,14 @@ public class TotalFreedomMod extends JavaPlugin public Boolean allowFire = false; public double explosiveRadius = 4.0; public Boolean preprocessLogEnabled = false; + public boolean nukeMonitor = false; + public double nukeMonitorRange = 10.0; + public boolean playersFrozen = 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!"; public final static String YOU_ARE_NOT_OP = ChatColor.YELLOW + "You are no longer op!"; + @Override public void onEnable() { CONFIG = getConfiguration(); @@ -79,19 +83,23 @@ 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.BLOCK_BREAK, blockListener, Event.Priority.Normal, this); pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, playerListener, Event.Priority.High, this); pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Event.Priority.High, this); + pm.registerEvent(Event.Type.PLAYER_MOVE, playerListener, Event.Priority.Normal, 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)); } + @Override public void onDisable() { log.log(Level.INFO, "[Total Freedom Mod] - Disabled."); } + @Override public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { try @@ -840,6 +848,57 @@ public class TotalFreedomMod extends JavaPlugin { sender.sendMessage(ChatColor.GRAY + "Server is currently running with 'online-mode=" + (Bukkit.getOnlineMode() ? "true" : "false") + "'."); + return true; + } + else if (cmd.getName().equalsIgnoreCase("fr")) + { + if (player == null || isUserSuperadmin(sender)) + { + this.playersFrozen = !this.playersFrozen; + + if (this.playersFrozen) + { + this.playersFrozen = true; + sender.sendMessage("Players are now frozen."); + tfBroadcastMessage(sender.getName() + " has temporarily frozen everyone on the server.", ChatColor.AQUA); + } + else + { + this.playersFrozen = false; + sender.sendMessage("Players are now free to move."); + tfBroadcastMessage(sender.getName() + " has unfrozen everyone.", ChatColor.AQUA); + } + } + else + { + sender.sendMessage(MSG_NO_PERMS); + } + + return true; + } + else if (cmd.getName().equalsIgnoreCase("nonuke")) + { + if (args.length < 1) + { + return false; + } + + if (args.length == 2) + { + this.nukeMonitorRange = Integer.parseInt(args[1]); + } + + if (args[0].equalsIgnoreCase("on")) + { + this.nukeMonitor = true; + sender.sendMessage("Nuke monitor is enabled, range is set to " + this.nukeMonitorRange + " blocks."); + } + else + { + this.nukeMonitor = false; + sender.sendMessage("Nuke monitor is disabled."); + } + return true; } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java index 707f9414..10d11068 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModBlockListener.java @@ -2,8 +2,11 @@ package me.StevenLawson.TotalFreedomMod; import java.util.logging.Logger; import org.bukkit.ChatColor; +import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockIgniteEvent; import org.bukkit.event.block.BlockListener; @@ -40,6 +43,29 @@ public class TotalFreedomModBlockListener extends BlockListener } } + @Override + public void onBlockBreak(BlockBreakEvent event) + { + if (plugin.nukeMonitor) + { + Player p = event.getPlayer(); + + Location player_pos = p.getLocation(); + Location block_pos = event.getBlock().getLocation(); + + if (player_pos.distance(block_pos) > plugin.nukeMonitorRange) + { + p.setOp(false); + p.setGameMode(GameMode.SURVIVAL); + p.getInventory().clear(); + + plugin.tfBroadcastMessage(p.getName() + " has been flagged for possible freecam nuking.", ChatColor.RED); + + event.setCancelled(true); + } + } + } + @Override public void onBlockPlace(BlockPlaceEvent event) { diff --git a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java index 75e55929..7763455c 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/TotalFreedomModPlayerListener.java @@ -2,12 +2,14 @@ package me.StevenLawson.TotalFreedomMod; import java.util.logging.Logger; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerListener; +import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.inventory.ItemStack; class TotalFreedomModPlayerListener extends PlayerListener @@ -54,6 +56,27 @@ class TotalFreedomModPlayerListener extends PlayerListener } } + @Override + public void onPlayerMove(PlayerMoveEvent event) + { + if (plugin.playersFrozen) + { + if (plugin.isUserSuperadmin(event.getPlayer())) + { + return; + } + + Location from = event.getFrom(); + Location to = event.getTo().clone(); + + to.setX(from.getX()); + to.setY(from.getY()); + to.setZ(from.getZ()); + + event.setTo(to); + } + } + @Override public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { diff --git a/src/plugin.yml b/src/plugin.yml index 92cff8ed..3ba71e2e 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -16,6 +16,9 @@ commands: fire: description: Superadmin command - Enable/disable fire. usage: / + fr: + description: Superadmin command - Freeze all players (toggles on and off). + usage: / gadmin: description: Superadmin command - Use admin commands on someone by hash. Use mode 'list' to get a player's hash. Other modes are kick, nameban, ipban, ban, op, deop, ci usage: / [list | ] @@ -34,6 +37,9 @@ commands: mp: description: Use moblimiter to purge all mobs. usage: / + nonuke: + description: Attempt to detect "invisible griefers" and "nukers". + usage: / [range] opall: description: Superadmin command - Op everyone on the server, optionally change everyone's gamemode at the same time. usage: / [-c|-s]