--- 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 2017/05/31 08:56:00 3201 @@ -1,37 +1,31 @@ package dk.thoerup.bukkit.hoeruputils; -import org.bukkit.ChatColor; +import java.io.File; +import java.util.Set; +import java.util.TreeSet; + import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -import org.bukkit.plugin.Plugin; - -import org.bukkit.event.Listener; import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.event.player.PlayerPortalEvent; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.event.player.PlayerJoinEvent; - +import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; - -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.*; - -import java.util.ArrayList; -import java.util.Set; -import java.util.TreeSet; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; public class Jail implements CommandExecutor, Listener { - Plugin plugin; + HoerupUtilsPlugin plugin; TreeSet jailed = new TreeSet(); @@ -40,7 +34,7 @@ final double maxDist = 25.0; - public Jail(Plugin plugin) { + public Jail(HoerupUtilsPlugin plugin) { this.plugin = plugin; @@ -64,6 +58,7 @@ jailLocation = loadLocation(config, plugin.getServer(), "jailloc"); releaseLocation = loadLocation(config, plugin.getServer(), "releaseloc"); + @SuppressWarnings("unchecked") Set tmpSet = (Set) config.get("jails"); jailed.addAll(tmpSet); } @@ -111,58 +106,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 +192,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 +207,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 +294,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 ); + } + } }