From e29e91fc51b3849fd39ae032d48c78a8c04aa89b Mon Sep 17 00:00:00 2001 From: Git Manager GUI Date: Mon, 1 Jun 2026 21:19:04 +0200 Subject: [PATCH] Upload folder via GUI - src --- .../java/de/teleportsuite/TeleportSuite.java | 67 ++++++---- .../commands/DelHomeCommand.java | 2 +- .../teleportsuite/commands/HomeCommand.java | 5 +- .../commands/SetHomeCommand.java | 2 +- .../commands/TeleportSuiteTabCompleter.java | 122 ++++++++++++++++++ .../database/DatabaseManager.java | 59 ++++----- .../teleportsuite/managers/WarpManager.java | 14 +- src/main/resources/bungee.yml | 2 +- src/main/resources/plugin.yml | 2 +- 9 files changed, 197 insertions(+), 78 deletions(-) create mode 100644 src/main/java/de/teleportsuite/commands/TeleportSuiteTabCompleter.java diff --git a/src/main/java/de/teleportsuite/TeleportSuite.java b/src/main/java/de/teleportsuite/TeleportSuite.java index f7dd4f0..3efa6ae 100644 --- a/src/main/java/de/teleportsuite/TeleportSuite.java +++ b/src/main/java/de/teleportsuite/TeleportSuite.java @@ -19,6 +19,7 @@ public class TeleportSuite extends JavaPlugin { private SavePointManager savePointManager; private BungeeMessenger bungeeMessenger; private ConfigManager configManager; + private TeleportSuiteTabCompleter tabCompleter; @Override public void onEnable() { @@ -57,6 +58,7 @@ public class TeleportSuite extends JavaPlugin { getLogger().warning("BungeeCord deaktiviert (bungee.enabled=false). Cross-Server-Teleport nicht verfuegbar."); } + tabCompleter = new TeleportSuiteTabCompleter(this); getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); getServer().getPluginManager().registerEvents(new PlayerDeathListener(this), this); getServer().getPluginManager().registerEvents(new PlayerMoveListener(this), this); @@ -74,33 +76,43 @@ public class TeleportSuite extends JavaPlugin { } private void registerCommands() { - getCommand("tp").setExecutor(new TpCommand(this)); - getCommand("tphere").setExecutor(new TpHereCommand(this)); - getCommand("tpa").setExecutor(new TpaCommand(this)); - getCommand("tpaccept").setExecutor(new TpAcceptCommand(this)); - getCommand("tpdeny").setExecutor(new TpDenyCommand(this)); - getCommand("tppos").setExecutor(new TpPosCommand(this)); - getCommand("tpall").setExecutor(new TpAllCommand(this)); - getCommand("tpworld").setExecutor(new TpWorldCommand(this)); - getCommand("back").setExecutor(new BackCommand(this)); - getCommand("deathback").setExecutor(new DeathBackCommand(this)); - getCommand("sethome").setExecutor(new SetHomeCommand(this)); - getCommand("home").setExecutor(new HomeCommand(this)); - getCommand("delhome").setExecutor(new DelHomeCommand(this)); - getCommand("homes").setExecutor(new HomesCommand(this)); - getCommand("setwarp").setExecutor(new SetWarpCommand(this)); - getCommand("warp").setExecutor(new WarpCommand(this)); - getCommand("delwarp").setExecutor(new DelWarpCommand(this)); - getCommand("warps").setExecutor(new WarpsCommand(this)); - getCommand("setportal").setExecutor(new SetPortalCommand(this)); - getCommand("delportal").setExecutor(new DelPortalCommand(this)); - getCommand("portals").setExecutor(new PortalsCommand(this)); - getCommand("setspawn").setExecutor(new SetSpawnCommand(this)); - getCommand("spawn").setExecutor(new SpawnCommand(this)); - getCommand("setfirstspawn").setExecutor(new SetFirstSpawnCommand(this)); - getCommand("setsavepoint").setExecutor(new SetSavePointCommand(this)); - getCommand("savepoint").setExecutor(new SavePointCommand(this)); - getCommand("entitytransport").setExecutor(new EntityTransportCommand(this)); + registerCommand("tp", new TpCommand(this)); + registerCommand("tphere", new TpHereCommand(this)); + registerCommand("tpa", new TpaCommand(this)); + registerCommand("tpaccept", new TpAcceptCommand(this)); + registerCommand("tpdeny", new TpDenyCommand(this)); + registerCommand("tppos", new TpPosCommand(this)); + registerCommand("tpall", new TpAllCommand(this)); + registerCommand("tpworld", new TpWorldCommand(this)); + registerCommand("back", new BackCommand(this)); + registerCommand("deathback", new DeathBackCommand(this)); + registerCommand("sethome", new SetHomeCommand(this)); + registerCommand("home", new HomeCommand(this)); + registerCommand("delhome", new DelHomeCommand(this)); + registerCommand("homes", new HomesCommand(this)); + registerCommand("setwarp", new SetWarpCommand(this)); + registerCommand("warp", new WarpCommand(this)); + registerCommand("delwarp", new DelWarpCommand(this)); + registerCommand("warps", new WarpsCommand(this)); + registerCommand("setportal", new SetPortalCommand(this)); + registerCommand("delportal", new DelPortalCommand(this)); + registerCommand("portals", new PortalsCommand(this)); + registerCommand("setspawn", new SetSpawnCommand(this)); + registerCommand("spawn", new SpawnCommand(this)); + registerCommand("setfirstspawn", new SetFirstSpawnCommand(this)); + registerCommand("setsavepoint", new SetSavePointCommand(this)); + registerCommand("savepoint", new SavePointCommand(this)); + registerCommand("entitytransport", new EntityTransportCommand(this)); + } + + private void registerCommand(String name, org.bukkit.command.CommandExecutor executor) { + org.bukkit.command.PluginCommand command = getCommand(name); + if (command == null) { + getLogger().warning("Befehl '" + name + "' ist in plugin.yml nicht registriert."); + return; + } + command.setExecutor(executor); + command.setTabCompleter(tabCompleter); } public static TeleportSuite getInstance() { return instance; } @@ -113,4 +125,5 @@ public class TeleportSuite extends JavaPlugin { public SavePointManager getSavePointManager() { return savePointManager; } public BungeeMessenger getBungeeMessenger() { return bungeeMessenger; } public ConfigManager getConfigManager() { return configManager; } + public TeleportSuiteTabCompleter getTabCompleter() { return tabCompleter; } } diff --git a/src/main/java/de/teleportsuite/commands/DelHomeCommand.java b/src/main/java/de/teleportsuite/commands/DelHomeCommand.java index ffbd315..48e7b05 100644 --- a/src/main/java/de/teleportsuite/commands/DelHomeCommand.java +++ b/src/main/java/de/teleportsuite/commands/DelHomeCommand.java @@ -9,7 +9,7 @@ public class DelHomeCommand implements CommandExecutor { public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (!(sender instanceof Player)) { sender.sendMessage("§cNur für Spieler!"); return true; } Player p = (Player) sender; - if (!p.hasPermission("teleportsuite.sethome")) { p.sendMessage(plugin.getConfigManager().getMessage("no-permission")); return true; } + if (!p.hasPermission("teleportsuite.delhome")) { p.sendMessage(plugin.getConfigManager().getMessage("no-permission")); return true; } if (args.length < 1) { p.sendMessage("§cVerwendung: /delhome "); return true; } plugin.getHomeManager().deleteHome(p, args[0]); return true; diff --git a/src/main/java/de/teleportsuite/commands/HomeCommand.java b/src/main/java/de/teleportsuite/commands/HomeCommand.java index 08472fe..e97cd17 100644 --- a/src/main/java/de/teleportsuite/commands/HomeCommand.java +++ b/src/main/java/de/teleportsuite/commands/HomeCommand.java @@ -10,7 +10,10 @@ public class HomeCommand implements CommandExecutor { if (!(sender instanceof Player)) { sender.sendMessage("§cNur für Spieler!"); return true; } Player p = (Player) sender; if (!p.hasPermission("teleportsuite.home")) { p.sendMessage(plugin.getConfigManager().getMessage("no-permission")); return true; } - String name = args.length > 0 ? args[0] : "home"; + String name = args.length > 0 ? args[0] : p.getWorld().getName(); + if (args.length == 0 && plugin.getDatabaseManager().getHome(p.getUniqueId(), name) == null) { + name = "home"; + } plugin.getHomeManager().teleportHome(p, name); return true; } diff --git a/src/main/java/de/teleportsuite/commands/SetHomeCommand.java b/src/main/java/de/teleportsuite/commands/SetHomeCommand.java index f14990c..5436389 100644 --- a/src/main/java/de/teleportsuite/commands/SetHomeCommand.java +++ b/src/main/java/de/teleportsuite/commands/SetHomeCommand.java @@ -10,7 +10,7 @@ public class SetHomeCommand implements CommandExecutor { if (!(sender instanceof Player)) { sender.sendMessage("§cNur für Spieler!"); return true; } Player p = (Player) sender; if (!p.hasPermission("teleportsuite.sethome")) { p.sendMessage(plugin.getConfigManager().getMessage("no-permission")); return true; } - String name = args.length > 0 ? args[0] : "home"; + String name = args.length > 0 ? args[0] : p.getWorld().getName(); plugin.getHomeManager().setHome(p, name); return true; } diff --git a/src/main/java/de/teleportsuite/commands/TeleportSuiteTabCompleter.java b/src/main/java/de/teleportsuite/commands/TeleportSuiteTabCompleter.java new file mode 100644 index 0000000..7aa45e5 --- /dev/null +++ b/src/main/java/de/teleportsuite/commands/TeleportSuiteTabCompleter.java @@ -0,0 +1,122 @@ +package de.teleportsuite.commands; + +import de.teleportsuite.TeleportSuite; +import de.teleportsuite.models.Home; +import de.teleportsuite.models.Warp; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.bukkit.util.StringUtil; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class TeleportSuiteTabCompleter implements TabCompleter { + + private final TeleportSuite plugin; + + public TeleportSuiteTabCompleter(TeleportSuite plugin) { + this.plugin = plugin; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String alias, String[] args) { + String name = command.getName().toLowerCase(); + List suggestions = new ArrayList<>(); + + switch (name) { + case "tp": + case "tphere": + case "tpa": + case "tpall": + if (args.length == 1) { + suggestOnlinePlayers(args[0], suggestions); + } else if ("tp".equals(name) && args.length == 2 && sender.hasPermission("teleportsuite.admin")) { + suggestOnlinePlayers(args[1], suggestions); + } + break; + + case "home": + case "delhome": + case "sethome": + if (sender instanceof Player) { + Player player = (Player) sender; + if (args.length == 1) { + suggestHomeNames(player, args[0], suggestions); + if ("sethome".equals(name)) { + String worldName = player.getWorld().getName(); + StringUtil.copyPartialMatches(args[0], Collections.singletonList(worldName), suggestions); + } + } + } + break; + + case "warp": + case "delwarp": + case "setwarp": + if (args.length == 1) { + suggestWarpNames(args[0], suggestions); + } + break; + + case "delportal": + case "setportal": + if (args.length == 1) { + suggestPortalNames(args[0], suggestions); + } + break; + + case "tpworld": + if (args.length == 1) { + suggestWorlds(args[0], suggestions); + } + break; + + default: + break; + } + + Collections.sort(suggestions, String.CASE_INSENSITIVE_ORDER); + return suggestions; + } + + private void suggestOnlinePlayers(String token, List suggestions) { + List names = new ArrayList<>(); + Bukkit.getOnlinePlayers().forEach(player -> names.add(player.getName())); + StringUtil.copyPartialMatches(token, names, suggestions); + } + + private void suggestHomeNames(Player player, String token, List suggestions) { + List names = new ArrayList<>(); + for (Home home : plugin.getHomeManager().getHomes(player.getUniqueId())) { + names.add(home.getName()); + } + StringUtil.copyPartialMatches(token, names, suggestions); + } + + private void suggestWarpNames(String token, List suggestions) { + List names = new ArrayList<>(); + for (Warp warp : plugin.getWarpManager().getAllWarps()) { + names.add(warp.getName()); + } + StringUtil.copyPartialMatches(token, names, suggestions); + } + + private void suggestPortalNames(String token, List suggestions) { + List names = new ArrayList<>(); + plugin.getPortalManager().getPortals().forEach(portal -> names.add(portal.getName())); + StringUtil.copyPartialMatches(token, names, suggestions); + } + + private void suggestWorlds(String token, List suggestions) { + List names = new ArrayList<>(); + for (World world : Bukkit.getWorlds()) { + names.add(world.getName()); + } + StringUtil.copyPartialMatches(token, names, suggestions); + } +} \ No newline at end of file diff --git a/src/main/java/de/teleportsuite/database/DatabaseManager.java b/src/main/java/de/teleportsuite/database/DatabaseManager.java index 2ff32d1..88030ff 100644 --- a/src/main/java/de/teleportsuite/database/DatabaseManager.java +++ b/src/main/java/de/teleportsuite/database/DatabaseManager.java @@ -131,25 +131,20 @@ public class DatabaseManager { // ===== WARPS ===== public void saveWarp(String name, TeleportLocation loc, UUID creator, String permission) { - try (Connection c = getConnection()) { - boolean exists; - try (PreparedStatement check = c.prepareStatement("SELECT 1 FROM ts_warps WHERE name=?")) { - check.setString(1, name); - exists = check.executeQuery().next(); - } - String sql = exists - ? "UPDATE ts_warps SET world=?,x=?,y=?,z=?,yaw=?,pitch=?,server=?,creator=?,permission=? WHERE name=?" - : "INSERT INTO ts_warps (world,x,y,z,yaw,pitch,server,creator,permission,name) VALUES(?,?,?,?,?,?,?,?,?,?)"; - try (PreparedStatement ps = c.prepareStatement(sql)) { - ps.setString(1, loc.getWorld()); - ps.setDouble(2, loc.getX()); ps.setDouble(3, loc.getY()); ps.setDouble(4, loc.getZ()); - ps.setFloat(5, loc.getYaw()); ps.setFloat(6, loc.getPitch()); - ps.setString(7, loc.getServer()); - ps.setString(8, creator != null ? creator.toString() : null); - ps.setString(9, permission); - ps.setString(10, name); - ps.executeUpdate(); + String sql = isMySQL + ? "INSERT INTO ts_warps (name,world,x,y,z,yaw,pitch,server,creator,permission) VALUES(?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE world=?,x=?,y=?,z=?,yaw=?,pitch=?,server=?" + : "INSERT OR REPLACE INTO ts_warps (name,world,x,y,z,yaw,pitch,server,creator,permission) VALUES(?,?,?,?,?,?,?,?,?,?)"; + try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql)) { + ps.setString(1, name); ps.setString(2, loc.getWorld()); + ps.setDouble(3, loc.getX()); ps.setDouble(4, loc.getY()); ps.setDouble(5, loc.getZ()); + ps.setFloat(6, loc.getYaw()); ps.setFloat(7, loc.getPitch()); ps.setString(8, loc.getServer()); + ps.setString(9, creator != null ? creator.toString() : null); ps.setString(10, permission); + if (isMySQL) { + ps.setString(11, loc.getWorld()); ps.setDouble(12, loc.getX()); ps.setDouble(13, loc.getY()); + ps.setDouble(14, loc.getZ()); ps.setFloat(15, loc.getYaw()); ps.setFloat(16, loc.getPitch()); + ps.setString(17, loc.getServer()); } + ps.executeUpdate(); } catch (SQLException e) { plugin.getLogger().warning("saveWarp: " + e.getMessage()); } } @@ -255,23 +250,19 @@ public class DatabaseManager { // ===== PLAYER DATA ===== public void saveLastLocation(UUID uuid, TeleportLocation loc) { - try (Connection c = getConnection()) { - // Check if row exists - boolean exists; - try (PreparedStatement check = c.prepareStatement("SELECT 1 FROM ts_player_data WHERE uuid=?")) { - check.setString(1, uuid.toString()); - exists = check.executeQuery().next(); - } - String sql = exists - ? "UPDATE ts_player_data SET last_world=?,last_x=?,last_y=?,last_z=?,last_yaw=?,last_pitch=?,last_server=? WHERE uuid=?" - : "INSERT INTO ts_player_data (last_world,last_x,last_y,last_z,last_yaw,last_pitch,last_server,uuid) VALUES(?,?,?,?,?,?,?,?)"; - try (PreparedStatement ps = c.prepareStatement(sql)) { - ps.setString(1, loc.getWorld()); - ps.setDouble(2, loc.getX()); ps.setDouble(3, loc.getY()); ps.setDouble(4, loc.getZ()); - ps.setFloat(5, loc.getYaw()); ps.setFloat(6, loc.getPitch()); - ps.setString(7, loc.getServer()); ps.setString(8, uuid.toString()); - ps.executeUpdate(); + String sql = isMySQL + ? "INSERT INTO ts_player_data (uuid,last_world,last_x,last_y,last_z,last_yaw,last_pitch,last_server) VALUES(?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE last_world=?,last_x=?,last_y=?,last_z=?,last_yaw=?,last_pitch=?,last_server=?" + : "INSERT OR REPLACE INTO ts_player_data (uuid,last_world,last_x,last_y,last_z,last_yaw,last_pitch,last_server) VALUES(?,?,?,?,?,?,?,?)"; + try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql)) { + ps.setString(1, uuid.toString()); ps.setString(2, loc.getWorld()); + ps.setDouble(3, loc.getX()); ps.setDouble(4, loc.getY()); ps.setDouble(5, loc.getZ()); + ps.setFloat(6, loc.getYaw()); ps.setFloat(7, loc.getPitch()); ps.setString(8, loc.getServer()); + if (isMySQL) { + ps.setString(9, loc.getWorld()); ps.setDouble(10, loc.getX()); ps.setDouble(11, loc.getY()); + ps.setDouble(12, loc.getZ()); ps.setFloat(13, loc.getYaw()); ps.setFloat(14, loc.getPitch()); + ps.setString(15, loc.getServer()); } + ps.executeUpdate(); } catch (SQLException e) { plugin.getLogger().warning("saveLastLocation: " + e.getMessage()); } } diff --git a/src/main/java/de/teleportsuite/managers/WarpManager.java b/src/main/java/de/teleportsuite/managers/WarpManager.java index 6bf33fc..543ec77 100644 --- a/src/main/java/de/teleportsuite/managers/WarpManager.java +++ b/src/main/java/de/teleportsuite/managers/WarpManager.java @@ -11,14 +11,8 @@ public class WarpManager { public WarpManager(TeleportSuite plugin) { this.plugin = plugin; } public void setWarp(Player player, String name, String permission) { - // Snapshot the location at the exact moment /setwarp is called - TeleportLocation loc = new TeleportLocation( - player.getLocation().clone(), - plugin.getConfigManager().getServerName()); + TeleportLocation loc = new TeleportLocation(player.getLocation(), plugin.getConfigManager().getServerName()); plugin.getDatabaseManager().saveWarp(name, loc, player.getUniqueId(), permission); - plugin.getLogger().info("Warp '" + name + "' gesetzt: " - + loc.getWorld() + " " + loc.getX() + "/" + loc.getY() + "/" + loc.getZ() - + " von " + player.getName()); player.sendMessage(plugin.getConfigManager().getMessage("warp-set", "name", name)); } @@ -32,11 +26,7 @@ public class WarpManager { player.sendMessage(plugin.getConfigManager().getMessage("no-permission")); return; } - TeleportLocation dest = warp.getLocation(); - plugin.getLogger().info("Warp '" + name + "' geladen: " - + dest.getWorld() + " " + dest.getX() + "/" + dest.getY() + "/" + dest.getZ() - + " -> Spieler " + player.getName()); - plugin.getTeleportManager().teleport(player, dest); + plugin.getTeleportManager().teleport(player, warp.getLocation()); } public boolean deleteWarp(String name) { diff --git a/src/main/resources/bungee.yml b/src/main/resources/bungee.yml index 109a8ce..b6a822f 100644 --- a/src/main/resources/bungee.yml +++ b/src/main/resources/bungee.yml @@ -1,5 +1,5 @@ name: TeleportSuite-Bungee main: de.teleportsuite.bungee.TeleportSuiteBungee -version: 1.0 +version: 1.0.5 author: TeleportSuite description: BungeeCord-Companion fuer TeleportSuite diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a55b948..b2e061e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: TeleportSuite -version: 1.0.4 +version: 1.0.5 main: de.teleportsuite.TeleportSuite api-version: 1.20 description: BungeeCord-fähiges Teleport-Komplettpaket