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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- "history": [
- {
- "state": "OPEN"
- }
- ],
- "lastFilter": {}
-}
- {
- "prStates": [
- {
- "id": {
- "id": "PR_kwDODkrbms6IPaCY",
- "number": 44
- },
- "lastSeen": 1740662625149
- },
- {
- "id": {
- "id": "PR_kwDODkrbms6IKpnk",
- "number": 42
- },
- "lastSeen": 1740662802321
- },
- {
- "id": {
- "id": "PR_kwDODkrbms4_0Zh1",
- "number": 28
- },
- "lastSeen": 1740662970634
- },
- {
- "id": {
- "id": "PR_kwDODkrbms5bn8-t",
- "number": 35
- },
- "lastSeen": 1740663028639
- },
- {
- "id": {
- "id": "PR_kwDODkrbms5jChUa",
- "number": 36
- },
- "lastSeen": 1740663029508
- },
- {
- "id": {
- "id": "PR_kwDODkrbms54pWZt",
- "number": 40
- },
- "lastSeen": 1740663030318
- },
- {
- "id": {
- "id": "PR_kwDODkrbms6IQES_",
- "number": 45
- },
- "lastSeen": 1740663030829
- },
- {
- "id": {
- "id": "PR_kwDODkrbms6IRTqy",
- "number": 46
- },
- "lastSeen": 1740663045608
- }
- ]
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- "selectedUrlAndAccountId": {
- "url": "https://github.com/Block2Block/HubParkour.git",
- "accountId": "e48afc10-7980-4fd9-bd8e-e19e9d60f5d7"
- }
-}
- {}
- {
- "isMigrated": true
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {
- "customColor": "",
- "associatedIndex": 4
-}
-
-
-
-
-
-
-
-
-
- {
- "keyToString": {
- "DefaultHtmlFileTemplate": "HTML File",
- "Maven.hubparkour [clean,javadoc:javadoc].executor": "Run",
- "Maven.hubparkour [clean,package,-U].executor": "Run",
- "Maven.hubparkour [clean,package,deploy,-pl...].executor": "Run",
- "Maven.hubparkour [clean,package,deploy].executor": "Run",
- "Maven.hubparkour [clean,package].executor": "Run",
- "Maven.hubparkour [javadoc:javadoc,-pl...].executor": "Run",
- "Maven.hubparkour [javadoc:javadoc].executor": "Run",
- "RunOnceActivity.MCP Project settings loaded": "true",
- "RunOnceActivity.OpenProjectViewOnStart": "true",
- "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
- "RunOnceActivity.git.unshallow": "true",
- "RunOnceActivity.typescript.service.memoryLimit.init": "true",
- "SONARLINT_PRECOMMIT_ANALYSIS": "true",
- "WebServerToolWindowFactoryState": "false",
- "com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
- "extract.method.default.visibility": "private",
- "git-widget-placeholder": "master",
- "junie.onboarding.icon.badge.shown": "true",
- "kotlin-language-version-configured": "true",
- "last_opened_file_path": "E:/Programming Projects/Java/HubParkour",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)",
- "nodejs_package_manager_path": "npm",
- "project.structure.last.edited": "Project",
- "project.structure.proportion": "0.0",
- "project.structure.side.proportion": "0.0",
- "settings.editor.selected.configurable": "AtomSelectConfig",
- "to.speed.mode.migration.done": "true",
- "vue.rearranger.settings.migration": "true"
- }
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1573135762024
-
-
- 1573135762024
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1588429523231
-
-
-
- 1588429523231
-
-
- 1588429564888
-
-
-
- 1588429564888
-
-
- 1588540465278
-
-
-
- 1588540465278
-
-
- 1588942539742
-
-
-
- 1588942539742
-
-
- 1588942578839
-
-
-
- 1588942578839
-
-
- 1591627659457
-
-
-
- 1591627659457
-
-
- 1594165474462
-
-
-
- 1594165474462
-
-
- 1597105601162
-
-
-
- 1597105601162
-
-
- 1597107054199
-
-
-
- 1597107054199
-
-
- 1597107181905
-
-
-
- 1597107181905
-
-
- 1597184914602
-
-
-
- 1597184914602
-
-
- 1598391522483
-
-
-
- 1598391522483
-
-
- 1601913055339
-
-
-
- 1601913055339
-
-
- 1604880651243
-
-
-
- 1604880651243
-
-
- 1611598676930
-
-
-
- 1611598676930
-
-
- 1611695144286
-
-
-
- 1611695144286
-
-
- 1617550445386
-
-
-
- 1617550445386
-
-
- 1619037015115
-
-
-
- 1619037015115
-
-
- 1625076140273
-
-
-
- 1625076140273
-
-
- 1625077232869
-
-
-
- 1625077232869
-
-
- 1625078971782
-
-
-
- 1625078971782
-
-
- 1625498156654
-
-
-
- 1625498156655
-
-
- 1625598420448
-
-
-
- 1625598420448
-
-
- 1625608499312
-
-
-
- 1625608499312
-
-
- 1625608878832
-
-
-
- 1625608878833
-
-
- 1626371533677
-
-
-
- 1626371533677
-
-
- 1626381931160
-
-
-
- 1626381931161
-
-
- 1632593002908
-
-
-
- 1632593002908
-
-
- 1640370858585
-
-
-
- 1640370858585
-
-
- 1641560131329
-
-
-
- 1641560131329
-
-
- 1642155044551
-
-
-
- 1642155044551
-
-
- 1642722038345
-
-
-
- 1642722038346
-
-
- 1642723001017
-
-
-
- 1642723001017
-
-
- 1642723206923
-
-
-
- 1642723206923
-
-
- 1642723406485
-
-
-
- 1642723406485
-
-
- 1642874119061
-
-
-
- 1642874119061
-
-
- 1643391384514
-
-
-
- 1643391384515
-
-
- 1643642390111
-
-
-
- 1643642390111
-
-
- 1643642749936
-
-
-
- 1643642749937
-
-
- 1643648657359
-
-
-
- 1643648657359
-
-
- 1643648904869
-
-
-
- 1643648904869
-
-
- 1660953462540
-
-
-
- 1660953462540
-
-
- 1664409172994
-
-
-
- 1664409172994
-
-
- 1664414037106
-
-
-
- 1664414037106
-
-
- 1664416282294
-
-
-
- 1664416282294
-
-
- 1664481139227
-
-
-
- 1664481139227
-
-
- 1664485083415
-
-
-
- 1664485083415
-
-
- 1681494979973
-
-
-
- 1681494979974
-
-
- 1681495150549
-
-
-
- 1681495150549
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ 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]