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 64d019b..39d76c6 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -45,28 +45,14 @@ private final Map> currentBarrier = new HashMap<>(); private static final Material barrierBlock = Material.GLASS; + private int taskId = -1; + @EventHandler public void onMove(PlayerMoveEvent e) { Player p = e.getPlayer(); World world = p.getWorld(); if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun") && plugin.getTimer().isRunning() && !plugin.getVanish().isVanish(p) && p.getGameMode() != GameMode.SPECTATOR) { if (!deadPlayer.contains(p.getUniqueId().toString())) { - if (!e.getTo().equals(e.getFrom())) { - int distance = (int) p.getLocation().toVector().subtract(p.getWorld().getSpawnLocation().toVector()).length(); - ScoreManager scoreManager = plugin.getScoreManager(); - scoreManager.setScore(new ChallengePlayer(p), distance); - - BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { - BossBar newBossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + " Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke", BarColor.GREEN, BarStyle.SOLID); - newBossBar.setVisible(true); - newBossBar.addPlayer(p); - return newBossBar; - }); - - bossBar.setTitle(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + " Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke"); - - } - Location playerLoc = p.getLocation(); double posRelatedToCenter = playerLoc.getZ() - spawnLocation.getZ(); double distanceToCenter = Math.abs(posRelatedToCenter); @@ -138,6 +124,7 @@ public void onTimerChange(TimerChangedEvent e) { if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { if (!e.isRunning()) { + stopUpdateTask(); for (Scorable scorable : plugin.getScoreManager().getByPositon(1)) { OfflinePlayer p = (Bukkit.getServer().getOfflinePlayer(scorable.getName())); if (p.isOnline()) { @@ -156,6 +143,7 @@ spawn.setYaw(-90f); pp.teleport(spawn); } + startUpdateTask(); } } } @@ -227,4 +215,34 @@ public static List getDeadPlayer() { return deadPlayer; } + + public void startUpdateTask() { + taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::updateScoreAndBossBar, 1L, 1L); + } + + public void stopUpdateTask() { + plugin.getServer().getScheduler().cancelTask(taskId); + } + + private void updateScoreAndBossBar() { + if (Objects.equals(plugin.getConfig().getString("event.type"), "deathrun")) { + for (Player p : plugin.getVanish().getPlayerListWithoutVanishPlayers()) { + if (!deadPlayer.contains(p.getUniqueId().toString())) { + int distance = (int) p.getLocation().toVector().subtract(p.getWorld().getSpawnLocation().toVector()).length(); + ScoreManager scoreManager = plugin.getScoreManager(); + scoreManager.setScore(new ChallengePlayer(p), distance); + + BossBar bossBar = bossBarMap.computeIfAbsent(p, player -> { + BossBar newBossBar = Bukkit.createBossBar(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + "Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke", BarColor.GREEN, BarStyle.SOLID); + newBossBar.setVisible(true); + newBossBar.addPlayer(p); + return newBossBar; + }); + + bossBar.setTitle(ChatUtil.GREEN + "Position: " + ChatUtil.BLUE + (scoreManager.getPosition(new ChallengePlayer(p))) + ChatUtil.RED + " | " + ChatUtil.GREEN + "Distanz zum Spawn: " + ChatUtil.BLUE + distance + " Blöcke"); + + } + } + } + } }