--- miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/Jail.java 2012/10/14 11:48:43 1857 +++ miscJava/bukkit-minecraft-plugins/HoerupUtils/src/main/java/dk/thoerup/bukkit/hoeruputils/Jail.java 2012/10/15 07:59:16 1862 @@ -3,10 +3,12 @@ import org.bukkit.ChatColor; import org.bukkit.Location; 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.entity.Player; +import org.bukkit.OfflinePlayer; import org.bukkit.plugin.Plugin; import org.bukkit.event.Listener; @@ -15,16 +17,23 @@ 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; +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; public class Jail implements CommandExecutor, Listener { - Plugin plugin; + HoerupUtilsPlugin plugin; TreeSet jailed = new TreeSet(); @@ -33,51 +42,115 @@ final double maxDist = 25.0; - public Jail(Plugin plugin) { + public Jail(HoerupUtilsPlugin plugin) { this.plugin = plugin; - jailLocation = new Location( plugin.getServer().getWorld("world"), 528.0, 68.0, 57); - releaseLocation = new Location( plugin.getServer().getWorld("world"), 124.0, 68.0, 78); - jailed.add("hoerup"); + load(); } - public void save() { - } + public void load() { + File configFile = new File(plugin.getDataFolder(), "jail.yml"); - @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"); - return true; + if (!configFile.exists() ) { + System.out.println("[HoerupJail] jail.yml not found"); + } + YamlConfiguration config = new YamlConfiguration(); + try { + config.load(configFile); + } catch (Exception e) { + System.out.println("[HoerupJail] exception loading jails : " + e.getMessage() ); + return; } - Player p = (Player) sender; + jailLocation = loadLocation(config, plugin.getServer(), "jailloc"); + releaseLocation = loadLocation(config, plugin.getServer(), "releaseloc"); - if ( !p.isOp()) { - p.sendMessage("Only server operators may use this command"); - return true; + Set tmpSet = (Set) config.get("jails"); + jailed.addAll(tmpSet); + } + + public void save() { + File configFile = new File(plugin.getDataFolder(), "jail.yml"); + + YamlConfiguration config = new YamlConfiguration(); + saveLocation(config, jailLocation, "jailloc"); + saveLocation(config, jailLocation, "releaseloc"); + config.set("jails", jailed); + + try { + config.save(configFile); + } catch (java.io.IOException e) { + System.out.println("[HoerupJial] exception saving jails : " + e.getMessage() ); } + + } + + private static Location loadLocation(YamlConfiguration config, Server server, String prefix) { + String world = config.getString( prefix + ".world"); + double x = config.getDouble( prefix + ".x"); + double y = config.getDouble( prefix + ".y"); + double z = config.getDouble( prefix + ".z"); + float pitch = (float) config.getDouble( prefix + ".pitch"); + float yaw = (float) config.getDouble( prefix + ".yaw"); + + World w = server.getWorld(world); + return new Location(w,x,y,z,yaw,pitch); + } + + private static void saveLocation(YamlConfiguration config, Location location, String prefix) { + if (location == null) + return; + + config.set( prefix + ".world", location.getWorld().getName() ); + config.set( prefix + ".x", location.getX() ); + config.set( prefix + ".y", location.getY() ); + config.set( prefix + ".z", location.getZ() ); + config.set( prefix + ".pitch", location.getPitch() ); + config.set( prefix + ".yaw", location.getYaw() ); + } + + @Override + public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { if (args.length == 0) { - p.sendMessage("Usage: /jail "); + sender.sendMessage("Usage: /jail "); return true; } + + if (sender instanceof Player ) { + Player p = (Player) sender; + if ( !p.isOp()) { + p.sendMessage("Only server operators 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[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(); return true; @@ -85,19 +158,24 @@ 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(); return true; } @@ -117,12 +195,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(); @@ -130,10 +210,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; } @@ -215,5 +297,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 ); + } + } }