From 356655589311672864e7b228d60987fdf750452c Mon Sep 17 00:00:00 2001 From: Big Pappa Date: Sun, 11 Oct 2026 09:03:11 -0500 Subject: [PATCH] Initial Development - Add Stop Complete --- .idea/.gitignore | 10 + .idea/compiler.xml | 13 ++ .idea/encodings.xml | 7 + .idea/jarRepositories.xml | 30 +++ .idea/misc.xml | 14 ++ .idea/modules.xml | 8 + .idea/vcs.xml | 6 + pom.xml | 71 ++++++ rs-taxi.iml | 14 ++ .../java/com/rsscripting/rstaxi/RSTaxi.java | 72 ++++++ .../rstaxi/commands/CabCommand.java | 211 ++++++++++++++++++ .../rstaxi/database/DatabaseManager.java | 83 +++++++ .../rstaxi/language/LanguageManager.java | 110 +++++++++ .../rstaxi/platform/PlatformValidator.java | 79 +++++++ .../rsscripting/rstaxi/stops/StopManager.java | 67 ++++++ src/main/resources/config.yml | 35 +++ src/main/resources/language/en_us.yml | 40 ++++ src/main/resources/plugin.yml | 29 +++ target/RS-Taxi-0.1.0.jar | Bin 0 -> 16816 bytes .../com/rsscripting/rstaxi/RSTaxi.class | Bin 0 -> 2591 bytes .../rstaxi/commands/CabCommand.class | Bin 0 -> 5888 bytes .../rstaxi/database/DatabaseManager.class | Bin 0 -> 3292 bytes .../rstaxi/language/LanguageManager.class | Bin 0 -> 4401 bytes .../rstaxi/platform/PlatformValidator.class | Bin 0 -> 3840 bytes .../rstaxi/stops/StopManager.class | Bin 0 -> 2837 bytes target/classes/config.yml | 35 +++ target/classes/language/en_us.yml | 40 ++++ target/classes/plugin.yml | 29 +++ target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 6 + .../compile/default-compile/inputFiles.lst | 6 + 31 files changed, 1018 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 pom.xml create mode 100644 rs-taxi.iml create mode 100644 src/main/java/com/rsscripting/rstaxi/RSTaxi.java create mode 100644 src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java create mode 100644 src/main/java/com/rsscripting/rstaxi/database/DatabaseManager.java create mode 100644 src/main/java/com/rsscripting/rstaxi/language/LanguageManager.java create mode 100644 src/main/java/com/rsscripting/rstaxi/platform/PlatformValidator.java create mode 100644 src/main/java/com/rsscripting/rstaxi/stops/StopManager.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/language/en_us.yml create mode 100644 src/main/resources/plugin.yml create mode 100644 target/RS-Taxi-0.1.0.jar create mode 100644 target/classes/com/rsscripting/rstaxi/RSTaxi.class create mode 100644 target/classes/com/rsscripting/rstaxi/commands/CabCommand.class create mode 100644 target/classes/com/rsscripting/rstaxi/database/DatabaseManager.class create mode 100644 target/classes/com/rsscripting/rstaxi/language/LanguageManager.class create mode 100644 target/classes/com/rsscripting/rstaxi/platform/PlatformValidator.class create mode 100644 target/classes/com/rsscripting/rstaxi/stops/StopManager.class create mode 100644 target/classes/config.yml create mode 100644 target/classes/language/en_us.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..6c17022 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..eddf071 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0c04b52 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..79fbbba --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..01b5727 --- /dev/null +++ b/pom.xml @@ -0,0 +1,71 @@ + + + + 4.0.0 + + com.rsscripting + rs-taxi + 0.1.0 + jar + + RS-Taxi + Travel and teleportation between server stops. + + + UTF-8 + 25 + ${project.version} + + + + + papermc + https://repo.papermc.io/repository/maven-public/ + + + + + + io.papermc.paper + paper-api + 26.1.2.build.25-alpha + provided + + + + + RS-Taxi-${project.version} + + + + src/main/resources + true + + plugin.yml + + + + src/main/resources + false + + plugin.yml + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + 25 + + + + + + diff --git a/rs-taxi.iml b/rs-taxi.iml new file mode 100644 index 0000000..bbeeb3e --- /dev/null +++ b/rs-taxi.iml @@ -0,0 +1,14 @@ + + + + + + + PAPER + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rstaxi/RSTaxi.java b/src/main/java/com/rsscripting/rstaxi/RSTaxi.java new file mode 100644 index 0000000..6314cb6 --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/RSTaxi.java @@ -0,0 +1,72 @@ + +package com.rsscripting.rstaxi; + +import com.rsscripting.rstaxi.commands.CabCommand; +import com.rsscripting.rstaxi.language.LanguageManager; +import com.rsscripting.rstaxi.database.DatabaseManager; +import org.bukkit.plugin.java.JavaPlugin; + +public final class RSTaxi extends JavaPlugin { + + private LanguageManager languageManager; + private DatabaseManager databaseManager; + + @Override + public void onEnable() { + + saveDefaultConfig(); + + if (!new java.io.File(getDataFolder(), "language/en_us.yml").exists()) { + saveResource("language/en_us.yml", false); + } + + languageManager = new LanguageManager(this); + languageManager.load(); + + databaseManager = new DatabaseManager(this); + + try { + databaseManager.connect(); + databaseManager.initialize(); + } catch (java.sql.SQLException e) { + getLogger().severe("Failed to initialize SQLite database!"); + getLogger().severe(e.getMessage()); + getServer().getPluginManager().disablePlugin(this); + return; + } + + if (getCommand("cab") == null) { + getLogger().severe("Command 'cab' is missing from plugin.yml!"); + getServer().getPluginManager().disablePlugin(this); + return; + } + + getCommand("cab").setExecutor(new CabCommand(this)); + + getLogger().info("RS-Taxi has been enabled!"); + } + + @Override + public void onDisable() { + + if (databaseManager != null) { + databaseManager.close(); + } + + getLogger().info("RS-Taxi has been disabled!"); + + + } + + public LanguageManager getLanguageManager() { + return languageManager; + } + + + + public DatabaseManager getDatabaseManager() { + return databaseManager; + } + +} + \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java b/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java new file mode 100644 index 0000000..958b946 --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/commands/CabCommand.java @@ -0,0 +1,211 @@ + +package com.rsscripting.rstaxi.commands; + +import com.rsscripting.rstaxi.RSTaxi; +import com.rsscripting.rstaxi.platform.PlatformValidator; +import com.rsscripting.rstaxi.stops.StopManager; +import java.sql.SQLException; +import java.util.Map; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public final class CabCommand implements CommandExecutor { + + private final RSTaxi plugin; + private final PlatformValidator platformValidator; + private final StopManager stopManager; + + public CabCommand(RSTaxi plugin) { + this.plugin = plugin; + this.platformValidator = new PlatformValidator(plugin); + this.stopManager = new StopManager(plugin); + } + + @Override + public boolean onCommand( + CommandSender sender, + Command command, + String label, + String[] args + ) { + if (args.length == 0) { + return handleTravel(sender, args); + } + + switch (args[0].toLowerCase()) { + case "add" -> { + return handleAdd(sender, args); + } + case "update" -> { + return handleUpdate(sender, args); + } + case "edit" -> { + return handleEdit(sender, args); + } + case "remove" -> { + return handleRemove(sender, args); + } + case "list" -> { + return handleList(sender); + } + default -> { + return handleTravel(sender, args); + } + } + } + + private boolean handleTravel( + CommandSender sender, + String[] args + ) { + if (!(sender instanceof Player player)) { + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("general.player-only") + ); + return true; + } + + if (!player.hasPermission("rs-cab.use")) { + player.sendMessage( + plugin.getLanguageManager() + .getMessage("general.no-permission") + ); + return true; + } + + // Travel behavior will be implemented in Phase 2. + return true; + } + + + private boolean handleAdd( + CommandSender sender, + String[] args + ) { + if (!sender.hasPermission("rs-cab.add")) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("general.no-permission")); + return true; + } + + if (!(sender instanceof Player player)) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("general.player-only")); + return true; + } + + String arguments = String.join(" ", args) + .substring("add".length()).trim(); + + String name; + String icon; + + if (arguments.startsWith("'")) { + int closingQuote = arguments.indexOf('\'', 1); + + if (closingQuote < 2) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("general.invalid-usage")); + return true; + } + + name = arguments.substring(1, closingQuote); + icon = arguments.substring(closingQuote + 1).trim(); + } else { + String[] parts = arguments.split("\\s+"); + + if (parts.length != 2) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("general.invalid-usage")); + return true; + } + + name = parts[0]; + icon = parts[1]; + } + + if (name.isBlank() || icon.isBlank() + || icon.contains(" ")) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("general.invalid-usage")); + return true; + } + + try { + if (stopManager.exists(name)) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("stop.already-exists", + Map.of("stop", name))); + return true; + } + + if (!platformValidator.isValid(player)) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("platform.invalid")); + return true; + } + + if (stopManager.add(name, icon, player.getLocation())) { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("stop.added", + Map.of("stop", name))); + } else { + sender.sendMessage(plugin.getLanguageManager() + .getMessage("stop.already-exists", + Map.of("stop", name))); + } + + } catch (SQLException | IllegalArgumentException e) { + plugin.getLogger().severe( + "Failed to create taxi stop: " + e.getMessage() + ); + sender.sendMessage(plugin.getLanguageManager() + .getMessage("stop.creation-error")); + } + + return true; + } + + + private boolean handleUpdate( + CommandSender sender, + String[] args + ) { + return checkPermission(sender, "rs-cab.edit"); + } + + private boolean handleEdit( + CommandSender sender, + String[] args + ) { + return checkPermission(sender, "rs-cab.edit"); + } + + private boolean handleRemove( + CommandSender sender, + String[] args + ) { + return checkPermission(sender, "rs-cab.delete"); + } + + private boolean handleList(CommandSender sender) { + return checkPermission(sender, "rs-cab.use"); + } + + private boolean checkPermission( + CommandSender sender, + String permission + ) { + if (!sender.hasPermission(permission)) { + sender.sendMessage( + plugin.getLanguageManager() + .getMessage("general.no-permission") + ); + } + + return true; + } +} diff --git a/src/main/java/com/rsscripting/rstaxi/database/DatabaseManager.java b/src/main/java/com/rsscripting/rstaxi/database/DatabaseManager.java new file mode 100644 index 0000000..969748e --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/database/DatabaseManager.java @@ -0,0 +1,83 @@ + +package com.rsscripting.rstaxi.database; + +import com.rsscripting.rstaxi.RSTaxi; + +import java.io.File; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public final class DatabaseManager { + + private final RSTaxi plugin; + private Connection connection; + + public DatabaseManager(RSTaxi plugin) { + this.plugin = plugin; + } + + public void connect() throws SQLException { + File folder = plugin.getDataFolder(); + + if (!folder.exists() && !folder.mkdirs()) { + throw new SQLException( + "Could not create plugin data folder." + ); + } + + File databaseFile = new File(folder, "taxi.db"); + String url = "jdbc:sqlite:" + databaseFile.getAbsolutePath(); + + connection = DriverManager.getConnection(url); + + plugin.getLogger().info("SQLite database connected."); + } + + public void initialize() throws SQLException { + if (connection == null || connection.isClosed()) { + throw new SQLException("Database is not connected."); + } + + String sql = """ + CREATE TABLE IF NOT EXISTS stops ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL COLLATE NOCASE UNIQUE, + icon TEXT NOT NULL, + world TEXT NOT NULL, + x REAL NOT NULL, + y REAL NOT NULL, + z REAL NOT NULL, + yaw REAL NOT NULL, + pitch REAL NOT NULL + ); + """; + + try (Statement statement = connection.createStatement()) { + statement.execute(sql); + } + + plugin.getLogger().info("SQLite database initialized."); + } + + public Connection getConnection() { + return connection; + } + + public void close() { + if (connection == null) { + return; + } + + try { + connection.close(); + plugin.getLogger().info("SQLite database connection closed."); + } catch (SQLException e) { + plugin.getLogger().severe( + "Failed to close SQLite database: " + + e.getMessage() + ); + } + } +} diff --git a/src/main/java/com/rsscripting/rstaxi/language/LanguageManager.java b/src/main/java/com/rsscripting/rstaxi/language/LanguageManager.java new file mode 100644 index 0000000..0605e2d --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/language/LanguageManager.java @@ -0,0 +1,110 @@ + +package com.rsscripting.rstaxi.language; + +import com.rsscripting.rstaxi.RSTaxi; +import org.bukkit.ChatColor; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.util.Map; + +public final class LanguageManager { + + private final RSTaxi plugin; + private YamlConfiguration language; + private YamlConfiguration english; + + public LanguageManager(RSTaxi plugin) { + this.plugin = plugin; + } + + public void load() { + File languageFolder = + new File(plugin.getDataFolder(), "language"); + + if (!languageFolder.exists() && !languageFolder.mkdirs()) { + plugin.getLogger().severe( + "Could not create the language folder." + ); + } + + File englishFile = + new File(languageFolder, "en_us.yml"); + + if (!englishFile.exists()) { + plugin.saveResource("language/en_us.yml", false); + } + + english = YamlConfiguration.loadConfiguration(englishFile); + + String selected = plugin.getConfig() + .getString("language", "en_us") + .trim(); + + if (!selected.matches("[a-zA-Z0-9_-]+")) { + plugin.getLogger().warning( + "Invalid language setting. Using en_us." + ); + selected = "en_us"; + } + + File selectedFile = + new File(languageFolder, selected + ".yml"); + + if (!selectedFile.isFile()) { + plugin.getLogger().warning( + "Language file '" + selected + + ".yml' was not found. Using en_us." + ); + language = english; + return; + } + + language = YamlConfiguration.loadConfiguration(selectedFile); + plugin.getLogger().info( + "Loaded language: " + selected + ); + } + + public String getMessage(String path) { + return getMessage(path, Map.of()); + } + + public String getMessage( + String path, + Map placeholders + ) { + String message = language == null + ? null + : language.getString(path); + + if (message == null && english != null) { + message = english.getString(path); + } + + if (message == null) { + plugin.getLogger().warning( + "Missing language message: " + path + ); + message = "&cMissing message: " + path; + } + + String prefix = language == null + ? "" + : language.getString("prefix", ""); + + if (!path.equals("prefix") && !prefix.isEmpty()) { + message = prefix + message; + } + + for (Map.Entry entry + : placeholders.entrySet()) { + message = message.replace( + "%" + entry.getKey() + "%", + entry.getValue() + ); + } + + return ChatColor.translateAlternateColorCodes('&', message); + } +} diff --git a/src/main/java/com/rsscripting/rstaxi/platform/PlatformValidator.java b/src/main/java/com/rsscripting/rstaxi/platform/PlatformValidator.java new file mode 100644 index 0000000..760ae9a --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/platform/PlatformValidator.java @@ -0,0 +1,79 @@ + +package com.rsscripting.rstaxi.platform; + +import com.rsscripting.rstaxi.RSTaxi; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; + +import java.util.Map; + +public final class PlatformValidator { + + private final RSTaxi plugin; + + private static final Map OFFSETS = Map.of( + "north", new int[]{0, -1}, + "northeast", new int[]{1, -1}, + "east", new int[]{1, 0}, + "southeast", new int[]{1, 1}, + "south", new int[]{0, 1}, + "southwest", new int[]{-1, 1}, + "west", new int[]{-1, 0}, + "northwest", new int[]{-1, -1} + ); + + public PlatformValidator(RSTaxi plugin) { + this.plugin = plugin; + } + + public boolean isValid(Player player) { + if (!plugin.getConfig().getBoolean("platform.enabled", true)) { + return true; + } + + Block center = player.getLocation() + .subtract(0, 1, 0) + .getBlock(); + + Material target = getConfiguredMaterial( + "platform.target-block" + ); + + if (center.getType() != target) { + return false; + } + + for (Map.Entry entry : OFFSETS.entrySet()) { + String direction = entry.getKey(); + int[] offset = entry.getValue(); + + Material required = getConfiguredMaterial( + "platform.layout." + direction + ); + + Block surrounding = center.getRelative( + offset[0], 0, offset[1] + ); + + if (surrounding.getType() != required) { + return false; + } + } + + return true; + } + + private Material getConfiguredMaterial(String path) { + String name = plugin.getConfig().getString(path, ""); + Material material = Material.matchMaterial(name); + + if (material == null || !material.isBlock()) { + throw new IllegalArgumentException( + "Invalid platform material at " + path + ": " + name + ); + } + + return material; + } +} diff --git a/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java b/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java new file mode 100644 index 0000000..aff4bff --- /dev/null +++ b/src/main/java/com/rsscripting/rstaxi/stops/StopManager.java @@ -0,0 +1,67 @@ + +package com.rsscripting.rstaxi.stops; + +import com.rsscripting.rstaxi.RSTaxi; +import org.bukkit.Location; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public final class StopManager { + + private final RSTaxi plugin; + + public StopManager(RSTaxi plugin) { + this.plugin = plugin; + } + + public boolean exists(String name) throws SQLException { + String sql = "SELECT 1 FROM stops WHERE name = ?"; + + try (PreparedStatement statement = connection() + .prepareStatement(sql)) { + + statement.setString(1, name); + + try (ResultSet results = statement.executeQuery()) { + return results.next(); + } + } + } + + public boolean add( + String name, + String icon, + Location location + ) throws SQLException { + + String sql = """ + INSERT OR IGNORE INTO stops + (name, icon, world, x, y, z, yaw, pitch) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """; + + try (PreparedStatement statement = connection() + .prepareStatement(sql)) { + + statement.setString(1, name); + statement.setString(2, icon); + statement.setString( + 3, location.getWorld().getName() + ); + statement.setDouble(4, location.getX()); + statement.setDouble(5, location.getY()); + statement.setDouble(6, location.getZ()); + statement.setFloat(7, location.getYaw()); + statement.setFloat(8, location.getPitch()); + + return statement.executeUpdate() == 1; + } + } + + private Connection connection() { + return plugin.getDatabaseManager().getConnection(); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..4e62121 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,35 @@ + +# RS-Taxi Configuration + +# Language file for your server. +# If plugin cannot find needed message in selected file, +# it will default to english for that message. +# Example: en_us, de_de, fr_fr +language: "en_us" + +# Platform Settings. +platform: + # Determines wether platforms are required before adding a destination + # true: A platform is required to be built following the "layout" defined in config. + # false: A platform is not required. + enabled: true + + # The center block of the platform if required. + target-block: "TARGET" + + # Protect the platform blocks from destruction. + # true: platforms cannot be broken. + # false: platforms can be broken. + protect-platforms: true + + #Layout requirement for add a destination if enabled is set to true. + layout: + north: "OAK_PLANKS" + northeast: "OAK_PLANKS" + east: "OAK_PLANKS" + southeast: "OAK_PLANKS" + south: "OAK_PLANKS" + southwest: "OAK_PLANKS" + west: "OAK_PLANKS" + northwest: "OAK_PLANKS" + diff --git a/src/main/resources/language/en_us.yml b/src/main/resources/language/en_us.yml new file mode 100644 index 0000000..bc79911 --- /dev/null +++ b/src/main/resources/language/en_us.yml @@ -0,0 +1,40 @@ + +prefix: "&8[&6RS-Taxi&8] " + +general: + no-permission: "&cYou don't have permission to do that." + player-only: "&cThis command can only be used by a player." + player-not-found: "&cPlayer not found." + invalid-usage: "&cInvalid command usage." + unknown-stop: "&cThe stop &e%stop% &cdoes not exist." + no-stops: "&eNo taxi stops have been created yet." + +database: + connection-success: "&aDatabase connected successfully." + connection-error: "&cCould not connect to the database." + +stop: + added: "&aStop &e%stop% &ahas been created." + updated: "&aStop &e%stop% &ahas been moved to your current location." + edited: "&aStop &e%stop% &ahas been updated." + deleted: "&aStop &e%stop% &ahas been removed." + already-exists: "&cA stop named &e%stop% &calready exists." + invalid-icon: "&cThe icon &e%icon% &cis invalid." + creation-error: "&cUnable to create the taxi stop. Check the server logs." + +teleport: + success: "&aYou have arrived at &e%stop%&a." + +confirmation: + update: "&eAre you sure you want to move stop &6%stop%&e? Confirm the command to proceed." + delete: "&eAre you sure you want to delete stop &6%stop%&e? Confirm the command to proceed." + expired: "&cThat confirmation has expired." + +list: + header: "&6Available Taxi Stops:" + entry: "&e%icon% &f%stop%" + +platform: + invalid: "&cYou must stand on a valid taxi platform to create a stop." + + diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..6080bb8 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,29 @@ + +name: RS-Taxi +version: '${project.version}' +main: com.rsscripting.rstaxi.RSTaxi +api-version: '26.1.2' +description: Travel between named taxi stops. +author: RSScripting + +commands: + cab: + description: Travel between registered taxi stops. + usage: /cab + +permissions: + rs-cab.use: + description: Allows players to travel to taxi stops. + default: true + + rs-cab.add: + description: Allows players to create taxi stops. + default: op + + rs-cab.edit: + description: Allows players to update and edit taxi stops. + default: op + + rs-cab.delete: + description: Allows players to delete taxi stops. + default: op diff --git a/target/RS-Taxi-0.1.0.jar b/target/RS-Taxi-0.1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..ef7aa071ebfd11c2f593c6af86cb40b2b3873805 GIT binary patch literal 16816 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/rsscripting/rstaxi/RSTaxi.class b/target/classes/com/rsscripting/rstaxi/RSTaxi.class new file mode 100644 index 0000000000000000000000000000000000000000..dbe8eff215fbf81b8fbd4290e674d4aa87817d4a GIT binary patch literal 2591 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 literal 0 HcmV?d00001 diff --git a/target/classes/com/rsscripting/rstaxi/database/DatabaseManager.class b/target/classes/com/rsscripting/rstaxi/database/DatabaseManager.class new file mode 100644 index 0000000000000000000000000000000000000000..d1c7235b090685074a5935a4d4b0c631f0720d7d GIT binary patch literal 3292 zcmai1`%@d&75**=c3H2DE$}PB_Sz;62(aojP8*as#j;4SSHeaDjNR9wUBjA1tL(09 zaNljx_xs)a+8^?3J=5UY=`_EkGyRV`(`owMT}cRxQ)aYx@4e@od(L;hbMEr5|33K# zfCB!Yp$pv#QaXCjD{%0xb{f1{7H9s<{ zfn!CEk;G|8B#b+;Q|C1d;j{$$3~h}h?!{1-qk!P$Mi*2J3n&u8^Y*fI_%h#tp&~O1SDfq08mvK?xNE@vyfqTyh+7ytfqV*ctMfe0ppKV@Zy)BxP z?E9RK&*N1At=eJYaN^A_aY><^j@R(IKpzh^{gs%5LoFy8k?UnWu1e}AyEzqa2t3CG zyG&w>$42uo$7T|za9KfK#}%2!V{w#w7!pXiwLAVkOyf-jZ|RtkbQ)-bvK^Ly>V|pG z4;@>@H6Gq78p90}MkSH*a1})%PUPnbQH%%iy zYnt+q(rkXJTrlQKGdJc7iL^^Fc1kDf_x*q+u)|EUv0>0*vu!(B+}vyN!Cs4-*8RPf z>uywC-MOKS<}?ZTtd8rr!74~_zXx6oJ| zMV`+Vorb`KN&}xzF@hyFM0kE|<0#7;;C%3Z; zG6~Fcb**UCn~rJi?oRi#ZH(DR!WL=RQn$NKnniTk3fk5s$m<`%xGLR=wy%tG*qo_#s2PYcE$P=@R?d zq)_o=W^&phAhr?t2^oxCY?(Afe=mNj;b-`{f?vq{;g`JPwsCW7_xv>{n*_xucx6mm z)yNMv1^(E{-=<*V&s$c__MC9o^!>F)J@<4TI#zZlRyOO-9^$t<+=R*a@OO!%HW~dloB=H~Mb`UU({|y(()rIe&dbB zv4^$QgLOV@oJ~_g%4wNL5Sg(LpgfFaeLfGMo6kc?(MBHzQ0MGOB8|5Za7Mk@I*Ef2 zz1)*F|4xk*$E%sYLfOK8b8HI(?_rR`@%OO*LkumYPd6Kz7?<=y#W6mQ!@x<5;S?_7G+xJ9-fzRPpP9si zrk^S!QYC+{Xs(ZqlL(@gEopKVBYimZIbke_w0GB>E`V!yTJ$z49^o z0^x+()on`W|65-5(3J;q!Y7RNuv@c3ig6nG!cmpB`2&Gt>ECXT1J@TG~5 zTG3i@v|apudI@i^L0`dD6gei*pJN_?7nzF@oM0>lGn&C9Wpk8%6^q26ic2v926Zx+ zz}NAOIA?Yf3xhVl$+$%v_XYG0^nF6``1!3W_?E)^LnyfY3HBq^UgAQ$s{EU3odCUz z?{GyXJ_VS-{+poNP~ zT;6AEYR*ZeJ5S&OTe$m>MpVLKFl7l$8PZbzU!joRDgiu%Yuvv<36qf)F^X9hNReNN zb8S+eCaB-V_hJ_>HeF1J(XB2j7#g7McjB<##rHWLpu<0*^bg|akMJw5X`KHWzs2uy F{C`2RGu{9I literal 0 HcmV?d00001 diff --git a/target/classes/com/rsscripting/rstaxi/language/LanguageManager.class b/target/classes/com/rsscripting/rstaxi/language/LanguageManager.class new file mode 100644 index 0000000000000000000000000000000000000000..af927cf917f9347a83df84630128887cc0511d90 GIT binary patch literal 4401 zcmbVP`F|6~75|Pcdu4mgu^1Br2?~etiJ%ENEJ{Mm5r}LW3{Ek)WRceP;?=IBT^XCS zP4AYpO-s+2&!$+)CAW*x>cI{xZKy_RDU>%~U z(@?LY0lGjuRj7qqn}OU)&s zXcmadSfz*cXv9?#g%*KTZRMKbNTD(iWEp3oeNgHz)3F>^Gbn4y_5)u*G$bch=!mI_ z%y`<)`qJ~2I#yw|KpovmdZP-A5LP_ zdI6)jTl|t-#`78-*Wr3nAXqDYr*u^EO*qg z{V{2ic$;2)Ti@a|Ys8LwgV>@yifI9EbFZw- zS!=|ek|%YCB948A577)DA3G2#q5T%Nmy=rqg-ESj}MQdV!1K{Vhb z9@6niX`q(O++i{1S`171XLLL) zP`d1>nO-j~&*a*+-jXegm)~5Gz{<8)xX{~q*dx-c!2G1`TK&1qVJo}WJnT?nB)ydB z44PS6jtjy_FlN(-4KHW-(#4c4e`O@Nk-RQgcZw>-N5H($^}>sSiVcOTFOM=g^DT#u z9*awjND4xkMb-1UlXdY8{H{+XMu0{nd zQ#|R-<+w~w6tO8}Lb>ftbA6sG*~|?#mT&n#ud5rdN0}ly`GPo5nxuuy_`l3n$X(XE z0rj8=ac;Vd;C1pa@g};>^8%ji;s-=ugin_r%FHPwMr?%i#@4EtwXvh7 zuU=FmUd~OI-yl)^SS6#Gwq`Gzo|uT@rvl6RY+v0r#jJ`Icv1>K=NW5F6;(=Se#r_i zXyVs=Ag&Q>=GWr4_4plrui+1}Nd8e^^=x&p-AQlUiid!PchzYuY~fy}R0Z_|C3#aU^(CT$iC)uj23VP8PVaPGE8FXs zzAx)WjVhBG{>mrpoY*S4tl{qh*IZeZwKj|o8+c_^@nWxrA%8^JtCE+m`tmWyZ-m!! z4Zgzms~m0TywtDncoL$c^9;1dmG0Nr&Z8AzAy*ivZ!s1dy?JcQpqWz04?@J zS|WMeJ%i;1HO`~}s&-J2ID_=#9W4>HM|xIcL~4x6n5!Yt7-H-){wS6ZlNPMNQvOt| z;G?=9*xZNzDs(zxPT z;+4JtO`Jl5?2_4_zxx6fNnl@qE1gC+l!+4gWyPe*ty>w=Vzy literal 0 HcmV?d00001 diff --git a/target/classes/com/rsscripting/rstaxi/platform/PlatformValidator.class b/target/classes/com/rsscripting/rstaxi/platform/PlatformValidator.class new file mode 100644 index 0000000000000000000000000000000000000000..17c5b5692d3d451aba0e3178dba73d5deea6fbcf GIT binary patch literal 3840 zcmeHKX?q*h6@IT4k1S8@pb!%o5*%Z|@+LysCbiuZ@PY+iAaYHeq{~(pum$EdmnnVg!doinmkQ*%qUvz~pZu~^njqo}#ILwQxRUN$U&Tj#FBeKNm9 zA>&DOqD#SE6*nLyaPUK^1=`EHJ84@bqbzWAATwt>c;VS0yonBK=V=E(pF8qm_#>jQgA>;8a)Ep|52(yl4{*&+orD3IAQY(&p@fXNbT}t!4%nM6M6FDd<;m zJMIwJ7m^py2qbFtRoBs^i+cv9rlwjD3&=cC11d5YB!@J`vfvDxJfONbAcjKsnkEr-4K1OUq zR)+KuQ25f)W>voiucjm!)yGwQ9Al(joSDf_FXaWgd|%aF!_3ZWRlYZYPbfH{;*+>X zV2|g?;FjpnRnBH!C!RMDot;}Ak@r4KDwtB4b2BZx9z(*Q`F?tIxA5i~=M*rDoPq~b zJcv1g)Q*uH8+9t3r zwujNd`VLs0(zWIS9MWK|)Yd82G;Zrx!R-yW(PyqySP*GPfWxfA5+ z8~88HGqX&OP1;4u?3yzyeWAX-syj=vr?Gm-@@_6`thn4a4r6Y`U?v{Dp5UOOU)$5E z4@22&@iGy^owucZjb~2L+M?lbu3$JzJ$8b=VIE73T`JXN6-_w$qjeH9*Y}5I2C2kn zJ8E^uvFlcmjg);eOchRlhP79mrJ!939R+bH@f&PUSVpV%q$==4w&6CvtFh^{BFQe( zKyzrfhpy|+J$Y9vtkL0tFRGebk!4$3r@IoYAdT*rm?)TyaV(j)>rO$JgADcHfZ$DB z%|UBa8p>kL*~6`|&sXPlw_+D-3B1Mz6*zO0W;6dsMFMXK9L`xAa!~6Hu6u)*do{OL zjP;7HHoTR@+t^ZYNmioE0{uHaG^`DKP0#wS^y~Z#2MpU`nR+2y85)GXO0$|(H1%5l zoNcewtKo9dh>1{?v@pu1z6<&35PhTIgll(0#H41LdA40TU(H#T?o66mt)?>r;?uJG zDR`IZc#UnlsjT2VfkPio%9!!(!x0V}5jMpLQgVpqsz**9tnJ_RPQQm3*Ks_{?{hqv zA*G~G4qk#79C{nd>mJ?r`RzoM-yU+@jCKx@Kj5z0r^XNQBkp9^ldlN=K93*!GQ~6C z49~ll2H%3Rg*~Z#u`TSsfOzcU&^B%s=h+QP`f@HUPJjJ%9^^x_*h zwhiL8je7;gV(Hj6?ict8mgQ<*;3^&-i>Kq;;1G2c%VTYF{b{*AJ*Et%+pgd<0ELbv zhSN%PG@4doqubD87;8_rd+($Z-b1hc`<2*5su_bcc8324fD`gw^b)$;XmUReal-Ax zot#gHa1_Iw1hbq&?m~$$J3Kj$V+3*>KVzeM5hw5~+~a|ChH#Z|94}DqHc}4b0?rVW z^OXNnQYXmOiJz0Fo${ve3;dEUAz)2dU!tsE6V5(7!P6HBdIpcOe{xtUCenK>h5zKpL5Bj2;Mr83@K1g@t zFn-5XgdDfv_nr|_WfhSRa7e*2HSQ!Re;`bPc}E?dAhlYEMCU9-o!B(`oc3)Dgt!TXc-|9 l{1JcR-%hUH+FL)p6{{R}A8yx@u literal 0 HcmV?d00001 diff --git a/target/classes/com/rsscripting/rstaxi/stops/StopManager.class b/target/classes/com/rsscripting/rstaxi/stops/StopManager.class new file mode 100644 index 0000000000000000000000000000000000000000..4f8ca08aec9a424958ab9653d37ada509640f444 GIT binary patch literal 2837 zcmb7FT~iZh6nVskJh$JvcgJ8Vs<0Zepy?8 zKxe$`jnkQqH+Dv6S~}@Pz4M~KsjYq9O|qtZbfz=OzWcuC<2~nj&N=(X-@pA1AdW{t zG@)6AqQM8hK-+EOt`W-`xy9J@!fi9{2>6GroaLMsXbwl_TM$5tilByV&;-Ki{7S57 z+v%cJa4Z@XZO15EG26)(>{yD=Nh4=0nnk)PWJ`-yPM|xvh0$zkj<$mVvOy_esMr-AH!Jcp=>84@d$;QS! z!QeLRMu&<{4STRxVAm!(1fWnf3r5jQIfi4dm^lJ)EL?TxqLOlo%yY2ehRaohjAy}% zy6~2YeH!-TfIydb(FRq47Ta{HJ_S0%6Pw&LFWu=H-o`-z%`BVgl4H)4%;G(1(GbY2 zX_vB2%5)gOVZ5W_T@6PN7HIbZ@KgkpoLOdaB=v?=@6m8n7Jx6E&D*BDvPVT<9VIvQ zxus%$)mX@yLGvu!gYu(uH`&tfn#AHXRAb7CqLpPkdEXZ4AT zQ`2N~Vrp)>N^dYMnT_fexs2+o`C>K`)yq-+UR1x&r?DE<3zm~!iUj8`B(KC%dUzzN zZ}N)-gXqT@6=yY^!vIsr7Z+m-rR8PIi6!%Cqgo|_Mbo(|FA>;H6dQEhQ(`!TVHM{! zj9`>?v0gzyrH3hoTy@}L+*l$qiuW{(VVq!7^_mOzxP&&L;UX?o$sf;`2q}RNPmD+A zrP2EuKByaAmj{y?rs@Ybz#nfYajq_p@@!$-JD9&3elrI2CayB;Tk_ynJ-Ff=S6EwKMT`<7)!zvG5uEEu-w zwf#wAyM-Mua&=?tj0S@+aZAObh9%kDvHxk$WEjbt#^*E%Zxusr=0u2@GM3LU@f}Gk zXHJz?7R=(DEOzE4izYj76fL>09V*U}WefCd<#@vc93)+4*|Hs4bu>0feWKi8MX`(6 z!qnLPW`cP=OAjp^ul2FC?~Tfaxk6P%c9RT#Lt&C!PDY}{iIrZSGzxA?D(?Sl{MUz4 zFkViZ9Pas?t>O#D?hTXFOwyClCkKJR&?cE}jG(dG>K!>4ApnYOepYDKYtxQRbvf}< z`BE`$CM?NNTf>*8PsYdD6yS#qAOP}9#W#iTK3II-<}N|0lm~l$h3Gl@3)C0fHDQ_0 zRy6b3MvI+jp?#LS&Z;(6kmHVau2(^Cc@!w4Pw|9yDrM#N?UOxg*b%K@R}-dsm7^7e zn$cT9x4?iBQYttk(C-T=uMm{Gh(PZvv``^Re0|RbTv2CD^c32FKjaJf*ANT&UJfYK z?WpQX5p_d8DNcvme*AAtviQM(fgV_tT*7XE2Fn2D2-M%lh*aVYWnz$QOG*@ zoc}NJRgJgjJPT0rqW$E6B8ij0lQ}}`t8o|d`N$?o4Eg-MYdBp2JFIq~^58-RafQMF z-zRGCZBjE?-$tm_LxI0d2Pv8*oKSBy)Tu<>sGKw=u;w--l z=Wq)Hq;iP + +permissions: + rs-cab.use: + description: Allows players to travel to taxi stops. + default: true + + rs-cab.add: + description: Allows players to create taxi stops. + default: op + + rs-cab.edit: + description: Allows players to update and edit taxi stops. + default: op + + rs-cab.delete: + description: Allows players to delete taxi stops. + default: op diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..a36326c --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=rs-taxi +groupId=com.rsscripting +version=0.1.0 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 new file mode 100644 index 0000000..30b5f53 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,6 @@ +com\rsscripting\rstaxi\stops\StopManager.class +com\rsscripting\rstaxi\platform\PlatformValidator.class +com\rsscripting\rstaxi\RSTaxi.class +com\rsscripting\rstaxi\commands\CabCommand.class +com\rsscripting\rstaxi\database\DatabaseManager.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 new file mode 100644 index 0000000..5d26fe8 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +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\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 +C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\RSTaxi.java +C:\Users\russe\IdeaProjects\RS-Taxi\src\main\java\com\rsscripting\rstaxi\stops\StopManager.java