Reimplement Folia Support.
This commit is contained in:
parent
0a9eb447d6
commit
ea6a2d33dc
|
@ -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"/>
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
group=com.sk89q.worldguard
|
||||
version=7.1.0-SNAPSHOT
|
||||
version=7.1.0-SNAPSHOT-Custom-Folia
|
||||
|
|
|
@ -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"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -4,3 +4,4 @@ version: "${internalVersion}"
|
|||
depend: [WorldEdit]
|
||||
softdepend: [CommandBook]
|
||||
api-version: "1.20"
|
||||
folia-supported: true
|
Loading…
Reference in New Issue