Reimplement Folia Support.

This commit is contained in:
Yomamaeatstoes 2023-12-25 21:16:34 -05:00
parent 0a9eb447d6
commit ea6a2d33dc
10 changed files with 88 additions and 24 deletions

View File

@ -11,6 +11,7 @@
<allow pkg="junit.framework"/>
<allow pkg="com.sk89q"/>
<allow pkg="com.google.common"/>
<allow pkg="com.tcoded.folialib"/>
<subpackage name="worldguard">
<allow pkg="org.khelekore"/>

View File

@ -1,2 +1,2 @@
group=com.sk89q.worldguard
version=7.1.0-SNAPSHOT
version=7.1.0-SNAPSHOT-Custom-Folia

View File

@ -12,6 +12,10 @@ repositories {
name = "paper"
url = uri("https://repo.papermc.io/repository/maven-public/")
}
maven {
name = "devmart-other"
url = uri("https://nexuslite.gcnt.net/repos/other/")
}
}
configurations {
@ -26,6 +30,7 @@ dependencies {
}
"api"("com.sk89q.worldedit:worldedit-bukkit:${Versions.WORLDEDIT}") { isTransitive = false }
"implementation"("com.google.guava:guava:${Versions.GUAVA}")
"implementation"("com.tcoded:FoliaLib:0.2.3")
"compileOnly"("com.sk89q:commandbook:2.3") { isTransitive = false }
"shadeOnly"("io.papermc:paperlib:1.0.8")
"shadeOnly"("org.bstats:bstats-bukkit:3.0.1")
@ -61,6 +66,9 @@ tasks.named<ShadowJar>("shadowJar") {
relocate ("co.aikar.timings.lib", "com.sk89q.worldguard.bukkit.timingslib") {
include(dependency("co.aikar:minecraft-timings"))
}
relocate ("com.tcoded.folialib", "com.sk89q.worldguard.bukkit.folialib") {
include(dependency("com.tcoded:FoliaLib"))
}
}
}

View File

