diff --git a/.idea/.gitignore b/.idea/.gitignore index f0db0b6..d36d65e 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -2,4 +2,10 @@ /dataSources/ # Datasource local storage ignored files -/dataSources.local.xml \ No newline at end of file +/dataSources.local.xml + +*.xml +*.iml +!vcs.xml +!compiler.xml +!codeStyles/** \ No newline at end of file diff --git a/.idea/HubParkour.iml b/.idea/HubParkour.iml deleted file mode 100644 index d6ebd48..0000000 --- a/.idea/HubParkour.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml deleted file mode 100644 index e1f9849..0000000 --- a/.idea/dataSources.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - sqlite.xerial - true - org.sqlite.JDBC - jdbc:sqlite:database.db - - - \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml deleted file mode 100644 index a04e4e5..0000000 --- a/.idea/discord.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 740d12d..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index aa09f3c..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 49d0b26..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml deleted file mode 100644 index 311c7ab..0000000 --- a/.idea/sqldialects.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index e96534f..0000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 34e68fb..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,1261 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hubparkour-api/hubparkour-api.iml b/hubparkour-api/hubparkour-api.iml new file mode 100644 index 0000000..a589521 --- /dev/null +++ b/hubparkour-api/hubparkour-api.iml @@ -0,0 +1,13 @@ + + + + + + + SPIGOT + + 1 + + + + \ No newline at end of file diff --git a/hubparkour-api/pom.xml b/hubparkour-api/pom.xml index 4190c6c..7944e48 100644 --- a/hubparkour-api/pom.xml +++ b/hubparkour-api/pom.xml @@ -48,6 +48,10 @@ spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + tcoded-releases + https://repo.tcoded.com/releases + @@ -57,6 +61,12 @@ 1.14-R0.1-SNAPSHOT provided + + com.tcoded + FoliaLib + 0.5.1 + compile + diff --git a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/BackendAPI.java b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/BackendAPI.java index 8da8ede..b496159 100644 --- a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/BackendAPI.java +++ b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/BackendAPI.java @@ -1,5 +1,6 @@ package me.block2block.hubparkour.api; +import com.tcoded.folialib.impl.PlatformScheduler; import me.block2block.hubparkour.api.gui.GUI; import me.block2block.hubparkour.api.hologram.IHologram; import org.bukkit.Location; @@ -130,4 +131,11 @@ public static void setImplementation(BackendAPI implementation) { */ public abstract IHologram createHologram(IParkour parkour, String name, Location location); + + /** + * Retrieves the {@link PlatformScheduler} instance associated with this BackendAPI. + * + * @return an instance of {@link PlatformScheduler} for scheduling tasks on the platform. + */ + public abstract PlatformScheduler getScheduler(); } diff --git a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/HubParkourAPI.java b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/HubParkourAPI.java index 7f8725f..3385db6 100644 --- a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/HubParkourAPI.java +++ b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/HubParkourAPI.java @@ -1,5 +1,6 @@ package me.block2block.hubparkour.api; +import com.tcoded.folialib.impl.PlatformScheduler; import me.block2block.hubparkour.api.gui.GUI; import me.block2block.hubparkour.api.hologram.IHologram; import org.bukkit.Location; @@ -139,4 +140,14 @@ public static IHologram createHologram(IParkour parkour, String name, Location l return BackendAPI.getImplementation().createHologram(parkour, name, location); } + + /** + * Retrieves the {@code PlatformScheduler} instance associated with the platform. + * + * @return the {@code PlatformScheduler} instance. + */ + public static PlatformScheduler getScheduler() { + return BackendAPI.getImplementation().getScheduler(); + } + } diff --git a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/IHubParkourPlayer.java b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/IHubParkourPlayer.java index 045de1d..db79be0 100644 --- a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/IHubParkourPlayer.java +++ b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/IHubParkourPlayer.java @@ -1,11 +1,11 @@ package me.block2block.hubparkour.api; +import com.tcoded.folialib.wrapper.task.WrappedTask; import me.block2block.hubparkour.api.events.player.ParkourPlayerFailEvent; import me.block2block.hubparkour.api.items.ParkourItem; import me.block2block.hubparkour.api.plates.Checkpoint; import org.bukkit.GameMode; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitTask; import java.util.List; import java.util.Map; @@ -91,7 +91,7 @@ public interface IHubParkourPlayer { * Get the active action bar task. * @return the BukkitTask object if it is active, null if not. */ - BukkitTask getActionBarTask(); + WrappedTask getActionBarTask(); /** * Get a map of all split times, mapped by checkpoint number. diff --git a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/plates/PressurePlate.java b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/plates/PressurePlate.java index 56d59dc..851a398 100644 --- a/hubparkour-api/src/main/java/me/block2block/hubparkour/api/plates/PressurePlate.java +++ b/hubparkour-api/src/main/java/me/block2block/hubparkour/api/plates/PressurePlate.java @@ -81,7 +81,9 @@ public void placeMaterial() { Bukkit.getLogger().warning("A location that one of your parkour points is in does not exist. Please delete the " + parkour.getName() + " parkour and set it up again."); return; } - location.getBlock().setType(material); + HubParkourAPI.getScheduler().runAtLocation(location, t -> { + location.getBlock().setType(material); + }); } } @@ -90,7 +92,9 @@ public void placeMaterial() { */ public void removeMaterial() { if (location == null || location.getWorld() == null) return; - location.getBlock().setType(Material.AIR); + HubParkourAPI.getScheduler().runAtLocation(location, t -> { + location.getBlock().setType(Material.AIR); + }); } /** diff --git a/plugin/plugin.iml b/plugin/plugin.iml new file mode 100644 index 0000000..a589521 --- /dev/null +++ b/plugin/plugin.iml @@ -0,0 +1,13 @@ + + + + + + + SPIGOT + + 1 + + + + \ No newline at end of file diff --git a/plugin/pom.xml b/plugin/pom.xml index 81c8f43..80d33a7 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -43,7 +43,7 @@ maven-shade-plugin - 3.2.3 + 3.6.0 false false @@ -60,7 +60,11 @@ org.bstats - me.block2block.hubparkour + me.block2block.hubparkour.bstats + + + com.tcoded.folialib + me.block2block.hubparkour.folialib @@ -86,7 +90,7 @@ com.github.decentsoftware-eu decentholograms - 2.7.2 + 2.9.9 provided @@ -127,6 +131,12 @@ 3.0.0 compile + + com.tcoded + FoliaLib + 0.5.1 + compile + @@ -142,11 +152,20 @@ placeholderapi https://repo.extendedclip.com/content/repositories/placeholderapi/ + + codemc-repo + https://repo.codemc.io/repository/maven-public/ + default + fancyinnovations-releases FancyInnovations Repository https://repo.fancyinnovations.com/releases + + tcoded-releases + https://repo.tcoded.com/releases + diff --git a/plugin/src/main/java/me/block2block/hubparkour/HubParkour.java b/plugin/src/main/java/me/block2block/hubparkour/HubParkour.java index 6c525b0..6aeb90c 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/HubParkour.java +++ b/plugin/src/main/java/me/block2block/hubparkour/HubParkour.java @@ -1,5 +1,7 @@ package me.block2block.hubparkour; +import com.tcoded.folialib.FoliaLib; +import com.tcoded.folialib.impl.PlatformScheduler; import me.block2block.hubparkour.api.BackendAPI; import me.block2block.hubparkour.api.db.DatabaseSchemaUpdate; import me.block2block.hubparkour.api.hologram.HologramFactory; @@ -44,6 +46,8 @@ public class HubParkour extends JavaPlugin { private static HubParkour instance; + private static PlatformScheduler scheduler; + private static boolean placeholders = false; private static DatabaseManager dbManager; @@ -56,6 +60,8 @@ public class HubParkour extends JavaPlugin { private static UUID serverUuid; + private static boolean stopping = false; + static { registerSchema(new One()); registerSchema(new Two()); @@ -69,6 +75,8 @@ public class HubParkour extends JavaPlugin { public void onEnable() { instance = this; + scheduler = new FoliaLib(this).getScheduler(); + BackendAPI.setImplementation(new HubParkourAPIImpl()); new Metrics(this, 14109); @@ -315,6 +323,7 @@ public void onEnable() { @Override public void onDisable() { + stopping = true; if (isHolograms()) { for (Parkour parkour : CacheManager.getParkours()) { parkour.removeHolograms(); @@ -327,12 +336,18 @@ public void onDisable() { pl.setToPrevState(); } } + + scheduler.cancelAllTasks(); } public static HubParkour getInstance() { return instance; } + public static PlatformScheduler getScheduler() { + return scheduler; + } + public DatabaseManager getDbManager() {return dbManager;} private void copy(InputStream in, File file) { @@ -480,6 +495,10 @@ public static UUID getServerUuid() { return serverUuid; } + public static boolean isStopping() { + return stopping; + } + public static int getCurrentSchema() { return CURRENT_SCHEMA; } diff --git a/plugin/src/main/java/me/block2block/hubparkour/HubParkourAPIImpl.java b/plugin/src/main/java/me/block2block/hubparkour/HubParkourAPIImpl.java index bee4747..8dff502 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/HubParkourAPIImpl.java +++ b/plugin/src/main/java/me/block2block/hubparkour/HubParkourAPIImpl.java @@ -1,5 +1,6 @@ package me.block2block.hubparkour; +import com.tcoded.folialib.impl.PlatformScheduler; import me.block2block.hubparkour.api.BackendAPI; import me.block2block.hubparkour.api.IHubParkourPlayer; import me.block2block.hubparkour.api.IParkour; @@ -99,4 +100,9 @@ public IHologram createHologram(IParkour parkour, String name, Location location } return HubParkour.getHologramFactory().createHologram(parkour, name, location); } + + @Override + public PlatformScheduler getScheduler() { + return HubParkour.getScheduler(); + } } diff --git a/plugin/src/main/java/me/block2block/hubparkour/commands/CommandParkour.java b/plugin/src/main/java/me/block2block/hubparkour/commands/CommandParkour.java index 4eca512..f0a1f22 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/commands/CommandParkour.java +++ b/plugin/src/main/java/me/block2block/hubparkour/commands/CommandParkour.java @@ -24,7 +24,6 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.io.File; @@ -56,7 +55,7 @@ public boolean onCommand(CommandSender sender, Command command, String string, S l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l); + HubParkour.getScheduler().teleportAsync(p, l); ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Reset.Successful", "You have been teleported to the start.", true, Collections.emptyMap()); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Reset.Not-Started-Parkour", "You must start a parkour in order to reset!", true, Collections.emptyMap()); @@ -83,7 +82,7 @@ public boolean onCommand(CommandSender sender, Command command, String string, S l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l); + HubParkour.getScheduler().teleportAsync(p, l); ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Checkpoint.Successful", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Checkpoint.Not-Started-Parkour", "You must start a parkour in order to teleport to a checkpoint!", true, Collections.emptyMap()); @@ -101,27 +100,24 @@ public boolean onCommand(CommandSender sender, Command command, String string, S argsList.remove(0); Parkour parkour = CacheManager.getParkour(String.join(" ", argsList)); if (parkour != null) { - new BukkitRunnable() { - @Override - public void run() { - StringBuilder sb = new StringBuilder(ConfigUtil.getString("Messages.Commands.Leaderboard.Message.Header", "The top times are:") + "\n"); - Map> leaderboard = HubParkour.getInstance().getDbManager().getLeaderboard(parkour, ConfigUtil.getInt("Settings.Leaderboard.Limit", 10)); - - for (int place : leaderboard.keySet()) { - List record = leaderboard.get(place); - sb.append(ConfigUtil.getString("Messages.Commands.Leaderboard.Message.Line", "&a#{place} &r- &a{player-name} &r- &a{player-time} &rseconds.").replace("{player-name}", record.get(0)).replace("{player-time}", ConfigUtil.formatTime(Long.parseLong(record.get(1)))).replace("{place}", "" + place)).append("\n"); - } + HubParkour.getScheduler().runAsync(t -> { + StringBuilder sb = new StringBuilder(ConfigUtil.getString("Messages.Commands.Leaderboard.Message.Header", "The top times are:") + "\n"); + Map> leaderboard = HubParkour.getInstance().getDbManager().getLeaderboard(parkour, ConfigUtil.getInt("Settings.Leaderboard.Limit", 10)); - sb.append(ConfigUtil.getString("Messages.Commands.Leaderboard.Message.Footer", "")); - String s = sb.toString(); + for (int place : leaderboard.keySet()) { + List record = leaderboard.get(place); + sb.append(ConfigUtil.getString("Messages.Commands.Leaderboard.Message.Line", "&a#{place} &r- &a{player-name} &r- &a{player-time} &rseconds.").replace("{player-name}", record.get(0)).replace("{player-time}", ConfigUtil.formatTime(Long.parseLong(record.get(1)))).replace("{place}", "" + place)).append("\n"); + } - if (HubParkour.isPlaceholders()) { - s = PlaceholderAPI.setPlaceholders(p, s); - } + sb.append(ConfigUtil.getString("Messages.Commands.Leaderboard.Message.Footer", "")); + String s = sb.toString(); - p.sendMessage(HubParkour.c(true, s.trim())); + if (HubParkour.isPlaceholders()) { + s = PlaceholderAPI.setPlaceholders(p, s); } - }.runTaskAsynchronously(HubParkour.getInstance()); + + p.sendMessage(HubParkour.c(true, s.trim())); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Leaderboard.Not-Valid-Parkour", "That is not a valid parkour.", true, Collections.emptyMap()); } @@ -221,27 +217,26 @@ public void run() { } for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - hologram.remove(); + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), t -> { + hologram.remove(); + }); } - new BukkitRunnable(){ - @Override - public void run() { - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - CacheManager.removeHologram((LeaderboardHologram) hologram); - HubParkour.getInstance().getDbManager().removeHologram((LeaderboardHologram) hologram); - } - HubParkour.getInstance().getDbManager().deleteParkour(parkour); - for (ClickableSign sign : new ArrayList<>(CacheManager.getSigns().values())) { - if (sign.getParkour().equals(parkour)) { - CacheManager.getSigns().remove(sign.getSignState().getLocation()); - HubParkour.getInstance().getDbManager().removeSign(sign); - } + HubParkour.getScheduler().runAsync(t -> { + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + CacheManager.removeHologram((LeaderboardHologram) hologram); + HubParkour.getInstance().getDbManager().removeHologram((LeaderboardHologram) hologram); + } + HubParkour.getInstance().getDbManager().deleteParkour(parkour); + for (ClickableSign sign : new ArrayList<>(CacheManager.getSigns().values())) { + if (sign.getParkour().equals(parkour)) { + CacheManager.getSigns().remove(sign.getSignState().getLocation()); + HubParkour.getInstance().getDbManager().removeSign(sign); } - CacheManager.getParkours().remove(parkour); - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Delete.Success", "Parkour deleted successfully.", true, Collections.emptyMap()); } - }.runTaskAsynchronously(HubParkour.getInstance()); + CacheManager.getParkours().remove(parkour); + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Delete.Success", "Parkour deleted successfully.", true, Collections.emptyMap()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Delete.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); } @@ -288,18 +283,17 @@ public void run() { return true; } - hologram.remove(); + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), t -> { + hologram.remove(); + }); if (hologram.getParkour() != null) { hologram.getParkour().removeHologram(hologram); } CacheManager.removeHologram(hologram); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().removeHologram(hologram); - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Hologram.Delete.Successful", "Hologram successfully deleted.", true, Collections.emptyMap()); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().removeHologram(hologram); + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Hologram.Delete.Successful", "Hologram successfully deleted.", true, Collections.emptyMap()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Hologram.Delete.Not-Enough-Arguments", "Invalid Arguments. Correct Arguments: &a/parkour hologram delete [hologram id]", true, Collections.emptyMap()); } @@ -392,48 +386,42 @@ public void run() { case "removetime": if (p.hasPermission("hubparkour.admin.removetime")) { if (args.length >= 3) { - new BukkitRunnable(){ - @Override - public void run() { - int id = -1; - try { - id = Integer.parseInt(args[1]); - } catch (NumberFormatException ignored) { - } - Parkour parkour; - String name; - if (id != -1) { - parkour = CacheManager.getParkour(id); - name = args[2]; - } else { - List argsList = new ArrayList<>(Arrays.asList(args)); - argsList.remove(0); - name = argsList.remove(argsList.size() - 1); - parkour = CacheManager.getParkour(String.join(" ", argsList)); - } - if (parkour == null) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); - return; - } - long time = HubParkour.getInstance().getDbManager().getTime(name, parkour); - if (time == -1) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Not-Valid-Player", "That player has never attempted this parkour.", true, Collections.emptyMap()); - return; - } + HubParkour.getScheduler().runAsync(t -> { + int id = -1; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + Parkour parkour; + String name; + if (id != -1) { + parkour = CacheManager.getParkour(id); + name = args[2]; + } else { + List argsList = new ArrayList<>(Arrays.asList(args)); + argsList.remove(0); + name = argsList.remove(argsList.size() - 1); + parkour = CacheManager.getParkour(String.join(" ", argsList)); + } + if (parkour == null) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); + return; + } + long time = HubParkour.getInstance().getDbManager().getTime(name, parkour); + if (time == -1) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Not-Valid-Player", "That player has never attempted this parkour.", true, Collections.emptyMap()); + return; + } - HubParkour.getInstance().getDbManager().resetTime(name, parkour.getId()); - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Success", "The players time has been reset!", true, Collections.emptyMap()); + HubParkour.getInstance().getDbManager().resetTime(name, parkour.getId()); + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Success", "The players time has been reset!", true, Collections.emptyMap()); - new BukkitRunnable(){ - @Override - public void run() { - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - hologram.refresh(); - } - } - }.runTask(HubParkour.getInstance()); + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.refresh(); + }); } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.RemoveTime.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); } @@ -444,40 +432,34 @@ public void run() { case "cleartimes": if (p.hasPermission("hubparkour.admin.cleartimes")) { if (args.length >= 2) { - new BukkitRunnable(){ - @Override - public void run() { - int id = -1; - try { - id = Integer.parseInt(args[1]); - } catch (NumberFormatException ignored) { - } - Parkour parkour; - if (id != -1) { - parkour = CacheManager.getParkour(id); - } else { - List argsList = new ArrayList<>(Arrays.asList(args)); - argsList.remove(0); - parkour = CacheManager.getParkour(String.join(" ", argsList)); - } - if (parkour == null) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ClearTimes.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); - return; - } + HubParkour.getScheduler().runAsync(t -> { + int id = -1; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + Parkour parkour; + if (id != -1) { + parkour = CacheManager.getParkour(id); + } else { + List argsList = new ArrayList<>(Arrays.asList(args)); + argsList.remove(0); + parkour = CacheManager.getParkour(String.join(" ", argsList)); + } + if (parkour == null) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ClearTimes.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); + return; + } - HubParkour.getInstance().getDbManager().resetTimes(parkour.getId()); - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ClearTimes.Success", "All player times have been reset for parkour {parkour-name}!", true, Collections.singletonMap("parkour-name", parkour.getName())); + HubParkour.getInstance().getDbManager().resetTimes(parkour.getId()); + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ClearTimes.Success", "All player times have been reset for parkour {parkour-name}!", true, Collections.singletonMap("parkour-name", parkour.getName())); - new BukkitRunnable(){ - @Override - public void run() { - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - hologram.refresh(); - } - } - }.runTask(HubParkour.getInstance()); + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.refresh(); + }); } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ClearTimes.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); } @@ -488,42 +470,39 @@ public void run() { case "edit": if (p.hasPermission("hubparkour.admin.edit")) { if (args.length >= 2) { - new BukkitRunnable(){ - @Override - public void run() { - int id = -1; - try { - id = Integer.parseInt(args[1]); - } catch (NumberFormatException ignored) { - } - Parkour parkour; - if (id != -1) { - parkour = CacheManager.getParkour(id); - } else { - List argsList = new ArrayList<>(Arrays.asList(args)); - argsList.remove(0); - parkour = CacheManager.getParkour(String.join(" ", argsList)); + HubParkour.getScheduler().runAsync(t -> { + int id = -1; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + } + Parkour parkour; + if (id != -1) { + parkour = CacheManager.getParkour(id); + } else { + List argsList = new ArrayList<>(Arrays.asList(args)); + argsList.remove(0); + parkour = CacheManager.getParkour(String.join(" ", argsList)); + } + if (parkour == null) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Not-Valid-Parkour", "That is not a valid parkour. To see a list of valid parkours, do &a/parkour list&r.", true, Collections.emptyMap()); + return; + } + + if (CacheManager.isSomeoneEdit()) { + if (CacheManager.isEdit(p)) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Already-Editing", "You are already editing a parkour. In order to edit another parkour, use 8 in the main edit menu to finish setting up.", true, Collections.emptyMap()); + } else{ + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Someone-Already-Editing", "Someone is already editing a parkour. Wait for them to finish before editing another.", true, Collections.emptyMap()); } - if (parkour == null) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Not-Valid-Parkour", "That is not a valid parkour. To see a list of valid parkours, do &a/parkour list&r.", true, Collections.emptyMap()); + } else { + if (!parkour.getPlayers().isEmpty()) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Must-Be-Empty", "The parkour must be empty before you can edit it.", true, Collections.emptyMap()); return; } - - if (CacheManager.isSomeoneEdit()) { - if (CacheManager.isEdit(p)) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Already-Editing", "You are already editing a parkour. In order to edit another parkour, use 8 in the main edit menu to finish setting up.", true, Collections.emptyMap()); - } else{ - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Someone-Already-Editing", "Someone is already editing a parkour. Wait for them to finish before editing another.", true, Collections.emptyMap()); - } - } else { - if (!parkour.getPlayers().isEmpty()) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Must-Be-Empty", "The parkour must be empty before you can edit it.", true, Collections.emptyMap()); - return; - } - CacheManager.enterEditMode(p, parkour); - } + CacheManager.enterEditMode(p, parkour); } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Edit.Not-Valid-Parkour", "That is not a valid parkour. To see a list of valid parkours, do &a/parkour list&r.", true, Collections.emptyMap()); } @@ -553,7 +532,7 @@ public void run() { l.setX(l.getX() + 0.5); l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); - p.teleport(l); + HubParkour.getScheduler().teleportAsync(p, l); ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Teleport.Teleported", "You have been teleported to the parkour restart point.", true, Collections.emptyMap()); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Teleport.Currently-In-Parkour", "You cannot teleport to a parkour start point while in a parkour. Please leave your parkour and try again.", true, Collections.emptyMap()); @@ -563,7 +542,7 @@ public void run() { l.setX(l.getX() + 0.5); l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); - p.teleport(l); + HubParkour.getScheduler().teleportAsync(p, l); ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Teleport.Teleported", "You have been teleported to the parkour restart point.", true, Collections.emptyMap()); } } else { @@ -621,21 +600,15 @@ public void run() { if (CacheManager.isSetup(p)) { List message = new ArrayList<>(Arrays.asList(args)); message.remove(0); - new BukkitRunnable() { - @Override - public void run() { - CacheManager.getSetupWizard().onChat(String.join(" ", message)); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + CacheManager.getSetupWizard().onChat(String.join(" ", message)); + }); } else if (CacheManager.isEdit(p)) { List message = new ArrayList<>(Arrays.asList(args)); message.remove(0); - new BukkitRunnable() { - @Override - public void run() { - CacheManager.getEditWizard().onChat(String.join(" ", message)); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + CacheManager.getEditWizard().onChat(String.join(" ", message)); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Setup.Not-In-Setup", "You are not currently in setup. If you want to setup a parkour, use /parkour setup.", true, Collections.emptyMap()); } @@ -646,24 +619,18 @@ public void run() { case "resettimes": if (p.hasPermission("hubparkour.admin.resettimes")) { if (args.length == 2) { - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().resetTimes(args[1]); - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ResetTimes.Success", "Times for all parkours reset for player {player-name}!", true, Collections.singletonMap("player-name", args[1])); - - new BukkitRunnable(){ - @Override - public void run() { - for (Parkour parkour : CacheManager.getParkours()) { - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - hologram.refresh(); - } - } - } - }.runTask(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().resetTimes(args[1]); + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ResetTimes.Success", "Times for all parkours reset for player {player-name}!", true, Collections.singletonMap("player-name", args[1])); + + for (Parkour parkour : CacheManager.getParkours()) { + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.refresh(); + }); + } } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ClearTimes.Not-Valid-Parkour", "That is not a valid parkour ID. If you wish to see a list of all parkours and their IDs, do /parkour list.", true, Collections.emptyMap()); } @@ -673,24 +640,18 @@ public void run() { break; case "resetalltimes": if (p.hasPermission("hubparkour.admin.resetalltimes")) { - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().resetTimes(); - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ResetAllTimes.Success", "All player times for all parkours have been reset!", true, Collections.emptyMap()); - - new BukkitRunnable(){ - @Override - public void run() { - for (Parkour parkour : CacheManager.getParkours()) { - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - hologram.refresh(); - } - } - } - }.runTask(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().resetTimes(); + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.ResetAllTimes.Success", "All player times for all parkours have been reset!", true, Collections.emptyMap()); + + for (Parkour parkour : CacheManager.getParkours()) { + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.refresh(); + }); + } } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.No-Permission", "You do not have permission to perform this command.", true, Collections.emptyMap()); } @@ -698,36 +659,33 @@ public void run() { case "import": { if (p.hasPermission("hubparkour.admin.import")) { if (DatabaseManager.isMysql()) { - new BukkitRunnable(){ - @Override - public void run() { - if (HubParkour.getInstance().getDbManager().hasData()) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Must-Be-Empty", "You must have no data in MySQL in order to use the import command.", true, Collections.emptyMap()); - return; - } + HubParkour.getScheduler().runAsync(t -> { + if (HubParkour.getInstance().getDbManager().hasData()) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Must-Be-Empty", "You must have no data in MySQL in order to use the import command.", true, Collections.emptyMap()); + return; + } - File file = new File(HubParkour.getInstance().getDataFolder(), ConfigUtil.getString("Settings.Database.Details.SQLite.File-Name", "hp-storage.db")); - if (!file.exists()) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.No-SQLite-File", "There is no SQLite file to import.", true, Collections.emptyMap()); - return; - } + File file = new File(HubParkour.getInstance().getDataFolder(), ConfigUtil.getString("Settings.Database.Details.SQLite.File-Name", "hp-storage.db")); + if (!file.exists()) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.No-SQLite-File", "There is no SQLite file to import.", true, Collections.emptyMap()); + return; + } - int currentSchema = ConfigUtil.getInternal().getInt("dbschema.sqlite"); - if (currentSchema < HubParkour.getCurrentSchema()) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Updating-SQLite-Schema", "The SQLite Database Schema is out of date, updating...", true, Collections.emptyMap()); - for (int i = currentSchema + 1;i <= HubParkour.getCurrentSchema();i++) { - HubParkour.getSchemaUpdates().get(i).execute(); - } + int currentSchema = ConfigUtil.getInternal().getInt("dbschema.sqlite"); + if (currentSchema < HubParkour.getCurrentSchema()) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Updating-SQLite-Schema", "The SQLite Database Schema is out of date, updating...", true, Collections.emptyMap()); + for (int i = currentSchema + 1;i <= HubParkour.getCurrentSchema();i++) { + HubParkour.getSchemaUpdates().get(i).execute(); } + } - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Importing", "Importing data from SQLite into MySQL, please wait...", true, Collections.emptyMap()); - if (HubParkour.getInstance().getDbManager().importData()) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Import-Complete", "Import complete! Please restart your server in order for the data to be loaded!", true, Collections.emptyMap()); - } else { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Import-Failed", "Import failed! Please try again!", true, Collections.emptyMap()); - } + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Importing", "Importing data from SQLite into MySQL, please wait...", true, Collections.emptyMap()); + if (HubParkour.getInstance().getDbManager().importData()) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Import-Complete", "Import complete! Please restart your server in order for the data to be loaded!", true, Collections.emptyMap()); + } else { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Import-Failed", "Import failed! Please try again!", true, Collections.emptyMap()); } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.Import.Must-Be-MySQL", "You must have MySQL database storage active in order to use the import command.", true, Collections.emptyMap()); } @@ -738,62 +696,14 @@ public void run() { } case "stats": if (p.hasPermission("hubparkour.command.stats")) { - new BukkitRunnable(){ - @Override - public void run() { - if (args.length >= 2) { - List argsList = new ArrayList<>(Arrays.asList(args)); - argsList.remove(0); - Parkour parkour = CacheManager.getParkour(String.join(" ", argsList)); - - if (parkour != null) { - Statistics statistics = HubParkour.getInstance().getDbManager().getParkourStatistics(p.getPlayer(), parkour); - - if (statistics.getAttempts().isEmpty()) { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Stats.No-Parkour-Stats", "No stats have been tracked for you in this parkour yet. Attempt this parkour to earn stats!", true, Collections.emptyMap()); - return; - } - - StringBuilder sb = new StringBuilder(); - - //default help list - List defaultList = new ArrayList<>(); - defaultList.add("Your stats for parkour &a{parkour-name}&r:"); - defaultList.add("&aParkour attempts:&r {attempts}"); - defaultList.add("&aParkour completions:&r {completions}"); - defaultList.add("&aTotal jumps:&r {jumps}"); - defaultList.add("&aTotal checkpoints hit:&r {checkpoints}"); - defaultList.add("&aTotal distance travelled:&r {distance} blocks"); - defaultList.add("&aTotal time in parkour:&r {time}"); - - for (String s : ConfigUtil.getStringList("Messages.Commands.Stats.Parkour-Stats", defaultList)) { - sb.append(s).append("\n"); - } - - Map bindings = new HashMap<>(); - bindings.put("parkour-name", parkour.getName()); - bindings.put("attempts", statistics.getAttempts().get(parkour.getId()) + ""); - bindings.put("completions", statistics.getCompletions().get(parkour.getId()) + ""); - bindings.put("jumps", statistics.getJumps().get(parkour.getId()) + ""); - bindings.put("distance", String.format("%.2f", statistics.getTotalDistanceTravelled().get(parkour.getId()))); - bindings.put("time", ConfigUtil.formatTime(statistics.getTotalTime().get(parkour.getId()))); - bindings.put("checkpoints", statistics.getCheckpointsHit().get(parkour.getId()) + ""); - - String s = sb.toString(); - - if (HubParkour.isPlaceholders()) { - s = PlaceholderAPI.setPlaceholders(p, s); - } + HubParkour.getScheduler().runAsync(t -> { + if (args.length >= 2) { + List argsList = new ArrayList<>(Arrays.asList(args)); + argsList.remove(0); + Parkour parkour = CacheManager.getParkour(String.join(" ", argsList)); - for (Map.Entry entry : bindings.entrySet()) { - s = s.replace("{" + entry.getKey() + "}", entry.getValue()); - } - p.sendMessage(HubParkour.c(true, s.trim())); - } else { - ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Stats.Not-Valid-Parkour", "That is not a valid parkour.", true, Collections.emptyMap()); - } - } else { - Statistics statistics = HubParkour.getInstance().getDbManager().getGeneralStats(p.getPlayer()); + if (parkour != null) { + Statistics statistics = HubParkour.getInstance().getDbManager().getParkourStatistics(p.getPlayer(), parkour); if (statistics.getAttempts().isEmpty()) { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Stats.No-Parkour-Stats", "No stats have been tracked for you in this parkour yet. Attempt this parkour to earn stats!", true, Collections.emptyMap()); @@ -804,7 +714,7 @@ public void run() { //default help list List defaultList = new ArrayList<>(); - defaultList.add("Your general stats:"); + defaultList.add("Your stats for parkour &a{parkour-name}&r:"); defaultList.add("&aParkour attempts:&r {attempts}"); defaultList.add("&aParkour completions:&r {completions}"); defaultList.add("&aTotal jumps:&r {jumps}"); @@ -812,43 +722,18 @@ public void run() { defaultList.add("&aTotal distance travelled:&r {distance} blocks"); defaultList.add("&aTotal time in parkour:&r {time}"); - for (String s : ConfigUtil.getStringList("Messages.Commands.Stats.General-Stats", defaultList)) { + for (String s : ConfigUtil.getStringList("Messages.Commands.Stats.Parkour-Stats", defaultList)) { sb.append(s).append("\n"); } Map bindings = new HashMap<>(); - int attempts = 0; - int completions = 0; - int jumps = 0; - int checkpoints = 0; - long time = 0L; - double distance = 0.0; - - for (Map.Entry entry : statistics.getAttempts().entrySet()) { - attempts += entry.getValue(); - } - for (Map.Entry entry : statistics.getCompletions().entrySet()) { - completions += entry.getValue(); - } - for (Map.Entry entry : statistics.getCheckpointsHit().entrySet()) { - checkpoints += entry.getValue(); - } - for (Map.Entry entry : statistics.getJumps().entrySet()) { - jumps += entry.getValue(); - } - for (Map.Entry entry : statistics.getTotalTime().entrySet()) { - time += entry.getValue(); - } - for (Map.Entry entry : statistics.getTotalDistanceTravelled().entrySet()) { - distance += entry.getValue(); - } - - bindings.put("attempts", attempts + ""); - bindings.put("completions", completions + ""); - bindings.put("jumps", jumps + ""); - bindings.put("distance", String.format("%.2f", distance)); - bindings.put("time", ConfigUtil.formatTime(time)); - bindings.put("checkpoints", checkpoints + ""); + bindings.put("parkour-name", parkour.getName()); + bindings.put("attempts", statistics.getAttempts().get(parkour.getId()) + ""); + bindings.put("completions", statistics.getCompletions().get(parkour.getId()) + ""); + bindings.put("jumps", statistics.getJumps().get(parkour.getId()) + ""); + bindings.put("distance", String.format("%.2f", statistics.getTotalDistanceTravelled().get(parkour.getId()))); + bindings.put("time", ConfigUtil.formatTime(statistics.getTotalTime().get(parkour.getId()))); + bindings.put("checkpoints", statistics.getCheckpointsHit().get(parkour.getId()) + ""); String s = sb.toString(); @@ -860,9 +745,79 @@ public void run() { s = s.replace("{" + entry.getKey() + "}", entry.getValue()); } p.sendMessage(HubParkour.c(true, s.trim())); + } else { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Stats.Not-Valid-Parkour", "That is not a valid parkour.", true, Collections.emptyMap()); + } + } else { + Statistics statistics = HubParkour.getInstance().getDbManager().getGeneralStats(p.getPlayer()); + + if (statistics.getAttempts().isEmpty()) { + ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Stats.No-Parkour-Stats", "No stats have been tracked for you in this parkour yet. Attempt this parkour to earn stats!", true, Collections.emptyMap()); + return; } + + StringBuilder sb = new StringBuilder(); + + //default help list + List defaultList = new ArrayList<>(); + defaultList.add("Your general stats:"); + defaultList.add("&aParkour attempts:&r {attempts}"); + defaultList.add("&aParkour completions:&r {completions}"); + defaultList.add("&aTotal jumps:&r {jumps}"); + defaultList.add("&aTotal checkpoints hit:&r {checkpoints}"); + defaultList.add("&aTotal distance travelled:&r {distance} blocks"); + defaultList.add("&aTotal time in parkour:&r {time}"); + + for (String s : ConfigUtil.getStringList("Messages.Commands.Stats.General-Stats", defaultList)) { + sb.append(s).append("\n"); + } + + Map bindings = new HashMap<>(); + int attempts = 0; + int completions = 0; + int jumps = 0; + int checkpoints = 0; + long time = 0L; + double distance = 0.0; + + for (Map.Entry entry : statistics.getAttempts().entrySet()) { + attempts += entry.getValue(); + } + for (Map.Entry entry : statistics.getCompletions().entrySet()) { + completions += entry.getValue(); + } + for (Map.Entry entry : statistics.getCheckpointsHit().entrySet()) { + checkpoints += entry.getValue(); + } + for (Map.Entry entry : statistics.getJumps().entrySet()) { + jumps += entry.getValue(); + } + for (Map.Entry entry : statistics.getTotalTime().entrySet()) { + time += entry.getValue(); + } + for (Map.Entry entry : statistics.getTotalDistanceTravelled().entrySet()) { + distance += entry.getValue(); + } + + bindings.put("attempts", attempts + ""); + bindings.put("completions", completions + ""); + bindings.put("jumps", jumps + ""); + bindings.put("distance", String.format("%.2f", distance)); + bindings.put("time", ConfigUtil.formatTime(time)); + bindings.put("checkpoints", checkpoints + ""); + + String s = sb.toString(); + + if (HubParkour.isPlaceholders()) { + s = PlaceholderAPI.setPlaceholders(p, s); + } + + for (Map.Entry entry : bindings.entrySet()) { + s = s.replace("{" + entry.getKey() + "}", entry.getValue()); + } + p.sendMessage(HubParkour.c(true, s.trim())); } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessageOrDefault(p, "Messages.Commands.Admin.No-Permission", "You do not have permission to perform this command.", true, Collections.emptyMap()); } diff --git a/plugin/src/main/java/me/block2block/hubparkour/entities/EditWizard.java b/plugin/src/main/java/me/block2block/hubparkour/entities/EditWizard.java index 4b80acc..f0667f9 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/entities/EditWizard.java +++ b/plugin/src/main/java/me/block2block/hubparkour/entities/EditWizard.java @@ -9,7 +9,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.Arrays; @@ -409,30 +408,24 @@ public boolean onChat(String message) { commands = null; } checkpoint.setRewards(commands); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().updateCheckpointRewards( - parkour.getId(), - checkpoint - ); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().updateCheckpointRewards( + parkour.getId(), + checkpoint + ); + }); ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Admin.Edit.Commands.Command-Deleted", "Command successfully deleted!", true, Collections.emptyMap()); displayCheckpointRewardsMenu(); return true; } case CHECKPOINTS_REWARDS_ADD: { if (message.equalsIgnoreCase("done")) { - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().updateCheckpointRewards( - parkour.getId(), - checkpoint - ); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().updateCheckpointRewards( + parkour.getId(), + checkpoint + ); + }); displayCheckpointRewardsMenu(); return true; } @@ -504,13 +497,10 @@ public void run() { } if (message.equalsIgnoreCase("done")) { Checkpoint finalCheckpoint = checkpoint; - new BukkitRunnable(){ - @Override - public void run() { - //Use final checkpoint as checkpoint gets set to null in the returnToCheckpointMenu call. - parkour.addCheckpoint(finalCheckpoint, after + 1); - } - }.runTask(HubParkour.getInstance()); + HubParkour.getScheduler().runAtLocation(finalCheckpoint.getLocation(), t -> { + //Use final checkpoint as checkpoint gets set to null in the returnToCheckpointMenu call. + parkour.addCheckpoint(finalCheckpoint, after + 1); + }); ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Admin.Edit.Checkpoints.Add.Success", "The checkpoint has been successfully added!", true, Collections.emptyMap()); returnToCheckpointMenu(); return true; diff --git a/plugin/src/main/java/me/block2block/hubparkour/entities/HubParkourPlayer.java b/plugin/src/main/java/me/block2block/hubparkour/entities/HubParkourPlayer.java index 03057ee..c1a5c64 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/entities/HubParkourPlayer.java +++ b/plugin/src/main/java/me/block2block/hubparkour/entities/HubParkourPlayer.java @@ -1,6 +1,7 @@ package me.block2block.hubparkour.entities; +import com.tcoded.folialib.wrapper.task.WrappedTask; import me.block2block.hubparkour.HubParkour; import me.block2block.hubparkour.api.IHubParkourPlayer; import me.block2block.hubparkour.api.hologram.ILeaderboardHologram; @@ -19,8 +20,6 @@ import org.bukkit.attribute.Attribute; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; import java.util.*; @@ -43,7 +42,7 @@ public class HubParkourPlayer implements IHubParkourPlayer { private ItemStack[] armorContents; private ItemStack[] storageContents; private ItemStack inHand; - private BukkitTask actionBarTask; + private WrappedTask actionBarTask; private GameMode prevGamemode; private double prevHealth; private double prevMaxHealth; @@ -59,22 +58,19 @@ public HubParkourPlayer(Player p, Parkour parkour) { startTime = System.currentTimeMillis(); touchedGround = true; currentSplit = startTime; - new BukkitRunnable() { - @Override - public void run() { - lastRunCompleted = HubParkour.getInstance().getDbManager().wasCompletedLastRun(p, parkour); - if ((ConfigUtil.getBoolean("Settings.Repeat-Rewards", true) || ConfigUtil.getBoolean("Settings.Exploit-Prevention.Checkpoint-Rewards-Everytime", false)) && lastRunCompleted) { - //The last run was completed and repeat rewards are enabled, delete all previously reached checkpoints so they can reach them again. - previouslyReachedCheckpoints = new ArrayList<>(); - HubParkour.getInstance().getDbManager().resetReachedCheckpoints(p, parkour); - } else { - previouslyReachedCheckpoints = HubParkour.getInstance().getDbManager().getReachedCheckpoints(p, parkour); - } - previous = HubParkour.getInstance().getDbManager().getTime(p, parkour); - splitTimes = HubParkour.getInstance().getDbManager().getSplitTimes(p, parkour); - HubParkour.getInstance().getDbManager().resetLastRun(p, parkour); + HubParkour.getScheduler().runAsync(t -> { + lastRunCompleted = HubParkour.getInstance().getDbManager().wasCompletedLastRun(p, parkour); + if ((ConfigUtil.getBoolean("Settings.Repeat-Rewards", true) || ConfigUtil.getBoolean("Settings.Exploit-Prevention.Checkpoint-Rewards-Everytime", false)) && lastRunCompleted) { + //The last run was completed and repeat rewards are enabled, delete all previously reached checkpoints so they can reach them again. + previouslyReachedCheckpoints = new ArrayList<>(); + HubParkour.getInstance().getDbManager().resetReachedCheckpoints(p, parkour); + } else { + previouslyReachedCheckpoints = HubParkour.getInstance().getDbManager().getReachedCheckpoints(p, parkour); } - }.runTaskAsynchronously(HubParkour.getInstance()); + previous = HubParkour.getInstance().getDbManager().getTime(p, parkour); + splitTimes = HubParkour.getInstance().getDbManager().getSplitTimes(p, parkour); + HubParkour.getInstance().getDbManager().resetLastRun(p, parkour); + }); parkourItems.add(new ResetItem(this, ConfigUtil.getInt("Settings.Parkour-Items.Reset.Slot", 5))); parkourItems.add(new CheckpointItem(this, ConfigUtil.getInt("Settings.Parkour-Items.Checkpoint.Slot", 4))); parkourItems.add(new CancelItem(this, ConfigUtil.getInt("Settings.Parkour-Items.Cancel.Slot", 6))); @@ -88,22 +84,19 @@ public HubParkourPlayer(HubParkourPlayer p, Parkour parkour) { parkourItems.forEach(item -> item.setPlayer(this)); this.splitTimes = new HashMap<>(); - new BukkitRunnable() { - @Override - public void run() { - lastRunCompleted = HubParkour.getInstance().getDbManager().wasCompletedLastRun(p.player, parkour); - if ((ConfigUtil.getBoolean("Settings.Repeat-Rewards", true) || ConfigUtil.getBoolean("Settings.Exploit-Prevention.Checkpoint-Rewards-Everytime", false)) && lastRunCompleted) { - //The last run was completed and repeat rewards are enabled, delete all previously reached checkpoints so they can reach them again. - previouslyReachedCheckpoints = new ArrayList<>(); - HubParkour.getInstance().getDbManager().resetReachedCheckpoints(p.player, parkour); - } else { - previouslyReachedCheckpoints = HubParkour.getInstance().getDbManager().getReachedCheckpoints(p.player, parkour); - } - previous = HubParkour.getInstance().getDbManager().getTime(p.player, parkour); - splitTimes = HubParkour.getInstance().getDbManager().getSplitTimes(p.player, parkour); - HubParkour.getInstance().getDbManager().resetLastRun(p.player, parkour); + HubParkour.getScheduler().runAsync(t -> { + lastRunCompleted = HubParkour.getInstance().getDbManager().wasCompletedLastRun(p.player, parkour); + if ((ConfigUtil.getBoolean("Settings.Repeat-Rewards", true) || ConfigUtil.getBoolean("Settings.Exploit-Prevention.Checkpoint-Rewards-Everytime", false)) && lastRunCompleted) { + //The last run was completed and repeat rewards are enabled, delete all previously reached checkpoints so they can reach them again. + previouslyReachedCheckpoints = new ArrayList<>(); + HubParkour.getInstance().getDbManager().resetReachedCheckpoints(p.player, parkour); + } else { + previouslyReachedCheckpoints = HubParkour.getInstance().getDbManager().getReachedCheckpoints(p.player, parkour); } - }.runTaskAsynchronously(HubParkour.getInstance()); + previous = HubParkour.getInstance().getDbManager().getTime(p.player, parkour); + splitTimes = HubParkour.getInstance().getDbManager().getSplitTimes(p.player, parkour); + HubParkour.getInstance().getDbManager().resetLastRun(p.player, parkour); + }); this.inventory = p.inventory; this.extraContents = p.extraContents; @@ -119,16 +112,13 @@ public void run() { } if (ConfigUtil.getBoolean("Settings.Action-Bar.Enabled", true)) { - actionBarTask = new BukkitRunnable(){ - @Override - public void run() { - String message = HubParkour.c(false, ConfigUtil.getString("Messages.Parkour.Action-Bar", "&a&lCurrent Time: &r{current-time} - &a&lParkour: &r{parkour-name}&r - &a&lCurrent Checkpoint: &r#{current-checkpoint}").replace("{current-time}", ConfigUtil.formatTime((System.currentTimeMillis() - startTime))).replace("{parkour-name}", parkour.getName()).replace("{current-checkpoint}", lastReached + "").replace("{current-splittime}", "" + ((System.currentTimeMillis() - currentSplit)/1000f))); - if (HubParkour.isPlaceholders()) { - message = PlaceholderAPI.setPlaceholders(player, message); - } - TitleUtil.sendActionBar(player, message, ChatColor.WHITE, false); + actionBarTask = HubParkour.getScheduler().runTimerAsync(() -> { + String message = HubParkour.c(false, ConfigUtil.getString("Messages.Parkour.Action-Bar", "&a&lCurrent Time: &r{current-time} - &a&lParkour: &r{parkour-name}&r - &a&lCurrent Checkpoint: &r#{current-checkpoint}").replace("{current-time}", ConfigUtil.formatTime((System.currentTimeMillis() - startTime))).replace("{parkour-name}", parkour.getName()).replace("{current-checkpoint}", lastReached + "").replace("{current-splittime}", "" + ((System.currentTimeMillis() - currentSplit)/1000f))); + if (HubParkour.isPlaceholders()) { + message = PlaceholderAPI.setPlaceholders(player, message); } - }.runTaskTimerAsynchronously(HubParkour.getInstance(), 0, ConfigUtil.getInt("Settings.Action-Bar.Update-Interval", 2)); + TitleUtil.sendActionBar(player, message, ChatColor.WHITE, false); + }, 0, ConfigUtil.getInt("Settings.Action-Bar.Update-Interval", 2)); } parkourRun = new ParkourRun(this); @@ -154,24 +144,18 @@ public void checkpoint(Checkpoint checkpoint) { if (splitTimes.get(checkpoint.getCheckpointNo()) > ms) { ConfigUtil.sendMessage(player, "Messages.Parkour.Checkpoints.Reached.Beat-Split-Time", "You have reached checkpoint &a#{checkpoint}&r in &a{new-time}s&r and beat your personal best of &a{old-time}s&r!", true, bindings); - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, checkpoint.getCheckpointNo(), ms, true); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, checkpoint.getCheckpointNo(), ms, true); + }); splitTimes.put(checkpoint.getCheckpointNo(), ms); } else { ConfigUtil.sendMessage(player, "Messages.Parkour.Checkpoints.Reached.Not-Beat-Split-Time", "You have reached checkpoint &a#{checkpoint}&r in &a{new-time}s&r (personal best: {old-time}s)!", true, bindings); } } else { ConfigUtil.sendMessage(player, "Messages.Parkour.Checkpoints.Reached.New-Split-Time", "You have reached checkpoint &a#{checkpoint}&r in &a{new-time}s&r!", true, bindings); - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, checkpoint.getCheckpointNo(), ms, false); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, checkpoint.getCheckpointNo(), ms, false); + }); splitTimes.put(checkpoint.getCheckpointNo(), ms); } checkpoints.add(checkpoint); @@ -182,39 +166,50 @@ public void run() { (parkour.getGlobalCheckpointCommands() != null && !parkour.getGlobalCheckpointCommands().isEmpty())) { long timestamp = System.currentTimeMillis(); if (parkour.getRewardCooldown() != -1) { - new BukkitRunnable() { - @Override - public void run() { - long timestamp1 = HubParkour.getInstance().getDbManager().getTimestamp(player.getUniqueId(), parkour.getId(), checkpoint.getCheckpointNo()); - if (timestamp1 != -1) { - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(timestamp1); - calendar.add(Calendar.HOUR_OF_DAY, parkour.getRewardCooldown()); - if (calendar.getTimeInMillis() > timestamp) { - //They're currently on cooldown, ignore. - return; - } + HubParkour.getScheduler().runAsync(t -> { + long timestamp1 = HubParkour.getInstance().getDbManager().getTimestamp(player.getUniqueId(), parkour.getId(), checkpoint.getCheckpointNo()); + if (timestamp1 != -1) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp1); + calendar.add(Calendar.HOUR_OF_DAY, parkour.getRewardCooldown()); + if (calendar.getTimeInMillis() > timestamp) { + //They're currently on cooldown, ignore. + return; } - new BukkitRunnable(){ - @Override - public void run() { - if (checkpoint.getRewards() != null && !checkpoint.getRewards().isEmpty()) { - for (String command : checkpoint.getRewards()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } - } - if (parkour.getGlobalCheckpointCommands() != null && !parkour.getGlobalCheckpointCommands().isEmpty()) { - for (String command : parkour.getGlobalCheckpointCommands()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } - } + } + HubParkour.getScheduler().runNextTick(g -> { + if (checkpoint.getRewards() != null && !checkpoint.getRewards().isEmpty()) { + for (String command : checkpoint.getRewards()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); } - }.runTask(HubParkour.getInstance()); - HubParkour.getInstance().getDbManager().updateTimestamp(player.getUniqueId(), parkour.getId(), checkpoint.getCheckpointNo(), timestamp); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + } + if (parkour.getGlobalCheckpointCommands() != null && !parkour.getGlobalCheckpointCommands().isEmpty()) { + for (String command : parkour.getGlobalCheckpointCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + } + }); + HubParkour.getInstance().getDbManager().updateTimestamp(player.getUniqueId(), parkour.getId(), checkpoint.getCheckpointNo(), timestamp); + }); } else { + HubParkour.getScheduler().runNextTick(t -> { + if (checkpoint.getRewards() != null && !checkpoint.getRewards().isEmpty()) { + for (String command : checkpoint.getRewards()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + } + if (parkour.getGlobalCheckpointCommands() != null && !parkour.getGlobalCheckpointCommands().isEmpty()) { + for (String command : parkour.getGlobalCheckpointCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + } + }); + } + } + } else { + if (ConfigUtil.getBoolean("Settings.Exploit-Prevention.Checkpoint-Rewards-Everytime", false)) { + HubParkour.getScheduler().runNextTick(t -> { if (checkpoint.getRewards() != null && !checkpoint.getRewards().isEmpty()) { for (String command : checkpoint.getRewards()) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); @@ -225,31 +220,15 @@ public void run() { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); } } - } - } - } else { - if (ConfigUtil.getBoolean("Settings.Exploit-Prevention.Checkpoint-Rewards-Everytime", false)) { - if (checkpoint.getRewards() != null && !checkpoint.getRewards().isEmpty()) { - for (String command : checkpoint.getRewards()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } - } - if (parkour.getGlobalCheckpointCommands() != null && !parkour.getGlobalCheckpointCommands().isEmpty()) { - for (String command : parkour.getGlobalCheckpointCommands()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } - } + }); } } previouslyReachedCheckpoints.add(checkpoint); - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().reachedCheckpoint(player, parkour, checkpoint); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().reachedCheckpoint(player, parkour, checkpoint); + }); } setCurrentSplit(); } @@ -284,12 +263,10 @@ public void end(ParkourPlayerFailEvent.FailCause cause) { } HubParkourPlayer pl = this; long time = System.currentTimeMillis() - startTime; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().addAttempt(pl, parkour, time); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().addAttempt(pl, parkour, time); + }); } else { if (ConfigUtil.getBoolean("Settings.Must-Complete-All-Checkpoints", true)) { if (checkpoints.size() != parkour.getNoCheckpoints()) { @@ -305,12 +282,10 @@ public void run() { HubParkourPlayer pl = this; long time = System.currentTimeMillis() - startTime; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().addAttempt(pl, parkour, time); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().addAttempt(pl, parkour, time); + }); ConfigUtil.sendMessage(player, "Messages.Parkour.End.Failed.Not-Enough-Checkpoints", "You did not reach enough checkpoints, parkour failed!", true, Collections.emptyMap()); parkour.playerEnd(this); @@ -342,13 +317,11 @@ public void run() { } HubParkourPlayer pl = this; - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().completedLastRun(player, parkour); - HubParkour.getInstance().getDbManager().addCompletion(pl, parkour, finishMili); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().completedLastRun(player, parkour); + HubParkour.getInstance().getDbManager().addCompletion(pl, parkour, finishMili); + }); Map bindings = new HashMap<>(); bindings.put("new-time", ConfigUtil.formatTime(splitMs)); @@ -358,24 +331,18 @@ public void run() { if (oldSplit > splitMs) { ConfigUtil.sendMessage(player, "Messages.Parkour.End.Split-Time.Beat-Split-Time", "You have reached the finish point in &a{new-time}s&r and beat your personal best of &a{old-time}s&r!", true, bindings); int finalCheck = check; - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, finalCheck, splitMs, true); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, finalCheck, splitMs, true); + }); } else { ConfigUtil.sendMessage(player, "Messages.Parkour.End.Split-Time.Not-Beat-Split-Time", "You have reached the finish point in &a{new-time}s&r (personal best: {old-time}s)!", true, bindings); } } else { ConfigUtil.sendMessage(player, "Messages.Parkour.End.Split-Time.New-Split-Time", "You have reached the finish point in &a{new-time}s&r!", true, bindings); int finalCheck = check; - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, finalCheck, splitMs, false); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setSplitTime(player, parkour, finalCheck, splitMs, false); + }); } if (previous > 0) { @@ -383,34 +350,30 @@ public void run() { if (parkour.getEndCommands() != null && !parkour.getEndCommands().isEmpty()) { long timestamp = System.currentTimeMillis(); if (parkour.getRewardCooldown() != -1) { - new BukkitRunnable() { - @Override - public void run() { - long timestamp1 = HubParkour.getInstance().getDbManager().getTimestamp(player.getUniqueId(), parkour.getId(), -1); - if (timestamp1 != -1) { - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(timestamp1); - calendar.add(Calendar.HOUR_OF_DAY, parkour.getRewardCooldown()); - if (calendar.getTimeInMillis() > timestamp) { - //They're currently on cooldown, ignore. - return; - } + HubParkour.getScheduler().runAsync(t -> { + long timestamp1 = HubParkour.getInstance().getDbManager().getTimestamp(player.getUniqueId(), parkour.getId(), -1); + if (timestamp1 != -1) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp1); + calendar.add(Calendar.HOUR_OF_DAY, parkour.getRewardCooldown()); + if (calendar.getTimeInMillis() > timestamp) { + //They're currently on cooldown, ignore. + return; } - new BukkitRunnable(){ - @Override - public void run() { - for (String command : parkour.getEndCommands()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } - } - }.runTask(HubParkour.getInstance()); - HubParkour.getInstance().getDbManager().updateTimestamp(player.getUniqueId(), parkour.getId(), -1, timestamp); } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runNextTick(g -> { + for (String command : parkour.getEndCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + }); + HubParkour.getInstance().getDbManager().updateTimestamp(player.getUniqueId(), parkour.getId(), -1, timestamp); + }); } else { - for (String command : parkour.getEndCommands()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } + HubParkour.getScheduler().runNextTick(g -> { + for (String command : parkour.getEndCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + }); } } } @@ -420,76 +383,64 @@ public void run() { if (finishMili < previous) { ConfigUtil.sendMessage(player, "Messages.Parkour.End.Beat-Previous-Personal-Best", "You beat your previous record and you managed to complete the &a{parkour-name} &rparkour in &a{time} &rseconds!", true, bindings); - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().newTime(player, finishMili, true, parkour); - int position = HubParkour.getInstance().getDbManager().leaderboardPosition(player, parkour); - - bindings.clear(); - bindings.put("position","" + position); - bindings.put("suffix",((position % 10 == 1)?"st":((position % 10 == 2)?"nd":((position % 10 == 3)?((position == 13)?"th":"rd"):"th")))); - bindings.put("parkour-name",parkour.getName()); - - ConfigUtil.sendMessage(player, "Messages.Parkour.Leaderboard.Leaderboard-Place", "You are in &a{position}{suffix} place&r for the &a{parkour-name}&r parkour!", true, bindings); - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - new BukkitRunnable(){ - @Override - public void run() { - hologram.refresh(); - } - }.runTask(HubParkour.getInstance()); - } + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().newTime(player, finishMili, true, parkour); + int position = HubParkour.getInstance().getDbManager().leaderboardPosition(player, parkour); + + bindings.clear(); + bindings.put("position","" + position); + bindings.put("suffix",((position % 10 == 1)?"st":((position % 10 == 2)?"nd":((position % 10 == 3)?((position == 13)?"th":"rd"):"th")))); + bindings.put("parkour-name",parkour.getName()); + + ConfigUtil.sendMessage(player, "Messages.Parkour.Leaderboard.Leaderboard-Place", "You are in &a{position}{suffix} place&r for the &a{parkour-name}&r parkour!", true, bindings); + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.refresh(); + }); } - }.runTaskAsynchronously(HubParkour.getInstance()); + }); } else { ConfigUtil.sendMessage(player, "Messages.Parkour.End.Not-Beat-Previous-Personal-Best", "You didn't beat your previous record, but you managed to complete the &a{parkour-name} &rparkour in &a{time} &rseconds!", true, bindings); - new BukkitRunnable() { - @Override - public void run() { - int position = HubParkour.getInstance().getDbManager().leaderboardPosition(player, parkour); - bindings.clear(); - bindings.put("position","" + position); - bindings.put("suffix",((position % 10 == 1)?"st":((position % 10 == 2)?"nd":((position % 10 == 3)?((position == 13)?"th":"rd"):"th")))); - bindings.put("parkour-name",parkour.getName()); - - ConfigUtil.sendMessage(player, "Messages.Parkour.Leaderboard.Leaderboard-Place", "You are in &a{position}{suffix} place&r for the &a{parkour-name}&r parkour!", true, bindings); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + int position = HubParkour.getInstance().getDbManager().leaderboardPosition(player, parkour); + bindings.clear(); + bindings.put("position","" + position); + bindings.put("suffix",((position % 10 == 1)?"st":((position % 10 == 2)?"nd":((position % 10 == 3)?((position == 13)?"th":"rd"):"th")))); + bindings.put("parkour-name",parkour.getName()); + + ConfigUtil.sendMessage(player, "Messages.Parkour.Leaderboard.Leaderboard-Place", "You are in &a{position}{suffix} place&r for the &a{parkour-name}&r parkour!", true, bindings); + }); } } else { if (previous == -1) { if (parkour.getEndCommands() != null && !parkour.getEndCommands().isEmpty()) { long timestamp = System.currentTimeMillis(); if (parkour.getRewardCooldown() != -1) { - new BukkitRunnable() { - @Override - public void run() { - long timestamp1 = HubParkour.getInstance().getDbManager().getTimestamp(player.getUniqueId(), parkour.getId(), -1); - if (timestamp1 != -1) { - Calendar calendar = Calendar.getInstance(); - calendar.setTimeInMillis(timestamp1); - calendar.add(Calendar.HOUR_OF_DAY, parkour.getRewardCooldown()); - if (calendar.getTimeInMillis() > timestamp) { - //They're currently on cooldown, ignore. - return; - } + HubParkour.getScheduler().runAsync(t -> { + long timestamp1 = HubParkour.getInstance().getDbManager().getTimestamp(player.getUniqueId(), parkour.getId(), -1); + if (timestamp1 != -1) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(timestamp1); + calendar.add(Calendar.HOUR_OF_DAY, parkour.getRewardCooldown()); + if (calendar.getTimeInMillis() > timestamp) { + //They're currently on cooldown, ignore. + return; } - new BukkitRunnable() { - @Override - public void run() { - for (String command : parkour.getEndCommands()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } - } - }.runTask(HubParkour.getInstance()); - HubParkour.getInstance().getDbManager().updateTimestamp(player.getUniqueId(), parkour.getId(), -1, timestamp); } - }.runTaskAsynchronously(HubParkour.getInstance()); + + HubParkour.getScheduler().runNextTick(g -> { + for (String command : parkour.getEndCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + }); + HubParkour.getInstance().getDbManager().updateTimestamp(player.getUniqueId(), parkour.getId(), -1, timestamp); + }); } else { - for (String command : parkour.getEndCommands()) { - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); - } + HubParkour.getScheduler().runNextTick(g -> { + for (String command : parkour.getEndCommands()) { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}",player.getName()).replace("{player-uuid}",player.getUniqueId().toString())); + } + }); } } @@ -499,27 +450,21 @@ public void run() { bindings.put("parkour-name", parkour.getName()); ConfigUtil.sendMessage(player, "Messages.Parkour.End.First-Time", "Well done! You completed the &a{parkour-name}&r parkour in &a{time}&r seconds! Your reward will be applied shortly!", true, bindings); - new BukkitRunnable() { - @Override - public void run() { - HubParkour.getInstance().getDbManager().newTime(player, finishMili, false, parkour); - int position = HubParkour.getInstance().getDbManager().leaderboardPosition(player, parkour); - bindings.clear(); - bindings.put("position","" + position); - bindings.put("suffix",((position % 10 == 1)?"st":((position % 10 == 2)?"nd":((position % 10 == 3)?"rd":"th")))); - bindings.put("parkour-name",parkour.getName()); - - ConfigUtil.sendMessage(player, "Messages.Parkour.Leaderboard.Leaderboard-Place", "You are in &a{position}{suffix} place&r for the &a{parkour-name}&r parkour!", true, bindings); - for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { - new BukkitRunnable() { - @Override - public void run() { - hologram.refresh(); - } - }.runTask(HubParkour.getInstance()); - } - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().newTime(player, finishMili, false, parkour); + int position = HubParkour.getInstance().getDbManager().leaderboardPosition(player, parkour); + bindings.clear(); + bindings.put("position","" + position); + bindings.put("suffix",((position % 10 == 1)?"st":((position % 10 == 2)?"nd":((position % 10 == 3)?"rd":"th")))); + bindings.put("parkour-name",parkour.getName()); + + ConfigUtil.sendMessage(player, "Messages.Parkour.Leaderboard.Leaderboard-Place", "You are in &a{position}{suffix} place&r for the &a{parkour-name}&r parkour!", true, bindings); + for (ILeaderboardHologram hologram : parkour.getLeaderboards()) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.refresh(); + }); + } + }); } else { ConfigUtil.sendMessage(player, "Messages.Parkour.End.Failed.Too-Quick", "You completed the parkour too quickly, parkour failed!", true, Collections.emptyMap()); } @@ -609,20 +554,17 @@ public void startParkour() { player.setGameMode(mode); } if (ConfigUtil.getBoolean("Settings.Action-Bar.Enabled", true)) { - actionBarTask = new BukkitRunnable(){ - @Override - public void run() { - String message = HubParkour.c(false, ConfigUtil.getString("Messages.Parkour.Action-Bar", "&a&lCurrent Time: &r{current-time} - &a&lParkour: &r{parkour-name}&r - &a&lCurrent Checkpoint: &r#{current-checkpoint}").replace("{current-time}", ConfigUtil.formatTime((System.currentTimeMillis() - startTime))).replace("{parkour-name}", parkour.getName()).replace("{current-checkpoint}", lastReached + "").replace("{current-splittime}", "" + ((System.currentTimeMillis() - currentSplit)/1000f))); - if (HubParkour.isPlaceholders()) { - message = PlaceholderAPI.setPlaceholders(player, message); - } - TitleUtil.sendActionBar(player, message, ChatColor.WHITE, false); + actionBarTask = HubParkour.getScheduler().runTimerAsync(() -> { + String message = HubParkour.c(false, ConfigUtil.getString("Messages.Parkour.Action-Bar", "&a&lCurrent Time: &r{current-time} - &a&lParkour: &r{parkour-name}&r - &a&lCurrent Checkpoint: &r#{current-checkpoint}").replace("{current-time}", ConfigUtil.formatTime((System.currentTimeMillis() - startTime))).replace("{parkour-name}", parkour.getName()).replace("{current-checkpoint}", lastReached + "").replace("{current-splittime}", "" + ((System.currentTimeMillis() - currentSplit)/1000f))); + if (HubParkour.isPlaceholders()) { + message = PlaceholderAPI.setPlaceholders(player, message); } - }.runTaskTimerAsynchronously(HubParkour.getInstance(), 0, ConfigUtil.getInt("Settings.Action-Bar.Update-Interval", 2)); + TitleUtil.sendActionBar(player, message, ChatColor.WHITE, false); + }, 0, ConfigUtil.getInt("Settings.Action-Bar.Update-Interval", 2)); } } - public BukkitTask getActionBarTask() { + public WrappedTask getActionBarTask() { return actionBarTask; } diff --git a/plugin/src/main/java/me/block2block/hubparkour/entities/LeaderboardHologram.java b/plugin/src/main/java/me/block2block/hubparkour/entities/LeaderboardHologram.java index 9ef642e..963731f 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/entities/LeaderboardHologram.java +++ b/plugin/src/main/java/me/block2block/hubparkour/entities/LeaderboardHologram.java @@ -6,7 +6,6 @@ import me.block2block.hubparkour.utils.ConfigUtil; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.List; @@ -31,12 +30,9 @@ public LeaderboardHologram(Location location, Parkour parkour) { LeaderboardHologram instance = this; //Get ID and insert into database. - new BukkitRunnable() { - @Override - public void run() { - id = HubParkour.getInstance().getDbManager().addHologram(instance); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + id = HubParkour.getInstance().getDbManager().addHologram(instance); + }); } public void generate() { @@ -55,7 +51,9 @@ public void generate() { public void remove() { if (hologram != null) { - hologram.remove(); + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), t -> { + hologram.remove(); + }); } } @@ -67,12 +65,9 @@ public void refresh() { List record = leaderboard.get(place); lines.add(ChatColor.translateAlternateColorCodes('&', ConfigUtil.getString("Messages.Holograms.Leaderboard.Line", "&3#{place}&r - &b{player-name}&r - &b{player-time}").replace("{player-name}", record.get(0)).replace("{player-time}", ConfigUtil.formatTime(Long.parseLong(record.get(1)))).replace("{place}", "" + place))); } - new BukkitRunnable() { - @Override - public void run() { - hologram.setLines(lines); - } - }.runTask(HubParkour.getInstance()); + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), a -> { + hologram.setLines(lines); + }); } public Location getLocation() { diff --git a/plugin/src/main/java/me/block2block/hubparkour/entities/Parkour.java b/plugin/src/main/java/me/block2block/hubparkour/entities/Parkour.java index 33b64d8..4773c83 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/entities/Parkour.java +++ b/plugin/src/main/java/me/block2block/hubparkour/entities/Parkour.java @@ -1,7 +1,5 @@ package me.block2block.hubparkour.entities; -import eu.decentsoftware.holograms.api.DHAPI; -import eu.decentsoftware.holograms.api.holograms.Hologram; import me.block2block.hubparkour.HubParkour; import me.block2block.hubparkour.api.IHubParkourPlayer; import me.block2block.hubparkour.api.hologram.IHologram; @@ -15,7 +13,6 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.*; @@ -146,23 +143,17 @@ public List getEndCommands() { public void setGlobalCheckpointCommands(List globalCheckpointCommands) { this.globalCheckpointCommands = globalCheckpointCommands; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setGlobalCheckpointCommands(id, globalCheckpointCommands); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setGlobalCheckpointCommands(id, globalCheckpointCommands); + }); } public void setEndCommands(List endCommands) { this.endCommands = endCommands; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setEndCommands(id, endCommands); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setEndCommands(id, endCommands); + }); } public List getAllPoints() { @@ -216,34 +207,43 @@ public void generateHolograms() { continue; } Location l = p.getLocation().clone(); - l.setX(l.getX() + 0.5); - l.setZ(l.getZ() + 0.5); - l.setY(l.getY() + 2); - if (l.getWorld() == null) { - continue; - } - IHologram hologram = HubParkour.getHologramFactory().createHologram(p.getParkour(), "hp_" + id + "-" + p.getType() + ((p instanceof Checkpoint)?"-" + ((Checkpoint) p).getCheckpointNo():""), l); - int counter = 0; + final String finalConfigKey = configKey; + HubParkour.getScheduler().runAtLocation(l, t -> { + l.setX(l.getX() + 0.5); + l.setZ(l.getZ() + 0.5); + l.setY(l.getY() + 2); + if (l.getWorld() == null) { + return; + } + IHologram hologram = HubParkour.getHologramFactory().createHologram(p.getParkour(), "hp_" + id + "-" + p.getType() + ((p instanceof Checkpoint)?"-" + ((Checkpoint) p).getCheckpointNo():""), l); + int counter = 0; - List lines = new ArrayList<>(); + List lines = new ArrayList<>(); - for (String s : ConfigUtil.getStringList("Messages.Holograms." + configKey, defaultValues)) { - s = ChatColor.translateAlternateColorCodes('&', s.replace("{parkour-name}",name).replace("{checkpoint}",((p instanceof Checkpoint)?((Checkpoint)p).getCheckpointNo() + "":""))); - if (HubParkour.isPlaceholders()) { - s = PlaceholderAPI.setPlaceholders(null, s); + for (String s : ConfigUtil.getStringList("Messages.Holograms." + finalConfigKey, defaultValues)) { + s = ChatColor.translateAlternateColorCodes('&', s.replace("{parkour-name}",name).replace("{checkpoint}",((p instanceof Checkpoint)?((Checkpoint)p).getCheckpointNo() + "":""))); + if (HubParkour.isPlaceholders()) { + s = PlaceholderAPI.setPlaceholders(null, s); + } + lines.add(s); + counter++; } - lines.add(s); - counter++; - } - hologram.setLines(lines); - holograms.put(p, hologram); + hologram.setLines(lines); + holograms.put(p, hologram); + }); } } public void removeHolograms() { for (IHologram h : holograms.values()) { - h.remove(); + if (HubParkour.isStopping()) { + h.remove(); + } else { + HubParkour.getScheduler().runAtLocation(h.getLocation(), t -> { + h.remove(); + }); + } } HubParkour.getHologramFactory().removeHologramsForParkour(this); } @@ -252,7 +252,9 @@ public void playerStart(IHubParkourPlayer p) { players.add(p); for (ClickableSign sign : CacheManager.getSigns().values()) { if (sign.getParkour().equals(this)) { - sign.refresh(); + HubParkour.getScheduler().runAtLocation(sign.getSignState().getLocation(), t -> { + sign.refresh(); + }); } } } @@ -271,7 +273,7 @@ public void playerEnd(IHubParkourPlayer p) { location.setZ(location.getZ() + 0.5); location.setX(location.getX() + 0.5); p.getPlayer().setVelocity(new Vector(0, 0, 0)); - p.getPlayer().teleport(location); + HubParkour.getScheduler().teleportAsync(p.getPlayer(), location); } } @@ -298,23 +300,17 @@ public List getLeaderboards() { public void setName(String name) { this.name = name; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setName(id, name); - } - }.runTaskAsynchronously(HubParkour.getInstance()); - new BukkitRunnable(){ - @Override - public void run() { - if (HubParkour.isHolograms()) { - generateHolograms(); - for (ILeaderboardHologram hologram : leaderboardHolograms) { - hologram.refresh(); - } - } + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setName(id, name); + }); + if (HubParkour.isHolograms()) { + generateHolograms(); + for (ILeaderboardHologram hologram : leaderboardHolograms) { + HubParkour.getScheduler().runAtLocation(hologram.getLocation(), t -> { + hologram.refresh(); + }); } - }.runTask(HubParkour.getInstance()); + } } public void setStartPoint(StartPoint point) { @@ -323,13 +319,10 @@ public void setStartPoint(StartPoint point) { CacheManager.addPoint(point); this.start.setParkour(this); point.placeMaterial(); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setStartPoint(id, point); - HubParkour.getInstance().getDbManager().resetSplitTimes(id); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setStartPoint(id, point); + HubParkour.getInstance().getDbManager().resetSplitTimes(id); + }); if (HubParkour.isHolograms()) { generateHolograms(); } @@ -341,13 +334,10 @@ public void setEndPoint(EndPoint point) { CacheManager.addPoint(point); this.endPoint.setParkour(this); point.placeMaterial(); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setEndPoint(id, point); - HubParkour.getInstance().getDbManager().resetSplitTimes(id); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setEndPoint(id, point); + HubParkour.getInstance().getDbManager().resetSplitTimes(id); + }); if (HubParkour.isHolograms()) { generateHolograms(); } @@ -356,12 +346,9 @@ public void run() { public void deleteExitPoint() { CacheManager.removePlate(this.exitPoint); this.exitPoint = null; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().deleteExitPoint(id); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().deleteExitPoint(id); + }); } public void setExitPoint(ExitPoint point, boolean alreadyExists) { @@ -373,19 +360,13 @@ public void setExitPoint(ExitPoint point, boolean alreadyExists) { this.exitPoint.setParkour(this); point.placeMaterial(); if (alreadyExists) { - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().updateExitPoint(id, point); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().updateExitPoint(id, point); + }); } else { - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setExitPoint(id, point); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setExitPoint(id, point); + }); } } @@ -395,12 +376,9 @@ public void setRestartPoint(RestartPoint point) { this.restartPoint = point; this.restartPoint.setParkour(this); CacheManager.addRestartPoint(point); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setRestartPoint(id, point); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setRestartPoint(id, point); + }); } public void addCheckpoint(Checkpoint point, int checkNo) { @@ -413,12 +391,9 @@ public void addCheckpoint(Checkpoint point, int checkNo) { this.checkpoints.add(point); } checkpoint.setCheckpointNo(checkpoint.getCheckpointNo() + 1); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().updateCheckpointNumber(id, checkpoint); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().updateCheckpointNumber(id, checkpoint); + }); } this.checkpoints.add(checkpoint); } @@ -428,16 +403,13 @@ public void run() { point.placeMaterial(); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().addCheckpoint(id, point); - HubParkour.getInstance().getDbManager().resetSplitTimes(id); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().addCheckpoint(id, point); + HubParkour.getInstance().getDbManager().resetSplitTimes(id); - CacheManager.addPoint(point); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + CacheManager.addPoint(point); + }); if (HubParkour.isHolograms()) { generateHolograms(); @@ -445,32 +417,23 @@ public void run() { } public void deleteCheckpoint(Checkpoint point) { - new BukkitRunnable(){ - @Override - public void run() { - CacheManager.removePlate(point); - } - }.runTask(HubParkour.getInstance()); + HubParkour.getScheduler().runAtLocation(point.getLocation(), t -> { + CacheManager.removePlate(point); + }); this.checkpoints.remove(point); for (Checkpoint checkpoint : checkpoints) { if (checkpoint.getCheckpointNo() > point.getCheckpointNo()) { checkpoint.setCheckpointNo(checkpoint.getCheckpointNo() - 1); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().updateCheckpointNumber(id, checkpoint); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().updateCheckpointNumber(id, checkpoint); + }); } } - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().deleteCheckpoint(id, point); - HubParkour.getInstance().getDbManager().resetSplitTimes(id); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().deleteCheckpoint(id, point); + HubParkour.getInstance().getDbManager().resetSplitTimes(id); + }); if (HubParkour.isHolograms()) { generateHolograms(); @@ -481,12 +444,9 @@ public void setBorders(List borderPoints) { this.borderPoints.clear(); this.borderPoints.addAll(borderPoints); - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setBorders(id, borderPoints); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setBorders(id, borderPoints); + }); } public List getBorders() { @@ -504,12 +464,9 @@ public UUID getServer() { public void setRewardCooldown(int rewardCooldown) { this.rewardCooldown = rewardCooldown; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setRewardCooldown(id, rewardCooldown); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setRewardCooldown(id, rewardCooldown); + }); } public Material getItemMaterial() { @@ -530,12 +487,9 @@ public void setItem(Material material, short data, int customModelData) { this.material = material; this.data = data; this.customModelData = customModelData; - new BukkitRunnable(){ - @Override - public void run() { - HubParkour.getInstance().getDbManager().setItem(id, material, data, customModelData); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + HubParkour.getScheduler().runAsync(t -> { + HubParkour.getInstance().getDbManager().setItem(id, material, data, customModelData); + }); } } diff --git a/plugin/src/main/java/me/block2block/hubparkour/entities/SetupWizard.java b/plugin/src/main/java/me/block2block/hubparkour/entities/SetupWizard.java index 4c35b9c..d4cc1f4 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/entities/SetupWizard.java +++ b/plugin/src/main/java/me/block2block/hubparkour/entities/SetupWizard.java @@ -10,7 +10,6 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; import java.util.ArrayList; import java.util.Collections; @@ -148,33 +147,28 @@ public boolean onChat(String message) { ParkourSetupEvent setupEvent = new ParkourSetupEvent(parkour, player); Bukkit.getPluginManager().callEvent(setupEvent); - new BukkitRunnable() { - @Override - public void run() { - for (PressurePlate pp : parkour.getAllPoints()) { - pp.placeMaterial(); - if (pp.getType() != 2) { - CacheManager.addPoint(pp); - } else { - CacheManager.addRestartPoint(pp); - } - } - if (HubParkour.isHolograms()) { - parkour.generateHolograms(); + for (PressurePlate pp : parkour.getAllPoints()) { + HubParkour.getScheduler().runAtLocation(pp.getLocation(), t -> { + pp.placeMaterial(); + if (pp.getType() != 2) { + CacheManager.addPoint(pp); + } else { + CacheManager.addRestartPoint(pp); } + }); + } - new BukkitRunnable() { - @Override - public void run() { - Parkour newParkour = HubParkour.getInstance().getDbManager().addParkour(parkour); - CacheManager.addParkour(newParkour); - CacheManager.exitSetup(); - ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Admin.Setup.Setup-Complete", "Parkour setup complete!", true, Collections.emptyMap()); - } - }.runTaskAsynchronously(HubParkour.getInstance()); - } - }.runTask(HubParkour.getInstance()); + if (HubParkour.isHolograms()) { + parkour.generateHolograms(); + } + + HubParkour.getScheduler().runAsync(t -> { + Parkour newParkour = HubParkour.getInstance().getDbManager().addParkour(parkour); + CacheManager.addParkour(newParkour); + CacheManager.exitSetup(); + ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Admin.Setup.Setup-Complete", "Parkour setup complete!", true, Collections.emptyMap()); + }); return true; case CHECKPOINTS: if (message.equalsIgnoreCase("done")) { diff --git a/plugin/src/main/java/me/block2block/hubparkour/entities/hologram/DHHologramFactory.java b/plugin/src/main/java/me/block2block/hubparkour/entities/hologram/DHHologramFactory.java index ec8d807..798f73e 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/entities/hologram/DHHologramFactory.java +++ b/plugin/src/main/java/me/block2block/hubparkour/entities/hologram/DHHologramFactory.java @@ -32,8 +32,12 @@ public IHologram createHologram(IParkour parkour, String name, Location location } public void removeHologram(IHologram hologram) { - holograms.get(hologram.getParkour().getId()).remove(hologram); - if (holograms.get(hologram.getParkour().getId()).isEmpty()) { + List hList = holograms.get(hologram.getParkour().getId()); + if (hList == null) { + return; + } + hList.remove(hologram); + if (hList.isEmpty()) { holograms.remove(hologram.getParkour().getId()); } } diff --git a/plugin/src/main/java/me/block2block/hubparkour/gui/ParkourListGUI.java b/plugin/src/main/java/me/block2block/hubparkour/gui/ParkourListGUI.java index 53f257e..17c3b84 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/gui/ParkourListGUI.java +++ b/plugin/src/main/java/me/block2block/hubparkour/gui/ParkourListGUI.java @@ -63,7 +63,7 @@ public void onClick(int row, int column, ItemStack item, ClickType clickType) { l.setX(l.getX() + 0.5); l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); - player.teleport(l); + HubParkour.getScheduler().teleportAsync(player, l); ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Teleport.Teleported", "You have been teleported to the parkour restart point.", true, Collections.emptyMap()); player.closeInventory(); } else { diff --git a/plugin/src/main/java/me/block2block/hubparkour/listeners/FallListener.java b/plugin/src/main/java/me/block2block/hubparkour/listeners/FallListener.java index 5e22e5e..c3534db 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/listeners/FallListener.java +++ b/plugin/src/main/java/me/block2block/hubparkour/listeners/FallListener.java @@ -14,7 +14,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.ArrayList; @@ -73,16 +72,13 @@ public void onFall(EntityDamageEvent e) { l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l); + HubParkour.getScheduler().teleportAsync(p, l); ConfigUtil.sendMessage(p, "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); if (e.getCause() == EntityDamageEvent.DamageCause.VOID) { hasTeleported.add(p); - new BukkitRunnable() { - @Override - public void run() { - hasTeleported.remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 5); + HubParkour.getScheduler().runLater(t -> { + hasTeleported.remove(p); + }, 5); } } } diff --git a/plugin/src/main/java/me/block2block/hubparkour/listeners/GUIListener.java b/plugin/src/main/java/me/block2block/hubparkour/listeners/GUIListener.java index 7ea384a..349e77b 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/listeners/GUIListener.java +++ b/plugin/src/main/java/me/block2block/hubparkour/listeners/GUIListener.java @@ -12,7 +12,6 @@ import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; -import org.bukkit.scheduler.BukkitRunnable; public class GUIListener implements Listener { @@ -46,13 +45,9 @@ public void onClick(InventoryClickEvent e) { if (e.getInventory().getType() != InventoryType.PLAYER && e.getInventory().getType() != InventoryType.CREATIVE) { if (gui.cancelEvent()) { e.setCancelled(true); - - new BukkitRunnable() { - @Override - public void run() { - ((Player) e.getWhoClicked()).updateInventory(); - } - }.runTaskLater(HubParkour.getInstance(), 3); + HubParkour.getScheduler().runAtEntityLater(e.getWhoClicked(), t -> { + ((Player) e.getWhoClicked()).updateInventory(); + }, 3); } int row = e.getSlot() / 9; int column = e.getSlot() % 9; diff --git a/plugin/src/main/java/me/block2block/hubparkour/listeners/ItemClickListener.java b/plugin/src/main/java/me/block2block/hubparkour/listeners/ItemClickListener.java index bbc8f9a..98599e3 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/listeners/ItemClickListener.java +++ b/plugin/src/main/java/me/block2block/hubparkour/listeners/ItemClickListener.java @@ -21,7 +21,6 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.*; @@ -73,24 +72,18 @@ public void onInteract(PlayerInteractEvent e) { l.setY(l.getY() + 0.5); l.setZ(l.getZ() + 0.5); p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l); + HubParkour.getScheduler().teleportAsync(p, l); ConfigUtil.sendMessage(p, "Messages.Commands.Reset.Successful", "You have been teleported to the start.", true, Collections.emptyMap()); FallListener.getHasTeleported().add(p); - new BukkitRunnable() { - @Override - public void run() { - FallListener.getHasTeleported().remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 5); + HubParkour.getScheduler().runLater(t -> { + FallListener.getHasTeleported().remove(p); + }, 5); } else { confirmationRequied.put(p, 0); ConfigUtil.sendMessage(p, "Messages.Parkour.Confirm-Action", "Please click the item again to confirm your action.", true, Collections.emptyMap()); - new BukkitRunnable() { - @Override - public void run() { - confirmationRequied.remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 100); + HubParkour.getScheduler().runLater(t -> { + confirmationRequied.remove(p); + }, 100); } return; case 1: @@ -116,24 +109,18 @@ public void run() { l2.setY(l2.getY() + 0.5); l2.setZ(l2.getZ() + 0.5); p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l2); + HubParkour.getScheduler().teleportAsync(p, l2); ConfigUtil.sendMessage(p, "Messages.Commands.Checkpoint.Successful", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); FallListener.getHasTeleported().add(p); - new BukkitRunnable() { - @Override - public void run() { - FallListener.getHasTeleported().remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 5); + HubParkour.getScheduler().runLater(t -> { + FallListener.getHasTeleported().remove(p); + }, 5); } else { confirmationRequied.put(p, 1); ConfigUtil.sendMessage(p, "Messages.Parkour.Confirm-Action", "Please click the item again to confirm your action.", true, Collections.emptyMap()); - new BukkitRunnable() { - @Override - public void run() { - confirmationRequied.remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 100); + HubParkour.getScheduler().runLater(t -> { + confirmationRequied.remove(p); + }, 100); } return; case 2: @@ -146,22 +133,16 @@ public void run() { if ((confirmationRequied.containsKey(p) && confirmationRequied.get(p) == 2) || !ConfigUtil.getBoolean("Settings.Parkour-Items.Cancel.Confirmation", true)) { confirmationRequied.remove(p); //Delay to avoid clientside visual glitch - new BukkitRunnable(){ - @Override - public void run() { - player.end(ParkourPlayerFailEvent.FailCause.LEAVE); - } - }.runTaskLater(HubParkour.getInstance(), 1); + HubParkour.getScheduler().runAtEntityLater(player.getPlayer(), t -> { + player.end(ParkourPlayerFailEvent.FailCause.LEAVE); + }, 1); ConfigUtil.sendMessage(p, "Messages.Commands.Leave.Left", "You have left the parkour and your progress has been reset.", true, Collections.emptyMap()); } else { confirmationRequied.put(p, 2); ConfigUtil.sendMessage(p, "Messages.Parkour.Confirm-Action", "Please click the item again to confirm your action.", true, Collections.emptyMap()); - new BukkitRunnable() { - @Override - public void run() { - confirmationRequied.remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 100); + HubParkour.getScheduler().runLater(t -> { + confirmationRequied.remove(p); + }, 100); } return; case 3: { diff --git a/plugin/src/main/java/me/block2block/hubparkour/listeners/PressurePlateListener.java b/plugin/src/main/java/me/block2block/hubparkour/listeners/PressurePlateListener.java index 2988a35..7d9c21e 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/listeners/PressurePlateListener.java +++ b/plugin/src/main/java/me/block2block/hubparkour/listeners/PressurePlateListener.java @@ -14,13 +14,13 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; import org.bukkit.block.data.Waterlogged; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.potion.PotionEffect; -import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.Collections; @@ -77,203 +77,240 @@ public void onPressurePlate(PlayerMoveEvent e) { l.setZ(l.getZ() + 0.5); e.getPlayer().setFallDistance(0); e.getPlayer().setVelocity(new Vector(0, 0, 0)); - e.getPlayer().teleport(l); + HubParkour.getScheduler().teleportAsync(e.getPlayer(), l); ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); return; } } } - if (e.getFrom().getBlock().getType().equals(e.getTo().getBlock().getType())) { - if (CacheManager.isParkour(e.getPlayer())) { - if (e.getPlayer().isOnGround()) { - Player p = e.getPlayer(); - HubParkourPlayer player = CacheManager.getPlayer(p); - player.touchedGround(); - } - if (e.getPlayer().getVelocity().getY() > STILL) { - Player p = e.getPlayer(); - HubParkourPlayer player = CacheManager.getPlayer(p); - if (player.hasTouchedGround() && !player.getPlayer().isOnGround()) { - player.leftGround(); - player.getParkourRun().jumped(); - } - } - Location from = e.getFrom().clone(); - Location to = e.getTo().clone(); - from.setY(0); - to.setY(0); - double distance = Math.abs(from.distance(to)); - { - Player p = e.getPlayer(); - HubParkourPlayer player = CacheManager.getPlayer(p); - player.getParkourRun().addTravel(distance); - } - if (ConfigUtil.getBoolean("Settings.Incompatibility-Workarounds.VoidSpawn.Enabled", false)) { - if (ConfigUtil.getBoolean("Settings.Teleport.On-Void", true)) { - if (ConfigUtil.getInt("Settings.Incompatibility-Workarounds.VoidSpawn.Min-Y", -1) > e.getTo().getY()) { + Location fromIni = e.getFrom(); + Location toIni = e.getTo(); + + HubParkour.getScheduler().runAtLocation(fromIni, t -> { + Material fromType = fromIni.getBlock().getType(); + HubParkour.getScheduler().runAtLocation(toIni, tt -> { + Block toBlock = toIni.getBlock(); + Material toType = toBlock.getType(); + + if (fromType.equals(toType)) { + if (CacheManager.isParkour(e.getPlayer())) { + if (e.getPlayer().isOnGround()) { Player p = e.getPlayer(); - p.setFallDistance(0); HubParkourPlayer player = CacheManager.getPlayer(p); - - Location l = player.getParkour().getRestartPoint().getLocation().clone(); - if (player.getLastReached() != 0) { - l = player.getParkour().getCheckpoint(player.getLastReached()).getLocation().clone(); + player.touchedGround(); + } + if (e.getPlayer().getVelocity().getY() > STILL) { + Player p = e.getPlayer(); + HubParkourPlayer player = CacheManager.getPlayer(p); + if (player.hasTouchedGround() && !player.getPlayer().isOnGround()) { + player.leftGround(); + player.getParkourRun().jumped(); } - l.setX(l.getX() + 0.5); - l.setY(l.getY() + 0.5); - l.setZ(l.getZ() + 0.5); - double health = p.getHealth(); - p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l); - ConfigUtil.sendMessage(p, "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); - FallListener.getHasTeleported().add(p); - new BukkitRunnable() { - @Override - public void run() { - FallListener.getHasTeleported().remove(p); + } + Location from = fromIni.clone(); + Location to = toIni.clone(); + from.setY(0); + to.setY(0); + double distance = Math.abs(from.distance(to)); + { + Player p = e.getPlayer(); + HubParkourPlayer player = CacheManager.getPlayer(p); + player.getParkourRun().addTravel(distance); + } + if (ConfigUtil.getBoolean("Settings.Incompatibility-Workarounds.VoidSpawn.Enabled", false)) { + if (ConfigUtil.getBoolean("Settings.Teleport.On-Void", true)) { + if (ConfigUtil.getInt("Settings.Incompatibility-Workarounds.VoidSpawn.Min-Y", -1) > toIni.getY()) { + Player p = e.getPlayer(); + p.setFallDistance(0); + HubParkourPlayer player = CacheManager.getPlayer(p); + + Location l = player.getParkour().getRestartPoint().getLocation().clone(); + if (player.getLastReached() != 0) { + l = player.getParkour().getCheckpoint(player.getLastReached()).getLocation().clone(); + } + l.setX(l.getX() + 0.5); + l.setY(l.getY() + 0.5); + l.setZ(l.getZ() + 0.5); + double health = p.getHealth(); + p.setVelocity(new Vector(0, 0, 0)); + HubParkour.getScheduler().teleportAsync(p, l); + ConfigUtil.sendMessage(p, "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); + FallListener.getHasTeleported().add(p); + HubParkour.getScheduler().runLater(ta -> { + FallListener.getHasTeleported().remove(p); + }, 5); + return; } - }.runTaskLater(HubParkour.getInstance(), 5); - return; + } } + } + return; } - } - return; - } - if (CacheManager.isParkour(e.getPlayer())) { - if (e.getTo().getBlock().isLiquid()) { - boolean tpwater = ConfigUtil.getBoolean("Settings.Teleport.On-Water", true); - boolean tplava = ConfigUtil.getBoolean("Settings.Teleport.On-Lava", true); - ParkourPlayerTeleportEvent.TeleportReason reason = - ParkourPlayerTeleportEvent.TeleportReason.UNKNOWN; - if (e.getTo().getBlock().getType() == Material.WATER || e.getTo().getBlock().getType() == Material.BUBBLE_COLUMN) { - reason = ParkourPlayerTeleportEvent.TeleportReason.WATER; - if (!tpwater) { - return; - } - } else if (e.getTo().getBlock().getType() == Material.LAVA) { - reason = ParkourPlayerTeleportEvent.TeleportReason.LAVA; - if (!tplava) { - return; - } - } else if (HubParkour.isPre1_13()) { - if (e.getTo().getBlock().getType() == Material.getMaterial("STATIONARY_WATER")) { - reason = ParkourPlayerTeleportEvent.TeleportReason.WATER; - if (!tpwater) { - return; + if (CacheManager.isParkour(e.getPlayer())) { + if (toBlock.isLiquid()) { + boolean tpwater = ConfigUtil.getBoolean("Settings.Teleport.On-Water", true); + boolean tplava = ConfigUtil.getBoolean("Settings.Teleport.On-Lava", true); + ParkourPlayerTeleportEvent.TeleportReason reason = + ParkourPlayerTeleportEvent.TeleportReason.UNKNOWN; + if (toBlock.getType() == Material.WATER || toBlock.getType() == Material.BUBBLE_COLUMN) { + reason = ParkourPlayerTeleportEvent.TeleportReason.WATER; + if (!tpwater) { + return; + } + } else if (toBlock.getType() == Material.LAVA) { + reason = ParkourPlayerTeleportEvent.TeleportReason.LAVA; + if (!tplava) { + return; + } + } else if (HubParkour.isPre1_13()) { + if (toBlock.getType() == Material.getMaterial("STATIONARY_WATER")) { + reason = ParkourPlayerTeleportEvent.TeleportReason.WATER; + if (!tpwater) { + return; + } + } else { + reason = ParkourPlayerTeleportEvent.TeleportReason.LAVA; + if (!tplava) { + return; + } + } } - } else { - reason = ParkourPlayerTeleportEvent.TeleportReason.LAVA; - if (!tplava) { + if (tpwater || tplava) { + HubParkourPlayer player = CacheManager.getPlayer(e.getPlayer()); + Parkour parkour = player.getParkour(); + ParkourPlayerTeleportEvent event = new ParkourPlayerTeleportEvent(parkour, player, parkour.getRestartPoint(), reason); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + + Location l = parkour.getRestartPoint().getLocation().clone(); + if (player.getLastReached() != 0) { + l = parkour.getCheckpoint(player.getLastReached()).getLocation().clone(); + } + l.setX(l.getX() + 0.5); + l.setY(l.getY() + 0.5); + l.setZ(l.getZ() + 0.5); + e.getPlayer().setFallDistance(0); + e.getPlayer().setVelocity(new Vector(0, 0, 0)); + HubParkour.getScheduler().teleportAsync(e.getPlayer(), l); + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); return; } + } else if (!HubParkour.isPre1_13()) { + if (toBlock.getBlockData() instanceof Waterlogged) { + Waterlogged waterlogged = (Waterlogged) toBlock.getBlockData(); + if (waterlogged.isWaterlogged() && ConfigUtil.getBoolean("Settings.Teleport.On-Water", true)) { + HubParkourPlayer player = CacheManager.getPlayer(e.getPlayer()); + Parkour parkour = player.getParkour(); + Location l = parkour.getRestartPoint().getLocation().clone(); + if (player.getLastReached() != 0) { + l = parkour.getCheckpoint(player.getLastReached()).getLocation().clone(); + } + l.setX(l.getX() + 0.5); + l.setY(l.getY() + 0.5); + l.setZ(l.getZ() + 0.5); + e.getPlayer().setFallDistance(0); + e.getPlayer().setVelocity(new Vector(0, 0, 0)); + HubParkour.getScheduler().teleportAsync(e.getPlayer(), l); + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); + return; + } + } } - } - if (tpwater || tplava) { - HubParkourPlayer player = CacheManager.getPlayer(e.getPlayer()); - Parkour parkour = player.getParkour(); - ParkourPlayerTeleportEvent event = new ParkourPlayerTeleportEvent(parkour, player, parkour.getRestartPoint(), reason); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { - return; - } + if (ConfigUtil.getBoolean("Settings.Incompatibility-Workarounds.VoidSpawn.Enabled", false)) { + if (ConfigUtil.getBoolean("Settings.Teleport.On-Void", true)) { + if (ConfigUtil.getInt("Settings.Incompatibility-Workarounds.VoidSpawn.Min-Y", -1) > e.getTo().getY()) { + Player p = e.getPlayer(); + p.setFallDistance(0); + HubParkourPlayer player = CacheManager.getPlayer(p); + Parkour parkour = player.getParkour(); - Location l = parkour.getRestartPoint().getLocation().clone(); - if (player.getLastReached() != 0) { - l = parkour.getCheckpoint(player.getLastReached()).getLocation().clone(); - } - l.setX(l.getX() + 0.5); - l.setY(l.getY() + 0.5); - l.setZ(l.getZ() + 0.5); - e.getPlayer().setFallDistance(0); - e.getPlayer().setVelocity(new Vector(0, 0, 0)); - e.getPlayer().teleport(l); - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); - return; - } - } else if (!HubParkour.isPre1_13()) { - if (e.getTo().getBlock().getBlockData() instanceof Waterlogged) { - Waterlogged waterlogged = (Waterlogged) e.getTo().getBlock().getBlockData(); - if (waterlogged.isWaterlogged() && ConfigUtil.getBoolean("Settings.Teleport.On-Water", true)) { - HubParkourPlayer player = CacheManager.getPlayer(e.getPlayer()); - Parkour parkour = player.getParkour(); - Location l = parkour.getRestartPoint().getLocation().clone(); - if (player.getLastReached() != 0) { - l = parkour.getCheckpoint(player.getLastReached()).getLocation().clone(); + Location l = parkour.getRestartPoint().getLocation().clone(); + if (player.getLastReached() != 0) { + l = parkour.getCheckpoint(player.getLastReached()).getLocation().clone(); + } + l.setX(l.getX() + 0.5); + l.setY(l.getY() + 0.5); + l.setZ(l.getZ() + 0.5); + double health = p.getHealth(); + p.setVelocity(new Vector(0, 0, 0)); + HubParkour.getScheduler().teleportAsync(p, l); + ConfigUtil.sendMessage(p, "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); + FallListener.getHasTeleported().add(p); + HubParkour.getScheduler().runLater(() -> { + FallListener.getHasTeleported().remove(p); + }, 5); + return; + } } - l.setX(l.getX() + 0.5); - l.setY(l.getY() + 0.5); - l.setZ(l.getZ() + 0.5); - e.getPlayer().setFallDistance(0); - e.getPlayer().setVelocity(new Vector(0, 0, 0)); - e.getPlayer().teleport(l); - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); - return; } } - } - if (ConfigUtil.getBoolean("Settings.Incompatibility-Workarounds.VoidSpawn.Enabled", false)) { - if (ConfigUtil.getBoolean("Settings.Teleport.On-Void", true)) { - if (ConfigUtil.getInt("Settings.Incompatibility-Workarounds.VoidSpawn.Min-Y", -1) > e.getTo().getY()) { - Player p = e.getPlayer(); - p.setFallDistance(0); - HubParkourPlayer player = CacheManager.getPlayer(p); - Parkour parkour = player.getParkour(); - - Location l = parkour.getRestartPoint().getLocation().clone(); - if (player.getLastReached() != 0) { - l = parkour.getCheckpoint(player.getLastReached()).getLocation().clone(); + if (CacheManager.isPoint(toBlock.getLocation())) { + PressurePlate pp = CacheManager.getPoint(toBlock.getLocation()); + Player p = e.getPlayer(); + if (CacheManager.isSomeoneEdit()) { + if (pp.getParkour().equals(CacheManager.getEditWizard().getParkour())) { + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Currently-Being-Edited", "This parkour is currently in being modified by an admin. Please wait to attempt this parkour!", true, Collections.emptyMap()); + return; } - l.setX(l.getX() + 0.5); - l.setY(l.getY() + 0.5); - l.setZ(l.getZ() + 0.5); - double health = p.getHealth(); - p.setVelocity(new Vector(0, 0, 0)); - p.teleport(l); - ConfigUtil.sendMessage(p, "Messages.Parkour.Teleport", "You have been teleported to your last checkpoint.", true, Collections.emptyMap()); - FallListener.getHasTeleported().add(p); - new BukkitRunnable() { - @Override - public void run() { - FallListener.getHasTeleported().remove(p); - } - }.runTaskLater(HubParkour.getInstance(), 5); - return; } - } - } - } - if (CacheManager.isPoint(e.getTo().getBlock().getLocation())) { - PressurePlate pp = CacheManager.getPoint(e.getTo().getBlock().getLocation()); - Player p = e.getPlayer(); - if (CacheManager.isSomeoneEdit()) { - if (pp.getParkour().equals(CacheManager.getEditWizard().getParkour())) { - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Currently-Being-Edited", "This parkour is currently in being modified by an admin. Please wait to attempt this parkour!", true, Collections.emptyMap()); - return; - } - } - switch (pp.getType()) { - case 0: - //StartPoint - if (CacheManager.isParkour(p)) { - HubParkourPlayer old = CacheManager.getPlayer(p); - - if (old.getParkour().getId() == pp.getParkour().getId()) { - //Restart the parkour. + switch (pp.getType()) { + case 0: + //StartPoint + if (CacheManager.isParkour(p)) { + HubParkourPlayer old = CacheManager.getPlayer(p); - old.restart(); - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Restarted", "You have restarted the parkour! Your time has been reset to 0!", true, Collections.emptyMap()); - return; - } else { - //Do nothing, is doing a different parkour. - if (ConfigUtil.getBoolean("Settings.Start-When-In-Parkour", false)) { - old.end(ParkourPlayerFailEvent.FailCause.NEW_PARKOUR); + if (old.getParkour().getId() == pp.getParkour().getId()) { + //Restart the parkour. + + old.restart(); + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Restarted", "You have restarted the parkour! Your time has been reset to 0!", true, Collections.emptyMap()); + return; + } else { + //Do nothing, is doing a different parkour. + if (ConfigUtil.getBoolean("Settings.Start-When-In-Parkour", false)) { + old.end(ParkourPlayerFailEvent.FailCause.NEW_PARKOUR); - //Start the new parkour + //Start the new parkour + Parkour parkour = (Parkour) pp.getParkour(); + HubParkourPlayer player = new HubParkourPlayer(old, parkour); + ParkourPlayerStartEvent event = new ParkourPlayerStartEvent(parkour, player, player.getStartTime()); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } + parkour.playerStart(player); + CacheManager.playerStart(player); + if (ConfigUtil.getBoolean("Settings.Exploit-Prevention.Remove-Potion-Effects", true)) { + for (PotionEffect effect : p.getActivePotionEffects()) { + p.removePotionEffect(effect.getType()); + } + } + if (ConfigUtil.getBoolean("Settings.Exploit-Prevention.Remove-Fly", true)) { + p.setFlying(false); + if (Material.getMaterial("ELYTRA") != null) { + p.setGliding(false); + } + } + + Map bindings = new HashMap<>(); + bindings.put("parkour-name", parkour.getName()); + + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Started", "You have started the &a{parkour-name} &rparkour!", true, bindings); + return; + } else { + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Already-In-Parkour", "You are already doing a parkour. If you wish to leave the current parkour and start a new one, do /parkour leave.", true, Collections.emptyMap()); + return; + } + } + } else { + //Start the parkour Parkour parkour = (Parkour) pp.getParkour(); - HubParkourPlayer player = new HubParkourPlayer(old, parkour); + HubParkourPlayer player = new HubParkourPlayer(p, parkour); ParkourPlayerStartEvent event = new ParkourPlayerStartEvent(parkour, player, player.getStartTime()); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -292,95 +329,64 @@ public void run() { p.setGliding(false); } } + player.startParkour(); Map bindings = new HashMap<>(); bindings.put("parkour-name", parkour.getName()); ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Started", "You have started the &a{parkour-name} &rparkour!", true, bindings); - return; + + } + break; + case 1: + //EndPoint + if (CacheManager.isParkour(p)) { + HubParkourPlayer player = CacheManager.getPlayer(p); + if (player.getParkour().getId() == pp.getParkour().getId()) { + //End the parkour. + player.end(null); + return; + } else { + //Do nothing, is doing a different parkour. + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Already-In-Parkour", "You are already doing a parkour. If you wish to leave the current parkour and start a new one, do /parkour leave.", true, Collections.emptyMap()); + return; + } } else { - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Already-In-Parkour", "You are already doing a parkour. If you wish to leave the current parkour and start a new one, do /parkour leave.", true, Collections.emptyMap()); - return; + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.End.Not-Started", "You must start a parkour in order to finish it.", true, Collections.emptyMap()); } - } - } else { - //Start the parkour - Parkour parkour = (Parkour) pp.getParkour(); - HubParkourPlayer player = new HubParkourPlayer(p, parkour); - ParkourPlayerStartEvent event = new ParkourPlayerStartEvent(parkour, player, player.getStartTime()); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { + break; + case 2: return; - } - parkour.playerStart(player); - CacheManager.playerStart(player); - if (ConfigUtil.getBoolean("Settings.Exploit-Prevention.Remove-Potion-Effects", true)) { - for (PotionEffect effect : p.getActivePotionEffects()) { - p.removePotionEffect(effect.getType()); - } - } - if (ConfigUtil.getBoolean("Settings.Exploit-Prevention.Remove-Fly", true)) { - p.setFlying(false); - if (Material.getMaterial("ELYTRA") != null) { - p.setGliding(false); - } - } - player.startParkour(); - - Map bindings = new HashMap<>(); - bindings.put("parkour-name", parkour.getName()); - - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Started", "You have started the &a{parkour-name} &rparkour!", true, bindings); + case 3: + //Checkpoint + if (CacheManager.isParkour(p)) { + HubParkourPlayer player = CacheManager.getPlayer(p); + if (player.getParkour().getId() == pp.getParkour().getId()) { + //Checkpoint the parkour. + Checkpoint checkpoint = (Checkpoint) pp; + ParkourPlayerCheckpointEvent event = new ParkourPlayerCheckpointEvent(pp.getParkour(), player, checkpoint); + Bukkit.getPluginManager().callEvent(event); + if (event.isCancelled()) { + return; + } - } - break; - case 1: - //EndPoint - if (CacheManager.isParkour(p)) { - HubParkourPlayer player = CacheManager.getPlayer(p); - if (player.getParkour().getId() == pp.getParkour().getId()) { - //End the parkour. - player.end(null); - return; - } else { - //Do nothing, is doing a different parkour. - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Already-In-Parkour", "You are already doing a parkour. If you wish to leave the current parkour and start a new one, do /parkour leave.", true, Collections.emptyMap()); - return; - } - } else { - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.End.Not-Started", "You must start a parkour in order to finish it.", true, Collections.emptyMap()); - } - break; - case 2: - return; - case 3: - //Checkpoint - if (CacheManager.isParkour(p)) { - HubParkourPlayer player = CacheManager.getPlayer(p); - if (player.getParkour().getId() == pp.getParkour().getId()) { - //Checkpoint the parkour. - Checkpoint checkpoint = (Checkpoint) pp; - ParkourPlayerCheckpointEvent event = new ParkourPlayerCheckpointEvent(pp.getParkour(), player, checkpoint); - Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { - return; + player.checkpoint(checkpoint); + return; + } else { + //Do nothing, is doing a different parkour. + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Already-In-Parkour", "You are already doing a parkour. If you wish to leave the current parkour and start a new one, do /parkour leave.", true, Collections.emptyMap()); + return; + } + } else { + ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Checkpoints.Not-Started", "You must start a parkour in order to reach checkpoints!", true, Collections.emptyMap()); } - - player.checkpoint(checkpoint); + break; + case 5: return; - } else { - //Do nothing, is doing a different parkour. - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Already-In-Parkour", "You are already doing a parkour. If you wish to leave the current parkour and start a new one, do /parkour leave.", true, Collections.emptyMap()); - return; - } - } else { - ConfigUtil.sendMessageOrDefault(e.getPlayer(), "Messages.Parkour.Checkpoints.Not-Started", "You must start a parkour in order to reach checkpoints!", true, Collections.emptyMap()); } - break; - case 5: - return; - } - } + } + }); + }); } } diff --git a/plugin/src/main/java/me/block2block/hubparkour/signs/StartClickableSign.java b/plugin/src/main/java/me/block2block/hubparkour/signs/StartClickableSign.java index 3f7c70a..d02b97e 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/signs/StartClickableSign.java +++ b/plugin/src/main/java/me/block2block/hubparkour/signs/StartClickableSign.java @@ -1,5 +1,6 @@ package me.block2block.hubparkour.signs; +import me.block2block.hubparkour.HubParkour; import me.block2block.hubparkour.api.events.player.ParkourPlayerFailEvent; import me.block2block.hubparkour.api.events.player.ParkourPlayerStartEvent; import me.block2block.hubparkour.api.signs.ClickableSign; @@ -63,8 +64,7 @@ public void onClick(Player p) { //Do nothing, is doing a different parkour. if (ConfigUtil.getBoolean("Settings.Start-When-In-Parkour", false)) { CacheManager.getPlayer(p).end(ParkourPlayerFailEvent.FailCause.NEW_PARKOUR); - - p.teleport(parkour.getRestartPoint().getLocation()); + HubParkour.getScheduler().teleportAsync(p, parkour.getRestartPoint().getLocation()); //Start the new parkour HubParkourPlayer player = new HubParkourPlayer(p, (Parkour) parkour); ParkourPlayerStartEvent event = new ParkourPlayerStartEvent(parkour, player, player.getStartTime()); @@ -98,7 +98,7 @@ public void onClick(Player p) { } } else { //Start the parkour - p.teleport(parkour.getRestartPoint().getLocation()); + HubParkour.getScheduler().teleportAsync(p, parkour.getRestartPoint().getLocation()); Parkour parkour = (Parkour) this.parkour; HubParkourPlayer player = new HubParkourPlayer(p, parkour); ParkourPlayerStartEvent event = new ParkourPlayerStartEvent(parkour, player, player.getStartTime()); diff --git a/plugin/src/main/java/me/block2block/hubparkour/signs/StatsClickableSign.java b/plugin/src/main/java/me/block2block/hubparkour/signs/StatsClickableSign.java index ac4f823..fc5571f 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/signs/StatsClickableSign.java +++ b/plugin/src/main/java/me/block2block/hubparkour/signs/StatsClickableSign.java @@ -8,7 +8,6 @@ import org.bukkit.ChatColor; import org.bukkit.block.Sign; import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; import java.util.*; @@ -40,43 +39,40 @@ public int getType() { } public void onClick(Player player) { - new BukkitRunnable(){ - @Override - public void run() { - Statistics statistics = HubParkour.getInstance().getDbManager().getParkourStatistics(player, (Parkour) parkour); + HubParkour.getScheduler().runAsync(t -> { + Statistics statistics = HubParkour.getInstance().getDbManager().getParkourStatistics(player, (Parkour) parkour); - if (statistics.getAttempts().size() == 0) { - ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Stats.No-Parkour-Stats", "No stats have been tracked for you in this parkour yet. Attempt this parkour to earn stats!", true, Collections.emptyMap()); - return; - } + if (statistics.getAttempts().size() == 0) { + ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Stats.No-Parkour-Stats", "No stats have been tracked for you in this parkour yet. Attempt this parkour to earn stats!", true, Collections.emptyMap()); + return; + } - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(); - //default help list - List defaultList = new ArrayList<>(); - defaultList.add("Your stats for parkour &a{parkour-name}&r:"); - defaultList.add("&aParkour attempts:&r {attempts}"); - defaultList.add("&aParkour completions:&r {completions}"); - defaultList.add("&aTotal jumps:&r {jumps}"); - defaultList.add("&aTotal checkpoints hit:&r {checkpoints}"); - defaultList.add("&aTotal distance travelled:&r {distance} blocks"); - defaultList.add("&aTotal time in parkour:&r {time}"); + //default help list + List defaultList = new ArrayList<>(); + defaultList.add("Your stats for parkour &a{parkour-name}&r:"); + defaultList.add("&aParkour attempts:&r {attempts}"); + defaultList.add("&aParkour completions:&r {completions}"); + defaultList.add("&aTotal jumps:&r {jumps}"); + defaultList.add("&aTotal checkpoints hit:&r {checkpoints}"); + defaultList.add("&aTotal distance travelled:&r {distance} blocks"); + defaultList.add("&aTotal time in parkour:&r {time}"); - for (String s : ConfigUtil.getStringList("Messages.Commands.Stats.Parkour-Stats", defaultList)) { - sb.append(s).append("\n"); - } + for (String s : ConfigUtil.getStringList("Messages.Commands.Stats.Parkour-Stats", defaultList)) { + sb.append(s).append("\n"); + } - Map bindings = new HashMap<>(); - bindings.put("parkour-name", parkour.getName()); - bindings.put("attempts", statistics.getAttempts().get(parkour.getId()) + ""); - bindings.put("completions", statistics.getCompletions().get(parkour.getId()) + ""); - bindings.put("jumps", statistics.getJumps().get(parkour.getId()) + ""); - bindings.put("distance", String.format("%.2f", statistics.getTotalDistanceTravelled().get(parkour.getId()))); - bindings.put("time", ConfigUtil.formatTime(statistics.getTotalTime().get(parkour.getId()))); - bindings.put("checkpoints", statistics.getCheckpointsHit().get(parkour.getId()) + ""); + Map bindings = new HashMap<>(); + bindings.put("parkour-name", parkour.getName()); + bindings.put("attempts", statistics.getAttempts().get(parkour.getId()) + ""); + bindings.put("completions", statistics.getCompletions().get(parkour.getId()) + ""); + bindings.put("jumps", statistics.getJumps().get(parkour.getId()) + ""); + bindings.put("distance", String.format("%.2f", statistics.getTotalDistanceTravelled().get(parkour.getId()))); + bindings.put("time", ConfigUtil.formatTime(statistics.getTotalTime().get(parkour.getId()))); + bindings.put("checkpoints", statistics.getCheckpointsHit().get(parkour.getId()) + ""); - ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Stats.Parkour-Stats", sb.toString(), true, bindings); - } - }.runTaskAsynchronously(HubParkour.getInstance()); + ConfigUtil.sendMessageOrDefault(player, "Messages.Commands.Stats.Parkour-Stats", sb.toString(), true, bindings); + }); } } diff --git a/plugin/src/main/java/me/block2block/hubparkour/signs/TeleportClickableSign.java b/plugin/src/main/java/me/block2block/hubparkour/signs/TeleportClickableSign.java index a6c6df4..986987c 100644 --- a/plugin/src/main/java/me/block2block/hubparkour/signs/TeleportClickableSign.java +++ b/plugin/src/main/java/me/block2block/hubparkour/signs/TeleportClickableSign.java @@ -1,5 +1,6 @@ package me.block2block.hubparkour.signs; +import me.block2block.hubparkour.HubParkour; import me.block2block.hubparkour.api.signs.ClickableSign; import me.block2block.hubparkour.entities.Parkour; import me.block2block.hubparkour.utils.ConfigUtil; @@ -38,6 +39,6 @@ public int getType() { } public void onClick(Player player) { - player.teleport(parkour.getRestartPoint().getLocation()); + HubParkour.getScheduler().teleportAsync(player, parkour.getRestartPoint().getLocation()); } } diff --git a/plugin/src/main/resources/plugin.yml b/plugin/src/main/resources/plugin.yml index 27c0c14..4a8cf67 100644 --- a/plugin/src/main/resources/plugin.yml +++ b/plugin/src/main/resources/plugin.yml @@ -8,7 +8,8 @@ database: true prefix: HubParkour load: POSTWORLD api-version: "1.13" -softdepend: ['DecentHolograms', 'FancyHolograms', 'PlaceholderAPI', 'Multiverse-Core', "My_Worlds"] +softdepend: ['DecentHolograms', 'FancyHolograms', 'PlaceholderAPI', 'Multiverse-Core', 'My_Worlds', 'Worlds'] +folia-supported: true commands: parkour: aliases: [pk]