package net.glowstone.command; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.command.CommandUtils; import org.bukkit.command.defaults.BukkitCommand; import org.bukkit.entity.Player; public class WorldBorderCommand extends BukkitCommand { public WorldBorderCommand() { super("worldborder"); setUsage("/worldborder <set|center|damage|warning|get|add> ..."); setPermission("glowstone.command.worldborder"); } @Override public boolean execute(CommandSender sender, String label, String[] args) { if (!testPermission(sender)) return true; if (args.length == 0) { sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); return false; } if (args[0].equalsIgnoreCase("center")) { if (args.length < 3) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder center <x> <z>"); return false; } if (sender instanceof Player) { for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setCenter(CommandUtils.getLocation(((Player) sender).getLocation(), args[1], "0", args[2])); } return true; } else { double x, z; try { x = Double.parseDouble(args[1]); z = Double.parseDouble(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set center: invalid number format."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setCenter(x, z); } sender.sendMessage("Set world border center to (x=" + x + ", z=" + z + ")."); return true; } } else if (args[0].equalsIgnoreCase("set")) { if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder set <sizeInBlocks> [timeInSeconds]"); return false; } double size; try { size = Double.parseDouble(args[1]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set size: invalid number format."); return false; } int time = 0; if (args.length > 2) { try { time = Integer.parseInt(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set size: invalid number format."); return false; } } if (time < 0) { sender.sendMessage(ChatColor.RED + "Cannot set size: time must be positive."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setSize(size, time); } if (time == 0) { sender.sendMessage("Set world border size to " + size + " blocks wide."); } else { sender.sendMessage("Set world border size to " + size + " blocks wide over " + time + " seconds."); } } else if (args[0].equalsIgnoreCase("get")) { if (sender instanceof Player) { sender.sendMessage("World border is " + ((Player) sender).getWorld().getWorldBorder().getSize() + " blocks wide."); } else { sender.sendMessage("World border is " + Bukkit.getWorlds().get(0).getWorldBorder().getSize() + " blocks wide."); } } else if (args[0].equalsIgnoreCase("add")) { if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder add <sizeInBlocks> [timeInSeconds]"); return false; } double size; try { size = Double.parseDouble(args[1]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set size: invalid number format."); return false; } int time = 0; if (args.length > 2) { try { time = Integer.parseInt(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set size: invalid number format."); return false; } } if (time < 0) { sender.sendMessage(ChatColor.RED + "Cannot set size: time must be positive."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setSize(size + world.getWorldBorder().getSize(), time); } String action = size >= 0 ? "Increas" : "Decreas"; if (time == 0) { sender.sendMessage(action + "ed world border size by " + size + " blocks wide."); } else { sender.sendMessage(action + "ing world border size by " + Math.abs(size) + " blocks wide over " + time + " seconds."); } } else if (args[0].equalsIgnoreCase("damage")) { if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder damage <buffer|amount> ..."); return false; } if (args[1].equalsIgnoreCase("buffer")) { if (args.length < 3) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder damage buffer <sizeInBlocks>"); return false; } double buffer; try { buffer = Double.parseDouble(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set damage buffer: invalid number format."); return false; } if (buffer < 0) { sender.sendMessage(ChatColor.RED + "Cannot set damage buffer: damage buffer must be positive."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setDamageBuffer(buffer); } sender.sendMessage("Set border's damage buffer to " + buffer + " blocks."); return false; } else if (args[1].equalsIgnoreCase("amount")) { if (args.length < 3) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder damage amount <damagePerBlock>"); return false; } double damage; try { damage = Double.parseDouble(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set damage amount: invalid number format."); return false; } if (damage < 0) { sender.sendMessage(ChatColor.RED + "Cannot set damage amount: damage amount must be positive."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setDamageAmount(damage); } sender.sendMessage("Set border's damage amount to " + damage + " damage."); return false; } else { sender.sendMessage(ChatColor.RED + "Usage: /worldborder damage <buffer|amount> ..."); return false; } } else if (args[0].equalsIgnoreCase("warning")) { if (args.length < 2) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder warning <time|distance> ..."); return false; } if (args[1].equalsIgnoreCase("time")) { if (args.length < 3) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder warning time <timeInSeconds>"); return false; } int time; try { time = Integer.parseInt(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set warning time: invalid number format."); return false; } if (time < 0) { sender.sendMessage(ChatColor.RED + "Cannot set warning time: time must be positive."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setWarningTime(time); } sender.sendMessage("Set border's warning time to " + time + " seconds."); return false; } else if (args[1].equalsIgnoreCase("distance")) { if (args.length < 3) { sender.sendMessage(ChatColor.RED + "Usage: /worldborder warning distance <sizeInBlocks>"); return false; } int blocks; try { blocks = Integer.parseInt(args[2]); } catch (NumberFormatException ex) { sender.sendMessage(ChatColor.RED + "Cannot set warning distance: invalid number format."); return false; } if (blocks < 0) { sender.sendMessage(ChatColor.RED + "Cannot set warning distance: distance must be positive."); return false; } for (World world : Bukkit.getWorlds()) { world.getWorldBorder().setWarningDistance(blocks); } sender.sendMessage("Set border's warning distance to " + blocks + " blocks."); return false; } else { sender.sendMessage(ChatColor.RED + "Usage: /worldborder warning <time|distance> ..."); return false; } } else { sender.sendMessage(ChatColor.RED + "Usage: " + usageMessage); return false; } return false; } }