--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/Jail.java 2012/10/14 13:21:38 1858 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/Jail.java 2013/04/04 12:15:09 1967 @@ -8,6 +8,7 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.bukkit.OfflinePlayer; import org.bukkit.plugin.Plugin; import org.bukkit.event.Listener; @@ -16,6 +17,7 @@ import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; @@ -31,7 +33,7 @@ public class Jail implements CommandExecutor, Listener { - Plugin plugin; + HoerupUtilsPlugin plugin; TreeSet jailed = new TreeSet(); @@ -40,7 +42,7 @@ final double maxDist = 25.0; - public Jail(Plugin plugin) { + public Jail(HoerupUtilsPlugin plugin) { this.plugin = plugin; @@ -111,58 +113,74 @@ @Override public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { - if (! (sender instanceof Player) ) { - sender.sendMessage("only use these commands in-game"); + if (args.length == 0) { + sender.sendMessage("Usage: /jail "); return true; } - - Player p = (Player) sender; - - if ( !p.isOp()) { - p.sendMessage("Only server operators may use this command"); - return true; + + if (sender instanceof Player ) { + Player p = (Player) sender; + if ( p.isOp() || p.hasPermission("hoeruputils.jail") ) { + //do nothing + } else { + p.sendMessage("Only server operators or players with hoeruputils.jail priv may use this command"); + return true; + } + } else { + if ( args[0].equals("imprison") || args[0].equals("release") || args[0].equals("list") ) { + //do nothing + } else { + sender.sendMessage("only imprison, release and list may be used from console"); + return true; + } } - if (args.length == 0) { - p.sendMessage("Usage: /jail "); - return true; - } if (args[0].equals("imprison")) { if (args.length != 2) { + sender.sendMessage("You must specify the player"); return true; } - Player inmate = sender.getServer().getPlayer( args[1] ); - if (inmate == null) { - p.sendMessage("Player not found"); + OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] ); + if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) { + sender.sendMessage("Player not found"); return true; } - - inmate.sendMessage("You have been imprisoned"); - inmate.teleport( jailLocation ); + if (inmate instanceof Player) { + Player p = (Player) inmate; + p.sendMessage("You have been imprisoned"); + p.teleport( jailLocation ); + } jailed.add( inmate.getName() ); save(); + sender.sendMessage("player " + inmate.getName() + " is imprisoned"); return true; } if (args[0].equals("release")) { if (args.length != 2) { + sender.sendMessage("You must specify the player"); return true; } - Player inmate = sender.getServer().getPlayer( args[1] ); - if (inmate == null) { - p.sendMessage("Player not found"); + OfflinePlayer inmate = sender.getServer().getOfflinePlayer( args[1] ); + if (inmate.hasPlayedBefore() == false && inmate.isOnline() == false) { + sender.sendMessage("Player not found"); return true; } - jailed.remove( inmate.getName() ); - inmate.sendMessage("You have been released from prison"); - inmate.teleport( releaseLocation ); + if (inmate instanceof Player) { + Player p = (Player) inmate; + p.sendMessage("You have been released from jail"); + p.teleport( releaseLocation ); + } else { + plugin.getMessageWrapper().sendMessage("Jail System", inmate, "You have been release from jail - you are free to go home"); + } save(); + sender.sendMessage("player " + inmate.getName() + " is released"); return true; } @@ -181,12 +199,14 @@ } if (args[0].equals("setjail")) { + Player p = (Player) sender; jailLocation = p.getLocation().clone(); p.sendMessage("New jail location has been set"); save(); return true; } if (args[0].equals("setrelease")) { + Player p = (Player) sender; releaseLocation = p.getLocation().clone(); p.sendMessage("New release location has been set"); save(); @@ -194,10 +214,12 @@ } if (args[0].equals("tpjail")) { + Player p = (Player) sender; p.teleport(jailLocation); return true; } if (args[0].equals("tprelease")) { + Player p = (Player) sender; p.teleport(releaseLocation); return true; } @@ -279,5 +301,14 @@ event.setCancelled( true ); } } + + @EventHandler + public void onRespawn(PlayerRespawnEvent event) { + Player p = event.getPlayer(); + if (jailed.contains( p.getName() ) ) { + event.setRespawnLocation( jailLocation ); + p.teleport( jailLocation ); + } + } }