Folia Support?

This commit is contained in:
SuperRonanCraft
2023-04-19 00:00:21 -04:00
parent 5aad2125d3
commit 033eaeecdc
22 changed files with 122 additions and 61 deletions

View File

@@ -7,7 +7,7 @@
<groupId>me.SuperRonanCraft</groupId> <groupId>me.SuperRonanCraft</groupId>
<artifactId>BetterRTPAddons</artifactId> <artifactId>BetterRTPAddons</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
<version>1.8.6</version> <version>1.8.7</version>
<properties> <properties>
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.8</maven.compiler.source>
@@ -109,7 +109,7 @@
<dependency> <dependency>
<groupId>me.SuperRonanCraft</groupId> <groupId>me.SuperRonanCraft</groupId>
<artifactId>BetterRTP</artifactId> <artifactId>BetterRTP</artifactId>
<version>3.6.6</version> <version>3.6.7</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- ProtocolLib --> <!-- ProtocolLib -->

View File

@@ -7,6 +7,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
@@ -32,7 +33,10 @@ public class RTPMenu_Refresh implements Listener {
private void start() { private void start() {
opening = true; opening = true;
RTPMenu_SelectWorld.createInv(addon, player); if (!RTPMenu_SelectWorld.createInv(addon, player)) {
cancel();
return;
}
opening = false; opening = false;
this.task = new BukkitRunnable() { this.task = new BukkitRunnable() {
@Override public void run() { @Override public void run() {
@@ -44,9 +48,21 @@ public class RTPMenu_Refresh implements Listener {
@EventHandler @EventHandler
void close(InventoryCloseEvent e) { void close(InventoryCloseEvent e) {
if (e.getPlayer() == player && !opening) { if (e.getPlayer() == player && !opening) {
task.cancel(); cancel();
HandlerList.unregisterAll(this);
} }
} }
@EventHandler
void leave(PlayerQuitEvent e) {
if (e.getPlayer() == player) {
cancel();
}
}
void cancel() {
if (task != null)
task.cancel();
HandlerList.unregisterAll(this);
}
} }

View File

@@ -23,7 +23,7 @@ import java.util.Map;
public class RTPMenu_SelectWorld { public class RTPMenu_SelectWorld {
public static void createInv(AddonRTPMenu pl, Player p) { public static boolean createInv(AddonRTPMenu pl, Player p) {
List<World> bukkit_worlds = Bukkit.getWorlds(); List<World> bukkit_worlds = Bukkit.getWorlds();
List<World> actual_worlds = new ArrayList<>(); List<World> actual_worlds = new ArrayList<>();
for (World world : bukkit_worlds) { for (World world : bukkit_worlds) {
@@ -32,7 +32,7 @@ public class RTPMenu_SelectWorld {
} }
if (actual_worlds.isEmpty() || (actual_worlds.size() <= 1 && !BetterRTP.getInstance().getSettings().isDebug())) { if (actual_worlds.isEmpty() || (actual_worlds.size() <= 1 && !BetterRTP.getInstance().getSettings().isDebug())) {
CmdTeleport.teleport(p, "rtp", null, null); CmdTeleport.teleport(p, "rtp", null, null);
return; return false;
} }
int size = Math.floorDiv(actual_worlds.size(), 9) * 9; int size = Math.floorDiv(actual_worlds.size(), 9) * 9;
if (size < actual_worlds.size()) size += 9; if (size < actual_worlds.size()) size += 9;
@@ -58,6 +58,7 @@ public class RTPMenu_SelectWorld {
pl.getData(p).setMenuInv(inv); pl.getData(p).setMenuInv(inv);
pl.getData(p).setWorldSlots(world_slots); pl.getData(p).setWorldSlots(world_slots);
p.openInventory(inv); p.openInventory(inv);
return true;
} }
private static HashMap<Integer, World> centerWorlds(List<World> actual_worlds) { private static HashMap<Integer, World> centerWorlds(List<World> actual_worlds) {

14
pom.xml
View File

@@ -175,12 +175,17 @@
<id>placeholderapi</id> <id>placeholderapi</id>
<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url> <url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository> </repository>
<!-- MinePlots Repo --> <!-- MinePlots Repo -->
<repository> <repository>
<id>minecodes-repository-releases</id> <id>minecodes-repository-releases</id>
<name>mineCodes Organization Repository</name> <name>mineCodes Organization Repository</name>
<url>https://repository.minecodes.pl/releases</url> <url>https://repository.minecodes.pl/releases</url>
</repository> </repository>
<!-- FoliaLib https://github.com/TechnicallyCoded/FoliaLib -->
<repository>
<id>devmart-other</id>
<url>https://nexuslite.gcnt.net/repos/other/</url>
</repository>
</repositories> </repositories>
<dependencies> <dependencies>
<!--Spigot API--> <!--Spigot API-->
@@ -375,5 +380,12 @@
<version>3.4.5</version> <version>3.4.5</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- FoliaLib -->
<dependency>
<groupId>com.tcoded</groupId>
<artifactId>FoliaLib</artifactId>
<version>0.2.0</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -1,5 +1,6 @@
package me.SuperRonanCraft.BetterRTP; package me.SuperRonanCraft.BetterRTP;
import com.tcoded.folialib.FoliaLib;
import lombok.Getter; import lombok.Getter;
import me.SuperRonanCraft.BetterRTP.player.PlayerInfo; import me.SuperRonanCraft.BetterRTP.player.PlayerInfo;
import me.SuperRonanCraft.BetterRTP.player.commands.Commands; import me.SuperRonanCraft.BetterRTP.player.commands.Commands;
@@ -48,6 +49,7 @@ public class BetterRTP extends JavaPlugin {
//@Getter private BukkitAudiences adventure; //@Getter private BukkitAudiences adventure;
@Getter private boolean PlaceholderAPI; @Getter private boolean PlaceholderAPI;
@Getter private final RTPLogger rtpLogger = new RTPLogger(); @Getter private final RTPLogger rtpLogger = new RTPLogger();
@Getter FoliaLib folia = new FoliaLib(this);
@Override @Override
public void onEnable() { public void onEnable() {

View File

@@ -5,6 +5,7 @@ import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation; import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode; import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP;
import me.SuperRonanCraft.BetterRTP.references.messages.Message; import me.SuperRonanCraft.BetterRTP.references.messages.Message;
import me.SuperRonanCraft.BetterRTP.references.messages.Message_RTP; import me.SuperRonanCraft.BetterRTP.references.messages.Message_RTP;
@@ -43,7 +44,7 @@ public class CmdQueue implements RTPCommand {
Player p = (Player) sendi; Player p = (Player) sendi;
//sendi.sendMessage("Loading..."); //sendi.sendMessage("Loading...");
World world = args.length > 1 ? Bukkit.getWorld(args[1]) : null; World world = args.length > 1 ? Bukkit.getWorld(args[1]) : null;
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
if (world != null) { if (world != null) {
sendInfo(sendi, queueGetWorld(p, world), label, args); sendInfo(sendi, queueGetWorld(p, world), label, args);
} else } else

View File

@@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode; import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.file.FileOther; import me.SuperRonanCraft.BetterRTP.references.file.FileOther;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.messages.Message_RTP; import me.SuperRonanCraft.BetterRTP.references.messages.Message_RTP;
import me.SuperRonanCraft.BetterRTP.references.web.Updater; import me.SuperRonanCraft.BetterRTP.references.web.Updater;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP;
@@ -16,7 +17,7 @@ public class Join {
static void event(PlayerJoinEvent e) { static void event(PlayerJoinEvent e) {
Player p = e.getPlayer(); Player p = e.getPlayer();
updater(p); updater(p);
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
getPl().getCooldowns().loadPlayer(p); getPl().getCooldowns().loadPlayer(p);
}); });
rtpOnFirstJoin(p); rtpOnFirstJoin(p);

View File

@@ -1,7 +1,9 @@
package me.SuperRonanCraft.BetterRTP.player.rtp; package me.SuperRonanCraft.BetterRTP.player.rtp;
import com.tcoded.folialib.wrapper.WrappedTask;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CancelledEvent; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_CancelledEvent;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -10,9 +12,12 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.concurrent.TimeUnit;
class RTPDelay implements Listener { class RTPDelay implements Listener {
private int run; private WrappedTask task;
private final boolean cancelOnMove, cancelOnDamage; private final boolean cancelOnMove, cancelOnDamage;
private final RTPPlayer rtp; private final RTPPlayer rtp;
@@ -25,7 +30,7 @@ class RTPDelay implements Listener {
private void delay(CommandSender sendi, int delay) { private void delay(CommandSender sendi, int delay) {
if (!getPl().getRTP().getTeleport().beforeTeleportDelay(rtp.getPlayer(), delay)) { if (!getPl().getRTP().getTeleport().beforeTeleportDelay(rtp.getPlayer(), delay)) {
run = Bukkit.getScheduler().scheduleSyncDelayedTask(BetterRTP.getInstance(), run(sendi, this), delay * 20L); task = FoliaHelper.get().runLater(run(sendi, this), (delay * 20L) * 50L, TimeUnit.MILLISECONDS);
if (cancelOnMove || cancelOnDamage) if (cancelOnMove || cancelOnDamage)
Bukkit.getPluginManager().registerEvents(this, BetterRTP.getInstance()); Bukkit.getPluginManager().registerEvents(this, BetterRTP.getInstance());
} }
@@ -56,22 +61,23 @@ class RTPDelay implements Listener {
} }
private void cancel() { private void cancel() {
Bukkit.getScheduler().cancelTask(run); if (task != null)
if (!Bukkit.getScheduler().isCurrentlyRunning(run)) { task.cancel();
HandlerList.unregisterAll(this); HandlerList.unregisterAll(this);
getPl().getRTP().getTeleport().cancelledTeleport(rtp.getPlayer()); getPl().getRTP().getTeleport().cancelledTeleport(rtp.getPlayer());
//getPl().getEco().unCharge(rtp.getPlayer(), rtp.pWorld); //getPl().getEco().unCharge(rtp.getPlayer(), rtp.pWorld);
getPl().getCooldowns().removeCooldown(rtp.getPlayer(), rtp.worldPlayer.getWorld()); getPl().getCooldowns().removeCooldown(rtp.getPlayer(), rtp.worldPlayer.getWorld());
getPl().getpInfo().getRtping().put(rtp.getPlayer(), false); getPl().getpInfo().getRtping().put(rtp.getPlayer(), false);
Bukkit.getServer().getPluginManager().callEvent(new RTP_CancelledEvent(rtp.getPlayer())); Bukkit.getServer().getPluginManager().callEvent(new RTP_CancelledEvent(rtp.getPlayer()));
}
} }
private Runnable run(final CommandSender sendi, final RTPDelay cls) { private BukkitRunnable run(final CommandSender sendi, final RTPDelay cls) {
return () -> { return new BukkitRunnable() {
@Override public void run() {
HandlerList.unregisterAll(cls); HandlerList.unregisterAll(cls);
if (getPl().getpInfo().getRtping().containsKey(rtp.getPlayer())) if (getPl().getpInfo().getRtping().containsKey(rtp.getPlayer()))
rtp.randomlyTeleport(sendi); rtp.randomlyTeleport(sendi);
}
}; };
} }

View File

@@ -1,9 +1,11 @@
package me.SuperRonanCraft.BetterRTP.player.rtp; package me.SuperRonanCraft.BetterRTP.player.rtp;
import com.tcoded.folialib.FoliaLib;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import lombok.Getter; import lombok.Getter;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.RandomLocation; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.RandomLocation;
@@ -47,7 +49,7 @@ public class RTPPlayer {
attempts++; attempts++;
return; return;
} }
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
Location loc; Location loc;
if (event.getLocation() != null) // && WorldPlayer.checkIsValid(event.getLocation(), pWorld)) if (event.getLocation() != null) // && WorldPlayer.checkIsValid(event.getLocation(), pWorld))
loc = event.getLocation(); loc = event.getLocation();
@@ -61,7 +63,7 @@ public class RTPPlayer {
} }
attempts++; //Add an attempt attempts++; //Add an attempt
//Load chunk and find out if safe location (asynchronously) //Load chunk and find out if safe location (asynchronously)
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> { FoliaHelper.get().runNextTick(() -> {
try { //Prior to 1.12 this async chunk will NOT work try { //Prior to 1.12 this async chunk will NOT work
CompletableFuture<Chunk> chunk = PaperLib.getChunkAtAsync(loc); CompletableFuture<Chunk> chunk = PaperLib.getChunkAtAsync(loc);
chunk.thenAccept(result -> { chunk.thenAccept(result -> {
@@ -89,7 +91,7 @@ public class RTPPlayer {
if (getPl().getEco().charge(player, worldPlayer)) { if (getPl().getEco().charge(player, worldPlayer)) {
tpLoc.setYaw(player.getLocation().getYaw()); tpLoc.setYaw(player.getLocation().getYaw());
tpLoc.setPitch(player.getLocation().getPitch()); tpLoc.setPitch(player.getLocation().getPitch());
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> FoliaHelper.get().runNextTick(() ->
settings.teleport.sendPlayer(sendi, player, tpLoc, worldPlayer, attempts, type)); settings.teleport.sendPlayer(sendi, player, tpLoc, worldPlayer, attempts, type));
} }
} else { } else {

View File

@@ -28,8 +28,6 @@ public class RTPTeleport {
private final RTPEffects effects = new RTPEffects(); private final RTPEffects effects = new RTPEffects();
//public HashMap<Player, List<CompletableFuture<Chunk>>> playerLoads = new HashMap<>();
void load() { void load() {
effects.load(); effects.load();
} }
@@ -71,9 +69,6 @@ public class RTPTeleport {
getPl().getpInfo().getRtping().remove(p); //No longer rtp'ing (errored) getPl().getpInfo().getRtping().remove(p); //No longer rtp'ing (errored)
e.printStackTrace(); e.printStackTrace();
} }
// }
// }.runTask(getPl());
//});
} }
//Effects //Effects

View File

@@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.player.rtp.effects;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.file.FileOther; import me.SuperRonanCraft.BetterRTP.references.file.FileOther;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -70,7 +71,7 @@ public class RTPEffect_Particles {
public void display(Player p) { public void display(Player p) {
if (!enabled) return; if (!enabled) return;
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
try { //Incase the library errors out try { //Incase the library errors out
switch (shape) { switch (shape) {
case "TELEPORT": case "TELEPORT":

View File

@@ -3,6 +3,7 @@ package me.SuperRonanCraft.BetterRTP.references.database;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueGenerator; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueGenerator;
@@ -53,7 +54,7 @@ public class DatabaseChunkData extends SQLite {
public void addChunk(Chunk chunk, int maxy, Biome biome) { public void addChunk(Chunk chunk, int maxy, Biome biome) {
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
String pre = "INSERT OR REPLACE INTO "; String pre = "INSERT OR REPLACE INTO ";
String sql = pre + tables.get(0) + " (" String sql = pre + tables.get(0) + " ("
+ COLUMNS.WORLD.name + ", " + COLUMNS.WORLD.name + ", "

View File

@@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.references.database;
import lombok.Getter; import lombok.Getter;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.RandomLocation; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.RandomLocation;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -13,7 +14,7 @@ public class DatabaseHandler {
@Getter private final DatabaseChunkData databaseChunks = new DatabaseChunkData(); @Getter private final DatabaseChunkData databaseChunks = new DatabaseChunkData();
public void load() { public void load() {
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
databasePlayers.load(); databasePlayers.load();
databaseCooldowns.load(); databaseCooldowns.load();
databaseQueue.load(); databaseQueue.load();

View File

@@ -5,6 +5,7 @@ import lombok.NonNull;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueGenerator; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueGenerator;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@@ -76,6 +77,11 @@ public class DatabaseQueue extends SQLite {
return queueDataList; return queueDataList;
}*/ }*/
@Override public void load() {
if (QueueHandler.isEnabled())
super.load();
}
public List<QueueData> getInRange(QueueRangeData range) { public List<QueueData> getInRange(QueueRangeData range) {
Connection conn = null; Connection conn = null;
PreparedStatement ps = null; PreparedStatement ps = null;

View File

@@ -3,6 +3,7 @@ package me.SuperRonanCraft.BetterRTP.references.database;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.RandomLocation; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.RandomLocation;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@@ -58,10 +59,9 @@ public abstract class SQLite {
} }
public void load() { public void load() {
if (!QueueHandler.isEnabled()) return;
loaded = false; loaded = false;
tables = getTables(); tables = getTables();
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
Connection connection = getSQLConnection(); Connection connection = getSQLConnection();
try { try {
Statement s = connection.createStatement(); Statement s = connection.createStatement();

View File

@@ -0,0 +1,13 @@
package me.SuperRonanCraft.BetterRTP.references.helpers;
import com.tcoded.folialib.FoliaLib;
import com.tcoded.folialib.impl.ServerImplementation;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
public class FoliaHelper {
public static ServerImplementation get() {
return BetterRTP.getInstance().getFolia().getImpl();
}
}

View File

@@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableCollection;
import lombok.NonNull; import lombok.NonNull;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.file.FileData; import me.SuperRonanCraft.BetterRTP.references.file.FileData;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.messages.placeholder.PlaceholderAnalyzer; import me.SuperRonanCraft.BetterRTP.references.messages.placeholder.PlaceholderAnalyzer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@@ -23,25 +24,25 @@ public interface Message {
static void sms(Message messenger, CommandSender sendi, String msg) { static void sms(Message messenger, CommandSender sendi, String msg) {
if (!msg.isEmpty()) if (!msg.isEmpty())
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> FoliaHelper.get().runNextTick(() ->
sendi.sendMessage(placeholder(sendi, getPrefix(messenger) + msg))); sendi.sendMessage(placeholder(sendi, getPrefix(messenger) + msg)));
} }
static void sms(Message messenger, CommandSender sendi, String msg, Object placeholderInfo) { static void sms(Message messenger, CommandSender sendi, String msg, Object placeholderInfo) {
if (!msg.isEmpty()) if (!msg.isEmpty())
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> FoliaHelper.get().runNextTick(() ->
sendi.sendMessage(Objects.requireNonNull(placeholder(sendi, getPrefix(messenger) + msg, placeholderInfo)))); sendi.sendMessage(Objects.requireNonNull(placeholder(sendi, getPrefix(messenger) + msg, placeholderInfo))));
} }
static void sms(Message messenger, CommandSender sendi, String msg, List<Object> placeholderInfo) { static void sms(Message messenger, CommandSender sendi, String msg, List<Object> placeholderInfo) {
if (!msg.isEmpty()) if (!msg.isEmpty())
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> FoliaHelper.get().runNextTick(() ->
sendi.sendMessage(placeholder(sendi, getPrefix(messenger) + msg, placeholderInfo))); sendi.sendMessage(placeholder(sendi, getPrefix(messenger) + msg, placeholderInfo)));
} }
static void sms(CommandSender sendi, List<String> msg, Object placeholderInfo) { static void sms(CommandSender sendi, List<String> msg, Object placeholderInfo) {
if (msg != null && !msg.isEmpty()) { if (msg != null && !msg.isEmpty()) {
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> { FoliaHelper.get().runNextTick(() -> {
msg.forEach(str -> msg.set(msg.indexOf(str), placeholder(sendi, str, placeholderInfo))); msg.forEach(str -> msg.set(msg.indexOf(str), placeholder(sendi, str, placeholderInfo)));
sendi.sendMessage(msg.toArray(new String[0])); sendi.sendMessage(msg.toArray(new String[0]));
}); });

View File

@@ -6,6 +6,7 @@ import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldowns; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldowns;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
import me.SuperRonanCraft.BetterRTP.references.file.FileOther; import me.SuperRonanCraft.BetterRTP.references.file.FileOther;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer; import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer;
import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldPlayer; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldPlayer;
@@ -18,6 +19,7 @@ import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
public class CooldownHandler { public class CooldownHandler {
@@ -43,7 +45,7 @@ public class CooldownHandler {
} }
private void queueDownload() { private void queueDownload() {
Bukkit.getScheduler().runTaskLaterAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runLaterAsync(() -> {
if (cooldownByWorld && !DatabaseHandler.getCooldowns().isLoaded()) { if (cooldownByWorld && !DatabaseHandler.getCooldowns().isLoaded()) {
queueDownload(); queueDownload();
return; return;
@@ -57,7 +59,7 @@ public class CooldownHandler {
for (Player p : Bukkit.getOnlinePlayers()) for (Player p : Bukkit.getOnlinePlayers())
loadPlayer(p); loadPlayer(p);
loaded = true; loaded = true;
}, 10L); }, 10L * 50L, TimeUnit.MILLISECONDS);
} }
public void add(Player player, World world) { public void add(Player player, World world) {
@@ -132,7 +134,7 @@ public class CooldownHandler {
} }
private void savePlayer(Player player, @Nullable World world, @Nullable CooldownData data, boolean remove) { private void savePlayer(Player player, @Nullable World world, @Nullable CooldownData data, boolean remove) {
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
if (world != null && data != null && getDatabaseWorlds() != null) { //Per World enabled? if (world != null && data != null && getDatabaseWorlds() != null) { //Per World enabled?
if (!remove) if (!remove)
getDatabaseWorlds().setCooldown(world, data); getDatabaseWorlds().setCooldown(world, data);

View File

@@ -1,11 +1,13 @@
package me.SuperRonanCraft.BetterRTP.references.rtpinfo; package me.SuperRonanCraft.BetterRTP.references.rtpinfo;
import com.tcoded.folialib.wrapper.WrappedTask;
import io.papermc.lib.PaperLib; import io.papermc.lib.PaperLib;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTP_SETUP_TYPE; import me.SuperRonanCraft.BetterRTP.player.commands.RTP_SETUP_TYPE;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP; import me.SuperRonanCraft.BetterRTP.player.rtp.RTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPPlayer; import me.SuperRonanCraft.BetterRTP.player.rtp.RTPPlayer;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldCustom; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldCustom;
@@ -19,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
public class QueueGenerator { public class QueueGenerator {
@@ -27,23 +30,22 @@ public class QueueGenerator {
public static final int queueMax = 32, queueMin = 2; //Amount to ready up for each rtp world public static final int queueMax = 32, queueMin = 2; //Amount to ready up for each rtp world
private final int queueMaxAttempts = 50; private final int queueMaxAttempts = 50;
boolean generating; boolean generating;
private BukkitTask task; private WrappedTask task;
public void unload() { public void unload() {
if (task != null) if (task != null)
Bukkit.getScheduler().cancelTask(task.getTaskId()); task.cancel();
} }
public void load() { public void load() {
unload();
loaded = false; loaded = false;
if (task != null)
Bukkit.getScheduler().cancelTask(task.getTaskId());
generate(null); generate(null);
} }
void generate(@Nullable RTPWorld rtpWorld) { void generate(@Nullable RTPWorld rtpWorld) {
if (!QueueHandler.isEnabled()) return; if (!QueueHandler.isEnabled()) return;
Bukkit.getScheduler().runTaskLaterAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runLaterAsync(() -> {
if (!DatabaseHandler.getQueue().isLoaded()) { if (!DatabaseHandler.getQueue().isLoaded()) {
generate(rtpWorld); generate(rtpWorld);
return; return;
@@ -53,12 +55,12 @@ public class QueueGenerator {
//Queue after everything was loaded //Queue after everything was loaded
BetterRTP.debug("Attempting to queue up some more safe locations..."); BetterRTP.debug("Attempting to queue up some more safe locations...");
queueGenerator(new ReQueueData(rtpWorld, queueMax, queueMin, 0, "noone", 0)); queueGenerator(new ReQueueData(rtpWorld, queueMax, queueMin, 0, "noone", 0));
}, 10L); }, 10L * 50L, TimeUnit.MILLISECONDS);
} }
private void queueGenerator(ReQueueData data) { private void queueGenerator(ReQueueData data) {
generating = true; generating = true;
task = Bukkit.getScheduler().runTaskLaterAsynchronously(BetterRTP.getInstance(), () -> { task = FoliaHelper.get().runLaterAsync(() -> {
//BetterRTP.debug("Generating a new position... attempt # " + data.attempts); //BetterRTP.debug("Generating a new position... attempt # " + data.attempts);
//Generate more locations //Generate more locations
//Rare cases where a rtp world didn't have a location generated (Permission Groups?) //Rare cases where a rtp world didn't have a location generated (Permission Groups?)
@@ -107,7 +109,7 @@ public class QueueGenerator {
} }
generating = false; generating = false;
BetterRTP.debug("Queueing paused, max queue limit reached!"); BetterRTP.debug("Queueing paused, max queue limit reached!");
}, 20L /*delay before starting queue generator*/); }, 20L * 50L /*delay before starting queue generator*/, TimeUnit.MILLISECONDS);
} }
static class ReQueueData { static class ReQueueData {
@@ -152,7 +154,7 @@ public class QueueGenerator {
private void addQueue(RTPWorld rtpWorld, String id, ReQueueData reQueueData) { private void addQueue(RTPWorld rtpWorld, String id, ReQueueData reQueueData) {
Location loc = RandomLocation.generateLocation(rtpWorld); Location loc = RandomLocation.generateLocation(rtpWorld);
if (loc != null) { if (loc != null) {
Bukkit.getScheduler().runTask(BetterRTP.getInstance(), () -> { FoliaHelper.get().runNextTick(() -> {
//BetterRTP.debug("Queued up a new position, attempts " + reQueueData.attempts); //BetterRTP.debug("Queued up a new position, attempts " + reQueueData.attempts);
PaperLib.getChunkAtAsync(loc) PaperLib.getChunkAtAsync(loc)
.thenAccept(v -> { .thenAccept(v -> {
@@ -165,7 +167,7 @@ public class QueueGenerator {
rtpWorld.getBiomes()); rtpWorld.getBiomes());
//data.setLocation(safeLoc); //data.setLocation(safeLoc);
if (safeLoc != null) { if (safeLoc != null) {
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
QueueData data = DatabaseHandler.getQueue().addQueue(safeLoc); QueueData data = DatabaseHandler.getQueue().addQueue(safeLoc);
if (data != null) { if (data != null) {
//queueList.add(data); //queueList.add(data);

View File

@@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_TeleportPostEvent;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseQueue; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseQueue;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@@ -84,7 +85,7 @@ public class QueueHandler implements Listener { //Randomly queues up some safe l
public static void remove(Location loc) { public static void remove(Location loc) {
if (!isEnabled()) return; if (!isEnabled()) return;
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { FoliaHelper.get().runAsync(() -> {
//Delete all queue data async //Delete all queue data async
if (DatabaseHandler.getQueue().removeLocation(loc)) { if (DatabaseHandler.getQueue().removeLocation(loc)) {
//BetterRTP.getInstance().getQueue().queueList.remove(data); //BetterRTP.getInstance().getQueue().queueList.remove(data);

View File

@@ -1,5 +1,6 @@
package me.SuperRonanCraft.BetterRTP.references.web; package me.SuperRonanCraft.BetterRTP.references.web;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicePriority;
@@ -127,12 +128,7 @@ public class Metrics {
} }
// Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler // Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler
// Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;) // Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;)
Bukkit.getScheduler().runTask(plugin, new Runnable() { FoliaHelper.get().runNextTick(() -> submitData());
@Override
public void run() {
submitData();
}
});
} }
}, 1000*60*5, 1000*60*30); }, 1000*60*5, 1000*60*30);
// Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start // Submit the data every 30 minutes, first time after 5 minutes to give other plugins enough time to start

View File

@@ -1,6 +1,7 @@
package me.SuperRonanCraft.BetterRTP.references.web; package me.SuperRonanCraft.BetterRTP.references.web;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.helpers.FoliaHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import java.io.BufferedReader; import java.io.BufferedReader;
@@ -13,7 +14,7 @@ public class Updater {
public static String updatedVersion = BetterRTP.getInstance().getDescription().getVersion(); public static String updatedVersion = BetterRTP.getInstance().getDescription().getVersion();
public Updater(BetterRTP pl) { public Updater(BetterRTP pl) {
Bukkit.getScheduler().runTaskAsynchronously(pl, () -> { FoliaHelper.get().runAsync(() -> {
try { try {
URLConnection con = new URL(getUrl() + project()).openConnection(); URLConnection con = new URL(getUrl() + project()).openConnection();
updatedVersion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine(); updatedVersion = new BufferedReader(new InputStreamReader(con.getInputStream())).readLine();