From 9611dacc96233e7d56e5856505cc714d8cd50c18 Mon Sep 17 00:00:00 2001 From: Big Pappa Date: Sun, 11 Oct 2026 11:37:17 -0500 Subject: [PATCH] Initial Development - /cab list complete. --- .../java/com/rsscripting/rstaxi/RSTaxi.java | 4 +- .../rstaxi/commands/CabCommand.java | 6 + .../rstaxi/commands/CabSearchCommand.java | 111 ++++++++++++++ .../rstaxi/commands/CabTabCompleter.java | 137 ++++++++++++++++++ .../rsscripting/rstaxi/stops/StopManager.java | 88 +++++++++++ src/main/resources/language/en_us.yml | 4 + src/main/resources/plugin.yml | 1 - target/RS-Taxi-0.1.0.jar | Bin 18631 -> 24409 bytes .../com/rsscripting/rstaxi/RSTaxi.class | Bin 2591 -> 2737 bytes .../rstaxi/commands/CabCommand.class | Bin 6781 -> 7022 bytes .../rstaxi/stops/StopManager.class | Bin 3957 -> 6552 bytes target/classes/language/en_us.yml | 4 + target/classes/plugin.yml | 1 - .../compile/default-compile/createdFiles.lst | 2 + .../compile/default-compile/inputFiles.lst | 2 + 15 files changed, 356 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/rsscripting/rstaxi/commands/CabSearchCommand.java create mode 100644 src/main/java/com/rsscripting/rstaxi/commands/CabTabCompleter.java diff --git a/src/main/java/com/rsscripting/rstaxi/RSTaxi.java b/src/main/java/com/rsscripting/rstaxi/RSTaxi.java index 6314cb6..8e233a9 100644 --- a/src/main/java/com/rsscripting/rstaxi/RSTaxi.java +++ b/src/main/java/com/rsscripting/rstaxi/RSTaxi.java @@ -2,6 +2,7 @@ package com.rsscripting.rstaxi; import com.rsscripting.rstaxi.commands.CabCommand; +import com.rsscripting.rstaxi.commands.CabTabCompleter; import com.rsscripting.rstaxi.language.LanguageManager; import com.rsscripting.rstaxi.database.DatabaseManager; import org.bukkit.plugin.java.JavaPlugin; @@ -42,6 +43,7 @@ public final class RSTaxi extends JavaPlugin { } getCommand("cab").setExecutor(new CabCommand(this)); + getCommand("cab").setTabCompleter(new CabTabCompleter(this)); getLogger().info("RS-Taxi has been enabled!"); } @@ -62,8 +64,6 @@ public final class RSTaxi extends JavaPlugin { return languageManager; } - - public DatabaseManager getDatabaseManager() { return databaseManager; } diff --git a/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java b/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java index eeee74d..328ea49 100644 --- a/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java +++ b/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java @@ -16,11 +16,14 @@ public final class CabCommand implements CommandExecutor { private final RSTaxi plugin; private final PlatformValidator platformValidator; private final StopManager stopManager; + private final CabSearchCommand searchCommand; + public CabCommand(RSTaxi plugin) { this.plugin = plugin; this.platformValidator = new PlatformValidator(plugin); this.stopManager = new StopManager(plugin); + this.searchCommand = new CabSearchCommand(plugin); } @Override @@ -50,6 +53,9 @@ public final class CabCommand implements CommandExecutor { case "list" -> { return handleList(sender); } + case "search" -> { + return searchCommand.execute(sender, args); + } default -> { return handleTravel(sender, args); } diff --git a/src/main/java/com/rsscripting/rstaxi/commands/CabSearchCommand.java b/src/main/java/com/rsscripting/rstaxi/commands/CabSearchCommand.java new file mode 100644 index 0000000..91224eb --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/commands/CabSearchCommand.java @@ -0,0 +1,111 @@ + +package com.rsscripting.rstaxi.commands; + +import com.rsscripting.rstaxi.RSTaxi; +import com.rsscripting.rstaxi.stops.StopManager; +import java.sql.SQLException; +import java.util.Map; +import java.util.Locale; +import org.bukkit.command.CommandSender; + +public final class CabSearchCommand { + + private final RSTaxi plugin; + private final StopManager stopManager; + + public CabSearchCommand(RSTaxi plugin) { + this.plugin = plugin; + this.stopManager = new StopManager(plugin); + } + + public boolean execute(CommandSender sender, String[] args) { + if (!sender.hasPermission("rs-cab.use")) { + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("general.no-permission") + ); + return true; + } + + if (args.length < 2) { + sendUsage(sender); + return true; + } + + String query = String.join(" ", args) + .substring(args[0].length() + 1) + .trim(); + + if (query.isBlank()) { + sendUsage(sender); + return true; + } + + String lowerQuery = query.toLowerCase(Locale.ROOT); + boolean iconSearch = lowerQuery.startsWith("icon:"); + boolean textSearch = lowerQuery.startsWith("text:"); + + if (!iconSearch && !textSearch) { + sendUsage(sender); + return true; + } + + String value = query.substring(query.indexOf(':') + 1).trim(); + + if (value.isBlank()) { + sendUsage(sender); + return true; + } + + try { + var stops = iconSearch + ? stopManager.searchByIcon(value) + : stopManager.searchByName(value); + + if (stops.isEmpty()) { + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("search.no-results") + ); + return true; + } + + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("search.header") + ); + + for (StopManager.StopEntry stop : stops) { + sender.sendMessage( + plugin.getLanguageManager().getMessage( + "list.entry", + Map.of( + "icon", stop.icon(), + "stop", stop.name() + ) + ) + ); + } + } catch (SQLException e) { + plugin.getLogger().log( + java.util.logging.Level.SEVERE, + "Failed to search taxi destinations.", + e + ); + + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("search.error") + ); + } + + return true; + } + + private void sendUsage(CommandSender sender) { + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("general.invalid-usage") + ); + } +} diff --git a/src/main/java/com/rsscripting/rstaxi/commands/CabTabCompleter.java b/src/main/java/com/rsscripting/rstaxi/commands/CabTabCompleter.java new file mode 100644 index 0000000..d789be8 --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/commands/CabTabCompleter.java @@ -0,0 +1,137 @@ + +package com.rsscripting.rstaxi.commands; + +import com.rsscripting.rstaxi.RSTaxi; +import com.rsscripting.rstaxi.stops.StopManager; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.logging.Level; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; + +public final class CabTabCompleter implements TabCompleter { + + private final RSTaxi plugin; + private final StopManager stopManager; + + public CabTabCompleter(RSTaxi plugin) { + this.plugin = plugin; + this.stopManager = new StopManager(plugin); + } + + @Override + public List onTabComplete( + CommandSender sender, + Command command, + String alias, + String[] args + ) { + List suggestions = new ArrayList<>(); + + if (args.length == 1) { + String input = args[0].toLowerCase(Locale.ROOT); + + // Management commands first, in the requested order. + if (sender.hasPermission("rs-cab.add") + && "add".startsWith(input)) { + suggestions.add("add"); + } + + if (sender.hasPermission("rs-cab.use") + && "search".startsWith(input)) { + suggestions.add("search"); + } + + if (sender.hasPermission("rs-cab.delete") + && "remove".startsWith(input)) { + suggestions.add("remove"); + } + + // Destinations follow the management commands. + if (sender.hasPermission("rs-cab.use")) { + try { + List stops = + stopManager.getAllStops(); + + stops.sort(Comparator.comparing( + StopManager.StopEntry::name, + String.CASE_INSENSITIVE_ORDER + )); + + for (StopManager.StopEntry stop : stops) { + String name = stop.name(); + + if (name.toLowerCase(Locale.ROOT) + .startsWith(input) + && !isReservedCommand(name)) { + suggestions.add(name); + } + } + } catch (SQLException e) { + plugin.getLogger().log( + Level.WARNING, + "Failed to load taxi destinations for tab completion.", + e + ); + } + } + + return suggestions; + } + + // Preserve search prefix and icon suggestions. + if (args[0].equalsIgnoreCase("search") + && sender.hasPermission("rs-cab.use")) { + + String input = String.join(" ", args) + .substring(args[0].length() + 1); + + String lowerInput = input.toLowerCase(Locale.ROOT); + + if (args.length == 2 + && !lowerInput.startsWith("icon:")) { + if ("text:".startsWith(lowerInput)) { + suggestions.add("text:"); + } + + if ("icon:".startsWith(lowerInput)) { + suggestions.add("icon:"); + } + + return suggestions; + } + + if (lowerInput.startsWith("icon:")) { + String iconPrefix = input.substring("icon:".length()) + .toLowerCase(Locale.ROOT); + + try { + for (String icon : stopManager.getUsedIcons()) { + if (icon.toLowerCase(Locale.ROOT) + .startsWith(iconPrefix)) { + suggestions.add("icon:" + icon); + } + } + } catch (SQLException e) { + plugin.getLogger().log( + Level.WARNING, + "Failed to load taxi icons for tab completion.", + e + ); + } + } + } + return suggestions; + } + + private boolean isReservedCommand(String name) { + return name.equalsIgnoreCase("add") + || name.equalsIgnoreCase("remove") + || name.equalsIgnoreCase("search") + || name.equalsIgnoreCase("list"); + } +} diff --git a/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java b/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java index 9012c55..5b46520 100644 --- a/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java +++ b/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java @@ -90,6 +90,94 @@ public final class StopManager { return stops; } + + public List searchByName(String name) + throws SQLException { + + String sql = """ + SELECT name, icon + FROM stops + WHERE name LIKE ? ESCAPE '\\' + ORDER BY name COLLATE NOCASE + """; + + List stops = new ArrayList<>(); + + String escapedName = name + .replace("\\", "\\\\") + .replace("%", "\\%") + .replace("_", "\\_"); + + try (PreparedStatement statement = connection() + .prepareStatement(sql)) { + + statement.setString(1, "%" + escapedName + "%"); + + try (ResultSet results = statement.executeQuery()) { + while (results.next()) { + stops.add(new StopEntry( + results.getString("name"), + results.getString("icon") + )); + } + } + } + + return stops; + } + + public List searchByIcon(String icon) + throws SQLException { + + String sql = """ + SELECT name, icon + FROM stops + WHERE icon = ? + ORDER BY name COLLATE NOCASE + """; + + List stops = new ArrayList<>(); + + try (PreparedStatement statement = connection() + .prepareStatement(sql)) { + + statement.setString(1, icon); + + try (ResultSet results = statement.executeQuery()) { + while (results.next()) { + stops.add(new StopEntry( + results.getString("name"), + results.getString("icon") + )); + } + } + } + + return stops; + } + + + public List getUsedIcons() throws SQLException { + String sql = """ + SELECT DISTINCT icon + FROM stops + ORDER BY icon COLLATE NOCASE + """; + + List icons = new ArrayList<>(); + + try (PreparedStatement statement = connection() + .prepareStatement(sql); + ResultSet results = statement.executeQuery()) { + + while (results.next()) { + icons.add(results.getString("icon")); + } + } + + return icons; + } + private Connection connection() { return plugin.getDatabaseManager().getConnection(); } diff --git a/src/main/resources/language/en_us.yml b/src/main/resources/language/en_us.yml index 1e52f05..4311325 100644 --- a/src/main/resources/language/en_us.yml +++ b/src/main/resources/language/en_us.yml @@ -38,3 +38,7 @@ list: platform: invalid: "&cYou must stand on a valid taxi platform to create a destination." +search: + header: "&6Search Results:" + no-results: "&eNo taxi stops matched your search." + error: "&cUnable to search taxi destinations. Check the server logs." \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6080bb8..1e4bc62 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -9,7 +9,6 @@ author: RSScripting commands: cab: description: Travel between registered taxi stops. - usage: /cab permissions: rs-cab.use: diff --git a/target/RS-Taxi-0.1.0.jar b/target/RS-Taxi-0.1.0.jar index 5860160691f3f969bd5f3e3759f81cd90af0ac4f..3d1cf4873d595b159248f65599af8d82f1c8fcdc 100644 GIT binary patch delta 13905 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 VmrJ1_;DO+QWd3QSZyJB~|34Zp{z(7; delta 8224 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 diff --git a/target/classes/com/rsscripting/rstaxi/RSTaxi.class b/target/classes/com/rsscripting/rstaxi/RSTaxi.class index dbe8eff215fbf81b8fbd4290e674d4aa87817d4a..8331df7e9b97b21d4d8cf185ab15a8f4704d4595 100644 GIT binary patch delta 643 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 literal 6781 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 f#qrE#)3i*Gs4~P=LYa$-47Y{FwBFScS?QlwR4 z^D5=lQpzJhc~g?MX&RnR3r-D%Kxxw!X!`C?Xn#Y$uWfo}ceP&IiV5xa#hTrjJ9lR8 zIp^NlFQ5JA{f_`d@Yet;P$|Qszzd&*ntj>dJ}z|+v>+62`dwkSfry*y;|++?deucf9kGnk=}@!(Z+Ojqq;f3t<)&E5J3rn zWHyuGZc|wp3m2Ck)Nd$Mg&X za8x#k7&o4Q`+gt7NQJum<%Kg3bmU6A7M-KF-4t z)Ink1s9>!ifH#@W7Id*>ql_y{Q8JI-H(tpq(9PegkA)Sg~7x;5TIG^6pp9t++;y+F1}O%cl`^{)Q{UGwAf0V0Vgmc$v{tUXQWqcAFx!}(G!cc^+nWpPe)rK5|E*l2vjsu>2O;< zuT8{K1tWkvMABjCuQ^99n3q86L^6qFjQoTjcMA40@PfA^3R2j|Q1VbE9j$hAaJFFG z0Qr%oBSE(SlE{b*n3b@m%;fT_+>gABf&v3Y35!hp&0~raGJq6@ge7ioRz_`Y81#df z?OHIfu3Q(3-W*XktC2)U+xCdMX3v_1qwWV2gS5wwyCqcY*%QFMxKGB{72J<+%u4X3 zaLG(yX)Q_6JKekO7}4?xeScBUB=uHT1ZMTy>1TFWALRP0{CHTb&-R;qz1@#T#p~@s zmYv5Gd`DombW9u7nV>1jT`6OPPplppqu|FA5~Al39)X=%3KpcHA5TfxXuIo-Ci89iPc+pFjM zMB3-MMEXqkYx$ITw>v$?NU9*A@m!AQNx7AYOCP65IBS+ZN>UwUZe=}TF{8!B7WG6e zcd8dXRFNvB0=<03WL|}(Y0yPpdkM;u4jCR6?c`{;mb1?ih>Rz7-ekx`8El(e<7 zd#H9cP!qWlSY2~$H=H+WGYPnLlZbyJHJs6mVxF|vHg9+Tvs&nF0 zPC4%5R_leNmeYrHptgl(~oZF~YQy7a#FPoV+4=u&tXH=6Tlx5yaJH0$0{B zkjNJENxds2R9GWOVW*WVg*n+0*9%6sE~LuUYud9}qhREem;Bg3V&baTNg*gc%bnlq{g-H zK|aB^3Ve^hi%`kmAUwDTRs14(jc>J?;|Cn0Pw6n{$s8LGUeMh* zg~d(NxTpg0X3yGbgeuWIjmvmh^MpLpxI)5uZ^&~R0rA!#q4_kbXwbxj=6$op9ICa4 zjzMYhg}fo(6v83zsTL1ymsqx9h_)fG81kIr`Bw0IVhb<-TX`Sd!FCbW;a0X=_$%5Z z?_z1TmF7vW3?PW+g$sYDUS`BZ_|IrDz_&(ft&hF`|L=D%e!>Lj4*EKR&~`XR|^ zK8u=p6WDEz(OU&P?pgMfMRR@G_IQK4@Ni#m^3TBAHg1#b^K;}xa9xW>04D-Zj<#t;JRJ1%Ich)G2+LUMMOgJrBOzSW2(w-G%QRSS zJcl8Bj=@v8o=6K;cr7mY-W1TEMy=f;0GC6)kSqZAo#Fv5#KU-&0eP83Jn8`3#eVS3 z!*~Y>*@gThS%&Kg=?w(-Mugd3i&g@=0Wm^6fK7yKGYV*^-V2o0YQw%+{+|Jp(s7Hcnt`9Bzpls*!&Dc$kar)U!PjO;5=o0LJ zE!bK->In9Tjig8hLZ+-zcn&|syTs-_uB$jbQ|u8Ez72u1T-=fBei=f-KvR6KSnVMP zw11)^X4<&aY1!E7q=5_AlU%I=KjRLj@xBFcMLhwoV*i=ofo>b%_}buj@UAJ`6MP`} zkZ2wWev6HzV=DohG7fp(XJ|{3wV2=w`OHjACN!H&@RgY0E5`(%U;<|_TOWfeWGHl5 z>QGwzAvxq1x|B}|$u>HYRTtE7vtYwkrlSW<^beV84ilMo_&$XX@v*~(UKS&eF_q*@ zH4|?QnX{D2TY)huJ4;67sO&shW6)!f1>gWVaF9uVoR$aJdpB1x==&ae&*BT*XEJ0P zWwVtzK%{gZJ-q5@{fwjaGq%<%@wuJStMRGHl}fJt20kEvJTBIVu_^9UuqG#1vlVVh z6M0sEIox4ca4N%$ftx`kmX&q20FQo79(`Eik@OFqQY8Gz;NuRDW(u~b(51A`LLh23 z3&CurcuP$2mSai@eVZvW8QkocmBF3-!pbjLHBt=q1zQzh5GQP+g?c@fS1uF3vnesT_o}lGZQ2CYI!2Gg~EZe{@Y$?J+OH9_=z{AD#^c}cAfMmEZB z9KU)^_=M~7zZ3|ixX53}mN!ULH@*wriVjWT`ANQ7H+i2qG-V!H6f>IH$MfJ9rq!qT kC0lVPOyXC35?=|w;ooVT;aiY?lI;6ELihvzgufv4UmoBAv;Y7A delta 895 zcmZ9K$!k+l6vlry(@kCmlPHxcW+h!XMX3rRYC(z%(T#2dDa4|+rN*IYjbm!+JnPe1 zr`kF!g@j5MF5I~hMDTxcA*k`(o9Al`y!Y<8XL{dvzBASRBja}MS7?(R>%(*iUaw5rBj2&0fp0B z?mv8@G+35M-3QVgZ zv1`)Mh8asLEZKFRRNW(Ge8ZNM zu_k#UG()_%L_?P79wNV~HVO8qUnG?Q+RA%#Gw4&)hQw-bC|=NK`5)>jp348K?)r>D z9n9`*5#@j5EGoA~g7s4+glW2NgipR**htm*+eK}4xhYoA@ zwhLlH?&s`^iU`w8^9KD>dM(U)TDk^!C2vNSPZm<{o8%PbiLd&Ao@Z>H^EI1h_B3Kc feRe+$KuPmy%-F11Udw5u?B@+hv$n>J@|MoOTXl?& diff --git a/target/classes/language/en_us.yml b/target/classes/language/en_us.yml index 1e52f05..4311325 100644 --- a/target/classes/language/en_us.yml +++ b/target/classes/language/en_us.yml @@ -38,3 +38,7 @@ list: platform: invalid: "&cYou must stand on a valid taxi platform to create a destination." +search: + header: "&6Search Results:" + no-results: "&eNo taxi stops matched your search." + error: "&cUnable to search taxi destinations. Check the server logs." \ No newline at end of file diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index fda3015..4827e07 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -9,7 +9,6 @@ author: RSScripting commands: cab: description: Travel between registered taxi stops. - usage: /cab permissions: rs-cab.use: diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 09b45d3..6a42d04 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,7 +1,9 @@ com\rsscripting\rstaxi\stops\StopManager.class com\rsscripting\rstaxi\platform\PlatformValidator.class com\rsscripting\rstaxi\RSTaxi.class +com\rsscripting\rstaxi\commands\CabTabCompleter.class com\rsscripting\rstaxi\stops\StopManager$StopEntry.class com\rsscripting\rstaxi\commands\CabCommand.class com\rsscripting\rstaxi\database\DatabaseManager.class +com\rsscripting\rstaxi\commands\CabSearchCommand.class com\rsscripting\rstaxi\language\LanguageManager.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 5d26fe8..03d27db 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,4 +1,6 @@ C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\commands\CabCommand.java +C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\commands\CabSearchCommand.java +C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\commands\CabTabCompleter.java C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\database\DatabaseManager.java C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\language\LanguageManager.java C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\platform\PlatformValidator.java