9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 12:29:15 +00:00

添加paper loader模块

This commit is contained in:
XiaoMoMi
2025-06-01 02:10:17 +08:00
parent 8a02864eea
commit 01f169183f
31 changed files with 361 additions and 134 deletions

View File

@@ -113,9 +113,9 @@ public class BukkitBlockManager extends AbstractBlockManager {
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this.blockEventListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.blockEventListener, this.plugin.javaPlugin());
if (this.fallingBlockRemoveListener != null) {
Bukkit.getPluginManager().registerEvents(this.fallingBlockRemoveListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.fallingBlockRemoveListener, this.plugin.javaPlugin());
}
}

View File

@@ -93,8 +93,8 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager {
COLLISION_ENTITY_CLASS = Config.colliderType() == ColliderType.INTERACTION ? Interaction.class : Boat.class;
NMS_COLLISION_ENTITY_TYPE = Config.colliderType() == ColliderType.INTERACTION ? Reflections.instance$EntityType$INTERACTION : Reflections.instance$EntityType$OAK_BOAT;
COLLISION_ENTITY_TYPE = Config.colliderType();
Bukkit.getPluginManager().registerEvents(this.dismountListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.furnitureEventListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.dismountListener, this.plugin.javaPlugin());
Bukkit.getPluginManager().registerEvents(this.furnitureEventListener, this.plugin.javaPlugin());
for (World world : Bukkit.getWorlds()) {
List<Entity> entities = world.getEntities();
for (Entity entity : entities) {

View File

@@ -48,7 +48,7 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, this.plugin.javaPlugin());
for (World world : Bukkit.getWorlds()) {
List<Entity> entities = world.getEntities();
for (Entity entity : entities) {
@@ -166,7 +166,7 @@ public class BukkitProjectileManager implements Listener, ProjectileManager {
public ProjectileInjectTask(Projectile projectile) {
this.projectile = projectile;
if (VersionHelper.isFolia()) {
this.task = new FoliaTask(projectile.getScheduler().runAtFixedRate(plugin.bootstrap(), (t) -> this.run(), () -> {}, 1, 1));
this.task = new FoliaTask(projectile.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> this.run(), () -> {}, 1, 1));
} else {
this.task = plugin.scheduler().sync().runRepeating(this, 1, 1);
}

View File

@@ -42,7 +42,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, plugin.javaPlugin());
}
@Override

View File

@@ -65,9 +65,9 @@ public class BukkitItemManager extends AbstractItemManager<ItemStack> {
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this.itemEventListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.debugStickListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.armorEventListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.itemEventListener, this.plugin.javaPlugin());
Bukkit.getPluginManager().registerEvents(this.debugStickListener, this.plugin.javaPlugin());
Bukkit.getPluginManager().registerEvents(this.armorEventListener, this.plugin.javaPlugin());
}
@Override

View File

@@ -277,9 +277,9 @@ public class BukkitRecipeManager extends AbstractRecipeManager<ItemStack> {
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this.recipeEventListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.recipeEventListener, this.plugin.javaPlugin());
if (this.crafterEventListener != null) {
Bukkit.getPluginManager().registerEvents(this.crafterEventListener, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this.crafterEventListener, this.plugin.javaPlugin());
}
}

View File

@@ -46,7 +46,7 @@ public class BukkitVanillaLootManager extends AbstractVanillaLootManager impleme
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, plugin.javaPlugin());
}
@Override

View File

@@ -43,7 +43,7 @@ public class BukkitPackManager extends AbstractPackManager implements Listener {
@Override
public void delayedInit() {
super.delayedInit();
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, plugin.javaPlugin());
}
@EventHandler(priority = EventPriority.LOW)

View File

