diff --git a/src/main/java/me/william278/huskhomes2/commands/SetspawnCommand.java b/src/main/java/me/william278/huskhomes2/commands/SetspawnCommand.java index ee3653dfc..7f875598c 100644 --- a/src/main/java/me/william278/huskhomes2/commands/SetspawnCommand.java +++ b/src/main/java/me/william278/huskhomes2/commands/SetspawnCommand.java @@ -11,11 +11,22 @@ public class SetspawnCommand extends CommandBase { @Override protected void onCommand(Player p, Command command, String label, String[] args) { if (HuskHomes.getSettings().doSpawnCommand()) { - SettingHandler.setSpawnLocation(p.getLocation()); - p.getLocation().getWorld().setSpawnLocation(p.getLocation()); - MessageManager.sendMessage(p, "set_spawn_success"); + if (HuskHomes.getSettings().doCrossServerSpawn()) { + if (SettingHandler.setCrossServerSpawnWarp(p.getLocation(), p)) { + updateSpawnLocation(p); + } + return; + } + updateSpawnLocation(p); } else { MessageManager.sendMessage(p, "error_command_disabled"); } } + + // Set the spawn position on the world to the player's location + private void updateSpawnLocation(Player p) { + SettingHandler.setSpawnLocation(p.getLocation()); + p.getLocation().getWorld().setSpawnLocation(p.getLocation()); + MessageManager.sendMessage(p, "set_spawn_success"); + } } diff --git a/src/main/java/me/william278/huskhomes2/commands/SpawnCommand.java b/src/main/java/me/william278/huskhomes2/commands/SpawnCommand.java index ce3e8e43b..1c3593f53 100644 --- a/src/main/java/me/william278/huskhomes2/commands/SpawnCommand.java +++ b/src/main/java/me/william278/huskhomes2/commands/SpawnCommand.java @@ -2,6 +2,7 @@ import me.william278.huskhomes2.HuskHomes; import me.william278.huskhomes2.MessageManager; +import me.william278.huskhomes2.data.DataManager; import me.william278.huskhomes2.teleport.TeleportManager; import org.bukkit.command.Command; import org.bukkit.entity.Player; @@ -11,6 +12,19 @@ public class SpawnCommand extends CommandBase { @Override protected void onCommand(Player p, Command command, String label, String[] args) { if (HuskHomes.getSettings().doSpawnCommand()) { + String spawnWarpName = HuskHomes.getSettings().getSpawnWarpName(); + + // Cross server spawn teleport + if (HuskHomes.getSettings().doCrossServerSpawn()) { + if (DataManager.warpExists(spawnWarpName)) { + TeleportManager.queueTimedTeleport(p, DataManager.getWarp(spawnWarpName)); + } else { + MessageManager.sendMessage(p, "error_spawn_undefined"); + } + return; + } + + // Server-based spawn teleport if (TeleportManager.getSpawnLocation() != null) { TeleportManager.queueTimedTeleport(p, TeleportManager.getSpawnLocation()); } else { diff --git a/src/main/java/me/william278/huskhomes2/config/Settings.java b/src/main/java/me/william278/huskhomes2/config/Settings.java index d710641a6..2d044e62a 100644 --- a/src/main/java/me/william278/huskhomes2/config/Settings.java +++ b/src/main/java/me/william278/huskhomes2/config/Settings.java @@ -80,6 +80,8 @@ public class Settings { // Spawn command settings private boolean doSpawnCommand; + private boolean doCrossServerSpawn; + private String crossServerSpawnWarpName; // Warp command settings private boolean doWarpCommand; @@ -180,6 +182,8 @@ public void reloadFromFile(FileConfiguration config) { this.checkVanishedPlayers = config.getBoolean("handle_vanished_players"); this.doSpawnCommand = config.getBoolean("spawn_command.enabled"); + this.doCrossServerSpawn = config.getBoolean("spawn_command.bungee_network_spawn.enabled"); + this.crossServerSpawnWarpName = config.getString("spawn_command.bungee_network_spawn.warp_name"); this.doWarpCommand = config.getBoolean("warp_command.enabled"); this.doPermissionRestrictedWarps = config.getBoolean("warp_command.permission_restrictions.require_permission"); @@ -317,6 +321,14 @@ public boolean doSpawnCommand() { return doSpawnCommand; } + public boolean doCrossServerSpawn() { + return doCrossServerSpawn; + } + + public String getSpawnWarpName() { + return crossServerSpawnWarpName; + } + public boolean doEconomy() { return doEconomy; } diff --git a/src/main/java/me/william278/huskhomes2/teleport/SettingHandler.java b/src/main/java/me/william278/huskhomes2/teleport/SettingHandler.java index 25ec2c67b..f7ae6c13b 100644 --- a/src/main/java/me/william278/huskhomes2/teleport/SettingHandler.java +++ b/src/main/java/me/william278/huskhomes2/teleport/SettingHandler.java @@ -57,6 +57,35 @@ public static void setHome(Location location, Player player, String name) { } } + // Set a new server spawn (override existing one if exists) + public static boolean setCrossServerSpawnWarp(Location location, Player player) { + String spawnWarpName = HuskHomes.getSettings().getSpawnWarpName(); + + // Delete the old spawn warp + if (DataManager.warpExists(spawnWarpName)) { + DataManager.deleteWarp(spawnWarpName); + if (HuskHomes.getSettings().doDynmap() && HuskHomes.getSettings().showWarpsOnDynmap()) { + DynMapIntegration.removeDynamicMapMarker(spawnWarpName); + } + } + + // Set a new warp for the spawn position + SetWarpConditions setWarpConditions = new SetWarpConditions(spawnWarpName); + if (setWarpConditions.areConditionsMet()) { + Warp spawnWarp = new Warp(location, HuskHomes.getSettings().getServerID(), spawnWarpName); + spawnWarp.setDescription(MessageManager.getRawMessage("spawn_warp_default_description")); + DataManager.addWarp(spawnWarp); + if (HuskHomes.getSettings().doDynmap() && HuskHomes.getSettings().showWarpsOnDynmap()) { + DynMapIntegration.addDynamicMapMarker(spawnWarp); + } + WarpCommand.Tab.updateWarpsTabCache(); + } else { + MessageManager.sendMessage(player, setWarpConditions.getConditionsNotMetReason()); + return false; + } + return true; + } + // Set a warp at the specified position public static void setWarp(Location location, Player player, String name) { SetWarpConditions setWarpConditions = new SetWarpConditions(name); diff --git a/src/main/resources/Languages/de-de.yml b/src/main/resources/Languages/de-de.yml index 561dc02a2..adc10604f 100644 --- a/src/main/resources/Languages/de-de.yml +++ b/src/main/resources/Languages/de-de.yml @@ -125,4 +125,5 @@ delete_confirmation_button: '&4[Confirm]' delete_all_homes_success: '&aSuccessfully deleted your &l%1%&r&a home(s).' delete_all_warps_success: '&aSuccessfully deleted all &l%1%&r&a server warp(s).' error_permission_restricted_warp: '&4Error: &cYou do not have permission to warp to %1%!' -teleporting_complete_console: '&7(Console teleported you to %1%)' \ No newline at end of file +teleporting_complete_console: '&7(Console teleported you to %1%)' +spawn_warp_default_description: 'The /spawn position of the server' \ No newline at end of file diff --git a/src/main/resources/Languages/en-gb.yml b/src/main/resources/Languages/en-gb.yml index 161adb24c..0f0bf897d 100644 --- a/src/main/resources/Languages/en-gb.yml +++ b/src/main/resources/Languages/en-gb.yml @@ -125,4 +125,5 @@ delete_confirmation_button: '&4[Confirm]' delete_all_homes_success: '&aSuccessfully deleted your &l%1%&r&a home(s).' delete_all_warps_success: '&aSuccessfully deleted all &l%1%&r&a server warp(s).' error_permission_restricted_warp: '&4Error: &cYou do not have permission to warp to %1%!' -teleporting_complete_console: '&7(Console teleported you to %1%)' \ No newline at end of file +teleporting_complete_console: '&7(Console teleported you to %1%)' +spawn_warp_default_description: 'The /spawn position of the server' \ No newline at end of file diff --git a/src/main/resources/Languages/it-it.yml b/src/main/resources/Languages/it-it.yml index 6f11529d5..d013eb792 100644 --- a/src/main/resources/Languages/it-it.yml +++ b/src/main/resources/Languages/it-it.yml @@ -125,4 +125,5 @@ delete_confirmation_button: '&4[Confirm]' delete_all_homes_success: '&aSuccessfully deleted your &l%1%&r&a home(s).' delete_all_warps_success: '&aSuccessfully deleted all &l%1%&r&a server warp(s).' error_permission_restricted_warp: '&4Error: &cYou do not have permission to warp to %1%!' -teleporting_complete_console: '&7(Console teleported you to %1%)' \ No newline at end of file +teleporting_complete_console: '&7(Console teleported you to %1%)' +spawn_warp_default_description: 'The /spawn position of the server' \ No newline at end of file diff --git a/src/main/resources/Languages/pl.yml b/src/main/resources/Languages/pl.yml index 028878211..9fa5f9234 100644 --- a/src/main/resources/Languages/pl.yml +++ b/src/main/resources/Languages/pl.yml @@ -125,4 +125,5 @@ delete_confirmation_button: '&4[Confirm]' delete_all_homes_success: '&aSuccessfully deleted your &l%1%&r&a home(s).' delete_all_warps_success: '&aSuccessfully deleted all &l%1%&r&a server warp(s).' error_permission_restricted_warp: '&4Error: &cYou do not have permission to warp to %1%!' -teleporting_complete_console: '&7(Console teleported you to %1%)' \ No newline at end of file +teleporting_complete_console: '&7(Console teleported you to %1%)' +spawn_warp_default_description: 'The /spawn position of the server' \ No newline at end of file diff --git a/src/main/resources/Languages/ru.yml b/src/main/resources/Languages/ru.yml index 44f32e661..e798fe6a7 100644 --- a/src/main/resources/Languages/ru.yml +++ b/src/main/resources/Languages/ru.yml @@ -125,4 +125,5 @@ delete_confirmation_button: '&4[Confirm]' delete_all_homes_success: '&aSuccessfully deleted your &l%1%&r&a home(s).' delete_all_warps_success: '&aSuccessfully deleted all &l%1%&r&a server warp(s).' error_permission_restricted_warp: '&4Error: &cYou do not have permission to warp to %1%!' -teleporting_complete_console: '&7(Console teleported you to %1%)' \ No newline at end of file +teleporting_complete_console: '&7(Console teleported you to %1%)' +spawn_warp_default_description: 'The /spawn position of the server' \ No newline at end of file diff --git a/src/main/resources/Languages/zh-tw.yml b/src/main/resources/Languages/zh-tw.yml index f7e09031f..efba2d6c6 100644 --- a/src/main/resources/Languages/zh-tw.yml +++ b/src/main/resources/Languages/zh-tw.yml @@ -125,4 +125,5 @@ delete_confirmation_button: '&4[Confirm]' delete_all_homes_success: '&aSuccessfully deleted your &l%1%&r&a home(s).' delete_all_warps_success: '&aSuccessfully deleted all &l%1%&r&a server warp(s).' error_permission_restricted_warp: '&4Error: &cYou do not have permission to warp to %1%!' -teleporting_complete_console: '&7(Console teleported you to %1%)' \ No newline at end of file +teleporting_complete_console: '&7(Console teleported you to %1%)' +spawn_warp_default_description: 'The /spawn position of the server' \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2a15b473b..6ac6bae0a 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -45,6 +45,9 @@ warp_command: format: 'huskhomes.warp.' spawn_command: enabled: true + bungee_network_spawn: + enabled: false + warp_name: 'spawn' position: world: x: