diff --git a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java index cad9bfb..5500110 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -8,6 +8,7 @@ import de.fanta.challenges.utils.ChatSkullAPI.ChatSkull; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.Config; +import de.fanta.challenges.utils.CoordsTargeter; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; import org.bukkit.GameMode; @@ -32,6 +33,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerPortalEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataContainer; @@ -78,13 +80,22 @@ int BARRIER_POS = 15; int BARRIER_SIZE = 6; if (distanceToCenter >= BARRIER_POS) { //Outside border - p.damage(0.5); + ChatUtil.sendTitleToPlayer(p, "" + ChatUtil.RED + ChatColor.BOLD + "⟲ ⟲ ⟲ ⟲", "Kehre zurück auf die Strecke!", ChatUtil.RED, 0, 20, 0, true); + resetBarrier(p, world, barrierLocations); + CoordsTargeter.addLocation(p.getUniqueId(), new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), spawnLocation.getZ())); + if (distanceToCenter >= BARRIER_POS + 3) { + p.damage(0.5); + } } else if (distanceToCenter >= BARRIER_POS - 6) { //Inside border //Send barrier double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); Location loc = new Location(p.getWorld(), playerLoc.getX() - BARRIER_SIZE / 2d, playerLoc.getY() - BARRIER_SIZE / 2d, barrierZ); resetBarrier(p, world, barrierLocations); + + if (CoordsTargeter.containsLocation(p.getUniqueId())) { + CoordsTargeter.removeLocation(p.getUniqueId()); + } for (int y = 0; y < BARRIER_SIZE; y++) { for (int x = 0; x < BARRIER_SIZE; x++) { Location blockLoc = loc.clone().add(x, y, 0); @@ -119,6 +130,7 @@ Player p = e.getEntity(); if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { deadPlayer.add(p.getUniqueId()); + CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); plugin.getSBManager().removeScoreboard(p); if (plugin.getSBManager().countScoreboardPlayers() == 0) { plugin.getTimer().stopTimer(); @@ -138,6 +150,9 @@ public void onTimerChange(TimerChangedEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrun")) { if (!e.isRunning()) { + for (Player player : Bukkit.getOnlinePlayers()) { + CoordsTargeter.removeLocation(player.getUniqueId()); + } stopUpdateTask(); for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); @@ -231,6 +246,13 @@ } @EventHandler + public void onPlayerLeave(PlayerQuitEvent e) { + if (Objects.equals(Config.getString("event.type"), "deathrun")) { + CoordsTargeter.removeLocation(e.getPlayer().getUniqueId()); + } + } + + @EventHandler public void onPlantBreak(BlockBreakEvent e) { if (Objects.equals(Config.getString("event.type"), "deathrun") && plugin.getTimer().isRunning()) { if (e.getBlock().getType() != Material.GRASS) {