@@ -29,6 +29,7 @@ import net.momirealms.craftengine.bukkit.util.RegistryUtils;
import net.momirealms.craftengine.bukkit.world.BukkitWorldManager;
import net.momirealms.craftengine.core.item.ItemManager;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.classpath.ClassPathAppender;
import net.momirealms.craftengine.core.plugin.classpath.ReflectionClassPathAppender;
import net.momirealms.craftengine.core.plugin.command.sender.SenderFactory;
import net.momirealms.craftengine.core.plugin.compatibility.CompatibilityManager;
@@ -37,6 +38,7 @@ import net.momirealms.craftengine.core.plugin.dependency.Dependencies;
import net.momirealms.craftengine.core.plugin.dependency.Dependency;
import net.momirealms.craftengine.core.plugin.gui.category.ItemBrowserManagerImpl;
import net.momirealms.craftengine.core.plugin.logger.JavaPluginLogger;
import net.momirealms.craftengine.core.plugin.logger.PluginLogger;
import net.momirealms.craftengine.core.plugin.scheduler.SchedulerAdapter;
import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask;
import net.momirealms.craftengine.core.util.CharacterUtils;
@@ -48,9 +50,12 @@ import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import org.jspecify.annotations.Nullable;
import java.io.*;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.Path;
import java.util.List;
import java.util.Objects;
@@ -60,24 +65,28 @@ import java.util.Optional;
public class BukkitCraftEngine extends CraftEngine {
private static final String COMPATIBILITY_CLASS = "net.momirealms.craftengine.bukkit.compatibility.BukkitCompatibilityManager";
private static BukkitCraftEngine instance;
private final JavaPlugin bootstrap;
private SchedulerTask tickTask;
private boolean successfullyLoaded = false;
private boolean successfullyEnabled = false;
private boolean requiresRestart = false;
private boolean hasMod = false;
private AntiGriefLib antiGrief;
private JavaPlugin javaPlugin;
private final Path dataFolderPath;
public BukkitCraftEngine(JavaPlugin bootstrap) {
public BukkitCraftEngine(JavaPlugin plugin) {
this(new JavaPluginLogger(plugin.getLogger()), plugin.getDataFolder().toPath().toAbsolutePath(), new ReflectionClassPathAppender(plugin.getClass().getClassLoader()));
}
public BukkitCraftEngine(PluginLogger logger, Path dataFolderPath, ClassPathAppender classPathAppender) {
super((p) -> {
CraftEngineReloadEvent event = new CraftEngineReloadEvent((BukkitCraftEngine) p);
EventUtils.fireAndForget(event);
});
instance = this;
this.bootstrap = bootstrap;
super.classPathAppender = new ReflectionClassPathAppender(this);
super.scheduler = new BukkitSchedulerAdapter(this);
super.logger = new JavaPluginLogger(bootstrap.getLogger());
this.dataFolderPath = dataFolderPath;
super.classPathAppender = classPathAppender;
super.logger = logger;
super.platform = new BukkitPlatform();
// find mod class if present
Class<?> modClass = ReflectionUtils.getClazz(MOD_CLASS);
@@ -97,6 +106,11 @@ public class BukkitCraftEngine extends CraftEngine {
}
}
public void setJavaPlugin(JavaPlugin javaPlugin) {
this.javaPlugin = javaPlugin;
super.scheduler = new BukkitSchedulerAdapter(this);
}
@Override
public void onPluginLoad() {
super.onPluginLoad();
@@ -127,7 +141,7 @@ public class BukkitCraftEngine extends CraftEngine {
logger().severe(" ");
logger().severe(" ");
logger().severe(" ");
Bukkit.getPluginManager().disablePlugin(this.bootstrap);
Bukkit.getPluginManager().disablePlugin(this.javaPlugin);
return;
}
this.successfullyEnabled = true;
@@ -194,7 +208,7 @@ public class BukkitCraftEngine extends CraftEngine {
@Override
public void platformDelayedEnable() {
if (Config.metrics()) {
new Metrics(this.bootstrap(), 24333);
new Metrics(this.javaPlugin(), 24333);
}
// tick task
if (!VersionHelper.isFolia()) {
@@ -209,23 +223,40 @@ public class BukkitCraftEngine extends CraftEngine {
@Override
public InputStream resourceStream(String filePath) {
return bootstrap.getResource(CharacterUtils.replaceBackslashWithSlash(filePath));
return getResource(CharacterUtils.replaceBackslashWithSlash(filePath));
}
private @Nullable InputStream getResource(String filename) {
if (filename == null) {
throw new IllegalArgumentException("filename cannot be null");
}
try {
URL url = this.getClass().getClassLoader().getResource(filename);
if (url == null) {
return null;
}
URLConnection connection = url.openConnection();
connection.setUseCaches(false);
return connection.getInputStream();
} catch (IOException ex) {
return null;
}
}
@Override
public File dataFolderFile() {
return bootstrap().getDataFolder();
return this.dataFolderPath.toFile();
}
@Override
public Path dataFolderPath() {
return bootstrap().getDataFolder().toPath().toAbsolutePath();
return this.dataFolderPath;
}
@SuppressWarnings("deprecation")
@Override
public String pluginVersion() {
return bootstrap().getDescription().getVersion();
return javaPlugin().getDescription().getVersion();
}
@Override
@@ -263,8 +294,8 @@ public class BukkitCraftEngine extends CraftEngine {
return (SenderFactory<CraftEngine, CommandSender>) senderFactory;
}
public JavaPlugin bootstrap() {
return bootstrap;
public JavaPlugin javaPlugin() {
return this.javaPlugin;
}
public static BukkitCraftEngine instance() {
@@ -336,7 +367,7 @@ public class BukkitCraftEngine extends CraftEngine {
public AntiGriefLib antiGrief() {
if (this.antiGrief == null) {
this.antiGrief = AntiGriefLib.builder(this.bootstrap)
this.antiGrief = AntiGriefLib.builder(this.javaPlugin)
.ignoreOP(true)
.silentLogs(false)
.build();

View File

@@ -1,38 +0,0 @@
package net.momirealms.craftengine.bukkit.plugin.classpath;
import net.momirealms.craftengine.bukkit.util.Reflections;
import net.momirealms.craftengine.core.plugin.Plugin;
import net.momirealms.craftengine.core.plugin.classpath.ClassPathAppender;
import net.momirealms.craftengine.core.plugin.classpath.URLClassLoaderAccess;
import java.net.MalformedURLException;
import java.net.URLClassLoader;
import java.nio.file.Path;
public class BukkitClassPathAppender implements ClassPathAppender {
private final URLClassLoaderAccess classLoaderAccess;
public BukkitClassPathAppender(ClassLoader classLoader) throws IllegalAccessException {
if (Reflections.clazz$PaperPluginClassLoader != null && Reflections.clazz$PaperPluginClassLoader.isInstance(classLoader)) {
URLClassLoader libraryClassLoader = (URLClassLoader) Reflections.field$PaperPluginClassLoader$libraryLoader.get(classLoader);
this.classLoaderAccess = URLClassLoaderAccess.create(libraryClassLoader);
} else if (classLoader instanceof URLClassLoader) {
this.classLoaderAccess = URLClassLoaderAccess.create((URLClassLoader) classLoader);
} else {
throw new IllegalStateException("ClassLoader is not instance of URLClassLoader");
}
}
public BukkitClassPathAppender(Plugin plugin) throws IllegalAccessException {
this(plugin.getClass().getClassLoader());
}
@Override
public void addJarToClasspath(Path file) {
try {
this.classLoaderAccess.addURL(file.toUri().toURL());
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -0,0 +1,45 @@
package net.momirealms.craftengine.bukkit.plugin.classpath;
import net.momirealms.craftengine.core.plugin.classpath.ClassPathAppender;
import net.momirealms.craftengine.core.plugin.classpath.URLClassLoaderAccess;
import net.momirealms.craftengine.core.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URLClassLoader;
import java.nio.file.Path;
import java.util.Optional;
public class PaperClassPathAppender implements ClassPathAppender {
public static final Class<?> clazz$PaperPluginClassLoader = ReflectionUtils.getClazz(
"io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader"
);
public static final Field field$PaperPluginClassLoader$libraryLoader = Optional.ofNullable(clazz$PaperPluginClassLoader)
.map(it -> ReflectionUtils.getDeclaredField(it, URLClassLoader.class, 0))
.orElse(null);
private final URLClassLoaderAccess classLoaderAccess;
public PaperClassPathAppender(ClassLoader classLoader) {
try {
if (clazz$PaperPluginClassLoader != null && clazz$PaperPluginClassLoader.isInstance(classLoader)) {
URLClassLoader libraryClassLoader = (URLClassLoader) field$PaperPluginClassLoader$libraryLoader.get(classLoader);
this.classLoaderAccess = URLClassLoaderAccess.create(libraryClassLoader);
} else if (classLoader instanceof URLClassLoader) {
this.classLoaderAccess = URLClassLoaderAccess.create((URLClassLoader) classLoader);
} else {
throw new IllegalStateException("ClassLoader is not instance of URLClassLoader");
}
} catch (ReflectiveOperationException e) {
throw new RuntimeException("Failed to instantiate PaperPluginClassLoader", e);
}
}
@Override
public void addJarToClasspath(Path file) {
try {
this.classLoaderAccess.addURL(file.toUri().toURL());
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -22,7 +22,7 @@ public class BukkitCommandManager extends AbstractCommandManager<CommandSender>
public BukkitCommandManager(BukkitCraftEngine plugin) {
super(plugin, new LegacyPaperCommandManager<>(
plugin.bootstrap(),
plugin.javaPlugin(),
ExecutionCoordinator.simpleCoordinator(),
SenderMapper.identity()
));

View File

@@ -71,7 +71,7 @@ public class BukkitSenderFactory extends SenderFactory<BukkitCraftEngine, Comman
@Override
protected void performCommand(CommandSender sender, String command) {
plugin().bootstrap().getServer().dispatchCommand(sender, command);
plugin().javaPlugin().getServer().dispatchCommand(sender, command);
}
@Override

View File

@@ -29,7 +29,7 @@ public class BukkitGuiManager implements GuiManager, Listener {
@Override
public void delayedInit() {
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, plugin.javaPlugin());
}
@Override

View File

@@ -119,10 +119,10 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
this.immediatePacketConsumer.accept(connection, bundle);
};
// set up mod channel
this.plugin.bootstrap().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.bootstrap(), MOD_CHANNEL, this);
this.plugin.bootstrap().getServer().getMessenger().registerOutgoingPluginChannel(this.plugin.bootstrap(), MOD_CHANNEL);
this.plugin.javaPlugin().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.javaPlugin(), MOD_CHANNEL, this);
this.plugin.javaPlugin().getServer().getMessenger().registerOutgoingPluginChannel(this.plugin.javaPlugin(), MOD_CHANNEL);
// 配置via频道
this.plugin.bootstrap().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.bootstrap(), VIA_CHANNEL, this);
this.plugin.javaPlugin().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.javaPlugin(), VIA_CHANNEL, this);
// Inject server channel
try {
Object server = Reflections.method$MinecraftServer$getServer.invoke(null);
@@ -213,7 +213,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
this.onlineUsers.put(player.getUniqueId(), user);
this.resetUserArray();
if (VersionHelper.isFolia()) {
player.getScheduler().runAtFixedRate(plugin.bootstrap(), (t) -> user.tick(),
player.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> user.tick(),
() -> plugin.debug(() -> "Player " + player.getName() + "'s entity scheduler is retired"), 1, 1);
}
}
@@ -264,7 +264,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
@Override
public void init() {
Bukkit.getPluginManager().registerEvents(this, plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, plugin.javaPlugin());
}
@Override

View File

@@ -1275,7 +1275,7 @@ public class PacketConsumers {
if (!user.isOnline()) return;
BukkitServerPlayer player = (BukkitServerPlayer) user;
if (VersionHelper.isFolia()) {
player.platformPlayer().getScheduler().run(BukkitCraftEngine.instance().bootstrap(), (t) -> {
player.platformPlayer().getScheduler().run(BukkitCraftEngine.instance().javaPlugin(), (t) -> {
try {
handleSetCreativeSlotPacketOnMainThread(player, packet);
} catch (Exception e) {
@@ -1413,7 +1413,7 @@ public class PacketConsumers {
Player player = (Player) user.platformPlayer();
if (player == null) return;
if (VersionHelper.isFolia()) {
player.getScheduler().run(BukkitCraftEngine.instance().bootstrap(), (t) -> {
player.getScheduler().run(BukkitCraftEngine.instance().javaPlugin(), (t) -> {
try {
handlePickItemFromEntityOnMainThread(player, furniture);
} catch (Exception e) {

View File

@@ -14,9 +14,9 @@ public class BukkitSchedulerAdapter extends AbstractJavaScheduler<World> {
public BukkitSchedulerAdapter(BukkitCraftEngine plugin) {
super(plugin);
if (VersionHelper.isFolia()) {
this.sync = new FoliaExecutor(plugin.bootstrap());
this.sync = new FoliaExecutor(plugin);
} else {
this.sync = new BukkitExecutor(plugin.bootstrap());
this.sync = new BukkitExecutor(plugin);
}
}

View File

@@ -1,17 +1,17 @@
package net.momirealms.craftengine.bukkit.plugin.scheduler.impl;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.core.plugin.scheduler.DummyTask;
import net.momirealms.craftengine.core.plugin.scheduler.RegionExecutor;
import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
public class BukkitExecutor implements RegionExecutor<World> {
private final Plugin plugin;
private final BukkitCraftEngine plugin;
public BukkitExecutor(Plugin plugin) {
public BukkitExecutor(BukkitCraftEngine plugin) {
this.plugin = plugin;
}
@@ -22,17 +22,17 @@ public class BukkitExecutor implements RegionExecutor<World> {
@Override
public void runDelayed(Runnable r, World world, int x, int z) {
Bukkit.getScheduler().runTask(plugin, r);
Bukkit.getScheduler().runTask(plugin.javaPlugin(), r);
}
@Override
public SchedulerTask runAsyncRepeating(Runnable runnable, long delay, long period) {
return new BukkitTask(Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, runnable, delay, period));
return new BukkitTask(Bukkit.getScheduler().runTaskTimerAsynchronously(plugin.javaPlugin(), runnable, delay, period));
}
@Override
public SchedulerTask runAsyncLater(Runnable runnable, long delay) {
return new BukkitTask(Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, runnable, delay));
return new BukkitTask(Bukkit.getScheduler().runTaskLaterAsynchronously(plugin.javaPlugin(), runnable, delay));
}
@Override
@@ -42,15 +42,15 @@ public class BukkitExecutor implements RegionExecutor<World> {
runnable.run();
return new DummyTask();
} else {
return new BukkitTask(Bukkit.getScheduler().runTask(plugin, runnable));
return new BukkitTask(Bukkit.getScheduler().runTask(plugin.javaPlugin(), runnable));
}
}
return new BukkitTask(Bukkit.getScheduler().runTaskLater(plugin, runnable, delay));
return new BukkitTask(Bukkit.getScheduler().runTaskLater(plugin.javaPlugin(), runnable, delay));
}
@Override
public SchedulerTask runRepeating(Runnable runnable, long delay, long period, World world, int x, int z) {
return new BukkitTask(Bukkit.getScheduler().runTaskTimer(plugin, runnable, delay, period));
return new BukkitTask(Bukkit.getScheduler().runTaskTimer(plugin.javaPlugin(), runnable, delay, period));
}
@Override
@@ -59,6 +59,6 @@ public class BukkitExecutor implements RegionExecutor<World> {
runnable.run();
return;
}
Bukkit.getScheduler().runTask(plugin, runnable);
Bukkit.getScheduler().runTask(plugin.javaPlugin(), runnable);
}
}

View File

@@ -1,26 +1,26 @@
package net.momirealms.craftengine.bukkit.plugin.scheduler.impl;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.core.plugin.scheduler.RegionExecutor;
import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
public class FoliaExecutor implements RegionExecutor<World> {
private final Plugin plugin;
private final BukkitCraftEngine plugin;
public FoliaExecutor(Plugin plugin) {
public FoliaExecutor(BukkitCraftEngine plugin) {
this.plugin = plugin;
}
@Override
public void run(Runnable runnable, World world, int x, int z) {
Optional.ofNullable(world).ifPresentOrElse(w ->
Bukkit.getRegionScheduler().execute(plugin, w, x, z, runnable),
() -> Bukkit.getGlobalRegionScheduler().execute(plugin, runnable)
Bukkit.getRegionScheduler().execute(plugin.javaPlugin(), w, x, z, runnable),
() -> Bukkit.getGlobalRegionScheduler().execute(plugin.javaPlugin(), runnable)
);
}
@@ -43,15 +43,15 @@ public class FoliaExecutor implements RegionExecutor<World> {
public SchedulerTask runLater(Runnable runnable, long delay, World world, int x, int z) {
if (world == null) {
if (delay <= 0) {
return new FoliaTask(Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> runnable.run(), delay));
return new FoliaTask(Bukkit.getGlobalRegionScheduler().runDelayed(plugin.javaPlugin(), scheduledTask -> runnable.run(), delay));
} else {
return new FoliaTask(Bukkit.getGlobalRegionScheduler().run(plugin, scheduledTask -> runnable.run()));
return new FoliaTask(Bukkit.getGlobalRegionScheduler().run(plugin.javaPlugin(), scheduledTask -> runnable.run()));
}
} else {
if (delay <= 0) {
return new FoliaTask(Bukkit.getRegionScheduler().run(plugin, world, x, z, scheduledTask -> runnable.run()));
return new FoliaTask(Bukkit.getRegionScheduler().run(plugin.javaPlugin(), world, x, z, scheduledTask -> runnable.run()));
} else {
return new FoliaTask(Bukkit.getRegionScheduler().runDelayed(plugin, world, x, z, scheduledTask -> runnable.run(), delay));
return new FoliaTask(Bukkit.getRegionScheduler().runDelayed(plugin.javaPlugin(), world, x, z, scheduledTask -> runnable.run(), delay));
}
}
}
@@ -59,14 +59,14 @@ public class FoliaExecutor implements RegionExecutor<World> {
@Override
public SchedulerTask runRepeating(Runnable runnable, long delay, long period, World world, int x, int z) {
if (world == null) {
return new FoliaTask(Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> runnable.run(), delay, period));
return new FoliaTask(Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin.javaPlugin(), scheduledTask -> runnable.run(), delay, period));
} else {
return new FoliaTask(Bukkit.getRegionScheduler().runAtFixedRate(plugin, world, x, z, scheduledTask -> runnable.run(), delay, period));
return new FoliaTask(Bukkit.getRegionScheduler().runAtFixedRate(plugin.javaPlugin(), world, x, z, scheduledTask -> runnable.run(), delay, period));
}
}
@Override
public void execute(@NotNull Runnable runnable) {
Bukkit.getGlobalRegionScheduler().execute(plugin, runnable);
Bukkit.getGlobalRegionScheduler().execute(plugin.javaPlugin(), runnable);
}
}

View File

@@ -32,7 +32,6 @@ import sun.misc.Unsafe;
import java.io.BufferedReader;
import java.lang.invoke.VarHandle;
import java.lang.reflect.*;
import java.net.URLClassLoader;
import java.time.Instant;
import java.util.*;
import java.util.concurrent.CompletableFuture;
@@ -6785,14 +6784,6 @@ public class Reflections {
.map(clazz -> ReflectionUtils.getTheOnlyConstructor(clazz))
.orElse(null);
public static final Class<?> clazz$PaperPluginClassLoader = ReflectionUtils.getClazz(
"io.papermc.paper.plugin.entrypoint.classloader.PaperPluginClassLoader"
);
public static final Field field$PaperPluginClassLoader$libraryLoader = Optional.ofNullable(clazz$PaperPluginClassLoader)
.map(it -> ReflectionUtils.getDeclaredField(it, URLClassLoader.class, 0))
.orElse(null);
public static final Method method$SoundSource$values = requireNonNull(
ReflectionUtils.getStaticMethod(
clazz$SoundSource, clazz$SoundSource.arrayType()

View File

@@ -92,7 +92,7 @@ public class BukkitWorldManager implements WorldManager, Listener {
public void delayedInit() {
// events and tasks
Bukkit.getPluginManager().registerEvents(this, this.plugin.bootstrap());
Bukkit.getPluginManager().registerEvents(this, this.plugin.javaPlugin());
this.tickTask = this.plugin.scheduler().asyncRepeating(() -> {
try {
if (this.isTicking) {