mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-20 10:43:12 +01:00
Compare commits
20 Commits
pr/4925
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
25bdcdb075 | ||
|
|
a522ab7b2f | ||
|
|
a0923ad786 | ||
|
|
dd04ee48b9 | ||
|
|
89b895af81 | ||
|
|
9e1f5b44a6 | ||
|
|
a54590576f | ||
|
|
06160c6d04 | ||
|
|
12e5a7f054 | ||
|
|
1f20e6344b | ||
|
|
13ba51cdf1 | ||
|
|
4f22391465 | ||
|
|
5f1a545437 | ||
|
|
bad7023129 | ||
|
|
785f18c13a | ||
|
|
357995ecb0 | ||
|
|
3e26eca48e | ||
|
|
dd339c20ea | ||
|
|
c34230a82e | ||
|
|
192626f4da |
@@ -1,3 +1,29 @@
|
|||||||
|
Version 2.1.227
|
||||||
|
Optimized mcMMO onChunkUnload(ChunkUnloadEvent)
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
This update should greatly improve impact on TPS from mcMMO in the ChunkUnloadEvent, thanks to M_G_P and Epicurious for testing.
|
||||||
|
Version 2.1.226
|
||||||
|
Added Short_Grass to experience.yml for Herbalism
|
||||||
|
Updated Hylian Treasures "Bushes" alias to use short_grass when playing on new Minecraft versions
|
||||||
|
Fixed dirt_path and grass_block not being correctly whitelisted for herbalism abilities
|
||||||
|
Version 2.1.225
|
||||||
|
Fixed text from mcMMO not being sent or displayed to the player
|
||||||
|
Updated Adventure dependencies
|
||||||
|
Added new API McMMOPlayerNotificationEvent.getPlayer
|
||||||
|
|
||||||
|
Version 2.1.224
|
||||||
|
Updated to a new build of ACF to fix NoSuchFieldException locale
|
||||||
|
Improved Folia Support (Thanks HSGamer)
|
||||||
|
Fishing Shake has 8 ranks again
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
At some point Shake got reduced to 1 rank, this didn't really make sense as it was meant to be a skill that ranked up and got better over time.
|
||||||
|
It now has 8 ranks again, you may need to update advanced.yml and skillranks.yml to get the new ranks.
|
||||||
|
Version 2.1.223
|
||||||
|
Folia Support added (Thanks to HSGamer, TechnicallyCoded, Rockyers, and Yomamaeatstoes)
|
||||||
|
|
||||||
|
NOTES: This update brings mcMMO to Folia, not all features are guaranteed to work but from limited testing it appears to be working well.
|
||||||
Version 2.1.222
|
Version 2.1.222
|
||||||
Fixed dupe exploit
|
Fixed dupe exploit
|
||||||
Glow Lichen default XP changed from 200 to 5
|
Glow Lichen default XP changed from 200 to 5
|
||||||
|
|||||||
@@ -29,6 +29,12 @@ In December 2018, the original author and creator of mcMMO (nossr50) returned an
|
|||||||
#### Classic Maintainer
|
#### Classic Maintainer
|
||||||
[](https://github.com/t00thpick1)
|
[](https://github.com/t00thpick1)
|
||||||
|
|
||||||
|
#### Folia Inquisitors
|
||||||
|
[<img src="https://github.com/HSGamer.png" width=80 alt="HSGamer">](https://github.com/HSGamer)
|
||||||
|
[<img src="https://github.com/TechnicallyCoded.png" width=80 alt="TechnicallyCoded">](https://github.com/TechnicallyCoded)
|
||||||
|
[<img src="https://github.com/Yomamaeatstoes.png" width=80 alt="Yomamaeatstoes">](https://github.com/Yomamaeatstoes)
|
||||||
|
[<img src="https://github.com/Rockyers.png" width=80 alt="Rockyers">](https://github.com/Rockyers)
|
||||||
|
|
||||||
## Former Team Members
|
## Former Team Members
|
||||||
|
|
||||||
### Former Lead & Awesome guy
|
### Former Lead & Awesome guy
|
||||||
|
|||||||
104
pom.xml
104
pom.xml
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||||
<artifactId>mcMMO</artifactId>
|
<artifactId>mcMMO</artifactId>
|
||||||
<version>2.1.222</version>
|
<version>2.1.227-SNAPSHOT</version>
|
||||||
<name>mcMMO</name>
|
<name>mcMMO</name>
|
||||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||||
<scm>
|
<scm>
|
||||||
@@ -150,20 +150,20 @@
|
|||||||
<include>net.kyori:examination-api</include>
|
<include>net.kyori:examination-api</include>
|
||||||
<include>net.kyori:examination-string</include>
|
<include>net.kyori:examination-string</include>
|
||||||
<include>net.kyori:adventure-text-serializer-legacy</include>
|
<include>net.kyori:adventure-text-serializer-legacy</include>
|
||||||
|
<include>net.kyori:adventure-text-serializer-gson</include>
|
||||||
|
<include>net.kyori:adventure-text-serializer-json</include>
|
||||||
<include>net.kyori:adventure-text-serializer-bungeecord</include>
|
<include>net.kyori:adventure-text-serializer-bungeecord</include>
|
||||||
<include>net.kyori:adventure-text-serializer-craftbukkit</include>
|
<include>net.kyori:adventure-text-serializer-craftbukkit</include>
|
||||||
<include>net.kyori:adventure-text-serializer-gson-legacy-impl</include>
|
<include>net.kyori:adventure-text-serializer-gson-legacy-impl</include>
|
||||||
|
<include>net.kyori:adventure-text-serializer-json-legacy-impl</include>
|
||||||
<include>co.aikar:acf-bukkit</include>
|
<include>co.aikar:acf-bukkit</include>
|
||||||
|
<include>com.tcoded:FoliaLib</include>
|
||||||
</includes>
|
</includes>
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
<relocations>
|
<relocations>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>net.kyori.examination</pattern>
|
<pattern>net.kyori</pattern>
|
||||||
<shadedPattern>com.gmail.nossr50.mcmmo.kyori.examination</shadedPattern>
|
<shadedPattern>com.gmail.nossr50.mcmmo.kyori</shadedPattern>
|
||||||
</relocation>
|
|
||||||
<relocation>
|
|
||||||
<pattern>net.kyori.adventure</pattern>
|
|
||||||
<shadedPattern>com.gmail.nossr50.mcmmo.kyori.adventure</shadedPattern>
|
|
||||||
</relocation>
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>co.aikar.commands</pattern>
|
<pattern>co.aikar.commands</pattern>
|
||||||
@@ -189,6 +189,10 @@
|
|||||||
<pattern>org.bstats</pattern>
|
<pattern>org.bstats</pattern>
|
||||||
<shadedPattern>com.gmail.nossr50.mcmmo.metrics.bstats</shadedPattern>
|
<shadedPattern>com.gmail.nossr50.mcmmo.metrics.bstats</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.tcoded.folialib</pattern>
|
||||||
|
<shadedPattern>com.gmail.nossr50.mcmmo.folialib</shadedPattern>
|
||||||
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
@@ -245,6 +249,10 @@
|
|||||||
<id>placeholderapi</id>
|
<id>placeholderapi</id>
|
||||||
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>devmart-other</id>
|
||||||
|
<url>https://nexuslite.gcnt.net/repos/other/</url>
|
||||||
|
</repository>
|
||||||
<!-- ... -->
|
<!-- ... -->
|
||||||
<!-- ... -->
|
<!-- ... -->
|
||||||
</repositories>
|
</repositories>
|
||||||
@@ -260,41 +268,65 @@
|
|||||||
<artifactId>acf-bukkit</artifactId> <!-- Don't forget to replace this -->
|
<artifactId>acf-bukkit</artifactId> <!-- Don't forget to replace this -->
|
||||||
<version>0.5.1-SNAPSHOT</version> <!-- Replace this as well -->
|
<version>0.5.1-SNAPSHOT</version> <!-- Replace this as well -->
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- adventure-api, adventure-text-serializer-gson, adventure-platform-bukkit-->
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-text-serializer-bungeecord</artifactId>
|
||||||
|
<version>4.3.1</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.kyori</groupId>
|
<groupId>net.kyori</groupId>
|
||||||
<artifactId>adventure-text-serializer-gson</artifactId>
|
<artifactId>adventure-text-serializer-gson</artifactId>
|
||||||
<version>4.13.0</version>
|
<version>4.14.0</version>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.kyori</groupId>
|
|
||||||
<artifactId>adventure-api</artifactId>
|
|
||||||
<version>4.13.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.kyori</groupId>
|
|
||||||
<artifactId>adventure-nbt</artifactId>
|
|
||||||
<version>4.13.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.kyori</groupId>
|
|
||||||
<artifactId>adventure-key</artifactId>
|
|
||||||
<version>4.13.0</version>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.kyori</groupId>
|
<groupId>net.kyori</groupId>
|
||||||
<artifactId>adventure-text-serializer-gson-legacy-impl</artifactId>
|
<artifactId>adventure-text-serializer-gson-legacy-impl</artifactId>
|
||||||
<version>4.13.0</version>
|
<version>4.14.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.kyori</groupId>
|
<groupId>net.kyori</groupId>
|
||||||
<artifactId>adventure-platform-bukkit</artifactId>
|
<artifactId>adventure-text-serializer-json</artifactId>
|
||||||
<version>4.3.0</version>
|
<version>4.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-text-serializer-json-legacy-impl</artifactId>
|
||||||
|
<version>4.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-api</artifactId>
|
||||||
|
<version>4.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-nbt</artifactId>
|
||||||
|
<version>4.14.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-key</artifactId>
|
||||||
|
<version>4.14.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.kyori</groupId>
|
<groupId>net.kyori</groupId>
|
||||||
<artifactId>adventure-platform-api</artifactId>
|
<artifactId>adventure-platform-api</artifactId>
|
||||||
<version>4.3.0</version>
|
<version>4.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-platform-bukkit</artifactId>
|
||||||
|
<version>4.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-platform-facet</artifactId>
|
||||||
|
<version>4.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.kyori</groupId>
|
||||||
|
<artifactId>adventure-platform-viaversion</artifactId>
|
||||||
|
<version>4.3.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven.scm</groupId>
|
<groupId>org.apache.maven.scm</groupId>
|
||||||
@@ -310,7 +342,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.19.2-R0.1-SNAPSHOT</version>
|
<version>1.20.4-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.sk89q.worldedit</groupId>
|
||||||
|
<artifactId>worldedit-bukkit</artifactId>
|
||||||
|
<version>7.2.0-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -369,7 +407,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
<version>32.0.0-jre</version> <!-- At this time Spigot is including 29.0 Guava classes that we are using -->
|
<version>32.1.1-jre</version> <!-- At this time Spigot is including 29.0 Guava classes that we are using -->
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.tcoded</groupId>
|
||||||
|
<artifactId>FoliaLib</artifactId>
|
||||||
|
<version>0.3.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ public class McImportCommand implements CommandExecutor {
|
|||||||
else if (materialName.contains("LOG") || materialName.contains("LEAVES")) {
|
else if (materialName.contains("LOG") || materialName.contains("LEAVES")) {
|
||||||
skillName = "Woodcutting";
|
skillName = "Woodcutting";
|
||||||
}
|
}
|
||||||
else if (materialName.contains("GRASS") || materialName.contains("FLOWER") || materialName.contains("CROP")) {
|
else if (materialName.contains("GRASS") || materialName.contains("SHORT_GRASS") || materialName.contains("FLOWER") || materialName.contains("CROP")) {
|
||||||
skillName = "Herbalism";
|
skillName = "Herbalism";
|
||||||
}
|
}
|
||||||
else if (materialName.contains("DIRT") || materialName.contains("SAND")) {
|
else if (materialName.contains("DIRT") || materialName.contains("SAND")) {
|
||||||
|
|||||||
@@ -64,10 +64,10 @@ public class ConvertDatabaseCommand implements CommandExecutor {
|
|||||||
mcMMO.getDatabaseManager().saveUser(profile);
|
mcMMO.getDatabaseManager().saveUser(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileLoadingTask(player), 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
||||||
}
|
}
|
||||||
|
|
||||||
new DatabaseConversionTask(oldDatabase, sender, previousType.toString(), newType.toString()).runTaskAsynchronously(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAsync(new DatabaseConversionTask(oldDatabase, sender, previousType.toString(), newType.toString()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ public class ConvertExperienceCommand implements CommandExecutor {
|
|||||||
UserManager.saveAll();
|
UserManager.saveAll();
|
||||||
UserManager.clearAll();
|
UserManager.clearAll();
|
||||||
|
|
||||||
new FormulaConversionTask(sender, newType).runTaskLater(mcMMO.p, 1);
|
mcMMO.p.getFoliaLib().getImpl().runLater(new FormulaConversionTask(sender, newType), 1);
|
||||||
|
|
||||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||||
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileLoadingTask(player), 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -250,7 +250,7 @@ public class PtpCommand implements TabExecutor {
|
|||||||
|
|
||||||
if (warmup > 0) {
|
if (warmup > 0) {
|
||||||
teleportingPlayer.sendMessage(LocaleLoader.getString("Teleport.Commencing", warmup));
|
teleportingPlayer.sendMessage(LocaleLoader.getString("Teleport.Commencing", warmup));
|
||||||
new TeleportationWarmup(mcMMOPlayer, mcMMOTarget).runTaskLater(mcMMO.p, 20 * warmup);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(teleportingPlayer, new TeleportationWarmup(mcMMOPlayer, mcMMOTarget), 20 * warmup);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
EventUtils.handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
|
EventUtils.handlePartyTeleportEvent(teleportingPlayer, targetPlayer);
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ public class McrankCommand implements TabExecutor {
|
|||||||
boolean useBoard = mcMMO.p.getGeneralConfig().getScoreboardsEnabled() && (sender instanceof Player) && (mcMMO.p.getGeneralConfig().getRankUseBoard());
|
boolean useBoard = mcMMO.p.getGeneralConfig().getScoreboardsEnabled() && (sender instanceof Player) && (mcMMO.p.getGeneralConfig().getRankUseBoard());
|
||||||
boolean useChat = !useBoard || mcMMO.p.getGeneralConfig().getRankUseChat();
|
boolean useChat = !useBoard || mcMMO.p.getGeneralConfig().getRankUseChat();
|
||||||
|
|
||||||
new McrankCommandAsyncTask(playerName, sender, useBoard, useChat).runTaskAsynchronously(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAsync(new McrankCommandAsyncTask(playerName, sender, useBoard, useChat));
|
||||||
}
|
}
|
||||||
|
|
||||||
private long getCDSeconds(McMMOPlayer mcMMOPlayer, long cooldownMillis) {
|
private long getCDSeconds(McMMOPlayer mcMMOPlayer, long cooldownMillis) {
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ public class MctopCommand implements TabExecutor {
|
|||||||
boolean useBoard = (sender instanceof Player) && (mcMMO.p.getGeneralConfig().getTopUseBoard());
|
boolean useBoard = (sender instanceof Player) && (mcMMO.p.getGeneralConfig().getTopUseBoard());
|
||||||
boolean useChat = !useBoard || mcMMO.p.getGeneralConfig().getTopUseChat();
|
boolean useChat = !useBoard || mcMMO.p.getGeneralConfig().getTopUseChat();
|
||||||
|
|
||||||
new MctopCommandAsyncTask(page, skill, sender, useBoard, useChat).runTaskAsynchronously(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAsync(new MctopCommandAsyncTask(page, skill, sender, useBoard, useChat));
|
||||||
}
|
}
|
||||||
|
|
||||||
private PrimarySkillType extractSkill(CommandSender sender, String skillName) {
|
private PrimarySkillType extractSkill(CommandSender sender, String skillName) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.gmail.nossr50.config.BukkitConfig;
|
|||||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||||
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
import com.gmail.nossr50.util.LogUtils;
|
import com.gmail.nossr50.util.LogUtils;
|
||||||
import com.gmail.nossr50.util.text.StringUtils;
|
import com.gmail.nossr50.util.text.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@@ -228,7 +229,7 @@ public class TreasureConfig extends BukkitConfig {
|
|||||||
for (String dropper : dropList) {
|
for (String dropper : dropList) {
|
||||||
if (dropper.equals("Bushes")) {
|
if (dropper.equals("Bushes")) {
|
||||||
AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.FERN), hylianTreasure);
|
AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.FERN), hylianTreasure);
|
||||||
AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.TALL_GRASS), hylianTreasure);
|
AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(BlockUtils.getShortGrass()), hylianTreasure);
|
||||||
for (Material species : Tag.SAPLINGS.getValues())
|
for (Material species : Tag.SAPLINGS.getValues())
|
||||||
AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure);
|
AddHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure);
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import org.apache.tomcat.jdbc.pool.DataSource;
|
|||||||
import org.apache.tomcat.jdbc.pool.PoolProperties;
|
import org.apache.tomcat.jdbc.pool.PoolProperties;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -1356,7 +1355,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
statement.executeUpdate("ALTER TABLE `" + tablePrefix + "users` ADD `uuid` varchar(36) NULL DEFAULT NULL");
|
statement.executeUpdate("ALTER TABLE `" + tablePrefix + "users` ADD `uuid` varchar(36) NULL DEFAULT NULL");
|
||||||
statement.executeUpdate("ALTER TABLE `" + tablePrefix + "users` ADD UNIQUE INDEX `uuid` (`uuid`) USING BTREE");
|
statement.executeUpdate("ALTER TABLE `" + tablePrefix + "users` ADD UNIQUE INDEX `uuid` (`uuid`) USING BTREE");
|
||||||
|
|
||||||
new GetUUIDUpdatesRequired().runTaskLaterAsynchronously(mcMMO.p, 100); // wait until after first purge
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new GetUUIDUpdatesRequired(), 100); // wait until after first purge
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_UUIDS);
|
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_UUIDS);
|
||||||
@@ -1369,7 +1368,7 @@ public final class SQLDatabaseManager implements DatabaseManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class GetUUIDUpdatesRequired extends BukkitRunnable {
|
private class GetUUIDUpdatesRequired implements Runnable {
|
||||||
public void run() {
|
public void run() {
|
||||||
massUpdateLock.lock();
|
massUpdateLock.lock();
|
||||||
List<String> names = new ArrayList<>();
|
List<String> names = new ArrayList<>();
|
||||||
|
|||||||
@@ -951,7 +951,7 @@ public class McMMOPlayer implements Identified {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setToolPreparationMode(tool, false);
|
setToolPreparationMode(tool, false);
|
||||||
new AbilityDisableTask(this, superAbilityType).runTaskLater(mcMMO.p, (long) ticks * Misc.TICK_CONVERSION_FACTOR);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new AbilityDisableTask(this, superAbilityType), (long) ticks * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void processAbilityActivation(@NotNull PrimarySkillType primarySkillType) {
|
public void processAbilityActivation(@NotNull PrimarySkillType primarySkillType) {
|
||||||
@@ -1013,7 +1013,7 @@ public class McMMOPlayer implements Identified {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setToolPreparationMode(tool, true);
|
setToolPreparationMode(tool, true);
|
||||||
new ToolLowerTask(this, tool).runTaskLater(mcMMO.p, 4 * Misc.TICK_CONVERSION_FACTOR);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new ToolLowerTask(this, tool), 4 * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,16 +102,16 @@ public class PlayerProfile {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void scheduleAsyncSave() {
|
public void scheduleAsyncSave() {
|
||||||
new PlayerProfileSaveTask(this, false).runTaskAsynchronously(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAsync(new PlayerProfileSaveTask(this, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scheduleAsyncSaveDelay() {
|
public void scheduleAsyncSaveDelay() {
|
||||||
new PlayerProfileSaveTask(this, false).runTaskLaterAsynchronously(mcMMO.p, 20);
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileSaveTask(this, false), 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public void scheduleSyncSaveDelay() {
|
public void scheduleSyncSaveDelay() {
|
||||||
new PlayerProfileSaveTask(this, true).runTaskLater(mcMMO.p, 20);
|
mcMMO.p.getFoliaLib().getImpl().runLater(new PlayerProfileSaveTask(this, true), 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(boolean useSync) {
|
public void save(boolean useSync) {
|
||||||
@@ -138,7 +138,7 @@ public class PlayerProfile {
|
|||||||
|
|
||||||
//Back out of async saving if we detect a server shutdown, this is not always going to be caught
|
//Back out of async saving if we detect a server shutdown, this is not always going to be caught
|
||||||
if(mcMMO.isServerShutdownExecuted() || useSync)
|
if(mcMMO.isServerShutdownExecuted() || useSync)
|
||||||
new PlayerProfileSaveTask(this, true).runTask(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runNextTick(new PlayerProfileSaveTask(this, true));
|
||||||
else
|
else
|
||||||
scheduleAsyncSave();
|
scheduleAsyncSave();
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public enum SubSkillType {
|
|||||||
FISHING_MAGIC_HUNTER(1),
|
FISHING_MAGIC_HUNTER(1),
|
||||||
FISHING_MASTER_ANGLER(8),
|
FISHING_MASTER_ANGLER(8),
|
||||||
FISHING_TREASURE_HUNTER(8),
|
FISHING_TREASURE_HUNTER(8),
|
||||||
FISHING_SHAKE(1),
|
FISHING_SHAKE(8),
|
||||||
|
|
||||||
/* Herbalism */
|
/* Herbalism */
|
||||||
HERBALISM_DOUBLE_DROPS(1),
|
HERBALISM_DOUBLE_DROPS(1),
|
||||||
|
|||||||
@@ -27,8 +27,13 @@ public class McMMOPlayerNotificationEvent extends Event implements Cancellable {
|
|||||||
protected Component notificationTextComponent;
|
protected Component notificationTextComponent;
|
||||||
protected final NotificationType notificationType;
|
protected final NotificationType notificationType;
|
||||||
|
|
||||||
public McMMOPlayerNotificationEvent(Player who, NotificationType notificationType, Component notificationTextComponent, McMMOMessageType chatMessageType, boolean isMessageAlsoBeingSentToChat) {
|
protected final Player player;
|
||||||
|
|
||||||
|
public McMMOPlayerNotificationEvent(Player player, NotificationType notificationType,
|
||||||
|
Component notificationTextComponent, McMMOMessageType chatMessageType,
|
||||||
|
boolean isMessageAlsoBeingSentToChat) {
|
||||||
super(false);
|
super(false);
|
||||||
|
this.player = player;
|
||||||
this.notificationType = notificationType;
|
this.notificationType = notificationType;
|
||||||
this.notificationTextComponent = notificationTextComponent;
|
this.notificationTextComponent = notificationTextComponent;
|
||||||
this.chatMessageType = chatMessageType;
|
this.chatMessageType = chatMessageType;
|
||||||
@@ -48,6 +53,10 @@ public class McMMOPlayerNotificationEvent extends Event implements Cancellable {
|
|||||||
isMessageAlsoBeingSentToChat = messageAlsoBeingSentToChat;
|
isMessageAlsoBeingSentToChat = messageAlsoBeingSentToChat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
public Component getNotificationTextComponent() {
|
public Component getNotificationTextComponent() {
|
||||||
return notificationTextComponent;
|
return notificationTextComponent;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,14 +136,15 @@ public class BlockListener implements Listener {
|
|||||||
|
|
||||||
final BlockFace direction = event.getDirection();
|
final BlockFace direction = event.getDirection();
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(mcMMO.p, () -> {
|
|
||||||
for (final Block block : event.getBlocks()) {
|
for (final Block block : event.getBlocks()) {
|
||||||
final Block movedBlock = block.getRelative(direction);
|
mcMMO.p.getFoliaLib().getImpl().runAtLocation(block.getLocation(), t -> {
|
||||||
|
final Block movedBlock = block.getRelative(direction);
|
||||||
|
|
||||||
if(BlockUtils.isWithinWorldBounds(movedBlock)) {
|
if (BlockUtils.isWithinWorldBounds(movedBlock)) {
|
||||||
BlockUtils.setUnnaturalBlock(movedBlock);
|
BlockUtils.setUnnaturalBlock(movedBlock);
|
||||||
}
|
}
|
||||||
}});
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -242,7 +242,7 @@ public class EntityListener implements Listener {
|
|||||||
|
|
||||||
entity.setMetadata(MetadataConstants.METADATA_KEY_TRAVELING_BLOCK, MetadataConstants.MCMMO_METADATA_VALUE);
|
entity.setMetadata(MetadataConstants.METADATA_KEY_TRAVELING_BLOCK, MetadataConstants.MCMMO_METADATA_VALUE);
|
||||||
TravelingBlockMetaCleanup metaCleanupTask = new TravelingBlockMetaCleanup(entity, pluginRef);
|
TravelingBlockMetaCleanup metaCleanupTask = new TravelingBlockMetaCleanup(entity, pluginRef);
|
||||||
metaCleanupTask.runTaskTimer(pluginRef, 20, 20*60); //6000 ticks is 5 minutes
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityTimer(entity, metaCleanupTask, 20, 20*60); //6000 ticks is 5 minutes
|
||||||
}
|
}
|
||||||
else if (isTracked) {
|
else if (isTracked) {
|
||||||
BlockUtils.setUnnaturalBlock(block);
|
BlockUtils.setUnnaturalBlock(block);
|
||||||
|
|||||||
@@ -439,7 +439,7 @@ public class InventoryListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
new PlayerUpdateInventoryTask((Player) whoClicked).runTaskLater(plugin, 0);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(whoClicked, new PlayerUpdateInventoryTask((Player) whoClicked));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ import org.bukkit.event.entity.PlayerDeathEvent;
|
|||||||
import org.bukkit.event.player.*;
|
import org.bukkit.event.player.*;
|
||||||
import org.bukkit.inventory.EquipmentSlot;
|
import org.bukkit.inventory.EquipmentSlot;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
@@ -149,12 +148,7 @@ public class PlayerListener implements Listener {
|
|||||||
new MobHealthDisplayUpdaterTask(attacker).run();
|
new MobHealthDisplayUpdaterTask(attacker).run();
|
||||||
|
|
||||||
// set the name back
|
// set the name back
|
||||||
new BukkitRunnable() {
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(attacker, () -> MobHealthbarUtils.handleMobHealthbars(attacker, 0, mcMMO.p), 1);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
MobHealthbarUtils.handleMobHealthbars(attacker, 0, mcMMO.p);
|
|
||||||
}
|
|
||||||
}.runTaskLater(mcMMO.p, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -595,7 +589,7 @@ public class PlayerListener implements Listener {
|
|||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
//Delay loading for 3 seconds in case the player has a save task running, its hacky but it should do the trick
|
//Delay loading for 3 seconds in case the player has a save task running, its hacky but it should do the trick
|
||||||
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 60);
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileLoadingTask(player), 60);
|
||||||
|
|
||||||
if (mcMMO.p.getGeneralConfig().getMOTDEnabled() && Permissions.motd(player)) {
|
if (mcMMO.p.getGeneralConfig().getMOTDEnabled() && Permissions.motd(player)) {
|
||||||
Motd.displayAll(player);
|
Motd.displayAll(player);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.gmail.nossr50.listeners;
|
|||||||
|
|
||||||
import com.gmail.nossr50.config.WorldBlacklist;
|
import com.gmail.nossr50.config.WorldBlacklist;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@@ -30,7 +29,8 @@ public class WorldListener implements Listener {
|
|||||||
if(WorldBlacklist.isWorldBlacklisted(event.getWorld()))
|
if(WorldBlacklist.isWorldBlacklisted(event.getWorld()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(mcMMO.p, () -> {
|
// Using 50 ms later as I do not know of a way to run one tick later (safely)
|
||||||
|
plugin.getFoliaLib().getImpl().runLater(() -> {
|
||||||
for (BlockState blockState : event.getBlocks()) {
|
for (BlockState blockState : event.getBlocks()) {
|
||||||
mcMMO.getPlaceStore().setFalse(blockState);
|
mcMMO.getPlaceStore().setFalse(blockState);
|
||||||
}
|
}
|
||||||
@@ -64,6 +64,8 @@ public class WorldListener implements Listener {
|
|||||||
|
|
||||||
Chunk chunk = event.getChunk();
|
Chunk chunk = event.getChunk();
|
||||||
|
|
||||||
mcMMO.getPlaceStore().chunkUnloaded(chunk.getX(), chunk.getZ(), event.getWorld());
|
mcMMO.p.getFoliaLib().getImpl().runAsync(task -> {
|
||||||
|
mcMMO.getPlaceStore().chunkUnloaded(chunk.getX(), chunk.getZ(), event.getWorld());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ import com.gmail.nossr50.util.skills.SkillTools;
|
|||||||
import com.gmail.nossr50.util.skills.SmeltingTracker;
|
import com.gmail.nossr50.util.skills.SmeltingTracker;
|
||||||
import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
||||||
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
import com.gmail.nossr50.worldguard.WorldGuardManager;
|
||||||
|
import com.tcoded.folialib.FoliaLib;
|
||||||
|
import com.tcoded.folialib.util.InvalidTickDelayNotifier;
|
||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
||||||
import net.shatteredlands.shatt.backup.ZipLibrary;
|
import net.shatteredlands.shatt.backup.ZipLibrary;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
@@ -137,6 +139,9 @@ public class mcMMO extends JavaPlugin {
|
|||||||
|
|
||||||
private GeneralConfig generalConfig;
|
private GeneralConfig generalConfig;
|
||||||
private AdvancedConfig advancedConfig;
|
private AdvancedConfig advancedConfig;
|
||||||
|
|
||||||
|
private FoliaLib foliaLib;
|
||||||
|
|
||||||
// private RepairConfig repairConfig;
|
// private RepairConfig repairConfig;
|
||||||
// private SalvageConfig salvageConfig;
|
// private SalvageConfig salvageConfig;
|
||||||
// private PersistentDataConfig persistentDataConfig;
|
// private PersistentDataConfig persistentDataConfig;
|
||||||
@@ -167,6 +172,10 @@ public class mcMMO extends JavaPlugin {
|
|||||||
//Filter out any debug messages (if debug/verbose logging is not enabled)
|
//Filter out any debug messages (if debug/verbose logging is not enabled)
|
||||||
getLogger().setFilter(new LogFilter(this));
|
getLogger().setFilter(new LogFilter(this));
|
||||||
|
|
||||||
|
//Folia lib plugin instance
|
||||||
|
foliaLib = new FoliaLib(this);
|
||||||
|
InvalidTickDelayNotifier.disableNotifications = true;
|
||||||
|
|
||||||
setupFilePaths();
|
setupFilePaths();
|
||||||
generalConfig = new GeneralConfig(getDataFolder()); //Load before skillTools
|
generalConfig = new GeneralConfig(getDataFolder()); //Load before skillTools
|
||||||
skillTools = new SkillTools(this); //Load after general config
|
skillTools = new SkillTools(this); //Load after general config
|
||||||
@@ -229,18 +238,21 @@ public class mcMMO extends JavaPlugin {
|
|||||||
|
|
||||||
if(serverAPIOutdated)
|
if(serverAPIOutdated)
|
||||||
{
|
{
|
||||||
Bukkit
|
foliaLib
|
||||||
.getScheduler()
|
.getImpl()
|
||||||
.scheduleSyncRepeatingTask(this,
|
.runTimer(
|
||||||
() -> getLogger().severe("You are running an outdated version of "+platformManager.getServerSoftware()+", mcMMO will not work unless you update to a newer version!"),
|
() -> getLogger().severe("You are running an outdated version of "+platformManager.getServerSoftware()+", mcMMO will not work unless you update to a newer version!"),
|
||||||
20, 20*60*30);
|
20, 20*60*30
|
||||||
|
);
|
||||||
|
|
||||||
if(platformManager.getServerSoftware() == ServerSoftwareType.CRAFT_BUKKIT)
|
if(platformManager.getServerSoftware() == ServerSoftwareType.CRAFT_BUKKIT)
|
||||||
{
|
{
|
||||||
Bukkit.getScheduler()
|
foliaLib
|
||||||
.scheduleSyncRepeatingTask(this,
|
.getImpl()
|
||||||
|
.runTimer(
|
||||||
() -> getLogger().severe("We have detected you are using incompatible server software, our best guess is that you are using CraftBukkit. mcMMO requires Spigot or Paper, if you are not using CraftBukkit, you will still need to update your custom server software before mcMMO will work."),
|
() -> getLogger().severe("We have detected you are using incompatible server software, our best guess is that you are using CraftBukkit. mcMMO requires Spigot or Paper, if you are not using CraftBukkit, you will still need to update your custom server software before mcMMO will work."),
|
||||||
20, 20*60*30);
|
20, 20*60*30
|
||||||
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
registerEvents();
|
registerEvents();
|
||||||
@@ -252,7 +264,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
formulaManager = new FormulaManager();
|
formulaManager = new FormulaManager();
|
||||||
|
|
||||||
for (Player player : getServer().getOnlinePlayers()) {
|
for (Player player : getServer().getOnlinePlayers()) {
|
||||||
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
getFoliaLib().getImpl().runLaterAsync(new PlayerProfileLoadingTask(player), 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
||||||
}
|
}
|
||||||
|
|
||||||
LogUtils.debug(mcMMO.p.getLogger(), "Version " + getDescription().getVersion() + " is enabled!");
|
LogUtils.debug(mcMMO.p.getLogger(), "Version " + getDescription().getVersion() + " is enabled!");
|
||||||
@@ -391,7 +403,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LogUtils.debug(mcMMO.p.getLogger(), "Canceling all tasks...");
|
LogUtils.debug(mcMMO.p.getLogger(), "Canceling all tasks...");
|
||||||
getServer().getScheduler().cancelTasks(this); // This removes our tasks
|
getFoliaLib().getImpl().cancelAllTasks(); // This removes our tasks
|
||||||
LogUtils.debug(mcMMO.p.getLogger(), "Unregister all events...");
|
LogUtils.debug(mcMMO.p.getLogger(), "Unregister all events...");
|
||||||
HandlerList.unregisterAll(this); // Cancel event registrations
|
HandlerList.unregisterAll(this); // Cancel event registrations
|
||||||
|
|
||||||
@@ -621,7 +633,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void registerCustomRecipes() {
|
private void registerCustomRecipes() {
|
||||||
getServer().getScheduler().scheduleSyncDelayedTask(this, () -> {
|
getFoliaLib().getImpl().runLater(() -> {
|
||||||
if (generalConfig.getChimaeraEnabled()) {
|
if (generalConfig.getChimaeraEnabled()) {
|
||||||
getServer().addRecipe(ChimaeraWing.getChimaeraWingRecipe());
|
getServer().addRecipe(ChimaeraWing.getChimaeraWingRecipe());
|
||||||
}
|
}
|
||||||
@@ -635,42 +647,42 @@ public class mcMMO extends JavaPlugin {
|
|||||||
|
|
||||||
long saveIntervalTicks = Math.max(minute, generalConfig.getSaveInterval() * minute);
|
long saveIntervalTicks = Math.max(minute, generalConfig.getSaveInterval() * minute);
|
||||||
|
|
||||||
new SaveTimerTask().runTaskTimer(this, saveIntervalTicks, saveIntervalTicks);
|
getFoliaLib().getImpl().runTimer(new SaveTimerTask(), saveIntervalTicks, saveIntervalTicks);
|
||||||
|
|
||||||
// Cleanup the backups folder
|
// Cleanup the backups folder
|
||||||
new CleanBackupsTask().runTaskAsynchronously(mcMMO.p);
|
getFoliaLib().getImpl().runAsync(new CleanBackupsTask());
|
||||||
|
|
||||||
// Old & Powerless User remover
|
// Old & Powerless User remover
|
||||||
long purgeIntervalTicks = generalConfig.getPurgeInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
|
long purgeIntervalTicks = generalConfig.getPurgeInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
|
||||||
|
|
||||||
if (purgeIntervalTicks == 0) {
|
if (purgeIntervalTicks == 0) {
|
||||||
new UserPurgeTask().runTaskLaterAsynchronously(this, 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
|
getFoliaLib().getImpl().runLaterAsync(new UserPurgeTask(), 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
|
||||||
}
|
}
|
||||||
else if (purgeIntervalTicks > 0) {
|
else if (purgeIntervalTicks > 0) {
|
||||||
new UserPurgeTask().runTaskTimerAsynchronously(this, purgeIntervalTicks, purgeIntervalTicks);
|
getFoliaLib().getImpl().runTimerAsync(new UserPurgeTask(), purgeIntervalTicks, purgeIntervalTicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Automatically remove old members from parties
|
// Automatically remove old members from parties
|
||||||
long kickIntervalTicks = generalConfig.getAutoPartyKickInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
|
long kickIntervalTicks = generalConfig.getAutoPartyKickInterval() * 60L * 60L * Misc.TICK_CONVERSION_FACTOR;
|
||||||
|
|
||||||
if (kickIntervalTicks == 0) {
|
if (kickIntervalTicks == 0) {
|
||||||
new PartyAutoKickTask().runTaskLater(this, 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
|
getFoliaLib().getImpl().runLater(new PartyAutoKickTask(), 2 * Misc.TICK_CONVERSION_FACTOR); // Start 2 seconds after startup.
|
||||||
}
|
}
|
||||||
else if (kickIntervalTicks > 0) {
|
else if (kickIntervalTicks > 0) {
|
||||||
new PartyAutoKickTask().runTaskTimer(this, kickIntervalTicks, kickIntervalTicks);
|
getFoliaLib().getImpl().runTimer(new PartyAutoKickTask(), kickIntervalTicks, kickIntervalTicks);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update power level tag scoreboards
|
// Update power level tag scoreboards
|
||||||
new PowerLevelUpdatingTask().runTaskTimer(this, 2 * Misc.TICK_CONVERSION_FACTOR, 2 * Misc.TICK_CONVERSION_FACTOR);
|
getFoliaLib().getImpl().runTimer(new PowerLevelUpdatingTask(), 2 * Misc.TICK_CONVERSION_FACTOR, 2 * Misc.TICK_CONVERSION_FACTOR);
|
||||||
|
|
||||||
// Clear the registered XP data so players can earn XP again
|
// Clear the registered XP data so players can earn XP again
|
||||||
if (ExperienceConfig.getInstance().getDiminishedReturnsEnabled()) {
|
if (ExperienceConfig.getInstance().getDiminishedReturnsEnabled()) {
|
||||||
new ClearRegisteredXPGainTask().runTaskTimer(this, 60, 60);
|
getFoliaLib().getImpl().runTimer(new ClearRegisteredXPGainTask(), 60, 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mcMMO.p.getAdvancedConfig().allowPlayerTips())
|
if(mcMMO.p.getAdvancedConfig().allowPlayerTips())
|
||||||
{
|
{
|
||||||
new NotifySquelchReminderTask().runTaskTimer(this, 60, ((20 * 60) * 60));
|
getFoliaLib().getImpl().runTimer(new NotifySquelchReminderTask(), 60, ((20 * 60) * 60));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -770,4 +782,8 @@ public class mcMMO extends JavaPlugin {
|
|||||||
public @NotNull AdvancedConfig getAdvancedConfig() {
|
public @NotNull AdvancedConfig getAdvancedConfig() {
|
||||||
return advancedConfig;
|
return advancedConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull FoliaLib getFoliaLib() {
|
||||||
|
return foliaLib;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
//import com.gmail.nossr50.mcMMO;
|
//import com.gmail.nossr50.mcMMO;
|
||||||
//import com.gmail.nossr50.runnables.skills.AprilTask;
|
//import com.gmail.nossr50.runnables.skills.AprilTask;
|
||||||
//import com.gmail.nossr50.util.Misc;
|
//import com.gmail.nossr50.util.Misc;
|
||||||
//import org.bukkit.scheduler.BukkitRunnable;
|
//import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
//
|
//
|
||||||
//public class CheckDateTask extends BukkitRunnable {
|
//public class CheckDateTask extends CancellableRunnable {
|
||||||
//
|
//
|
||||||
// @Override
|
// @Override
|
||||||
// public void run() {
|
// public void run() {
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.gmail.nossr50.runnables;
|
package com.gmail.nossr50.runnables;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import org.bukkit.entity.Mob;
|
import org.bukkit.entity.Mob;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class MobDodgeMetaCleanup extends BukkitRunnable {
|
public class MobDodgeMetaCleanup extends CancellableRunnable {
|
||||||
private final @NotNull Mob mob;
|
private final @NotNull Mob mob;
|
||||||
private final @NotNull mcMMO pluginRef;
|
private final @NotNull mcMMO pluginRef;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.runnables;
|
package com.gmail.nossr50.runnables;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class MobHealthDisplayUpdaterTask extends BukkitRunnable {
|
public class MobHealthDisplayUpdaterTask extends CancellableRunnable {
|
||||||
private final LivingEntity target;
|
private final LivingEntity target;
|
||||||
|
|
||||||
public MobHealthDisplayUpdaterTask(LivingEntity target) {
|
public MobHealthDisplayUpdaterTask(LivingEntity target) {
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ package com.gmail.nossr50.runnables;
|
|||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.BlockUtils;
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PistonTrackerTask extends BukkitRunnable {
|
public class PistonTrackerTask extends CancellableRunnable {
|
||||||
private final List<Block> blocks;
|
private final List<Block> blocks;
|
||||||
private final BlockFace direction;
|
private final BlockFace direction;
|
||||||
private final Block futureEmptyBlock;
|
private final Block futureEmptyBlock;
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.runnables.player.PlayerProfileSaveTask;
|
import com.gmail.nossr50.runnables.player.PlayerProfileSaveTask;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.LogUtils;
|
import com.gmail.nossr50.util.LogUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class SaveTimerTask extends BukkitRunnable {
|
public class SaveTimerTask extends CancellableRunnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LogUtils.debug(mcMMO.p.getLogger(), "[User Data] Saving...");
|
LogUtils.debug(mcMMO.p.getLogger(), "[User Data] Saving...");
|
||||||
@@ -16,7 +16,7 @@ public class SaveTimerTask extends BukkitRunnable {
|
|||||||
int count = 1;
|
int count = 1;
|
||||||
|
|
||||||
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) {
|
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) {
|
||||||
new PlayerProfileSaveTask(mcMMOPlayer.getProfile(), false).runTaskLaterAsynchronously(mcMMO.p, count);
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileSaveTask(mcMMOPlayer.getProfile(), false), count);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ package com.gmail.nossr50.runnables;
|
|||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.BlockUtils;
|
import com.gmail.nossr50.util.BlockUtils;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class StickyPistonTrackerTask extends BukkitRunnable {
|
public class StickyPistonTrackerTask extends CancellableRunnable {
|
||||||
private final BlockFace direction;
|
private final BlockFace direction;
|
||||||
private final Block block;
|
private final Block block;
|
||||||
private final Block movedBlock;
|
private final Block movedBlock;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.gmail.nossr50.runnables;
|
package com.gmail.nossr50.runnables;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class TravelingBlockMetaCleanup extends BukkitRunnable {
|
public class TravelingBlockMetaCleanup extends CancellableRunnable {
|
||||||
private final @NotNull Entity entity;
|
private final @NotNull Entity entity;
|
||||||
private final @NotNull mcMMO pluginRef;
|
private final @NotNull mcMMO pluginRef;
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.gmail.nossr50.runnables.backups;
|
package com.gmail.nossr50.runnables.backups;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.LogUtils;
|
import com.gmail.nossr50.util.LogUtils;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
@@ -10,7 +10,7 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class CleanBackupsTask extends BukkitRunnable {
|
public class CleanBackupsTask extends CancellableRunnable {
|
||||||
private static final String BACKUP_DIRECTORY = mcMMO.getMainDirectory() + "backup" + File.separator;
|
private static final String BACKUP_DIRECTORY = mcMMO.getMainDirectory() + "backup" + File.separator;
|
||||||
private static final File BACKUP_DIR = new File(BACKUP_DIRECTORY);
|
private static final File BACKUP_DIR = new File(BACKUP_DIRECTORY);
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.gmail.nossr50.runnables.commands;
|
package com.gmail.nossr50.runnables.commands;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class McScoreboardKeepTask extends BukkitRunnable {
|
public class McScoreboardKeepTask extends CancellableRunnable {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
|
|
||||||
public McScoreboardKeepTask(Player player) {
|
public McScoreboardKeepTask(Player player) {
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ package com.gmail.nossr50.runnables.commands;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class McrankCommandAsyncTask extends BukkitRunnable {
|
public class McrankCommandAsyncTask extends CancellableRunnable {
|
||||||
private final String playerName;
|
private final String playerName;
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
private final boolean useBoard, useChat;
|
private final boolean useBoard, useChat;
|
||||||
@@ -32,7 +32,7 @@ public class McrankCommandAsyncTask extends BukkitRunnable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
Map<PrimarySkillType, Integer> skills = mcMMO.getDatabaseManager().readRank(playerName);
|
Map<PrimarySkillType, Integer> skills = mcMMO.getDatabaseManager().readRank(playerName);
|
||||||
|
|
||||||
new McrankCommandDisplayTask(skills, sender, playerName, useBoard, useChat).runTaskLater(mcMMO.p, 1);
|
mcMMO.p.getFoliaLib().getImpl().runNextTick(new McrankCommandDisplayTask(skills, sender, playerName, useBoard, useChat));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,19 +3,19 @@ package com.gmail.nossr50.runnables.commands;
|
|||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import com.gmail.nossr50.util.skills.SkillTools;
|
import com.gmail.nossr50.util.skills.SkillTools;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display the results of McrankCommandAsyncTask to the sender.
|
* Display the results of McrankCommandAsyncTask to the sender.
|
||||||
*/
|
*/
|
||||||
public class McrankCommandDisplayTask extends BukkitRunnable {
|
public class McrankCommandDisplayTask extends CancellableRunnable {
|
||||||
private final Map<PrimarySkillType, Integer> skills;
|
private final Map<PrimarySkillType, Integer> skills;
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
private final String playerName;
|
private final String playerName;
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ package com.gmail.nossr50.runnables.commands;
|
|||||||
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MctopCommandAsyncTask extends BukkitRunnable {
|
public class MctopCommandAsyncTask extends CancellableRunnable {
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
private final PrimarySkillType skill;
|
private final PrimarySkillType skill;
|
||||||
private final int page;
|
private final int page;
|
||||||
@@ -35,6 +35,6 @@ public class MctopCommandAsyncTask extends BukkitRunnable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
final List<PlayerStat> userStats = mcMMO.getDatabaseManager().readLeaderboard(skill, page, 10);
|
final List<PlayerStat> userStats = mcMMO.getDatabaseManager().readLeaderboard(skill, page, 10);
|
||||||
|
|
||||||
new MctopCommandDisplayTask(userStats, page, skill, sender, useBoard, useChat).runTaskLater(mcMMO.p, 1);
|
mcMMO.p.getFoliaLib().getImpl().runNextTick(new MctopCommandDisplayTask(userStats, page, skill, sender, useBoard, useChat));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,19 +4,19 @@ import com.gmail.nossr50.datatypes.database.PlayerStat;
|
|||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display the results of {@link MctopCommandAsyncTask} to the sender.
|
* Display the results of {@link MctopCommandAsyncTask} to the sender.
|
||||||
*/
|
*/
|
||||||
public class MctopCommandDisplayTask extends BukkitRunnable {
|
public class MctopCommandDisplayTask extends CancellableRunnable {
|
||||||
private final List<PlayerStat> userStats;
|
private final List<PlayerStat> userStats;
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
private final PrimarySkillType skill;
|
private final PrimarySkillType skill;
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.gmail.nossr50.runnables.commands;
|
package com.gmail.nossr50.runnables.commands;
|
||||||
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class NotifySquelchReminderTask extends BukkitRunnable {
|
public class NotifySquelchReminderTask extends CancellableRunnable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package com.gmail.nossr50.runnables.database;
|
|||||||
import com.gmail.nossr50.database.DatabaseManager;
|
import com.gmail.nossr50.database.DatabaseManager;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class DatabaseConversionTask extends BukkitRunnable {
|
public class DatabaseConversionTask extends CancellableRunnable {
|
||||||
private final DatabaseManager sourceDatabase;
|
private final DatabaseManager sourceDatabase;
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
private final String message;
|
private final String message;
|
||||||
@@ -21,6 +21,6 @@ public class DatabaseConversionTask extends BukkitRunnable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
sourceDatabase.convertUsers(mcMMO.getDatabaseManager());
|
sourceDatabase.convertUsers(mcMMO.getDatabaseManager());
|
||||||
|
|
||||||
mcMMO.p.getServer().getScheduler().runTask(mcMMO.p, () -> sender.sendMessage(message));
|
mcMMO.p.getFoliaLib().getImpl().runNextTick(t -> sender.sendMessage(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
|||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.LogUtils;
|
import com.gmail.nossr50.util.LogUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.skills.SkillTools;
|
import com.gmail.nossr50.util.skills.SkillTools;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class FormulaConversionTask extends BukkitRunnable {
|
public class FormulaConversionTask extends CancellableRunnable {
|
||||||
private final CommandSender sender;
|
private final CommandSender sender;
|
||||||
private final FormulaType formulaType;
|
private final FormulaType formulaType;
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.runnables.database;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.database.UpgradeType;
|
import com.gmail.nossr50.datatypes.database.UpgradeType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
@@ -20,7 +21,7 @@ import java.util.UUID;
|
|||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class UUIDUpdateAsyncTask implements Runnable {
|
public class UUIDUpdateAsyncTask extends CancellableRunnable {
|
||||||
private static final Gson GSON = new Gson();
|
private static final Gson GSON = new Gson();
|
||||||
private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft";
|
private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft";
|
||||||
|
|
||||||
@@ -109,11 +110,11 @@ public class UUIDUpdateAsyncTask implements Runnable {
|
|||||||
|
|
||||||
// Bukkit runnables don't let themselves reschedule themselves, so we are a pseudo bukkit runnable.
|
// Bukkit runnables don't let themselves reschedule themselves, so we are a pseudo bukkit runnable.
|
||||||
private void runTaskLaterAsynchronously(mcMMO plugin, int delay) {
|
private void runTaskLaterAsynchronously(mcMMO plugin, int delay) {
|
||||||
plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, this, delay);
|
plugin.getFoliaLib().getImpl().runLaterAsync(this, delay);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
plugin.getServer().getScheduler().runTaskAsynchronously(plugin, this);
|
plugin.getFoliaLib().getImpl().runAsync(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static UUID toUUID(String id) {
|
private static UUID toUUID(String id) {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.runnables.database;
|
package com.gmail.nossr50.runnables.database;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
|
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
|
|
||||||
public class UserPurgeTask extends BukkitRunnable {
|
public class UserPurgeTask extends CancellableRunnable {
|
||||||
private final ReentrantLock lock = new ReentrantLock();
|
private final ReentrantLock lock = new ReentrantLock();
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.gmail.nossr50.runnables.items;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.ChimaeraWing;
|
import com.gmail.nossr50.util.ChimaeraWing;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
@@ -10,9 +11,8 @@ import com.gmail.nossr50.util.skills.SkillUtils;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class ChimaeraWingWarmup extends BukkitRunnable {
|
public class ChimaeraWingWarmup extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
|
|
||||||
public ChimaeraWingWarmup(McMMOPlayer mcMMOPlayer) {
|
public ChimaeraWingWarmup(McMMOPlayer mcMMOPlayer) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -11,9 +12,8 @@ import com.gmail.nossr50.util.skills.SkillUtils;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class TeleportationWarmup extends BukkitRunnable {
|
public class TeleportationWarmup extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final McMMOPlayer mcMMOTarget;
|
private final McMMOPlayer mcMMOTarget;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package com.gmail.nossr50.runnables.party;
|
|||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -12,7 +12,7 @@ import java.util.List;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class PartyAutoKickTask extends BukkitRunnable {
|
public class PartyAutoKickTask extends CancellableRunnable {
|
||||||
private final static long KICK_TIME = 24L * 60L * 60L * 1000L * mcMMO.p.getGeneralConfig().getAutoPartyKickTime();
|
private final static long KICK_TIME = 24L * 60L * 60L * 1000L * mcMMO.p.getGeneralConfig().getAutoPartyKickTime();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.gmail.nossr50.runnables.player;
|
package com.gmail.nossr50.runnables.player;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class ClearRegisteredXPGainTask extends BukkitRunnable {
|
public class ClearRegisteredXPGainTask extends CancellableRunnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) {
|
for (McMMOPlayer mcMMOPlayer : UserManager.getPlayers()) {
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
|||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.commands.McScoreboardKeepTask;
|
import com.gmail.nossr50.runnables.commands.McScoreboardKeepTask;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.LogUtils;
|
import com.gmail.nossr50.util.LogUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
@@ -12,9 +13,8 @@ import com.gmail.nossr50.util.player.UserManager;
|
|||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class PlayerProfileLoadingTask extends BukkitRunnable {
|
public class PlayerProfileLoadingTask extends CancellableRunnable {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private int attempt = 0;
|
private int attempt = 0;
|
||||||
|
|
||||||
@@ -52,7 +52,7 @@ public class PlayerProfileLoadingTask extends BukkitRunnable {
|
|||||||
|
|
||||||
// If successful, schedule the apply
|
// If successful, schedule the apply
|
||||||
if (profile.isLoaded()) {
|
if (profile.isLoaded()) {
|
||||||
new ApplySuccessfulProfile(new McMMOPlayer(player, profile)).runTask(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(player, new ApplySuccessfulProfile(new McMMOPlayer(player, profile)));
|
||||||
EventUtils.callPlayerProfileLoadEvent(player, profile);
|
EventUtils.callPlayerProfileLoadEvent(player, profile);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -74,10 +74,10 @@ public class PlayerProfileLoadingTask extends BukkitRunnable {
|
|||||||
// Increment attempt counter and try
|
// Increment attempt counter and try
|
||||||
attempt++;
|
attempt++;
|
||||||
|
|
||||||
new PlayerProfileLoadingTask(player, attempt).runTaskLaterAsynchronously(mcMMO.p, (100 + (attempt * 100L)));
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileLoadingTask(player, attempt), (100 + (attempt * 100L)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ApplySuccessfulProfile extends BukkitRunnable {
|
private class ApplySuccessfulProfile extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
|
|
||||||
private ApplySuccessfulProfile(McMMOPlayer mcMMOPlayer) {
|
private ApplySuccessfulProfile(McMMOPlayer mcMMOPlayer) {
|
||||||
@@ -104,7 +104,7 @@ public class PlayerProfileLoadingTask extends BukkitRunnable {
|
|||||||
|
|
||||||
if (mcMMO.p.getGeneralConfig().getShowStatsAfterLogin()) {
|
if (mcMMO.p.getGeneralConfig().getShowStatsAfterLogin()) {
|
||||||
ScoreboardManager.enablePlayerStatsScoreboard(player);
|
ScoreboardManager.enablePlayerStatsScoreboard(player);
|
||||||
new McScoreboardKeepTask(player).runTaskLater(mcMMO.p, Misc.TICK_CONVERSION_FACTOR);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new McScoreboardKeepTask(player), Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.gmail.nossr50.runnables.player;
|
package com.gmail.nossr50.runnables.player;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
|
|
||||||
public class PlayerProfileSaveTask extends BukkitRunnable {
|
public class PlayerProfileSaveTask extends CancellableRunnable {
|
||||||
private final PlayerProfile playerProfile;
|
private final PlayerProfile playerProfile;
|
||||||
private final boolean isSync;
|
private final boolean isSync;
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.gmail.nossr50.runnables.player;
|
package com.gmail.nossr50.runnables.player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public class PlayerUpdateInventoryTask extends BukkitRunnable {
|
public class PlayerUpdateInventoryTask extends CancellableRunnable {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
|
|
||||||
public PlayerUpdateInventoryTask(Player player) {
|
public PlayerUpdateInventoryTask(Player player) {
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.gmail.nossr50.runnables.player;
|
package com.gmail.nossr50.runnables.player;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class PowerLevelUpdatingTask extends BukkitRunnable {
|
public class PowerLevelUpdatingTask extends CancellableRunnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!ScoreboardManager.powerLevelHeartbeat()) {
|
if (!ScoreboardManager.powerLevelHeartbeat()) {
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class AbilityCooldownTask extends BukkitRunnable {
|
public class AbilityCooldownTask extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final SuperAbilityType ability;
|
private final SuperAbilityType ability;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
@@ -12,9 +13,8 @@ import com.gmail.nossr50.util.skills.SkillUtils;
|
|||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class AbilityDisableTask extends BukkitRunnable {
|
public class AbilityDisableTask extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final SuperAbilityType ability;
|
private final SuperAbilityType ability;
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ public class AbilityDisableTask extends BukkitRunnable {
|
|||||||
SkillUtils.sendSkillMessage(player, NotificationType.SUPER_ABILITY_ALERT_OTHERS, ability.getAbilityPlayerOff());
|
SkillUtils.sendSkillMessage(player, NotificationType.SUPER_ABILITY_ALERT_OTHERS, ability.getAbilityPlayerOff());
|
||||||
}
|
}
|
||||||
if(!mcMMO.isServerShutdownExecuted()) {
|
if(!mcMMO.isServerShutdownExecuted()) {
|
||||||
new AbilityCooldownTask(mcMMOPlayer, ability).runTaskLater(mcMMO.p, (long) PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TICK_CONVERSION_FACTOR);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new AbilityCooldownTask(mcMMOPlayer, ability), (long) PerksUtils.handleCooldownPerks(player, ability.getCooldown()) * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,15 +2,15 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
|
|
||||||
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
||||||
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.BrewingStand;
|
import org.bukkit.block.BrewingStand;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class AlchemyBrewCheckTask extends BukkitRunnable {
|
public class AlchemyBrewCheckTask extends CancellableRunnable {
|
||||||
private final Player player;
|
private final Player player;
|
||||||
private final BrewingStand brewingStand;
|
private final BrewingStand brewingStand;
|
||||||
private final ItemStack[] oldInventory;
|
private final ItemStack[] oldInventory;
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import com.gmail.nossr50.events.skills.alchemy.McMMOPlayerCatalysisEvent;
|
|||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
import com.gmail.nossr50.skills.alchemy.Alchemy;
|
||||||
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
import com.gmail.nossr50.skills.alchemy.AlchemyPotionBrewer;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@@ -15,9 +16,8 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.BrewingStand;
|
import org.bukkit.block.BrewingStand;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class AlchemyBrewTask extends BukkitRunnable {
|
public class AlchemyBrewTask extends CancellableRunnable {
|
||||||
private static final double DEFAULT_BREW_SPEED = 1.0;
|
private static final double DEFAULT_BREW_SPEED = 1.0;
|
||||||
private static final int DEFAULT_BREW_TICKS = 400;
|
private static final int DEFAULT_BREW_TICKS = 400;
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ public class AlchemyBrewTask extends BukkitRunnable {
|
|||||||
fuel--;
|
fuel--;
|
||||||
|
|
||||||
Alchemy.brewingStandMap.put(location, this);
|
Alchemy.brewingStandMap.put(location, this);
|
||||||
this.runTaskTimer(mcMMO.p, 1, 1);
|
mcMMO.p.getFoliaLib().getImpl().runAtLocationTimer(location, this, 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
//import org.bukkit.ChatColor;
|
//import org.bukkit.ChatColor;
|
||||||
//import org.bukkit.Statistic;
|
//import org.bukkit.Statistic;
|
||||||
//import org.bukkit.entity.Player;
|
//import org.bukkit.entity.Player;
|
||||||
//import org.bukkit.scheduler.BukkitRunnable;
|
//import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
//
|
//
|
||||||
//public class AprilTask extends BukkitRunnable {
|
//public class AprilTask extends CancellableRunnable {
|
||||||
//
|
//
|
||||||
// @Override
|
// @Override
|
||||||
// public void run() {
|
// public void run() {
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
|||||||
import com.gmail.nossr50.datatypes.experience.XPGainSource;
|
import com.gmail.nossr50.datatypes.experience.XPGainSource;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class AwardCombatXpTask extends BukkitRunnable {
|
public class AwardCombatXpTask extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final double baseXp;
|
private final double baseXp;
|
||||||
private final PrimarySkillType primarySkillType;
|
private final PrimarySkillType primarySkillType;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
//import org.bukkit.entity.Player;
|
//import org.bukkit.entity.Player;
|
||||||
//import org.bukkit.event.entity.EntityDamageEvent;
|
//import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
//import org.bukkit.inventory.ItemStack;
|
//import org.bukkit.inventory.ItemStack;
|
||||||
//import org.bukkit.scheduler.BukkitRunnable;
|
//import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
//import org.jetbrains.annotations.NotNull;
|
//import org.jetbrains.annotations.NotNull;
|
||||||
//
|
//
|
||||||
//import java.util.HashMap;
|
//import java.util.HashMap;
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
//import java.util.Map;
|
//import java.util.Map;
|
||||||
//import java.util.Map.Entry;
|
//import java.util.Map.Entry;
|
||||||
//
|
//
|
||||||
//public class BleedTimerTask extends BukkitRunnable {
|
//public class BleedTimerTask extends CancellableRunnable {
|
||||||
// private static final @NotNull Map<LivingEntity, BleedContainer> bleedList = new HashMap<>();
|
// private static final @NotNull Map<LivingEntity, BleedContainer> bleedList = new HashMap<>();
|
||||||
// private static boolean isIterating = false;
|
// private static boolean isIterating = false;
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.meta.RecentlyReplantedCropMeta;
|
import com.gmail.nossr50.datatypes.meta.RecentlyReplantedCropMeta;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -14,11 +15,10 @@ import org.bukkit.block.data.BlockData;
|
|||||||
import org.bukkit.block.data.Directional;
|
import org.bukkit.block.data.Directional;
|
||||||
import org.bukkit.block.data.type.Cocoa;
|
import org.bukkit.block.data.type.Cocoa;
|
||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class DelayedCropReplant extends BukkitRunnable {
|
public class DelayedCropReplant extends CancellableRunnable {
|
||||||
|
|
||||||
private final int desiredCropAge;
|
private final int desiredCropAge;
|
||||||
private final Location cropLocation;
|
private final Location cropLocation;
|
||||||
@@ -54,7 +54,7 @@ public class DelayedCropReplant extends BukkitRunnable {
|
|||||||
PlantAnchorType plantAnchorType = PlantAnchorType.NORMAL;
|
PlantAnchorType plantAnchorType = PlantAnchorType.NORMAL;
|
||||||
|
|
||||||
//Remove the metadata marking the block as recently replanted
|
//Remove the metadata marking the block as recently replanted
|
||||||
new markPlantAsOld(blockBreakEvent.getBlock().getLocation()).runTaskLater(mcMMO.p, 10);
|
mcMMO.p.getFoliaLib().getImpl().runAtLocationLater(blockBreakEvent.getBlock().getLocation(), new markPlantAsOld(blockBreakEvent.getBlock().getLocation()), 10);
|
||||||
|
|
||||||
if(blockBreakEvent.isCancelled()) {
|
if(blockBreakEvent.isCancelled()) {
|
||||||
wasImmaturePlant = true;
|
wasImmaturePlant = true;
|
||||||
@@ -101,7 +101,7 @@ public class DelayedCropReplant extends BukkitRunnable {
|
|||||||
|
|
||||||
//Play an effect
|
//Play an effect
|
||||||
ParticleEffectUtils.playGreenThumbEffect(cropLocation);
|
ParticleEffectUtils.playGreenThumbEffect(cropLocation);
|
||||||
new PhysicsBlockUpdate(newState.getBlock(), cropFace, plantAnchorType).runTaskLater(mcMMO.p, 1);
|
mcMMO.p.getFoliaLib().getImpl().runAtLocationLater(newState.getLocation(), new PhysicsBlockUpdate(newState.getBlock(), cropFace, plantAnchorType), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ public class DelayedCropReplant extends BukkitRunnable {
|
|||||||
COCOA
|
COCOA
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class PhysicsBlockUpdate extends BukkitRunnable {
|
private static class PhysicsBlockUpdate extends CancellableRunnable {
|
||||||
private final Block plantBlock;
|
private final Block plantBlock;
|
||||||
private final PlantAnchorType plantAnchorType;
|
private final PlantAnchorType plantAnchorType;
|
||||||
private BlockFace plantFace;
|
private BlockFace plantFace;
|
||||||
@@ -160,7 +160,7 @@ public class DelayedCropReplant extends BukkitRunnable {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static class markPlantAsOld extends BukkitRunnable {
|
private static class markPlantAsOld extends CancellableRunnable {
|
||||||
|
|
||||||
private final Location cropLoc;
|
private final Location cropLoc;
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.BlockSnapshot;
|
import com.gmail.nossr50.datatypes.BlockSnapshot;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class DelayedHerbalismXPCheckTask extends BukkitRunnable {
|
public class DelayedHerbalismXPCheckTask extends CancellableRunnable {
|
||||||
|
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final ArrayList<BlockSnapshot> chorusBlocks;
|
private final ArrayList<BlockSnapshot> chorusBlocks;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
import com.gmail.nossr50.util.experience.ExperienceBarManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class ExperienceBarHideTask extends BukkitRunnable {
|
public class ExperienceBarHideTask extends CancellableRunnable {
|
||||||
public final McMMOPlayer mcMMOPlayer;
|
public final McMMOPlayer mcMMOPlayer;
|
||||||
public final PrimarySkillType primarySkillType;
|
public final PrimarySkillType primarySkillType;
|
||||||
public final ExperienceBarManager experienceBarManagerRef;
|
public final ExperienceBarManager experienceBarManagerRef;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.gmail.nossr50.runnables.skills;
|
package com.gmail.nossr50.runnables.skills;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class HerbalismBlockUpdaterTask extends BukkitRunnable {
|
public class HerbalismBlockUpdaterTask extends CancellableRunnable {
|
||||||
private final BlockState blockState;
|
private final BlockState blockState;
|
||||||
|
|
||||||
public HerbalismBlockUpdaterTask(BlockState blockState) {
|
public HerbalismBlockUpdaterTask(BlockState blockState) {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.runnables.skills;
|
package com.gmail.nossr50.runnables.skills;
|
||||||
|
|
||||||
import com.gmail.nossr50.skills.fishing.FishingManager;
|
import com.gmail.nossr50.skills.fishing.FishingManager;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.entity.FishHook;
|
import org.bukkit.entity.FishHook;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class MasterAnglerTask extends BukkitRunnable {
|
public class MasterAnglerTask extends CancellableRunnable {
|
||||||
private final @NotNull FishHook fishHook;
|
private final @NotNull FishHook fishHook;
|
||||||
private final @NotNull FishingManager fishingManager;
|
private final @NotNull FishingManager fishingManager;
|
||||||
private final int lureLevel;
|
private final int lureLevel;
|
||||||
|
|||||||
@@ -3,15 +3,15 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.events.skills.rupture.McMMOEntityDamageByRuptureEvent;
|
import com.gmail.nossr50.events.skills.rupture.McMMOEntityDamageByRuptureEvent;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.MetadataConstants;
|
import com.gmail.nossr50.util.MetadataConstants;
|
||||||
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
import com.gmail.nossr50.util.skills.ParticleEffectUtils;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class RuptureTask extends BukkitRunnable {
|
public class RuptureTask extends CancellableRunnable {
|
||||||
|
|
||||||
public static final int DAMAGE_TICK_INTERVAL = 10;
|
public static final int DAMAGE_TICK_INTERVAL = 10;
|
||||||
public static final int ANIMATION_TICK_INTERVAL = 1;
|
public static final int ANIMATION_TICK_INTERVAL = 1;
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ package com.gmail.nossr50.runnables.skills;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
|
|
||||||
public class SkillUnlockNotificationTask extends BukkitRunnable {
|
public class SkillUnlockNotificationTask extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final SubSkillType subSkillType;
|
private final SubSkillType subSkillType;
|
||||||
private final int rank;
|
private final int rank;
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.ToolType;
|
import com.gmail.nossr50.datatypes.skills.ToolType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class ToolLowerTask extends BukkitRunnable {
|
public class ToolLowerTask extends CancellableRunnable {
|
||||||
private final McMMOPlayer mcMMOPlayer;
|
private final McMMOPlayer mcMMOPlayer;
|
||||||
private final ToolType tool;
|
private final ToolType tool;
|
||||||
|
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ public class AcrobaticsManager extends SkillManager {
|
|||||||
applyXpGain((float) (damage * Acrobatics.dodgeXpModifier), XPGainReason.PVE);
|
applyXpGain((float) (damage * Acrobatics.dodgeXpModifier), XPGainReason.PVE);
|
||||||
mob.setMetadata(MetadataConstants.METADATA_KEY_DODGE_TRACKER, new FixedMetadataValue(mcMMO.p, count + 1));
|
mob.setMetadata(MetadataConstants.METADATA_KEY_DODGE_TRACKER, new FixedMetadataValue(mcMMO.p, count + 1));
|
||||||
MobDodgeMetaCleanup metaCleanupTask = new MobDodgeMetaCleanup(mob, mcMMO.p);
|
MobDodgeMetaCleanup metaCleanupTask = new MobDodgeMetaCleanup(mob, mcMMO.p);
|
||||||
metaCleanupTask.runTaskTimer(mcMMO.p, 20, 20*60); //one minute
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityTimer(mob, metaCleanupTask, 20, 20*60); //one minute
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
applyXpGain((float) (damage * Acrobatics.dodgeXpModifier), XPGainReason.PVE);
|
applyXpGain((float) (damage * Acrobatics.dodgeXpModifier), XPGainReason.PVE);
|
||||||
|
|||||||
@@ -259,13 +259,13 @@ public final class AlchemyPotionBrewer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void scheduleCheck(Player player, BrewingStand brewingStand) {
|
public static void scheduleCheck(Player player, BrewingStand brewingStand) {
|
||||||
new AlchemyBrewCheckTask(player, brewingStand).runTask(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(player, new AlchemyBrewCheckTask(player, brewingStand));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void scheduleUpdate(Inventory inventory) {
|
public static void scheduleUpdate(Inventory inventory) {
|
||||||
for (HumanEntity humanEntity : inventory.getViewers()) {
|
for (HumanEntity humanEntity : inventory.getViewers()) {
|
||||||
if (humanEntity instanceof Player) {
|
if (humanEntity instanceof Player) {
|
||||||
new PlayerUpdateInventoryTask((Player) humanEntity).runTask(mcMMO.p);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(humanEntity, new PlayerUpdateInventoryTask((Player) humanEntity));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,8 @@ public class ArcheryManager extends SkillManager {
|
|||||||
Location dazedLocation = defender.getLocation();
|
Location dazedLocation = defender.getLocation();
|
||||||
dazedLocation.setPitch(90 - Misc.getRandom().nextInt(181));
|
dazedLocation.setPitch(90 - Misc.getRandom().nextInt(181));
|
||||||
|
|
||||||
defender.teleport(dazedLocation);
|
// defender.teleport(dazedLocation);
|
||||||
|
mcMMO.p.getFoliaLib().getImpl().teleportAsync(defender, dazedLocation);
|
||||||
defender.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 20 * 10, 10));
|
defender.addPotionEffect(new PotionEffect(PotionEffectType.CONFUSION, 20 * 10, 10));
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.gmail.nossr50.skills.archery;
|
package com.gmail.nossr50.skills.archery;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class TrackedEntity extends BukkitRunnable {
|
public class TrackedEntity extends CancellableRunnable {
|
||||||
private final LivingEntity livingEntity;
|
private final LivingEntity livingEntity;
|
||||||
private final UUID id;
|
private final UUID id;
|
||||||
private int arrowCount;
|
private int arrowCount;
|
||||||
@@ -15,7 +15,7 @@ public class TrackedEntity extends BukkitRunnable {
|
|||||||
this.livingEntity = livingEntity;
|
this.livingEntity = livingEntity;
|
||||||
this.id = livingEntity.getUniqueId();
|
this.id = livingEntity.getUniqueId();
|
||||||
|
|
||||||
this.runTaskTimer(mcMMO.p, 12000, 12000);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityTimer(livingEntity, this, 12000, 12000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ public class FishingManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void masterAngler(@NotNull FishHook hook, int lureLevel) {
|
public void masterAngler(@NotNull FishHook hook, int lureLevel) {
|
||||||
new MasterAnglerTask(hook, this, lureLevel).runTaskLater(mcMMO.p, 0); //We run later to get the lure bonus applied
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(hook, new MasterAnglerTask(hook, this, lureLevel), 1); //We run later to get the lure bonus applied
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.block.BlockBreakEvent;
|
import org.bukkit.event.block.BlockBreakEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -107,12 +106,12 @@ public class HerbalismManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CheckBushAge checkBushAge = new CheckBushAge(blockState.getBlock(), mmoPlayer, xpReward);
|
CheckBushAge checkBushAge = new CheckBushAge(blockState.getBlock(), mmoPlayer, xpReward);
|
||||||
checkBushAge.runTaskLater(mcMMO.p, 1);
|
mcMMO.p.getFoliaLib().getImpl().runAtLocationLater(blockState.getLocation(), checkBushAge, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class CheckBushAge extends BukkitRunnable {
|
private class CheckBushAge extends CancellableRunnable {
|
||||||
|
|
||||||
@NotNull Block block;
|
@NotNull Block block;
|
||||||
@NotNull McMMOPlayer mmoPlayer;
|
@NotNull McMMOPlayer mmoPlayer;
|
||||||
@@ -311,7 +310,7 @@ public class HerbalismManager extends SkillManager {
|
|||||||
DelayedHerbalismXPCheckTask delayedHerbalismXPCheckTask = new DelayedHerbalismXPCheckTask(mmoPlayer, delayedChorusBlocks);
|
DelayedHerbalismXPCheckTask delayedHerbalismXPCheckTask = new DelayedHerbalismXPCheckTask(mmoPlayer, delayedChorusBlocks);
|
||||||
|
|
||||||
//Large delay because the tree takes a while to break
|
//Large delay because the tree takes a while to break
|
||||||
delayedHerbalismXPCheckTask.runTaskLater(mcMMO.p, 0); //Calculate Chorus XP + Bonus Drops 1 tick later
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(mmoPlayer.getPlayer(), delayedHerbalismXPCheckTask); //Calculate Chorus XP + Bonus Drops 1 tick later
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,7 +363,7 @@ public class HerbalismManager extends SkillManager {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//If its a Crop we need to reward XP when its fully grown
|
//If it's a Crop we need to reward XP when its fully grown
|
||||||
if(isAgeableAndFullyMature(plantData) && !isBizarreAgeable(plantData)) {
|
if(isAgeableAndFullyMature(plantData) && !isBizarreAgeable(plantData)) {
|
||||||
//Add metadata to mark this block for double or triple drops
|
//Add metadata to mark this block for double or triple drops
|
||||||
markForBonusDrops(brokenPlantState);
|
markForBonusDrops(brokenPlantState);
|
||||||
@@ -374,21 +373,17 @@ public class HerbalismManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if BlockData is ageable and we can trust that age for Herbalism rewards/XP reasons
|
* Checks if BlockData is bizarre ageable, and we cannot trust that age for Herbalism rewards/XP reasons
|
||||||
* @param blockData target BlockData
|
* @param blockData target BlockData
|
||||||
* @return returns true if the ageable is trustworthy for Herbalism XP / Rewards
|
* @return returns true if the BlockData is a bizarre ageable for Herbalism XP / Rewards
|
||||||
*/
|
*/
|
||||||
public boolean isBizarreAgeable(BlockData blockData) {
|
public boolean isBizarreAgeable(BlockData blockData) {
|
||||||
if(blockData instanceof Ageable) {
|
if(blockData instanceof Ageable) {
|
||||||
//Catcus and Sugar Canes cannot be trusted
|
//Catcus and Sugar Canes cannot be trusted
|
||||||
switch(blockData.getMaterial()) {
|
return switch (blockData.getMaterial()) {
|
||||||
case CACTUS:
|
case CACTUS, KELP, SUGAR_CANE, BAMBOO -> true;
|
||||||
case KELP:
|
default -> false;
|
||||||
case SUGAR_CANE:
|
};
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -742,7 +737,7 @@ public class HerbalismManager extends SkillManager {
|
|||||||
*/
|
*/
|
||||||
private void startReplantTask(int desiredCropAge, BlockBreakEvent blockBreakEvent, BlockState cropState, boolean isImmature) {
|
private void startReplantTask(int desiredCropAge, BlockBreakEvent blockBreakEvent, BlockState cropState, boolean isImmature) {
|
||||||
//Mark the plant as recently replanted to avoid accidental breakage
|
//Mark the plant as recently replanted to avoid accidental breakage
|
||||||
new DelayedCropReplant(blockBreakEvent, cropState, desiredCropAge, isImmature).runTaskLater(mcMMO.p, 20 * 2);
|
mcMMO.p.getFoliaLib().getImpl().runAtLocationLater(blockBreakEvent.getBlock().getLocation(), new DelayedCropReplant(blockBreakEvent, cropState, desiredCropAge, isImmature), 2 * Misc.TICK_CONVERSION_FACTOR);
|
||||||
blockBreakEvent.getBlock().setMetadata(MetadataConstants.METADATA_KEY_REPLANT, new RecentlyReplantedCropMeta(mcMMO.p, true));
|
blockBreakEvent.getBlock().setMetadata(MetadataConstants.METADATA_KEY_REPLANT, new RecentlyReplantedCropMeta(mcMMO.p, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public class MiningManager extends SkillManager {
|
|||||||
|
|
||||||
mmoPlayer.setAbilityDATS(SuperAbilityType.BLAST_MINING, System.currentTimeMillis());
|
mmoPlayer.setAbilityDATS(SuperAbilityType.BLAST_MINING, System.currentTimeMillis());
|
||||||
mmoPlayer.setAbilityInformed(SuperAbilityType.BLAST_MINING, false);
|
mmoPlayer.setAbilityInformed(SuperAbilityType.BLAST_MINING, false);
|
||||||
new AbilityCooldownTask(mmoPlayer, SuperAbilityType.BLAST_MINING).runTaskLater(mcMMO.p, (long) SuperAbilityType.BLAST_MINING.getCooldown() * Misc.TICK_CONVERSION_FACTOR);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(mmoPlayer.getPlayer(), new AbilityCooldownTask(mmoPlayer, SuperAbilityType.BLAST_MINING), (long) SuperAbilityType.BLAST_MINING.getCooldown() * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ public class SwordsManager extends SkillManager {
|
|||||||
|
|
||||||
RuptureTaskMeta ruptureTaskMeta = new RuptureTaskMeta(mcMMO.p, ruptureTask);
|
RuptureTaskMeta ruptureTaskMeta = new RuptureTaskMeta(mcMMO.p, ruptureTask);
|
||||||
|
|
||||||
ruptureTask.runTaskTimer(mcMMO.p, 0, 1);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityTimer(mmoPlayer.getPlayer(), ruptureTask, 1, 1);
|
||||||
target.setMetadata(MetadataConstants.METADATA_KEY_RUPTURE, ruptureTaskMeta);
|
target.setMetadata(MetadataConstants.METADATA_KEY_RUPTURE, ruptureTaskMeta);
|
||||||
|
|
||||||
// if (mmoPlayer.useChatNotifications()) {
|
// if (mmoPlayer.useChatNotifications()) {
|
||||||
|
|||||||
@@ -245,7 +245,7 @@ public class TamingManager extends SkillManager {
|
|||||||
|
|
||||||
if(jumpAttribute != null) {
|
if(jumpAttribute != null) {
|
||||||
double jumpStrength = jumpAttribute.getValue();
|
double jumpStrength = jumpAttribute.getValue();
|
||||||
// Taken from https://minecraft.gamepedia.com/Horse#Jump_strength
|
// Taken from https://minecraft.wiki/w/Horse#Jump_strength
|
||||||
jumpStrength = -0.1817584952 * Math.pow(jumpStrength, 3) + 3.689713992 * Math.pow(jumpStrength, 2) + 2.128599134 * jumpStrength - 0.343930367;
|
jumpStrength = -0.1817584952 * Math.pow(jumpStrength, 3) + 3.689713992 * Math.pow(jumpStrength, 2) + 2.128599134 * jumpStrength - 0.343930367;
|
||||||
message = message.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseSpeed", horseLikeCreature.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getValue() * 43))
|
message = message.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseSpeed", horseLikeCreature.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getValue() * 43))
|
||||||
.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseJumpStrength", jumpStrength));
|
.concat("\n" + LocaleLoader.getString("Combat.BeastLoreHorseJumpStrength", jumpStrength));
|
||||||
|
|||||||
@@ -2,13 +2,13 @@ package com.gmail.nossr50.skills.taming;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType;
|
import com.gmail.nossr50.datatypes.skills.subskills.taming.CallOfTheWildType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.util.CancellableRunnable;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class TrackedTamingEntity extends BukkitRunnable {
|
public class TrackedTamingEntity extends CancellableRunnable {
|
||||||
private final @NotNull LivingEntity livingEntity;
|
private final @NotNull LivingEntity livingEntity;
|
||||||
private final @NotNull CallOfTheWildType callOfTheWildType;
|
private final @NotNull CallOfTheWildType callOfTheWildType;
|
||||||
private final @NotNull Player player;
|
private final @NotNull Player player;
|
||||||
@@ -22,7 +22,7 @@ public class TrackedTamingEntity extends BukkitRunnable {
|
|||||||
|
|
||||||
if (tamingCOTWLength > 0) {
|
if (tamingCOTWLength > 0) {
|
||||||
int length = tamingCOTWLength * Misc.TICK_CONVERSION_FACTOR;
|
int length = tamingCOTWLength * Misc.TICK_CONVERSION_FACTOR;
|
||||||
this.runTaskLater(mcMMO.p, length);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(livingEntity, this, length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ import java.util.HashSet;
|
|||||||
|
|
||||||
public final class BlockUtils {
|
public final class BlockUtils {
|
||||||
|
|
||||||
|
public static final String SHORT_GRASS = "SHORT_GRASS";
|
||||||
|
public static final String GRASS = "GRASS";
|
||||||
|
|
||||||
private BlockUtils() {
|
private BlockUtils() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,6 +41,21 @@ public final class BlockUtils {
|
|||||||
blockState.setMetadata(MetadataConstants.METADATA_KEY_BONUS_DROPS, new BonusDropMeta(1, mcMMO.p));
|
blockState.setMetadata(MetadataConstants.METADATA_KEY_BONUS_DROPS, new BonusDropMeta(1, mcMMO.p));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Util method for compatibility across Minecraft versions, grabs the {@link Material} enum for short_grass
|
||||||
|
*
|
||||||
|
* @return the {@link Material} enum for short_grass
|
||||||
|
*/
|
||||||
|
public static Material getShortGrass() {
|
||||||
|
if (Material.getMaterial(SHORT_GRASS) != null) {
|
||||||
|
return Material.getMaterial(SHORT_GRASS);
|
||||||
|
} else if (Material.getMaterial(GRASS) != null) {
|
||||||
|
return Material.getMaterial(GRASS);
|
||||||
|
} else {
|
||||||
|
throw new UnsupportedOperationException("Unable to find short grass material");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up the state for a block to be seen as unnatural and cleanup any unwanted metadata from the block
|
* Set up the state for a block to be seen as unnatural and cleanup any unwanted metadata from the block
|
||||||
* @param block target block
|
* @param block target block
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.gmail.nossr50.util;
|
||||||
|
|
||||||
|
import com.tcoded.folialib.wrapper.task.WrappedTask;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public abstract class CancellableRunnable implements Consumer<WrappedTask> {
|
||||||
|
private boolean cancelled = false;
|
||||||
|
|
||||||
|
public void cancel() {
|
||||||
|
cancelled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void run();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(WrappedTask wrappedTask) {
|
||||||
|
// Run the task if it hasn't been cancelled
|
||||||
|
if (!cancelled) {
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cancel the task if it has been cancelled after running
|
||||||
|
if (cancelled) {
|
||||||
|
wrappedTask.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -112,7 +112,7 @@ public final class ChimaeraWing {
|
|||||||
|
|
||||||
if (warmup > 0) {
|
if (warmup > 0) {
|
||||||
NotificationManager.sendPlayerInformation(player, NotificationType.ITEM_MESSAGE, "Teleport.Commencing", String.valueOf(warmup));
|
NotificationManager.sendPlayerInformation(player, NotificationType.ITEM_MESSAGE, "Teleport.Commencing", String.valueOf(warmup));
|
||||||
new ChimaeraWingWarmup(mcMMOPlayer).runTaskLater(mcMMO.p, 20 * warmup);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new ChimaeraWingWarmup(mcMMOPlayer), 20 * warmup);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
chimaeraExecuteTeleport();
|
chimaeraExecuteTeleport();
|
||||||
@@ -123,15 +123,18 @@ public final class ChimaeraWing {
|
|||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
|
|
||||||
if (mcMMO.p.getGeneralConfig().getChimaeraUseBedSpawn() && player.getBedSpawnLocation() != null) {
|
if (mcMMO.p.getGeneralConfig().getChimaeraUseBedSpawn() && player.getBedSpawnLocation() != null) {
|
||||||
player.teleport(player.getBedSpawnLocation());
|
// player.teleport(player.getBedSpawnLocation());
|
||||||
|
mcMMO.p.getFoliaLib().getImpl().teleportAsync(player, player.getBedSpawnLocation());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Location spawnLocation = player.getWorld().getSpawnLocation();
|
Location spawnLocation = player.getWorld().getSpawnLocation();
|
||||||
if (spawnLocation.getBlock().getType() == Material.AIR) {
|
if (spawnLocation.getBlock().getType() == Material.AIR) {
|
||||||
player.teleport(spawnLocation);
|
// player.teleport(spawnLocation);
|
||||||
|
mcMMO.p.getFoliaLib().getImpl().teleportAsync(player, spawnLocation);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
player.teleport(player.getWorld().getHighestBlockAt(spawnLocation).getLocation());
|
// player.teleport(player.getWorld().getHighestBlockAt(spawnLocation).getLocation());
|
||||||
|
mcMMO.p.getFoliaLib().getImpl().teleportAsync(player, player.getWorld().getHighestBlockAt(spawnLocation).getLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -367,7 +367,8 @@ public final class EventUtils {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
teleportingPlayer.teleport(targetPlayer);
|
// teleportingPlayer.teleport(targetPlayer);
|
||||||
|
mcMMO.p.getFoliaLib().getImpl().teleportAsync(teleportingPlayer, targetPlayer.getLocation());
|
||||||
|
|
||||||
teleportingPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Player", targetPlayer.getName()));
|
teleportingPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Player", targetPlayer.getName()));
|
||||||
targetPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Target", teleportingPlayer.getName()));
|
targetPlayer.sendMessage(LocaleLoader.getString("Party.Teleport.Target", teleportingPlayer.getName()));
|
||||||
|
|||||||
@@ -996,8 +996,8 @@ public class MaterialMapStore {
|
|||||||
private void fillShroomyWhiteList()
|
private void fillShroomyWhiteList()
|
||||||
{
|
{
|
||||||
canMakeShroomyWhiteList.add("dirt");
|
canMakeShroomyWhiteList.add("dirt");
|
||||||
canMakeShroomyWhiteList.add("grass");
|
canMakeShroomyWhiteList.add("grass_block");
|
||||||
canMakeShroomyWhiteList.add("grass_path");
|
canMakeShroomyWhiteList.add("dirt_path");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void fillBlockCrackerWhiteList()
|
private void fillBlockCrackerWhiteList()
|
||||||
@@ -1010,8 +1010,8 @@ public class MaterialMapStore {
|
|||||||
private void fillHerbalismAbilityBlackList()
|
private void fillHerbalismAbilityBlackList()
|
||||||
{
|
{
|
||||||
herbalismAbilityBlackList.add("dirt");
|
herbalismAbilityBlackList.add("dirt");
|
||||||
herbalismAbilityBlackList.add("grass");
|
herbalismAbilityBlackList.add("grass_block");
|
||||||
herbalismAbilityBlackList.add("grass_path");
|
herbalismAbilityBlackList.add("dirt_path");
|
||||||
herbalismAbilityBlackList.add("farmland");
|
herbalismAbilityBlackList.add("farmland");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -255,7 +254,7 @@ public final class Misc {
|
|||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
UserManager.remove(player);
|
UserManager.remove(player);
|
||||||
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
mcMMO.p.getFoliaLib().getImpl().runLaterAsync(new PlayerProfileLoadingTask(player), 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +325,7 @@ public final class Misc {
|
|||||||
experienceOrb.setExperience(experienceValue);
|
experienceOrb.setExperience(experienceValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class SpawnOrbTask extends BukkitRunnable {
|
private static class SpawnOrbTask implements Runnable {
|
||||||
private final Location location;
|
private final Location location;
|
||||||
private int orbExpValue;
|
private int orbExpValue;
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public final class MobHealthbarUtils {
|
|||||||
target.setMetadata(MetadataConstants.METADATA_KEY_NAME_VISIBILITY, new FixedMetadataValue(mcMMO.p, false));
|
target.setMetadata(MetadataConstants.METADATA_KEY_NAME_VISIBILITY, new FixedMetadataValue(mcMMO.p, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
new MobHealthDisplayUpdaterTask(target).runTaskLater(mcMMO.p, (long) displayTime * Misc.TICK_CONVERSION_FACTOR); // Clear health display after 3 seconds
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(target, new MobHealthDisplayUpdaterTask(target), (long) displayTime * Misc.TICK_CONVERSION_FACTOR); // Clear health display after 3 seconds
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.runnables.skills.ExperienceBarHideTask;
|
import com.gmail.nossr50.runnables.skills.ExperienceBarHideTask;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -77,7 +78,7 @@ public class ExperienceBarManager {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
ExperienceBarHideTask experienceBarHideTask = new ExperienceBarHideTask(this, mcMMOPlayer, primarySkillType);
|
ExperienceBarHideTask experienceBarHideTask = new ExperienceBarHideTask(this, mcMMOPlayer, primarySkillType);
|
||||||
experienceBarHideTask.runTaskLater(plugin, 20L * delaySeconds);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(mcMMOPlayer.getPlayer(), experienceBarHideTask, (long) delaySeconds * Misc.TICK_CONVERSION_FACTOR);
|
||||||
experienceBarHideTaskHashMap.put(primarySkillType, experienceBarHideTask);
|
experienceBarHideTaskHashMap.put(primarySkillType, experienceBarHideTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import com.gmail.nossr50.util.sounds.SoundType;
|
|||||||
import com.gmail.nossr50.util.text.McMMOMessageType;
|
import com.gmail.nossr50.util.text.McMMOMessageType;
|
||||||
import com.gmail.nossr50.util.text.TextComponentFactory;
|
import com.gmail.nossr50.util.text.TextComponentFactory;
|
||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
import net.kyori.adventure.audience.MessageType;
|
|
||||||
import net.kyori.adventure.identity.Identity;
|
import net.kyori.adventure.identity.Identity;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
@@ -49,7 +48,9 @@ public class NotificationManager {
|
|||||||
if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications())
|
if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
McMMOMessageType destination = mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(notificationType) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;
|
McMMOMessageType destination
|
||||||
|
= mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(notificationType)
|
||||||
|
? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;
|
||||||
|
|
||||||
Component message = TextComponentFactory.getNotificationTextComponentFromLocale(key);
|
Component message = TextComponentFactory.getNotificationTextComponentFromLocale(key);
|
||||||
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
|
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(player, notificationType, destination, message);
|
||||||
@@ -75,7 +76,8 @@ public class NotificationManager {
|
|||||||
* @param key Locale Key for the string to use with this event
|
* @param key Locale Key for the string to use with this event
|
||||||
* @param values values to be injected into the locale string
|
* @param values values to be injected into the locale string
|
||||||
*/
|
*/
|
||||||
public static void sendNearbyPlayersInformation(Player targetPlayer, NotificationType notificationType, String key, String... values)
|
public static void sendNearbyPlayersInformation(Player targetPlayer, NotificationType notificationType, String key,
|
||||||
|
String... values)
|
||||||
{
|
{
|
||||||
sendPlayerInformation(targetPlayer, notificationType, key, values);
|
sendPlayerInformation(targetPlayer, notificationType, key, values);
|
||||||
}
|
}
|
||||||
@@ -99,7 +101,8 @@ public class NotificationManager {
|
|||||||
player.sendMessage(prefixFormattedMessage);
|
player.sendMessage(prefixFormattedMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key, String... values)
|
public static void sendPlayerInformation(Player player, NotificationType notificationType, String key,
|
||||||
|
String... values)
|
||||||
{
|
{
|
||||||
if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications())
|
if(UserManager.getPlayer(player) == null || !UserManager.getPlayer(player).useChatNotifications())
|
||||||
return;
|
return;
|
||||||
@@ -119,24 +122,28 @@ public class NotificationManager {
|
|||||||
final Audience audience = mcMMO.getAudiences().player(player);
|
final Audience audience = mcMMO.getAudiences().player(player);
|
||||||
|
|
||||||
//If the message is being sent to the action bar we need to check if the copy if a copy is sent to the chat system
|
//If the message is being sent to the action bar we need to check if the copy if a copy is sent to the chat system
|
||||||
|
Component notificationTextComponent = customEvent.getNotificationTextComponent();
|
||||||
if(customEvent.getChatMessageType() == McMMOMessageType.ACTION_BAR)
|
if(customEvent.getChatMessageType() == McMMOMessageType.ACTION_BAR)
|
||||||
{
|
{
|
||||||
audience.sendActionBar(customEvent.getNotificationTextComponent());
|
audience.sendActionBar(notificationTextComponent);
|
||||||
|
|
||||||
if(customEvent.isMessageAlsoBeingSentToChat())
|
if(customEvent.isMessageAlsoBeingSentToChat())
|
||||||
{
|
{
|
||||||
//Send copy to chat system
|
//Send copy to chat system
|
||||||
audience.sendMessage(Identity.nil(), customEvent.getNotificationTextComponent(), MessageType.SYSTEM);
|
audience.sendMessage(notificationTextComponent);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
audience.sendMessage(Identity.nil(), customEvent.getNotificationTextComponent(), MessageType.SYSTEM);
|
audience.sendMessage(notificationTextComponent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType, McMMOMessageType destination, Component message) {
|
private static McMMOPlayerNotificationEvent checkNotificationEvent(Player player, NotificationType notificationType,
|
||||||
|
McMMOMessageType destination,
|
||||||
|
Component message) {
|
||||||
//Init event
|
//Init event
|
||||||
McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player,
|
McMMOPlayerNotificationEvent customEvent = new McMMOPlayerNotificationEvent(player,
|
||||||
notificationType, message, destination, mcMMO.p.getAdvancedConfig().doesNotificationSendCopyToChat(notificationType));
|
notificationType, message, destination,
|
||||||
|
mcMMO.p.getAdvancedConfig().doesNotificationSendCopyToChat(notificationType));
|
||||||
|
|
||||||
//Call event
|
//Call event
|
||||||
Bukkit.getServer().getPluginManager().callEvent(customEvent);
|
Bukkit.getServer().getPluginManager().callEvent(customEvent);
|
||||||
@@ -149,15 +156,23 @@ public class NotificationManager {
|
|||||||
* @param skillName skill that leveled up
|
* @param skillName skill that leveled up
|
||||||
* @param newLevel new level of that skill
|
* @param newLevel new level of that skill
|
||||||
*/
|
*/
|
||||||
public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkillType skillName, int levelsGained, int newLevel)
|
public static void sendPlayerLevelUpNotification(McMMOPlayer mcMMOPlayer, PrimarySkillType skillName,
|
||||||
|
int levelsGained, int newLevel)
|
||||||
{
|
{
|
||||||
if(!mcMMOPlayer.useChatNotifications())
|
if(!mcMMOPlayer.useChatNotifications())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
McMMOMessageType destination = mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE) ? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;
|
McMMOMessageType destination
|
||||||
|
= mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(NotificationType.LEVEL_UP_MESSAGE)
|
||||||
|
? McMMOMessageType.ACTION_BAR : McMMOMessageType.SYSTEM;
|
||||||
|
|
||||||
Component levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent(skillName, levelsGained, newLevel);
|
Component levelUpTextComponent = TextComponentFactory.getNotificationLevelUpTextComponent(
|
||||||
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(mcMMOPlayer.getPlayer(), NotificationType.LEVEL_UP_MESSAGE, destination, levelUpTextComponent);
|
skillName, levelsGained, newLevel);
|
||||||
|
McMMOPlayerNotificationEvent customEvent = checkNotificationEvent(
|
||||||
|
mcMMOPlayer.getPlayer(),
|
||||||
|
NotificationType.LEVEL_UP_MESSAGE,
|
||||||
|
destination,
|
||||||
|
levelUpTextComponent);
|
||||||
|
|
||||||
sendNotification(mcMMOPlayer.getPlayer(), customEvent);
|
sendNotification(mcMMOPlayer.getPlayer(), customEvent);
|
||||||
}
|
}
|
||||||
@@ -176,17 +191,12 @@ public class NotificationManager {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
//CHAT MESSAGE
|
//CHAT MESSAGE
|
||||||
mcMMO.getAudiences().player(mcMMOPlayer.getPlayer()).sendMessage(Identity.nil(), TextComponentFactory.getSubSkillUnlockedNotificationComponents(mcMMOPlayer.getPlayer(), subSkillType));
|
mcMMO.getAudiences().player(mcMMOPlayer.getPlayer()).sendMessage(Identity.nil(),
|
||||||
|
TextComponentFactory.getSubSkillUnlockedNotificationComponents(mcMMOPlayer.getPlayer(), subSkillType));
|
||||||
|
|
||||||
//Unlock Sound Effect
|
//Unlock Sound Effect
|
||||||
SoundManager.sendCategorizedSound(mcMMOPlayer.getPlayer(), mcMMOPlayer.getPlayer().getLocation(), SoundType.SKILL_UNLOCKED, SoundCategory.MASTER);
|
SoundManager.sendCategorizedSound(mcMMOPlayer.getPlayer(), mcMMOPlayer.getPlayer().getLocation(),
|
||||||
|
SoundType.SKILL_UNLOCKED, SoundCategory.MASTER);
|
||||||
//ACTION BAR MESSAGE
|
|
||||||
/*if(mcMMO.p.getAdvancedConfig().doesNotificationUseActionBar(NotificationType.SUBSKILL_UNLOCKED))
|
|
||||||
mcMMOPlayer.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(LocaleLoader.getString("JSON.SkillUnlockMessage",
|
|
||||||
subSkillType.getLocaleName(),
|
|
||||||
String.valueOf(RankUtils.getRank(mcMMOPlayer.getPlayer(),
|
|
||||||
subSkillType)))));*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -225,7 +235,8 @@ public class NotificationManager {
|
|||||||
* @param commandSender the command user
|
* @param commandSender the command user
|
||||||
* @param sensitiveCommandType type of command issued
|
* @param sensitiveCommandType type of command issued
|
||||||
*/
|
*/
|
||||||
public static void processSensitiveCommandNotification(CommandSender commandSender, SensitiveCommandType sensitiveCommandType, String... args) {
|
public static void processSensitiveCommandNotification(CommandSender commandSender,
|
||||||
|
SensitiveCommandType sensitiveCommandType, String... args) {
|
||||||
/*
|
/*
|
||||||
* Determine the 'identity' of the one who executed the command to pass as a parameters
|
* Determine the 'identity' of the one who executed the command to pass as a parameters
|
||||||
*/
|
*/
|
||||||
@@ -233,19 +244,26 @@ public class NotificationManager {
|
|||||||
|
|
||||||
if(commandSender instanceof Player)
|
if(commandSender instanceof Player)
|
||||||
{
|
{
|
||||||
senderName = ((Player) commandSender).getDisplayName() + ChatColor.RESET + "-" + ((Player) commandSender).getUniqueId();
|
senderName = ((Player) commandSender).getDisplayName()
|
||||||
|
+ ChatColor.RESET + "-" + ((Player) commandSender).getUniqueId();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Send the notification
|
//Send the notification
|
||||||
switch(sensitiveCommandType)
|
switch(sensitiveCommandType)
|
||||||
{
|
{
|
||||||
case XPRATE_MODIFY:
|
case XPRATE_MODIFY:
|
||||||
sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Others", addItemToFirstPositionOfArray(senderName, args)));
|
sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.Start.Others",
|
||||||
sendAdminCommandConfirmation(commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.Start.Self", args));
|
addItemToFirstPositionOfArray(senderName, args)));
|
||||||
|
sendAdminCommandConfirmation(
|
||||||
|
commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.Start.Self", args));
|
||||||
break;
|
break;
|
||||||
case XPRATE_END:
|
case XPRATE_END:
|
||||||
sendAdminNotification(LocaleLoader.getString("Notifications.Admin.XPRate.End.Others", addItemToFirstPositionOfArray(senderName, args)));
|
sendAdminNotification(
|
||||||
sendAdminCommandConfirmation(commandSender, LocaleLoader.getString("Notifications.Admin.XPRate.End.Self", args));
|
LocaleLoader.getString(
|
||||||
|
"Notifications.Admin.XPRate.End.Others",
|
||||||
|
addItemToFirstPositionOfArray(senderName, args)));
|
||||||
|
sendAdminCommandConfirmation(commandSender,
|
||||||
|
LocaleLoader.getString("Notifications.Admin.XPRate.End.Self", args));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -266,8 +284,6 @@ public class NotificationManager {
|
|||||||
return newArray;
|
return newArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Remove the code duplication, am lazy atm
|
|
||||||
//TODO: Fix broadcasts being skipped for situations where a player skips over the milestone like with the addlevels command
|
|
||||||
public static void processLevelUpBroadcasting(@NotNull McMMOPlayer mmoPlayer, @NotNull PrimarySkillType primarySkillType, int level) {
|
public static void processLevelUpBroadcasting(@NotNull McMMOPlayer mmoPlayer, @NotNull PrimarySkillType primarySkillType, int level) {
|
||||||
if(level <= 0)
|
if(level <= 0)
|
||||||
return;
|
return;
|
||||||
@@ -290,13 +306,22 @@ public class NotificationManager {
|
|||||||
.append(Component.newline())
|
.append(Component.newline())
|
||||||
.append(Component.text(LocalDate.now().toString()))
|
.append(Component.text(LocalDate.now().toString()))
|
||||||
.append(Component.newline())
|
.append(Component.newline())
|
||||||
.append(Component.text(mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType)+" reached level "+level)).color(TextColor.fromHexString(HEX_BEIGE_COLOR))
|
.append(Component.text(
|
||||||
|
mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType)
|
||||||
|
+ " reached level "+level)).color(TextColor.fromHexString(HEX_BEIGE_COLOR))
|
||||||
.asHoverEvent();
|
.asHoverEvent();
|
||||||
|
|
||||||
String localeMessage = LocaleLoader.getString("Broadcasts.LevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), level, mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType));
|
String localeMessage = LocaleLoader.getString(
|
||||||
Component message = LegacyComponentSerializer.legacySection().deserialize(localeMessage).hoverEvent(levelMilestoneHover);
|
"Broadcasts.LevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), level,
|
||||||
|
mcMMO.p.getSkillTools().getLocalizedSkillName(primarySkillType));
|
||||||
|
Component component = LegacyComponentSerializer
|
||||||
|
.legacySection()
|
||||||
|
.deserialize(localeMessage)
|
||||||
|
.hoverEvent(levelMilestoneHover);
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskLater(mcMMO.p, () -> audience.sendMessage(Identity.nil(), message), 0);
|
// TODO: Update system msg API
|
||||||
|
mcMMO.p.getFoliaLib().getImpl().runNextTick(
|
||||||
|
t -> audience.sendMessage(component));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -331,7 +356,7 @@ public class NotificationManager {
|
|||||||
String localeMessage = LocaleLoader.getString("Broadcasts.PowerLevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), powerLevel);
|
String localeMessage = LocaleLoader.getString("Broadcasts.PowerLevelUpMilestone", mmoPlayer.getPlayer().getDisplayName(), powerLevel);
|
||||||
Component message = LegacyComponentSerializer.legacySection().deserialize(localeMessage).hoverEvent(levelMilestoneHover);
|
Component message = LegacyComponentSerializer.legacySection().deserialize(localeMessage).hoverEvent(levelMilestoneHover);
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskLater(mcMMO.p, () -> audience.sendMessage(Identity.nil(), message), 0);
|
mcMMO.p.getFoliaLib().getImpl().runNextTick(t -> audience.sendMessage(message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ import com.gmail.nossr50.util.player.NotificationManager;
|
|||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType;
|
import com.gmail.nossr50.util.scoreboards.ScoreboardManager.SidebarType;
|
||||||
import com.gmail.nossr50.util.skills.SkillTools;
|
import com.gmail.nossr50.util.skills.SkillTools;
|
||||||
|
import com.tcoded.folialib.wrapper.task.WrappedTask;
|
||||||
import org.apache.commons.lang.Validate;
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
|
||||||
import org.bukkit.scoreboard.DisplaySlot;
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
import org.bukkit.scoreboard.Objective;
|
import org.bukkit.scoreboard.Objective;
|
||||||
import org.bukkit.scoreboard.Score;
|
import org.bukkit.scoreboard.Score;
|
||||||
@@ -86,9 +84,9 @@ public class ScoreboardWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BukkitTask updateTask = null;
|
public WrappedTask updateTask = null;
|
||||||
|
|
||||||
private class ScoreboardQuickUpdate extends BukkitRunnable {
|
private class ScoreboardQuickUpdate implements Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
updateSidebar();
|
updateSidebar();
|
||||||
@@ -96,9 +94,9 @@ public class ScoreboardWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BukkitTask revertTask = null;
|
public WrappedTask revertTask = null;
|
||||||
|
|
||||||
private class ScoreboardChangeTask extends BukkitRunnable {
|
private class ScoreboardChangeTask implements Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
tryRevertBoard();
|
tryRevertBoard();
|
||||||
@@ -106,9 +104,9 @@ public class ScoreboardWrapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public BukkitTask cooldownTask = null;
|
public WrappedTask cooldownTask = null;
|
||||||
|
|
||||||
private class ScoreboardCooldownTask extends BukkitRunnable {
|
private class ScoreboardCooldownTask implements Runnable {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// Stop updating if it's no longer something displaying cooldowns
|
// Stop updating if it's no longer something displaying cooldowns
|
||||||
@@ -125,7 +123,7 @@ public class ScoreboardWrapper {
|
|||||||
public void doSidebarUpdateSoon() {
|
public void doSidebarUpdateSoon() {
|
||||||
if (updateTask == null) {
|
if (updateTask == null) {
|
||||||
// To avoid spamming the scheduler, store the instance and run 2 ticks later
|
// To avoid spamming the scheduler, store the instance and run 2 ticks later
|
||||||
updateTask = new ScoreboardQuickUpdate().runTaskLater(mcMMO.p, 2L);
|
updateTask = mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new ScoreboardQuickUpdate(), 2L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +131,7 @@ public class ScoreboardWrapper {
|
|||||||
if (cooldownTask == null) {
|
if (cooldownTask == null) {
|
||||||
// Repeat every 5 seconds.
|
// Repeat every 5 seconds.
|
||||||
// Cancels once all cooldowns are done, using stopCooldownUpdating().
|
// Cancels once all cooldowns are done, using stopCooldownUpdating().
|
||||||
cooldownTask = new ScoreboardCooldownTask().runTaskTimer(mcMMO.p, 5 * Misc.TICK_CONVERSION_FACTOR, 5 * Misc.TICK_CONVERSION_FACTOR);
|
cooldownTask = mcMMO.p.getFoliaLib().getImpl().runAtEntityTimer(player, new ScoreboardCooldownTask(), 5 * Misc.TICK_CONVERSION_FACTOR, 5 * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,7 +214,7 @@ public class ScoreboardWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
player.setScoreboard(scoreboard);
|
player.setScoreboard(scoreboard);
|
||||||
revertTask = new ScoreboardChangeTask().runTaskLater(mcMMO.p, ticks);
|
revertTask = mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(player, new ScoreboardChangeTask(), ticks);
|
||||||
|
|
||||||
// TODO is there any way to do the time that looks acceptable?
|
// TODO is there any way to do the time that looks acceptable?
|
||||||
// player.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Timer", StringUtils.capitalize(sidebarType.toString().toLowerCase(Locale.ENGLISH)), ticks / 20F));
|
// player.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Timer", StringUtils.capitalize(sidebarType.toString().toLowerCase(Locale.ENGLISH)), ticks / 20F));
|
||||||
@@ -426,7 +424,7 @@ public class ScoreboardWrapper {
|
|||||||
NotificationManager.sendPlayerInformationChatOnlyPrefixed(player, "Scoreboard.Recovery");
|
NotificationManager.sendPlayerInformationChatOnlyPrefixed(player, "Scoreboard.Recovery");
|
||||||
|
|
||||||
initBoard(); //Start over
|
initBoard(); //Start over
|
||||||
Bukkit.getScheduler().runTaskLater(mcMMO.p, () -> ScoreboardManager.retryLastSkillBoard(player), 0);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(player, t -> ScoreboardManager.retryLastSkillBoard(player));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import com.gmail.nossr50.skills.unarmed.UnarmedManager;
|
|||||||
import com.gmail.nossr50.util.*;
|
import com.gmail.nossr50.util.*;
|
||||||
import com.gmail.nossr50.util.player.NotificationManager;
|
import com.gmail.nossr50.util.player.NotificationManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
@@ -807,7 +806,7 @@ public final class CombatUtils {
|
|||||||
baseXP *= multiplier;
|
baseXP *= multiplier;
|
||||||
|
|
||||||
if (baseXP != 0) {
|
if (baseXP != 0) {
|
||||||
new AwardCombatXpTask(mcMMOPlayer, primarySkillType, baseXP, target, xpGainReason).runTaskLater(mcMMO.p, 0);
|
mcMMO.p.getFoliaLib().getImpl().runAtEntity(mcMMOPlayer.getPlayer(), new AwardCombatXpTask(mcMMOPlayer, primarySkillType, baseXP, target, xpGainReason));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -982,6 +981,6 @@ public final class CombatUtils {
|
|||||||
* @param entity the projectile
|
* @param entity the projectile
|
||||||
*/
|
*/
|
||||||
public static void delayArrowMetaCleanup(@NotNull Projectile entity) {
|
public static void delayArrowMetaCleanup(@NotNull Projectile entity) {
|
||||||
Bukkit.getServer().getScheduler().runTaskLater(mcMMO.p, () -> cleanupArrowMetadata(entity), 20*60);
|
mcMMO.p.getFoliaLib().getImpl().runLater(() -> cleanupArrowMetadata(entity), 20*60);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class RankUtils {
|
|||||||
{
|
{
|
||||||
SkillUnlockNotificationTask skillUnlockNotificationTask = new SkillUnlockNotificationTask(mcMMOPlayer, subSkillType, newLevel);
|
SkillUnlockNotificationTask skillUnlockNotificationTask = new SkillUnlockNotificationTask(mcMMOPlayer, subSkillType, newLevel);
|
||||||
|
|
||||||
skillUnlockNotificationTask.runTaskLater(plugin, (count * 100L));
|
mcMMO.p.getFoliaLib().getImpl().runAtEntityLater(mcMMOPlayer.getPlayer(), skillUnlockNotificationTask, (count * 100L));
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -291,30 +291,12 @@ public class RankUtils {
|
|||||||
subSkillRanks.computeIfAbsent(s, k -> new HashMap<>());
|
subSkillRanks.computeIfAbsent(s, k -> new HashMap<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public static int getSubSkillUnlockRequirement(SubSkillType subSkillType)
|
|
||||||
{
|
|
||||||
String skillName = subSkillType.toString();
|
|
||||||
int numRanks = subSkillType.getNumRanks();
|
|
||||||
|
|
||||||
if(subSkillRanks == null)
|
|
||||||
subSkillRanks = new HashMap<>();
|
|
||||||
|
|
||||||
if(numRanks == 0)
|
|
||||||
return -1; //-1 Means the skill doesn't have ranks
|
|
||||||
|
|
||||||
if(subSkillRanks.get(skillName) == null && numRanks > 0)
|
|
||||||
addRanks(subSkillType);
|
|
||||||
|
|
||||||
return subSkillRanks.get(subSkillType.toString()).get(1);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the unlock level for a specific rank in a subskill
|
* Gets the unlock level for a specific rank in a subskill
|
||||||
* @param subSkillType The target subskill
|
* @param subSkillType The target subskill
|
||||||
* @param rank The target rank
|
* @param rank The target rank
|
||||||
* @return The level at which this rank unlocks
|
* @return The level at which this rank unlocks
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getRankUnlockLevel(SubSkillType subSkillType, int rank)
|
public static int getRankUnlockLevel(SubSkillType subSkillType, int rank)
|
||||||
{
|
{
|
||||||
return RankConfig.getInstance().getSubSkillUnlockLevel(subSkillType, rank);
|
return RankConfig.getInstance().getSubSkillUnlockLevel(subSkillType, rank);
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ import com.gmail.nossr50.mcMMO;
|
|||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.skills.RankUtils;
|
import com.gmail.nossr50.util.skills.RankUtils;
|
||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
import net.kyori.adventure.audience.MessageType;
|
|
||||||
import net.kyori.adventure.identity.Identity;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
@@ -35,41 +33,37 @@ public class TextComponentFactory {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes a text component using strings from a locale and supports passing an undefined number of variables to the LocaleLoader
|
* Makes a text component using strings from a locale and supports passing an undefined number of variables to the LocaleLoader
|
||||||
|
*
|
||||||
* @param localeKey target locale string address
|
* @param localeKey target locale string address
|
||||||
* @param values vars to be passed to the locale loader
|
* @param values vars to be passed to the locale loader
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static TextComponent getNotificationMultipleValues(String localeKey, String... values)
|
public static TextComponent getNotificationMultipleValues(String localeKey, String... values) {
|
||||||
{
|
|
||||||
String preColoredString = LocaleLoader.getString(localeKey, (Object[]) values);
|
String preColoredString = LocaleLoader.getString(localeKey, (Object[]) values);
|
||||||
return Component.text(preColoredString);
|
return Component.text(preColoredString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component getNotificationTextComponentFromLocale(String localeKey)
|
public static Component getNotificationTextComponentFromLocale(String localeKey) {
|
||||||
{
|
|
||||||
return getNotificationTextComponent(LocaleLoader.getString(localeKey));
|
return getNotificationTextComponent(LocaleLoader.getString(localeKey));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component getNotificationLevelUpTextComponent(PrimarySkillType skill, int levelsGained, int currentLevel)
|
public static Component getNotificationLevelUpTextComponent(PrimarySkillType skill, int levelsGained, int currentLevel) {
|
||||||
{
|
return Component.text(LocaleLoader.getString("Overhaul.Levelup", LocaleLoader.getString("Overhaul.Name." + StringUtils.getCapitalized(skill.toString())), levelsGained, currentLevel));
|
||||||
return Component.text(LocaleLoader.getString("Overhaul.Levelup", LocaleLoader.getString("Overhaul.Name."+ StringUtils.getCapitalized(skill.toString())), levelsGained, currentLevel));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TextComponent getNotificationTextComponent(String text)
|
private static TextComponent getNotificationTextComponent(String text) {
|
||||||
{
|
|
||||||
//textComponent.setColor(getNotificationColor(notificationType));
|
//textComponent.setColor(getNotificationColor(notificationType));
|
||||||
return Component.text(text);
|
return Component.text(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendPlayerSubSkillWikiLink(Player player, String subskillformatted)
|
public static void sendPlayerSubSkillWikiLink(Player player, String subskillformatted) {
|
||||||
{
|
if (!mcMMO.p.getGeneralConfig().getUrlLinksEnabled())
|
||||||
if(!mcMMO.p.getGeneralConfig().getUrlLinksEnabled())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TextComponent.Builder wikiLinkComponent = Component.text().content(LocaleLoader.getString("Overhaul.mcMMO.MmoInfo.Wiki"));
|
TextComponent.Builder wikiLinkComponent = Component.text().content(LocaleLoader.getString("Overhaul.mcMMO.MmoInfo.Wiki"));
|
||||||
wikiLinkComponent.decoration(TextDecoration.UNDERLINED, true);
|
wikiLinkComponent.decoration(TextDecoration.UNDERLINED, true);
|
||||||
|
|
||||||
String wikiUrl = "https://wiki.mcmmo.org/"+subskillformatted;
|
String wikiUrl = "https://wiki.mcmmo.org/" + subskillformatted;
|
||||||
|
|
||||||
wikiLinkComponent.clickEvent(ClickEvent.openUrl(wikiUrl));
|
wikiLinkComponent.clickEvent(ClickEvent.openUrl(wikiUrl));
|
||||||
|
|
||||||
@@ -77,39 +71,40 @@ public class TextComponentFactory {
|
|||||||
|
|
||||||
wikiLinkComponent.hoverEvent(HoverEvent.showText(componentBuilder.build()));
|
wikiLinkComponent.hoverEvent(HoverEvent.showText(componentBuilder.build()));
|
||||||
|
|
||||||
mcMMO.getAudiences().player(player).sendMessage(Identity.nil(), wikiLinkComponent, MessageType.SYSTEM);
|
mcMMO.getAudiences().player(player).sendMessage(wikiLinkComponent);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void sendPlayerUrlHeader(Player player) {
|
public static void sendPlayerUrlHeader(Player player) {
|
||||||
TextComponent prefix = Component.text(LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Prefix") + " ");
|
TextComponent prefix = Component.text(LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Prefix") + " ");
|
||||||
/*prefix.setColor(ChatColor.DARK_AQUA);*/
|
/*prefix.setColor(ChatColor.DARK_AQUA);*/
|
||||||
TextComponent suffix = Component.text(" "+LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Suffix"));
|
TextComponent suffix = Component.text(" " + LocaleLoader.getString("Overhaul.mcMMO.Url.Wrap.Suffix"));
|
||||||
/*suffix.setColor(ChatColor.DARK_AQUA);*/
|
/*suffix.setColor(ChatColor.DARK_AQUA);*/
|
||||||
|
|
||||||
TextComponent emptySpace = Component.space();
|
TextComponent emptySpace = Component.space();
|
||||||
|
|
||||||
mcMMO.getAudiences().player(player).sendMessage(Identity.nil(),TextComponent.ofChildren(
|
// TODO: Update system msg API
|
||||||
prefix,
|
mcMMO.getAudiences().player(player).sendMessage(Component.textOfChildren(
|
||||||
getWebLinkTextComponent(McMMOWebLinks.WEBSITE),
|
prefix,
|
||||||
emptySpace,
|
getWebLinkTextComponent(McMMOWebLinks.WEBSITE),
|
||||||
getWebLinkTextComponent(McMMOWebLinks.DISCORD),
|
emptySpace,
|
||||||
emptySpace,
|
getWebLinkTextComponent(McMMOWebLinks.DISCORD),
|
||||||
getWebLinkTextComponent(McMMOWebLinks.PATREON),
|
emptySpace,
|
||||||
emptySpace,
|
getWebLinkTextComponent(McMMOWebLinks.PATREON),
|
||||||
getWebLinkTextComponent(McMMOWebLinks.WIKI),
|
emptySpace,
|
||||||
emptySpace,
|
getWebLinkTextComponent(McMMOWebLinks.WIKI),
|
||||||
getWebLinkTextComponent(McMMOWebLinks.SPIGOT),
|
emptySpace,
|
||||||
emptySpace,
|
getWebLinkTextComponent(McMMOWebLinks.SPIGOT),
|
||||||
getWebLinkTextComponent(McMMOWebLinks.HELP_TRANSLATE),
|
emptySpace,
|
||||||
suffix
|
getWebLinkTextComponent(McMMOWebLinks.HELP_TRANSLATE),
|
||||||
), MessageType.SYSTEM);
|
suffix
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends a player a bunch of text components that represent a list of sub-skills
|
* Sends a player a bunch of text components that represent a list of sub-skills
|
||||||
* Styling and formatting is applied before sending the messages
|
* Styling and formatting is applied before sending the messages
|
||||||
*
|
*
|
||||||
* @param player target player
|
* @param player target player
|
||||||
* @param subSkillComponents the text components representing the sub-skills by name
|
* @param subSkillComponents the text components representing the sub-skills by name
|
||||||
*/
|
*/
|
||||||
public static void sendPlayerSubSkillList(@NotNull Player player, @NotNull List<Component> subSkillComponents) {
|
public static void sendPlayerSubSkillList(@NotNull Player player, @NotNull List<Component> subSkillComponents) {
|
||||||
@@ -129,17 +124,15 @@ public class TextComponentFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Send each group
|
//Send each group
|
||||||
for(Component curLine : individualLinesToSend) {
|
for (Component curLine : individualLinesToSend) {
|
||||||
audience.sendMessage(Identity.nil(), curLine);
|
audience.sendMessage(curLine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Component getWebLinkTextComponent(McMMOWebLinks webLinks)
|
private static Component getWebLinkTextComponent(McMMOWebLinks webLinks) {
|
||||||
{
|
|
||||||
TextComponent.Builder webTextComponent;
|
TextComponent.Builder webTextComponent;
|
||||||
|
|
||||||
switch(webLinks)
|
switch (webLinks) {
|
||||||
{
|
|
||||||
case WEBSITE:
|
case WEBSITE:
|
||||||
webTextComponent = Component.text().content(LocaleLoader.getString("JSON.Hover.AtSymbolURL"));
|
webTextComponent = Component.text().content(LocaleLoader.getString("JSON.Hover.AtSymbolURL"));
|
||||||
TextUtils.addChildWebComponent(webTextComponent, "Web");
|
TextUtils.addChildWebComponent(webTextComponent, "Web");
|
||||||
@@ -180,12 +173,10 @@ public class TextComponentFactory {
|
|||||||
return webTextComponent.build();
|
return webTextComponent.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Component getUrlHoverEvent(McMMOWebLinks webLinks)
|
private static Component getUrlHoverEvent(McMMOWebLinks webLinks) {
|
||||||
{
|
|
||||||
TextComponent.Builder componentBuilder = Component.text().content(webLinks.getNiceTitle());
|
TextComponent.Builder componentBuilder = Component.text().content(webLinks.getNiceTitle());
|
||||||
|
|
||||||
switch(webLinks)
|
switch (webLinks) {
|
||||||
{
|
|
||||||
case WEBSITE:
|
case WEBSITE:
|
||||||
addUrlHeaderHover(webLinks, componentBuilder);
|
addUrlHeaderHover(webLinks, componentBuilder);
|
||||||
componentBuilder.append(Component.newline()).append(Component.newline());
|
componentBuilder.append(Component.newline()).append(Component.newline());
|
||||||
@@ -223,7 +214,7 @@ public class TextComponentFactory {
|
|||||||
componentBuilder.append(Component.text(webLinks.getLocaleDescription(), NamedTextColor.GREEN));
|
componentBuilder.append(Component.text(webLinks.getLocaleDescription(), NamedTextColor.GREEN));
|
||||||
componentBuilder.append(Component.newline());
|
componentBuilder.append(Component.newline());
|
||||||
componentBuilder.append(Component.text("You can use this website to help translate mcMMO into your language!" +
|
componentBuilder.append(Component.text("You can use this website to help translate mcMMO into your language!" +
|
||||||
"\nIf you want to know more contact me in discord.", NamedTextColor.DARK_GRAY));
|
"\nIf you want to know more contact me in discord.", NamedTextColor.DARK_GRAY));
|
||||||
}
|
}
|
||||||
|
|
||||||
return componentBuilder.build();
|
return componentBuilder.build();
|
||||||
@@ -234,13 +225,11 @@ public class TextComponentFactory {
|
|||||||
componentBuilder.append(Component.text(webLinks.getUrl(), NamedTextColor.GRAY, TextDecoration.ITALIC));
|
componentBuilder.append(Component.text(webLinks.getUrl(), NamedTextColor.GRAY, TextDecoration.ITALIC));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ClickEvent getUrlClickEvent(String url)
|
private static ClickEvent getUrlClickEvent(String url) {
|
||||||
{
|
|
||||||
return ClickEvent.openUrl(url);
|
return ClickEvent.openUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Component getSubSkillTextComponent(Player player, SubSkillType subSkillType)
|
private static Component getSubSkillTextComponent(Player player, SubSkillType subSkillType) {
|
||||||
{
|
|
||||||
//Get skill name
|
//Get skill name
|
||||||
String skillName = subSkillType.getLocaleName();
|
String skillName = subSkillType.getLocaleName();
|
||||||
|
|
||||||
@@ -257,8 +246,7 @@ public class TextComponentFactory {
|
|||||||
return textComponent.build();
|
return textComponent.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TextComponent getSubSkillTextComponent(Player player, AbstractSubSkill abstractSubSkill)
|
private static TextComponent getSubSkillTextComponent(Player player, AbstractSubSkill abstractSubSkill) {
|
||||||
{
|
|
||||||
//String key = abstractSubSkill.getConfigKeyName();
|
//String key = abstractSubSkill.getConfigKeyName();
|
||||||
String skillName = abstractSubSkill.getNiceName();
|
String skillName = abstractSubSkill.getNiceName();
|
||||||
|
|
||||||
@@ -297,46 +285,37 @@ public class TextComponentFactory {
|
|||||||
return textComponent;
|
return textComponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Component getSubSkillHoverComponent(Player player, AbstractSubSkill abstractSubSkill)
|
private static Component getSubSkillHoverComponent(Player player, AbstractSubSkill abstractSubSkill) {
|
||||||
{
|
|
||||||
return getSubSkillHoverEventJSON(abstractSubSkill, player);
|
return getSubSkillHoverEventJSON(abstractSubSkill, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Component getSubSkillHoverComponent(Player player, SubSkillType subSkillType)
|
private static Component getSubSkillHoverComponent(Player player, SubSkillType subSkillType) {
|
||||||
{
|
|
||||||
return getSubSkillHoverEventJSON(subSkillType, player);
|
return getSubSkillHoverEventJSON(subSkillType, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used for the skill in the new skill system (Deriving from AbstractSubSkill)
|
* Used for the skill in the new skill system (Deriving from AbstractSubSkill)
|
||||||
|
*
|
||||||
* @param abstractSubSkill this subskill
|
* @param abstractSubSkill this subskill
|
||||||
* @param player the player who owns this subskill
|
* @param player the player who owns this subskill
|
||||||
* @return the hover basecomponent object for this subskill
|
* @return the hover basecomponent object for this subskill
|
||||||
*/
|
*/
|
||||||
private static Component getSubSkillHoverEventJSON(AbstractSubSkill abstractSubSkill, Player player)
|
private static Component getSubSkillHoverEventJSON(AbstractSubSkill abstractSubSkill, Player player) {
|
||||||
{
|
|
||||||
String skillName = abstractSubSkill.getNiceName();
|
String skillName = abstractSubSkill.getNiceName();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hover Event BaseComponent color table
|
* Hover Event BaseComponent color table
|
||||||
*/
|
*/
|
||||||
TextColor ccSubSkillHeader = NamedTextColor.GOLD;
|
TextColor ccLocked = NamedTextColor.DARK_GRAY;
|
||||||
TextColor ccRank = NamedTextColor.BLUE;
|
TextColor ccLevelRequirement = NamedTextColor.BLUE;
|
||||||
TextColor ccCurRank = NamedTextColor.GREEN;
|
TextColor ccLevelRequired = NamedTextColor.RED;
|
||||||
TextColor ccPossessive = NamedTextColor.WHITE;
|
|
||||||
//ChatColor ccDescriptionHeader = ChatColor.DARK_PURPLE;
|
|
||||||
//ChatColor ccDescription = ChatColor.WHITE;
|
|
||||||
TextColor ccLocked = NamedTextColor.DARK_GRAY;
|
|
||||||
TextColor ccLevelRequirement = NamedTextColor.BLUE;
|
|
||||||
TextColor ccLevelRequired = NamedTextColor.RED;
|
|
||||||
|
|
||||||
SubSkillType subSkillType = abstractSubSkill.getSubSkillType();
|
SubSkillType subSkillType = abstractSubSkill.getSubSkillType();
|
||||||
|
|
||||||
//SubSkillType Name
|
//SubSkillType Name
|
||||||
TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, abstractSubSkill));
|
TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, abstractSubSkill));
|
||||||
|
|
||||||
if(!RankUtils.hasUnlockedSubskill(player, abstractSubSkill))
|
if (!RankUtils.hasUnlockedSubskill(player, abstractSubSkill)) {
|
||||||
{
|
|
||||||
//Skill is not unlocked yet
|
//Skill is not unlocked yet
|
||||||
addLocked(abstractSubSkill, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder);
|
addLocked(abstractSubSkill, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder);
|
||||||
} else {
|
} else {
|
||||||
@@ -346,12 +325,11 @@ public class TextComponentFactory {
|
|||||||
int curRank = RankUtils.getRank(player, abstractSubSkill);
|
int curRank = RankUtils.getRank(player, abstractSubSkill);
|
||||||
int nextRank = 0;
|
int nextRank = 0;
|
||||||
|
|
||||||
if(curRank < abstractSubSkill.getNumRanks() && abstractSubSkill.getNumRanks() > 0)
|
if (curRank < abstractSubSkill.getNumRanks() && abstractSubSkill.getNumRanks() > 0) {
|
||||||
{
|
nextRank = RankUtils.getRankUnlockLevel(abstractSubSkill, curRank + 1);
|
||||||
nextRank = RankUtils.getRankUnlockLevel(abstractSubSkill, curRank+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addRanked(ccRank, ccCurRank, ccPossessive, ccCurRank, componentBuilder, abstractSubSkill.getNumRanks(), RankUtils.getRank(player, abstractSubSkill), nextRank);
|
addRanked(componentBuilder, abstractSubSkill.getNumRanks(), RankUtils.getRank(player, abstractSubSkill), nextRank);
|
||||||
|
|
||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.DescriptionHeader")));
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.DescriptionHeader")));
|
||||||
componentBuilder.append(Component.newline()).append(Component.text(abstractSubSkill.getDescription())).append(Component.newline());
|
componentBuilder.append(Component.newline()).append(Component.text(abstractSubSkill.getDescription())).append(Component.newline());
|
||||||
@@ -386,17 +364,14 @@ public class TextComponentFactory {
|
|||||||
return componentBuilder;
|
return componentBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addRanked(TextColor ccRank, TextColor ccCurRank, TextColor ccPossessive, TextColor ccNumRanks, TextComponent.Builder componentBuilder, int numRanks, int rank, int nextRank) {
|
private static void addRanked(TextComponent.Builder componentBuilder, int numRanks, int rank, int nextRank) {
|
||||||
if (numRanks > 0) {
|
if (numRanks > 0) {
|
||||||
//Rank: x
|
//Rank: x
|
||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Hover.Rank", String.valueOf(rank)))).append(Component.newline());
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Hover.Rank", String.valueOf(rank)))).append(Component.newline());
|
||||||
|
|
||||||
//Next Rank: x
|
//Next Rank: x
|
||||||
if(nextRank > rank)
|
if (nextRank > rank)
|
||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Hover.NextRank", String.valueOf(nextRank)))).append(Component.newline());
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Hover.NextRank", String.valueOf(nextRank)))).append(Component.newline());
|
||||||
|
|
||||||
/*componentBuilder.append(" " + LocaleLoader.getString("JSON.RankPossesive") + " ").color(ccPossessive);
|
|
||||||
componentBuilder.append(String.valueOf(numRanks)).color(ccNumRanks);*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -418,47 +393,38 @@ public class TextComponentFactory {
|
|||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.LevelRequirement") + ": ", ccLevelRequirement));
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.LevelRequirement") + ": ", ccLevelRequirement));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
private static Component getSubSkillHoverEventJSON(SubSkillType subSkillType, Player player) {
|
||||||
private static Component getSubSkillHoverEventJSON(SubSkillType subSkillType, Player player)
|
|
||||||
{
|
|
||||||
String skillName = subSkillType.getLocaleName();
|
String skillName = subSkillType.getLocaleName();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hover Event BaseComponent color table
|
* Hover Event BaseComponent color table
|
||||||
*/
|
*/
|
||||||
TextColor ccSubSkillHeader = NamedTextColor.GOLD;
|
TextColor ccDescriptionHeader = NamedTextColor.DARK_PURPLE;
|
||||||
TextColor ccRank = NamedTextColor.BLUE;
|
TextColor ccDescription = NamedTextColor.DARK_GRAY;
|
||||||
TextColor ccCurRank = NamedTextColor.GREEN;
|
TextColor ccLocked = NamedTextColor.DARK_GRAY;
|
||||||
TextColor ccPossessive = NamedTextColor.WHITE;
|
TextColor ccLevelRequirement = NamedTextColor.BLUE;
|
||||||
TextColor ccDescriptionHeader = NamedTextColor.DARK_PURPLE;
|
TextColor ccLevelRequired = NamedTextColor.RED;
|
||||||
TextColor ccDescription = NamedTextColor.DARK_GRAY;
|
|
||||||
TextColor ccLocked = NamedTextColor.DARK_GRAY;
|
|
||||||
TextColor ccLevelRequirement = NamedTextColor.BLUE;
|
|
||||||
TextColor ccLevelRequired = NamedTextColor.RED;
|
|
||||||
|
|
||||||
//SubSkillType Name
|
//SubSkillType Name
|
||||||
TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, subSkillType));
|
TextComponent.Builder componentBuilder = setupSkillComponentNameStyle(player, skillName, subSkillType, RankUtils.hasUnlockedSubskill(player, subSkillType));
|
||||||
|
|
||||||
if(!RankUtils.hasUnlockedSubskill(player, subSkillType))
|
if (!RankUtils.hasUnlockedSubskill(player, subSkillType)) {
|
||||||
{
|
|
||||||
//Skill is not unlocked yet
|
//Skill is not unlocked yet
|
||||||
addLocked(subSkillType, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder);
|
addLocked(subSkillType, ccLocked, ccLevelRequirement, ccLevelRequired, componentBuilder);
|
||||||
} else {
|
} else {
|
||||||
//addSubSkillTypeToHoverEventJSON(subSkillType, componentBuilder);
|
//addSubSkillTypeToHoverEventJSON(subSkillType, componentBuilder);
|
||||||
|
|
||||||
//RANK
|
//RANK
|
||||||
if(subSkillType.getNumRanks() > 0)
|
if (subSkillType.getNumRanks() > 0) {
|
||||||
{
|
|
||||||
int curRank = RankUtils.getRank(player, subSkillType);
|
int curRank = RankUtils.getRank(player, subSkillType);
|
||||||
int nextRank = 0;
|
int nextRank = 0;
|
||||||
|
|
||||||
if(curRank < subSkillType.getNumRanks())
|
if (curRank < subSkillType.getNumRanks()) {
|
||||||
{
|
nextRank = RankUtils.getRankUnlockLevel(subSkillType, curRank + 1);
|
||||||
nextRank = RankUtils.getRankUnlockLevel(subSkillType, curRank+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addRanked(ccRank, ccCurRank, ccPossessive, ccCurRank, componentBuilder, subSkillType.getNumRanks(), RankUtils.getRank(player, subSkillType), nextRank);
|
addRanked(componentBuilder, subSkillType.getNumRanks(),
|
||||||
|
RankUtils.getRank(player, subSkillType), nextRank);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentBuilder.append(Component.newline());
|
componentBuilder.append(Component.newline());
|
||||||
@@ -472,55 +438,52 @@ public class TextComponentFactory {
|
|||||||
return componentBuilder.build();
|
return componentBuilder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addSubSkillTypeToHoverEventJSON(AbstractSubSkill abstractSubSkill, TextComponent.Builder componentBuilder)
|
private static void addSubSkillTypeToHoverEventJSON(AbstractSubSkill abstractSubSkill,
|
||||||
{
|
TextComponent.Builder componentBuilder) {
|
||||||
if(abstractSubSkill.isSuperAbility())
|
if (abstractSubSkill.isSuperAbility()) {
|
||||||
{
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.SuperAbility"),
|
||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.SuperAbility"), NamedTextColor.LIGHT_PURPLE, TextDecoration.BOLD));
|
NamedTextColor.LIGHT_PURPLE, TextDecoration.BOLD));
|
||||||
} else if(abstractSubSkill.isActiveUse())
|
} else if (abstractSubSkill.isActiveUse()) {
|
||||||
{
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Active"),
|
||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Active"), NamedTextColor.DARK_RED, TextDecoration.BOLD));
|
NamedTextColor.DARK_RED, TextDecoration.BOLD));
|
||||||
} else {
|
} else {
|
||||||
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Passive"), NamedTextColor.GREEN, TextDecoration.BOLD));
|
componentBuilder.append(Component.text(LocaleLoader.getString("JSON.Type.Passive"),
|
||||||
|
NamedTextColor.GREEN, TextDecoration.BOLD));
|
||||||
}
|
}
|
||||||
|
|
||||||
componentBuilder.append(Component.newline());
|
componentBuilder.append(Component.newline());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void getSubSkillTextComponents(Player player, List<Component> textComponents, PrimarySkillType parentSkill) {
|
public static void getSubSkillTextComponents(Player player, List<Component> textComponents,
|
||||||
for(SubSkillType subSkillType : SubSkillType.values())
|
PrimarySkillType parentSkill) {
|
||||||
{
|
for (SubSkillType subSkillType : SubSkillType.values()) {
|
||||||
if(subSkillType.getParentSkill() == parentSkill)
|
if (subSkillType.getParentSkill() == parentSkill) {
|
||||||
{
|
|
||||||
//TODO: Hacky rewrite later
|
//TODO: Hacky rewrite later
|
||||||
//Only some versions of MC have this skill
|
//Only some versions of MC have this skill
|
||||||
if(subSkillType == SubSkillType.FISHING_MASTER_ANGLER && mcMMO.getCompatibilityManager().getMasterAnglerCompatibilityLayer() == null)
|
if (subSkillType == SubSkillType.FISHING_MASTER_ANGLER
|
||||||
|
&& mcMMO.getCompatibilityManager().getMasterAnglerCompatibilityLayer() == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(Permissions.isSubSkillEnabled(player, subSkillType))
|
if (Permissions.isSubSkillEnabled(player, subSkillType)) {
|
||||||
{
|
if (!InteractionManager.hasSubSkill(subSkillType))
|
||||||
if(!InteractionManager.hasSubSkill(subSkillType))
|
|
||||||
textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, subSkillType));
|
textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, subSkillType));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NEW SKILL SYSTEM */
|
/* NEW SKILL SYSTEM */
|
||||||
for(AbstractSubSkill abstractSubSkill : InteractionManager.getSubSkillList())
|
for (AbstractSubSkill abstractSubSkill : InteractionManager.getSubSkillList()) {
|
||||||
{
|
if (abstractSubSkill.getPrimarySkill() == parentSkill) {
|
||||||
if(abstractSubSkill.getPrimarySkill() == parentSkill)
|
if (Permissions.isSubSkillEnabled(player, abstractSubSkill))
|
||||||
{
|
|
||||||
if(Permissions.isSubSkillEnabled(player, abstractSubSkill))
|
|
||||||
textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, abstractSubSkill));
|
textComponents.add(TextComponentFactory.getSubSkillTextComponent(player, abstractSubSkill));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TextComponent getSubSkillUnlockedNotificationComponents(Player player, SubSkillType subSkillType)
|
public static TextComponent getSubSkillUnlockedNotificationComponents(Player player, SubSkillType subSkillType) {
|
||||||
{
|
|
||||||
TextComponent.Builder unlockMessage = Component.text().content(LocaleLoader.getString("JSON.SkillUnlockMessage", subSkillType.getLocaleName(), RankUtils.getRank(player, subSkillType)));
|
TextComponent.Builder unlockMessage = Component.text().content(LocaleLoader.getString("JSON.SkillUnlockMessage", subSkillType.getLocaleName(), RankUtils.getRank(player, subSkillType)));
|
||||||
unlockMessage.hoverEvent(HoverEvent.showText(getSubSkillHoverComponent(player, subSkillType)));
|
unlockMessage.hoverEvent(HoverEvent.showText(getSubSkillHoverComponent(player, subSkillType)));
|
||||||
unlockMessage.clickEvent(ClickEvent.runCommand("/"+subSkillType.getParentSkill().toString().toLowerCase(Locale.ENGLISH)));
|
unlockMessage.clickEvent(ClickEvent.runCommand("/" + subSkillType.getParentSkill().toString().toLowerCase(Locale.ENGLISH)));
|
||||||
return unlockMessage.build();
|
return unlockMessage.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,7 +209,14 @@ Skills:
|
|||||||
Fishing:
|
Fishing:
|
||||||
|
|
||||||
ShakeChance:
|
ShakeChance:
|
||||||
Rank_1: 30
|
Rank_1: 15.0
|
||||||
|
Rank_2: 20.0
|
||||||
|
Rank_3: 25.0
|
||||||
|
Rank_4: 35.0
|
||||||
|
Rank_5: 45.0
|
||||||
|
Rank_6: 55.0
|
||||||
|
Rank_7: 65.0
|
||||||
|
Rank_8: 75.0
|
||||||
|
|
||||||
# VanillaXPMultiplier: Vanilla XP gained from fishing is multiplied by these values.
|
# VanillaXPMultiplier: Vanilla XP gained from fishing is multiplied by these values.
|
||||||
VanillaXPMultiplier:
|
VanillaXPMultiplier:
|
||||||
|
|||||||
@@ -393,6 +393,7 @@ Experience_Values:
|
|||||||
Rose_Bush: 50
|
Rose_Bush: 50
|
||||||
Fern: 10
|
Fern: 10
|
||||||
Grass: 10
|
Grass: 10
|
||||||
|
Short_Grass: 10
|
||||||
Sugar_Cane: 30
|
Sugar_Cane: 30
|
||||||
Sunflower: 50
|
Sunflower: 50
|
||||||
Tall_Grass: 50
|
Tall_Grass: 50
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ website: https://www.mcmmo.org
|
|||||||
main: com.gmail.nossr50.mcMMO
|
main: com.gmail.nossr50.mcMMO
|
||||||
softdepend: [WorldGuard, CombatTag, HealthBar, PlaceholderAPI]
|
softdepend: [WorldGuard, CombatTag, HealthBar, PlaceholderAPI]
|
||||||
load: POSTWORLD
|
load: POSTWORLD
|
||||||
|
folia-supported: true
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
|
|||||||
@@ -406,8 +406,22 @@ Fishing:
|
|||||||
Shake:
|
Shake:
|
||||||
Standard:
|
Standard:
|
||||||
Rank_1: 15
|
Rank_1: 15
|
||||||
|
Rank_2: 20
|
||||||
|
Rank_3: 25
|
||||||
|
Rank_4: 30
|
||||||
|
Rank_5: 40
|
||||||
|
Rank_6: 50
|
||||||
|
Rank_7: 60
|
||||||
|
Rank_8: 70
|
||||||
RetroMode:
|
RetroMode:
|
||||||
Rank_1: 150
|
Rank_1: 150
|
||||||
|
Rank_2: 200
|
||||||
|
Rank_3: 250
|
||||||
|
Rank_4: 300
|
||||||
|
Rank_5: 400
|
||||||
|
Rank_6: 500
|
||||||
|
Rank_7: 600
|
||||||
|
Rank_8: 700
|
||||||
MasterAngler:
|
MasterAngler:
|
||||||
Standard:
|
Standard:
|
||||||
Rank_1: 1
|
Rank_1: 1
|
||||||
|
|||||||
Reference in New Issue
Block a user