diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java index 46a6b01..6b7925e 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java @@ -35,7 +35,9 @@ import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.inventory.ItemStack; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -127,7 +129,12 @@ if (isLoaded()) { createPlayerLocation(e.getPlayer()); - teleportPlayer(e.getPlayer()); + } + } + + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + if (isLoaded()) { + teleportPlayer(e.getPlayer(), e); } } @@ -169,7 +176,7 @@ if (isLoaded() && !isRunning()) { if (p.getLocation().getY() <= 0) { - teleportPlayer(p); + teleportPlayer(p, null); } } } @@ -242,7 +249,7 @@ waitForAll.get(); for (Player pp : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { createPlayerLocation(pp); - plugin.getScheduler().runLocalDelayed(playerSpawnLocations.get(pp.getUniqueId()), () -> teleportPlayer(pp), 1L); + plugin.getScheduler().runLocalDelayed(playerSpawnLocations.get(pp.getUniqueId()), () -> teleportPlayer(pp, null), 1L); } load = true; } catch (InterruptedException | ExecutionException e) { @@ -269,11 +276,17 @@ } } - private static void teleportPlayer(Player player) { + private static void teleportPlayer(Player player, @Nullable PlayerSpawnLocationEvent event) { setBedrock(getPlayerLocation(player).clone()); Location teleportLocation = getPlayerLocation(player).clone().add(0.5, 2, 0.5); teleportLocation.setYaw(-90); - plugin.getScheduler().runDelayedOnEntity(player, () -> player.teleportAsync(teleportLocation), 1L); + plugin.getScheduler().runDelayedOnEntity(player, () -> { + if (event != null) { + event.setSpawnLocation(teleportLocation); + } else { + player.teleportAsync(teleportLocation); + } + }, 1L); } private static Location getPlayerLocation(Player player) { diff --git a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java index 020eecf..7c72b59 100644 --- a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java @@ -23,6 +23,7 @@ import org.bukkit.event.world.PortalCreateEvent; import org.bukkit.event.world.SpawnChangeEvent; import org.bukkit.generator.structure.Structure; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; import java.util.Objects; @@ -102,9 +103,7 @@ Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); plugin.saveConfig(); } - if (!p.hasPlayedBefore()) { - p.teleportAsync(p.getWorld().getSpawnLocation()); - } + p.setLevel(Config.getInt("worldborderlevellevel")); p.setExp((float) Config.getDouble("worldborderlevelxp")); borderSync(); @@ -112,6 +111,16 @@ } @EventHandler + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("worldborderlevel")) { + if (!p.hasPlayedBefore()) { + e.setSpawnLocation(p.getWorld().getSpawnLocation()); + } + } + } + + @EventHandler public void onWorldChange(PlayerChangedWorldEvent e) { if (Config.getBoolean("worldborderlevel")) { borderSync(); diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index a629fd6..cf31d11 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -19,6 +19,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.spigotmc.event.player.PlayerSpawnLocationEvent; public class QuitJoinListener implements Listener { @@ -36,11 +37,6 @@ p.setResourcePack(plugin.texturepacklink, ""); } - if (Config.getBoolean("nether.enabled") && !p.hasPlayedBefore()) { - Location netherspawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - p.teleportAsync(netherspawn); - } - if (!plugin.getVanish().isVanish(p)) { ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat die Lobby betreten! " + ChatUtil.YELLOW + "[" + (Bukkit.getServer().getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers()) + "/" + Bukkit.getServer().getMaxPlayers() + "]"); e.setJoinMessage(null); @@ -79,6 +75,15 @@ } @EventHandler + public void onPlayerSpawn(PlayerSpawnLocationEvent e) { + Player p = e.getPlayer(); + if (Config.getBoolean("nether.enabled") && !p.hasPlayedBefore()) { + Location netherspawn = Bukkit.getWorlds().get(1).getSpawnLocation(); + e.setSpawnLocation(netherspawn); + } + } + + @EventHandler public void onPlayerLogin(PlayerLoginEvent e) { if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { if (!Config.getBoolean("firsttimerstart") && Bukkit.getOnlinePlayers().size() == 0) {