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 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 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; } } }