package dk.thoerup.bukkit.hoeruputils; import java.io.File; import java.io.IOException; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.configuration.Configuration; import org.bukkit.configuration.file.YamlConfiguration; public class HomeCommand implements CommandExecutor { Plugin plugin; YamlConfiguration config; File file; public HomeCommand(Plugin plugin) { this.plugin = plugin; file = new File( plugin.getDataFolder(), "homes.yml"); config = new YamlConfiguration(); try { config.load(file); } catch (Exception e) { System.out.println("[HoerupUtils] exception loading config file: " + e.getMessage() ); } } Configuration getConfig() { return config; } @Override public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) { if (!(sender instanceof Player)) { return false; } final Player p = (Player) sender; String name = p.getName(); if ( command.getName().equals("home") ) { tpUser(p, name); } if ( command.getName().equals("ophome") ) { if (args.length != 1) { p.sendMessage("Usage: /ophome "); return true; } if ( p.isOp() ) { @SuppressWarnings("deprecation") OfflinePlayer op = sender.getServer().getOfflinePlayer(args[0]); if (op.hasPlayedBefore() == false && op.isOnline() == false) { sender.sendMessage("Player not found"); } else { p.sendMessage("Sending you to " + op.getName() + "'s home"); tpUser(p, op.getName() ); } } else { p.sendMessage("Only operators may use this command"); } } if (command.getName().equals("sethome") ) { Location loc = p.getLocation(); config.set( name + ".yaw", loc.getYaw() ); config.set( name + ".pitch", loc.getPitch() ); config.set( name + ".world", loc.getWorld().getName() ); config.set( name + ".x", loc.getX() ); config.set( name + ".y", loc.getY() ); config.set( name + ".z", loc.getZ() ); try { config.save(file); p.sendMessage(ChatColor.YELLOW + "home is set"); } catch (IOException e) { System.out.println("[HoerupUtils] : /sethome save threw an IO exception: " + e.getMessage() ); } } return true; } private void tpUser(final Player p, String name) { String worldName = config.getString( name + ".world"); if (worldName != null) { double yaw = config.getDouble( name + ".yaw", 0.0); double pitch = config.getDouble( name + ".pitch", 0.0); double x = config.getDouble( name + ".x", 0.0); double y = config.getDouble( name + ".y", 0.0); double z = config.getDouble( name + ".z", 0.0); World world = p.getServer().getWorld(worldName); int blockX = (int) Math.floor(x); int blockZ = (int) Math.floor(z); world.loadChunk(blockX, blockZ); final Location loc = new Location( world, x, y, z, (float)yaw, (float)pitch); Runnable r = new Runnable() { public void run() { p.teleport(loc); } }; int tickCount = 2; // 2 ticks = 100ms p.getServer().getScheduler().scheduleSyncDelayedTask(plugin, r, tickCount); } else { p.sendMessage(ChatColor.YELLOW + "You haven't set a home yet!"); } } }