diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index c846075..3d1f7f2 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -28,7 +28,6 @@ import org.apache.commons.io.FileUtils; import org.bukkit.BanList; import org.bukkit.Bukkit; -import org.bukkit.Chunk; import org.bukkit.Difficulty; import org.bukkit.GameRule; import org.bukkit.Material; @@ -65,7 +64,7 @@ public NMSUtils nmsUtils; public PlayerUUIDCache playerUUIDCache; public String texturepacklink = null; - public CancellableTask resetTaskId; + public CancellableTask resetTask; public boolean reset = false; private String PREFIX; private String GUIPREFIX; @@ -107,6 +106,7 @@ private static final String CubesideMod_ModChannel = "cubesidemod:data"; private Scheduler scheduler; + private boolean isFolia = false; public static Challenges getPlugin() { return plugin; @@ -132,6 +132,7 @@ Class.forName("io.papermc.paper.threadedregions.scheduler.ScheduledTask"); getLogger().log(Level.INFO, "Folia found. Use Folia Scheduler"); scheduler = new FoliaScheduler(this); + isFolia = true; } catch (Throwable ignored) { getLogger().log(Level.INFO, "Bukkit found. Use Bukkit Scheduler"); scheduler = new BukkitScheduler(this); @@ -169,11 +170,9 @@ this.sbManager = new ScoreBoardManager(this); getScheduler().runGlobalDelayed(() -> { - World world = Bukkit.getWorld("world"); - if (plugin.getServerType() != ServerType.ADVENTURE) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); - } - MLGChallenge.checkMLGWorld(); + plugin.setDayLightCircle(false); + + //MLGChallenge.checkMLGWorld(); //FIXME Folia setPvP(Config.getBoolean("pvp")); if (plugin.getServerType() != ServerType.ADVENTURE) { plugin.getSBManager().initScoreboard(); @@ -486,14 +485,14 @@ public void startResetTask() { getLogger().info("Start Reset Task"); - resetTaskId = plugin.getScheduler().runGlobalDelayed(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"), 3 * 60 * 20); + resetTask = plugin.getScheduler().runGlobalDelayed(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"), 3 * 60 * 20); reset = true; } public void stopResetTask() { getLogger().info("Stop Reset Task"); - resetTaskId.cancel(); - resetTaskId = null; + resetTask.cancel(); + resetTask = null; reset = false; } @@ -525,7 +524,7 @@ public void setKeepInventory(Boolean value) { for (World w : plugin.getServer().getWorlds()) { if (w != null) { - w.setGameRule(GameRule.KEEP_INVENTORY, value); + getScheduler().run(() -> w.setGameRule(GameRule.KEEP_INVENTORY, value)); } } } @@ -537,7 +536,7 @@ public void setNaturalRegeneration(Boolean value) { for (World w : plugin.getServer().getWorlds()) { if (w != null) { - w.setGameRule(GameRule.NATURAL_REGENERATION, value); + getScheduler().run(() -> w.setGameRule(GameRule.NATURAL_REGENERATION, value)); } } } @@ -546,6 +545,14 @@ return Bukkit.getWorld("world").getGameRuleValue(GameRule.NATURAL_REGENERATION); } + public void setDayLightCircle(boolean value) { + for (World world : Bukkit.getWorlds()) { + if (world.getEnvironment() == World.Environment.NORMAL && plugin.getServerType() != ServerType.ADVENTURE) { + getScheduler().run(() -> world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, value)); + } + } + } + public void portPlayerToLobby(Player player) { if (plugin.getServerType() == ServerType.CHALLENGE || plugin.getServerType() == ServerType.CHALLENGE_LOAD) { GlobalApi.portOnlinePlayerToLocation(player.getName(), "challenge"); @@ -673,4 +680,8 @@ public Scheduler getScheduler() { return scheduler; } + + public boolean isFolia() { + return isFolia; + } } diff --git a/src/main/java/de/fanta/challenges/Timer.java b/src/main/java/de/fanta/challenges/Timer.java index fdfb6e9..2e0b970 100644 --- a/src/main/java/de/fanta/challenges/Timer.java +++ b/src/main/java/de/fanta/challenges/Timer.java @@ -78,13 +78,15 @@ sendIdleActionBar(); } for (Player pp : Bukkit.getOnlinePlayers()) { - for (final Entity entity : pp.getNearbyEntities(100, 100, 100)) { - if ((entity instanceof final Creature creature)) { - if ((creature.getTarget() != null) && creature.getTarget().equals(pp)) { - creature.setTarget(null); + plugin.getScheduler().runDelayedOnEntity(pp, () -> { + for (final Entity entity : pp.getNearbyEntities(100, 100, 100)) { + if ((entity instanceof final Creature creature)) { + if ((creature.getTarget() != null) && creature.getTarget().equals(pp)) { + creature.setTarget(null); + } } } - } + }, 1); } Bukkit.getPluginManager().callEvent(new TimerChangedEvent(false)); } 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 a12a0ae..c06045a 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/BridgeRaceChallengeEvent.java @@ -143,7 +143,7 @@ int BARRIER_POS = 20; int BARRIER_SIZE = 6; if (distanceToCenter >= BARRIER_POS) { //Outside border - p.teleport(getPlayerLocation(p).clone().add(0.5, 2, 0.5)); + p.teleportAsync(getPlayerLocation(p).clone().add(0.5, 2, 0.5)); } else if (distanceToCenter >= BARRIER_POS - 6) { //Inside border //Send barrier double barrierZ = spawnLocation.getZ() + BARRIER_POS * (posRelatedToCenter > 0 ? 1 : -1); @@ -253,7 +253,7 @@ setBedrock(getPlayerLocation(player).clone()); Location teleportLocation = getPlayerLocation(player).clone().add(0.5, 2, 0.5); teleportLocation.setYaw(-90); - plugin.getScheduler().runDelayedOnEntity(player, () -> player.teleport(teleportLocation), 1L); + plugin.getScheduler().runDelayedOnEntity(player, () -> player.teleportAsync(teleportLocation), 1L); } private static Location getPlayerLocation(Player player) { 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 89cda07..c03b25a 100644 --- a/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java +++ b/src/main/java/de/fanta/challenges/challenges/ChallengeEvents/DeathrunChallengeEvent.java @@ -165,13 +165,13 @@ } } else { World world = Bukkit.getWorld("world"); - world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers()); + plugin.getScheduler().run(() -> world.setGameRule(GameRule.MAX_ENTITY_CRAMMING, Bukkit.getServer().getMaxPlayers())); plugin.getScheduler().runGlobalDelayed(() -> { for (Player pp : Bukkit.getOnlinePlayers()) { plugin.getScoreManager().join(new ChallengePlayer(pp.getUniqueId())); Location spawn = world.getSpawnLocation(); spawn.setYaw(-90f); - pp.teleport(spawn); + pp.teleportAsync(spawn); } }, 1L); startUpdateTask(); diff --git a/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java b/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java index 44cc820..df5b6e6 100644 --- a/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/FloorIsLavaChallenge.java @@ -10,7 +10,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; @@ -32,53 +31,38 @@ int newy = newLoc.getBlockY(); int newz = newLoc.getBlockZ(); if (newx != oldx || newy != oldy || newz != oldz) { - new BukkitRunnable() { - @Override - public void run() { - Block b = p.getLocation().subtract(0, 1, 0).getBlock(); - if (!b.isPassable() && !LAVA_BLOCKS.contains(b)) { - LAVA_BLOCKS.add(b); - setMagma(b, b.getType()); - } + Block b = p.getLocation().subtract(0, 1, 0).getBlock(); + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + if (!b.isPassable() && !LAVA_BLOCKS.contains(b)) { + LAVA_BLOCKS.add(b); + setMagma(b, b.getType()); } - }.runTaskLater(plugin, 1L); + }, 1L); } } } } public static void setMagma(Block b, Material old) { - new BukkitRunnable() { - - @Override - public void run() { - b.setType(Material.MAGMA_BLOCK); - setLava(b, old); - } - }.runTaskLater(plugin, 60L); + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + b.setType(Material.MAGMA_BLOCK); + setLava(b, old); + }, 60L); } public static void setLava(Block b, Material old) { - new BukkitRunnable() { - - @Override - public void run() { - b.setType(Material.LAVA); - setOld(b, old); - } - }.runTaskLater(plugin, 100L); + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + b.setType(Material.LAVA); + setOld(b, old); + }, 100L); } public static void setOld(Block b, Material old) { - new BukkitRunnable() { - - @Override - public void run() { - if (b.getType() == Material.LAVA || b.getType() == Material.OBSIDIAN || b.getType() == Material.COBBLESTONE || b.getType() == Material.STONE) { - b.setType(old); - } - LAVA_BLOCKS.remove(b); + plugin.getScheduler().runLocalDelayed(b.getLocation(), () -> { + if (b.getType() == Material.LAVA || b.getType() == Material.OBSIDIAN || b.getType() == Material.COBBLESTONE || b.getType() == Material.STONE) { + b.setType(old); } - }.runTaskLater(plugin, 200L); + LAVA_BLOCKS.remove(b); + }, 200L); } } diff --git a/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java b/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java index 63dc784..00ca4e4 100644 --- a/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/MLGChallenge.java @@ -190,7 +190,7 @@ Location newloc = mlgLocation.clone(); newloc.add(0.5, 0, 0.5); newloc.setY(100 + random.nextInt(40)); - p.teleport(newloc); + p.teleportAsync(newloc); } private static void mlgResult(Player p, boolean dead) { @@ -224,7 +224,7 @@ } private static void mlgBack(final Player p, Location loc, ItemStack[] content) { - p.teleport(loc); + p.teleportAsync(loc); p.getInventory().setContents(content); plugin.getScheduler().runDelayedOnEntity(p, () -> p.setInvulnerable(false), 60L); } diff --git a/src/main/java/de/fanta/challenges/challenges/ManHunt.java b/src/main/java/de/fanta/challenges/challenges/ManHunt.java index 742ec1d..bf8395f 100644 --- a/src/main/java/de/fanta/challenges/challenges/ManHunt.java +++ b/src/main/java/de/fanta/challenges/challenges/ManHunt.java @@ -2,9 +2,9 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.events.TimerChangedEvent; +import de.fanta.challenges.schedular.CancellableTask; import de.fanta.challenges.utils.ChatUtil; import de.fanta.challenges.utils.Config; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.NamespacedKey; @@ -14,7 +14,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; @@ -37,7 +36,7 @@ public class ManHunt implements Listener { private static final Challenges plugin = Challenges.getPlugin(); - private int taskId = -1; + private CancellableTask task; private final HashMap locationList = new HashMap<>(); private static final NamespacedKey hunterItemKey = new NamespacedKey(plugin, "HunterItem"); private static ItemStack hunterItem; @@ -220,11 +219,12 @@ } } public void startUpdateTask() { - taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::tick, 1L, 1L); + task = plugin.getScheduler().runGlobalAtFixedRate(this::tick, 1L, 1L); } public void stopUpdateTask() { - plugin.getServer().getScheduler().cancelTask(taskId); + task.cancel(); + task = null; } private void tick() { diff --git a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java index 0a30c47..020eecf 100644 --- a/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java +++ b/src/main/java/de/fanta/challenges/challenges/WorldBorderLevelChallenge.java @@ -45,11 +45,9 @@ Player p = e.getPlayer(); if (plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL && !plugin.getVanish().isVanish(p)) { if (Config.getBoolean("worldborderlevel")) { - plugin.getScheduler().runDelayedOnEntity(p, () -> { - Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); - plugin.saveConfig(); - xpSync(e.getPlayer(), false); - }, 1L); + Config.setValue("worldborderlevelxp", e.getPlayer().getExp()); + plugin.saveConfig(); + xpSync(e.getPlayer(), false); } } } @@ -84,7 +82,7 @@ @EventHandler public void onRespawn(PlayerRespawnEvent e) { if (Config.getBoolean("worldborderlevel")) { - plugin.getScheduler().runDelayedOnEntity(e.getPlayer(), WorldBorderLevelChallenge::borderSync, 1L); + borderSync(); } } @@ -104,6 +102,9 @@ 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(); @@ -165,47 +166,45 @@ } private void xpSync(Player p, Boolean borderupdate) { - plugin.getScheduler().runDelayedOnEntity(p, () -> { - for (Player player : Bukkit.getOnlinePlayers()) { - if (player != p) { - player.setLevel(Config.getInt("worldborderlevellevel")); - player.setExp((float) Config.getDouble("worldborderlevelxp")); - } + for (Player player : Bukkit.getOnlinePlayers()) { + if (player != p) { + player.setLevel(Config.getInt("worldborderlevellevel")); + player.setExp((float) Config.getDouble("worldborderlevelxp")); } - if (borderupdate) { - borderSync(); - } - }, 1L); + } + if (borderupdate) { + borderSync(); + } } public static void borderSync() { int level = Config.getInt("worldborderlevellevel"); - - for (Player player : Bukkit.getOnlinePlayers()) { - if (level > 0) { - int borderMultiplayer = Config.getInt("worldborderlevelbordermultiplier"); - worldBorder.setSize(level * borderMultiplayer); - netherBorder.setSize(level * borderMultiplayer); - endBorder.setSize(level * borderMultiplayer); - } else { - worldBorder.setSize(1); - netherBorder.setSize(1); - endBorder.setSize(1); + plugin.getScheduler().runGlobalDelayed(() -> { + for (Player player : Bukkit.getOnlinePlayers()) { + if (level > 0) { + int borderMultiplayer = Config.getInt("worldborderlevelbordermultiplier"); + worldBorder.setSize(level * borderMultiplayer); + netherBorder.setSize(level * borderMultiplayer); + endBorder.setSize(level * borderMultiplayer); + } else { + worldBorder.setSize(1); + netherBorder.setSize(1); + endBorder.setSize(1); + } + if (player.getWorld().getName().equals("world")) { + player.setWorldBorder(worldBorder); + } else if (player.getWorld().getName().equals("world_nether")) { + player.setWorldBorder(netherBorder); + } else { + player.setWorldBorder(endBorder); + } } - if (player.getWorld().getName().equals("world")) { - player.setWorldBorder(worldBorder); - } else if (player.getWorld().getName().equals("world_nether")) { - player.setWorldBorder(netherBorder); - } else { - player.setWorldBorder(endBorder); - } - } - World world = Bukkit.getWorld("world"); - world.getWorldBorder().setCenter(world.getSpawnLocation()); + World world = Bukkit.getWorld("world"); + world.getWorldBorder().setCenter(world.getSpawnLocation()); - World nether = Bukkit.getWorld("world_nether"); - nether.getWorldBorder().setCenter(nether.getSpawnLocation()); - + World nether = Bukkit.getWorld("world_nether"); + nether.getWorldBorder().setCenter(nether.getSpawnLocation()); + }, 1); } } diff --git a/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java b/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java index 2e7b371..a917347 100644 --- a/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java +++ b/src/main/java/de/fanta/challenges/commands/NetherToggleCommand.java @@ -33,24 +33,27 @@ if (enable) { if (!Config.getBoolean("nether.enabled")) { Config.setValue("nether.enabled", true); - for (Player pp : Bukkit.getOnlinePlayers()) { - Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - World world = spawn.getWorld(); - for (int x = spawn.getBlockX() - 2; x <= spawn.getBlockX() + 2; x++) { - for (int z = spawn.getBlockZ() - 2; z <= spawn.getBlockZ() + 2; z++) { - for (int y = spawn.getBlockY(); y <= spawn.getBlockY() + 3; y++) { - world.getBlockAt(x, y, z).setType(Material.AIR); - world.getBlockAt(x, y, spawn.getBlockZ() + 3).setType(Material.SLIME_BLOCK); - world.getBlockAt(x, y, spawn.getBlockZ() - 3).setType(Material.SLIME_BLOCK); - world.getBlockAt(spawn.getBlockX() + 3, y, z).setType(Material.SLIME_BLOCK); - world.getBlockAt(spawn.getBlockX() - 3, y, z).setType(Material.SLIME_BLOCK); - } - world.getBlockAt(x, spawn.getBlockY(), z).setType(Material.SLIME_BLOCK); - world.getBlockAt(x, spawn.getBlockY() - 1, z).setType(Material.BEDROCK); - world.getBlockAt(x, spawn.getBlockY() + 4, z).setType(Material.SLIME_BLOCK); + + Location spawn = Bukkit.getWorlds().get(1).getSpawnLocation(); + World world = spawn.getWorld(); + for (int x = spawn.getBlockX() - 2; x <= spawn.getBlockX() + 2; x++) { + for (int z = spawn.getBlockZ() - 2; z <= spawn.getBlockZ() + 2; z++) { + for (int y = spawn.getBlockY(); y <= spawn.getBlockY() + 3; y++) { + world.getBlockAt(x, y, z).setType(Material.AIR); + world.getBlockAt(x, y, spawn.getBlockZ() + 3).setType(Material.SLIME_BLOCK); + world.getBlockAt(x, y, spawn.getBlockZ() - 3).setType(Material.SLIME_BLOCK); + world.getBlockAt(spawn.getBlockX() + 3, y, z).setType(Material.SLIME_BLOCK); + world.getBlockAt(spawn.getBlockX() - 3, y, z).setType(Material.SLIME_BLOCK); } + world.getBlockAt(x, spawn.getBlockY(), z).setType(Material.SLIME_BLOCK); + world.getBlockAt(x, spawn.getBlockY() - 1, z).setType(Material.BEDROCK); + world.getBlockAt(x, spawn.getBlockY() + 4, z).setType(Material.SLIME_BLOCK); } - pp.teleport(spawn); + } + + + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.teleportAsync(spawn); } ChatUtil.sendTitleToAll("Nether Challenge", "Nether-Modus aktiviert", ChatUtil.GREEN); } else { diff --git a/src/main/java/de/fanta/challenges/commands/VillageCommand.java b/src/main/java/de/fanta/challenges/commands/VillageCommand.java index 1253cf2..a527727 100644 --- a/src/main/java/de/fanta/challenges/commands/VillageCommand.java +++ b/src/main/java/de/fanta/challenges/commands/VillageCommand.java @@ -62,7 +62,7 @@ Bukkit.getWorlds().get(0).setSpawnLocation(villagetop); ChatUtil.sendNormalMessage(player, "Dorf: " + ChatUtil.BLUE + x + " " + y + " " + z); for (Player pp : Bukkit.getOnlinePlayers()) { - pp.teleport(villagetop); + pp.teleportAsync(villagetop); ChatUtil.sendNormalMessage(pp, "Dorfspawn gesetzt!"); } if (plugin.getServerType() == ServerType.CHALLENGE) { diff --git a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java index 9373c0a..728d8ef 100644 --- a/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/event/EventStartCommand.java @@ -1,7 +1,6 @@ package de.fanta.challenges.commands.event; import de.fanta.challenges.Challenges; -import de.fanta.challenges.ServerType; import de.fanta.challenges.events.ChallengeEventStatusChangedEvent; import de.fanta.challenges.scoreboard.ChallengePlayer; import de.fanta.challenges.teams.ChallengeTeam; @@ -11,9 +10,7 @@ import de.iani.cubesideutils.bukkit.commands.SubCommand; import de.iani.cubesideutils.commands.ArgsParser; import org.bukkit.Bukkit; -import org.bukkit.GameRule; import org.bukkit.OfflinePlayer; -import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -43,10 +40,8 @@ if (j <= 0) { task.cancel(); - World world = Bukkit.getWorld("world"); - if (plugin.getServerType() != ServerType.ADVENTURE) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); - } + plugin.setDayLightCircle(true); + for (Player pp : Bukkit.getOnlinePlayers()) { pp.getInventory().removeItem(TeamUtils.selctItem()); } @@ -63,7 +58,7 @@ if (team.getSpawn() != null) { for (OfflinePlayer teamofflineplayer : TeamUtils.getPlayersInTeam(team)) { if (teamofflineplayer instanceof Player teamplayer) { - teamplayer.teleport(team.getSpawn()); + teamplayer.teleportAsync(team.getSpawn()); } } } diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java index f0a9964..b409896 100644 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java +++ b/src/main/java/de/fanta/challenges/commands/timer/TimerPauseCommand.java @@ -29,10 +29,7 @@ } if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { if (plugin.getTimer().isRunning()) { - World world = Bukkit.getWorld("world"); - if (plugin.getServerType() != ServerType.ADVENTURE) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); - } + plugin.setDayLightCircle(false); plugin.getTimer().stopTimer(); ChatUtil.sendBrodcastMessage(ChatUtil.RED + "Der Timer wurde angehalten"); if (plugin.getServerType() == ServerType.CHALLENGE) { diff --git a/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java b/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java index 7ce7957..645d028 100644 --- a/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java +++ b/src/main/java/de/fanta/challenges/commands/timer/TimerStartCommand.java @@ -29,10 +29,7 @@ } if (plugin.isEditor((Player) sender) || sender.hasPermission("Challenges.editor.override")) { if (!plugin.getTimer().isRunning()) { - World world = Bukkit.getWorld("world"); - if (plugin.getServerType() != ServerType.ADVENTURE) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); - } + plugin.setDayLightCircle(true); plugin.getTimer().startTimer(); if (!Config.getBoolean("editsettings")) { if (!plugin.isCubesideStatisticsInstalled()) { diff --git a/src/main/java/de/fanta/challenges/guis/ResetGui.java b/src/main/java/de/fanta/challenges/guis/ResetGui.java index cb6d679..c464226 100644 --- a/src/main/java/de/fanta/challenges/guis/ResetGui.java +++ b/src/main/java/de/fanta/challenges/guis/ResetGui.java @@ -38,7 +38,7 @@ int slot = event.getSlot(); if (slot == RESET_INDEX) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"); + plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); } } diff --git a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java index 5e37bd0..8d3eeb8 100644 --- a/src/main/java/de/fanta/challenges/guis/TeleportGUI.java +++ b/src/main/java/de/fanta/challenges/guis/TeleportGUI.java @@ -82,10 +82,10 @@ Player pp = playerPerSlot.get(slot); if (pp != null && pp.isOnline()) { if (event.isLeftClick()) { - player.teleport(pp.getLocation()); + player.teleportAsync(pp.getLocation()); ChatUtil.sendNormalMessage(player, "Du wurdest zu " + pp.getName() + " teleportiert!"); } else if (event.isRightClick()) { - pp.teleport(player.getLocation()); + pp.teleportAsync(player.getLocation()); ChatUtil.sendNormalMessage(player, pp.getName() + " wurde zu dir teleportiert!"); } player.closeInventory(); diff --git a/src/main/java/de/fanta/challenges/guis/TimerGui.java b/src/main/java/de/fanta/challenges/guis/TimerGui.java index 063890c..cb37bb0 100644 --- a/src/main/java/de/fanta/challenges/guis/TimerGui.java +++ b/src/main/java/de/fanta/challenges/guis/TimerGui.java @@ -72,12 +72,10 @@ rebuildInventory(); } case START_INDEX -> { - World world = Bukkit.getWorld("world"); if (plugin.getTimer().isRunning()) { plugin.getTimer().stopTimer(); - if (plugin.getServerType() != ServerType.ADVENTURE) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false); - } + plugin.setDayLightCircle(false); + if (!Config.getBoolean("editsettings")) { Config.setValue("editsettings", true, false); plugin.getLogger().info("Diese Challenge ist kein SpeedRun mehr da der Timer bearbeitet wurde."); @@ -94,9 +92,7 @@ } plugin.getStatistics().addSpeedRunPlayed(); } - if (plugin.getServerType() != ServerType.ADVENTURE) { - world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, true); - } + plugin.setDayLightCircle(true); ChatUtil.sendTitleToAll("Timer", ChatUtil.GREEN + "Der Timer wurde gestartet.", ChatUtil.BLUE, 10, 60, 10, true); } player.closeInventory(); diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java index a7f5223..0e703a0 100644 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java +++ b/src/main/java/de/fanta/challenges/guis/settingsgui/ChallengesGui.java @@ -171,7 +171,7 @@ new WorldBorderLevelChallenge(); WorldBorderLevelChallenge.borderSync(); for (Player pp : Bukkit.getOnlinePlayers()) { - pp.teleport(pp.getWorld().getSpawnLocation()); + pp.teleportAsync(pp.getWorld().getSpawnLocation()); } ChatUtil.sendTitleToAll("Challenge", "World Border Level aktiviert", ChatUtil.GREEN); } diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index 8be974d..41c70fb 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -83,7 +83,8 @@ if (!plugin.getTimer().isRunning() && player.getGameMode() == GameMode.SURVIVAL) { Location spawn = e.getPlayer().getWorld().getSpawnLocation(); if (playerloc.distance(spawn) > 20) { - player.teleport(spawn); + plugin.getScheduler().runAsync(() -> player.teleportAsync(spawn)); + ChatUtil.sendWarningMessage(player, "Du kommst erst vom Spawn weg, wenn der Timer gestartet wurde!"); } } @@ -125,7 +126,7 @@ endspawn.getWorld().getBlockAt(x, endspawn.getBlockY() - 1, z).setType(Material.OBSIDIAN); } } - e.getPlayer().teleport(endspawn); + e.getPlayer().teleportAsync(endspawn); e.setCancelled(true); } } else { diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 4ecf669..13ea2cf 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -38,7 +38,7 @@ if (Config.getBoolean("nether.enabled") && !p.hasPlayedBefore()) { Location netherspawn = Bukkit.getWorlds().get(1).getSpawnLocation(); - p.teleport(netherspawn); + p.teleportAsync(netherspawn); } if (!plugin.getVanish().isVanish(p)) { @@ -47,12 +47,14 @@ plugin.addstatisticPlayers(p.getUniqueId()); if (plugin.getServerType() != ServerType.ADVENTURE) { if (!DeathrunChallengeEvent.getDeadPlayer().contains(p.getUniqueId())) { - plugin.getScoreManager().join(new ChallengePlayer(p.getUniqueId())); - plugin.getSBManager().setScoreboardtoPlayer(p); - plugin.getSBManager().updateEventScoreboard(); - if (!Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(new ChallengePlayer(p.getUniqueId())) == 0) { - plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), 0); - } + plugin.getScheduler().run(() -> { + plugin.getScoreManager().join(new ChallengePlayer(p.getUniqueId())); + plugin.getSBManager().setScoreboardtoPlayer(p); + plugin.getSBManager().updateEventScoreboard(); + if (!Config.getBoolean("event.teams") && plugin.getScoreManager().getScores() != null && plugin.getScoreManager().getScore(new ChallengePlayer(p.getUniqueId())) == 0) { + plugin.getScoreManager().updateScore(new ChallengePlayer(e.getPlayer().getUniqueId()), 0); + } + }); } } if (plugin.getCurrentEditor() == null) { @@ -122,7 +124,8 @@ plugin.startResetTask(); } else { if (!plugin.isWaitingForShutdown()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm"); + plugin.getScheduler().run(() -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "reset confirm")); + } } } diff --git a/src/main/java/de/fanta/challenges/teams/TeamListener.java b/src/main/java/de/fanta/challenges/teams/TeamListener.java index 1bd9599..cbe4625 100644 --- a/src/main/java/de/fanta/challenges/teams/TeamListener.java +++ b/src/main/java/de/fanta/challenges/teams/TeamListener.java @@ -154,7 +154,7 @@ TeamUtils.setAllPlayerWithoutTeamToTeam(); plugin.getScoreManager().updateScore(TeamUtils.getPlayerTeam(e.getPlayer()), 0); if (TeamUtils.getPlayerTeam(e.getPlayer()) != null && TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn() != null) { - e.getPlayer().teleport(TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn()); + e.getPlayer().teleportAsync(TeamUtils.getPlayerTeam(e.getPlayer()).getSpawn()); } } } @@ -185,7 +185,7 @@ return; } - p.teleport(location); + p.teleportAsync(location); }, 1L); } diff --git a/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java b/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java index 76e1eed..a531eef 100644 --- a/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java +++ b/src/main/java/de/fanta/challenges/utils/CoordsTargeter.java @@ -2,6 +2,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.events.TimerChangedEvent; +import de.fanta.challenges.schedular.CancellableTask; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.Vibration; @@ -18,7 +19,7 @@ private static final Challenges plugin = Challenges.getPlugin(); private static final HashMap locationMap = new HashMap<>(); - private int taskId = -1; + private CancellableTask task; @EventHandler public void onTimer(TimerChangedEvent e) { @@ -67,11 +68,14 @@ } public void startUpdateTask() { - taskId = plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, this::updateTargeter, 5L, 5L); + task = plugin.getScheduler().runGlobalAtFixedRate(this::updateTargeter, 5L, 5L); } public void stopUpdateTask() { - plugin.getServer().getScheduler().cancelTask(taskId); + if (task != null) { + task.cancel(); + } + task = null; } public static void addLocation(UUID uuid, Location location) { diff --git a/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java b/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java index 8b250ce..6a2b58d 100644 --- a/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java +++ b/src/main/java/de/fanta/challenges/utils/CubesideModUtils.java @@ -13,7 +13,7 @@ public static void sendFlashScreenToCubesideMod(Challenges plugin, Player player, int duration, ChatColor color) { - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { + plugin.getScheduler().runDelayedOnEntity(player, () -> { if (player == null) { return; } diff --git a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java index 0f1a243..134de87 100644 --- a/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java +++ b/src/main/java/de/fanta/challenges/utils/SaveWorldUtils.java @@ -24,6 +24,14 @@ } public static void saveWorld(@Nullable Player player, String saveID, SaveSlot saveSlot) { + if (plugin.isFolia()) { + if (player != null) { + ChatUtil.sendErrorMessage(player, "Auf diesem Server können aktuell keine Welten gespeichert werden!"); + } + return; + } + + try { if (plugin.getServerType() == ServerType.CHALLENGE_EVENT) { if (player != null) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 861e858..efdd8bf 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ version: ${project.version} author: ${project.author} api-version: 1.16 -depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache, LibsDisguises] +depend: [CubesideUtils, VanishNoPacket, GlobalPort, CubesideNMSUtils, PlayerUUIDCache] softdepend: [CubesideStatistics] folia-supported: true commands: