diff options
Diffstat (limited to 'src/main/java/net/benjidial/nswp/commands/WaypointCommand.java')
-rw-r--r-- | src/main/java/net/benjidial/nswp/commands/WaypointCommand.java | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/main/java/net/benjidial/nswp/commands/WaypointCommand.java b/src/main/java/net/benjidial/nswp/commands/WaypointCommand.java new file mode 100644 index 0000000..618ab74 --- /dev/null +++ b/src/main/java/net/benjidial/nswp/commands/WaypointCommand.java @@ -0,0 +1,71 @@ +package net.benjidial.nswp.commands; + +import net.benjidial.nswp.Database; +import net.benjidial.nswp.Waypoint; +import net.benjidial.nswp.Plugin; + +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; +import org.bukkit.command.Command; +import org.bukkit.entity.Player; + +import java.util.logging.Level; +import java.sql.SQLException; +import java.util.ArrayList; + +public abstract class WaypointCommand implements TabExecutor { + enum CompletionType { + None, Waypoint + } + + public abstract CompletionType getCompletionType(); + + public ArrayList<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players may use waypoints."); + return new ArrayList<>(); + } + Player player = (Player)sender; + + switch (getCompletionType()) { + case Waypoint: + if (args.length > 1) + return new ArrayList<>(); + try { + Database.createWaypointTable(player); + ArrayList<String> results = new ArrayList<>(); + for (Waypoint waypoint : Database.searchWaypoints(player, args.length == 0 ? "" : args[0])) + results.add(waypoint.name); + return results; + } + catch (SQLException ex) { + Plugin.logger.log(Level.SEVERE, "Database error:"); + ex.printStackTrace(); + sender.sendMessage("Database error."); + return new ArrayList<>(); + } + default: + return new ArrayList<>(); + } + } + + public abstract boolean body(Player player, String[] args) throws SQLException; + + public boolean onCommand(CommandSender sender, Command command, String name, String[] args) { + if (!(sender instanceof Player)) { + sender.sendMessage("Only players may use waypoints."); + return true; + } + try { + Player player = (Player)sender; + Database.createWaypointTable(player); + return body(player, args); + } + catch (SQLException ex) { + Plugin.logger.log(Level.SEVERE, "Database error:"); + ex.printStackTrace(); + sender.sendMessage("Database error."); + return true; + } + } +} |