@ -40,6 +40,7 @@ import org.bukkit.event.world.WorldUnloadEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;
@ -94,7 +95,10 @@ public class BukkitRegionContainer extends RegionContainer {
}
}, plugin);
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cache::invalidateAll, CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL);
int interval = CACHE_INVALIDATION_INTERVAL * 50;
plugin.foliaLib.getImpl().runTimerAsync(cache::invalidateAll, interval, interval, TimeUnit.MILLISECONDS);
// Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, cache::invalidateAll, CACHE_INVALIDATION_INTERVAL, CACHE_INVALIDATION_INTERVAL);
}
public void shutdown() {

View File

@ -75,6 +75,7 @@ import com.sk89q.worldguard.protection.managers.storage.file.DirectoryYamlDriver
import com.sk89q.worldguard.protection.managers.storage.sql.SQLDriver;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.util.logging.RecordMessagePrefixer;
import com.tcoded.folialib.FoliaLib;
import org.bstats.bukkit.Metrics;
import org.bstats.charts.DrilldownPie;
import org.bstats.charts.SimplePie;
@ -96,6 +97,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -111,6 +113,9 @@ public class WorldGuardPlugin extends JavaPlugin {
private static final int BSTATS_PLUGIN_ID = 3283;
public FoliaLib foliaLib;
/**
* Construct objects. Actual loading occurs when the plugin is enabled, so
* this merely instantiates the objects.
@ -138,6 +143,10 @@ public class WorldGuardPlugin extends JavaPlugin {
*/
@Override
public void onEnable() {
// FoliaLib Util
foliaLib = new FoliaLib(this);
// Catch bad things being done by naughty plugins that include WorldGuard's classes
ClassSourceValidator verifier = new ClassSourceValidator(this);
verifier.reportMismatches(ImmutableList.of(WorldGuard.class, ProtectedRegion.class, Flag.class));
@ -164,7 +173,9 @@ public class WorldGuardPlugin extends JavaPlugin {
reg.register(GeneralCommands.class);
}
getServer().getScheduler().scheduleSyncRepeatingTask(this, sessionManager, BukkitSessionManager.RUN_DELAY, BukkitSessionManager.RUN_DELAY);
int runDelayMs = BukkitSessionManager.RUN_DELAY * 50;
foliaLib.getImpl().runTimer(sessionManager, runDelayMs, runDelayMs, TimeUnit.MILLISECONDS);
// getServer().getScheduler().scheduleSyncRepeatingTask(this, sessionManager, BukkitSessionManager.RUN_DELAY, BukkitSessionManager.RUN_DELAY);
// Register events
getServer().getPluginManager().registerEvents(sessionManager, this);
@ -205,12 +216,25 @@ public class WorldGuardPlugin extends JavaPlugin {
}
worldListener.registerEvents();
Bukkit.getScheduler().runTask(this, () -> {
if (foliaLib.isFolia()) {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
ProcessPlayerEvent event = new ProcessPlayerEvent(player);
Events.fire(event);
foliaLib.getImpl().runAtEntity(player, new Runnable() {
@Override
public void run() {
ProcessPlayerEvent event = new ProcessPlayerEvent(player);
Events.fire(event);
}
});
}
});
}
else {
Bukkit.getScheduler().runTask(this, () -> {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
ProcessPlayerEvent event = new ProcessPlayerEvent(player);
Events.fire(event);
}
});
}
((SimpleFlagRegistry) WorldGuard.getInstance().getFlagRegistry()).setInitialized(true);
((SimpleDomainRegistry) WorldGuard.getInstance().getDomainRegistry()).setInitialized(true);
@ -266,7 +290,8 @@ public class WorldGuardPlugin extends JavaPlugin {
@Override
public void onDisable() {
WorldGuard.getInstance().disable();
this.getServer().getScheduler().cancelTasks(this);
// this.getServer().getScheduler().cancelTasks(this);
foliaLib.getImpl().cancelAllTasks();
}
@Override

View File

@ -152,6 +152,7 @@ import org.bukkit.util.Vector;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
public class EventAbstractionListener extends AbstractListener {
@ -990,8 +991,16 @@ public class EventAbstractionListener extends AbstractListener {
handleInventoryHolderUse(event, cause, targetHolder);
if (event.isCancelled() && causeHolder instanceof Hopper && wcfg.breakDeniedHoppers) {
Bukkit.getScheduler().scheduleSyncDelayedTask(getPlugin(),
() -> ((Hopper) causeHolder).getBlock().breakNaturally());
Hopper hopperCauseHolder = (Hopper) causeHolder;
Location location = hopperCauseHolder.getLocation();
getPlugin().foliaLib.getImpl().runAtLocationLater(location, () -> {
Block block = location.getBlock();
if (block.getType() == Material.HOPPER) {
block.breakNaturally();
}
}, 50, TimeUnit.MILLISECONDS);
} else {
entry.setCancelled(event.isCancelled());
}

View File

@ -42,6 +42,7 @@ import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.plugin.PluginManager;
import org.bukkit.util.Vector;
import org.spigotmc.event.entity.EntityMountEvent;
import java.util.concurrent.TimeUnit;
public class PlayerMoveListener extends AbstractListener {
@ -132,7 +133,10 @@ public class PlayerMoveListener extends AbstractListener {
player.teleport(override.clone().add(0, 1, 0));
Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(override.clone().add(0, 1, 0)), 1);
getPlugin().foliaLib.getImpl().runAtEntityLater(player, () -> {
player.teleport(override.clone().add(0, 1, 0));
}, 50, TimeUnit.MILLISECONDS);
// Bukkit.getScheduler().runTaskLater(getPlugin(), () -> player.teleport(override.clone().add(0, 1, 0)), 1);
}
}
}

View File

@ -28,6 +28,8 @@ import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent;
import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.session.AbstractSessionManager;
import com.sk89q.worldguard.session.Session;
import com.tcoded.folialib.FoliaLib;
import com.tcoded.folialib.impl.ServerImplementation;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -68,7 +70,13 @@ public class BukkitSessionManager extends AbstractSessionManager implements Runn
public void run() {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
get(localPlayer).tick(localPlayer);
Session session = get(localPlayer);
FoliaLib foliaLib = WorldGuardPlugin.inst().foliaLib;
ServerImplementation impl = foliaLib.getImpl();
if (foliaLib.isFolia()) impl.runAtEntity(player, () -> session.tick(localPlayer));
else session.tick(localPlayer);
}
}

View File

@ -24,6 +24,7 @@ import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.sk89q.worldedit.util.report.DataReport;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitTask;
@ -52,19 +53,22 @@ public class SchedulerReport extends DataReport {
public SchedulerReport() {
super("Scheduler");
List<BukkitTask> tasks = Bukkit.getServer().getScheduler().getPendingTasks();
append("Error", "MODDED FOLIA VERSION - DO NOT REPORT TO WORLDGUARD");
append("Pending Task Count", tasks.size());
for (BukkitTask task : tasks) {
Class<?> taskClass = getTaskClass(task);
DataReport report = new DataReport("Task: #" + task.getTaskId());
report.append("Owner", task.getOwner().getName());
report.append("Runnable", taskClass != null ? taskClass.getName() : "<Unknown>");
report.append("Synchronous?", task.isSync());
append(report.getTitle(), report);
}
// List<BukkitTask> tasks = Bukkit.getServer().getScheduler().getPendingTasks();
//// WorldGuardPlugin.inst().foliaLib.getImpl().
//
// append("Pending Task Count", tasks.size());
//
// for (BukkitTask task : tasks) {
// Class<?> taskClass = getTaskClass(task);
//
// DataReport report = new DataReport("Task: #" + task.getTaskId());
// report.append("Owner", task.getOwner().getName());
// report.append("Runnable", taskClass != null ? taskClass.getName() : "<Unknown>");
// report.append("Synchronous?", task.isSync());
// append(report.getTitle(), report);
// }
}
@SuppressWarnings("unchecked")

View File

@ -4,3 +4,4 @@ version: "${internalVersion}"
depend: [WorldEdit]
softdepend: [CommandBook]
api-version: "1.20"
folia-supported: true