From 01f169183f107f9478635411170209a6e221e8de Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 1 Jun 2025 02:10:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0paper=20loader=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BukkitCompatibilityManager.java | 8 +- bukkit/loader/build.gradle.kts | 7 +- ...trap.java => BukkitCraftEnginePlugin.java} | 4 +- bukkit/paper-loader/build.gradle.kts | 128 ++++++++++++++++++ .../bukkit/PaperCraftEngineBootstrap.java | 51 +++++++ .../bukkit/PaperCraftEnginePlugin.java | 31 +++++ .../bukkit/block/BukkitBlockManager.java | 4 +- .../furniture/BukkitFurnitureManager.java | 4 +- .../projectile/BukkitProjectileManager.java | 4 +- .../bukkit/font/BukkitFontManager.java | 2 +- .../bukkit/item/BukkitItemManager.java | 6 +- .../item/recipe/BukkitRecipeManager.java | 4 +- .../bukkit/loot/BukkitVanillaLootManager.java | 2 +- .../bukkit/pack/BukkitPackManager.java | 2 +- .../bukkit/plugin/BukkitCraftEngine.java | 61 +++++++-- .../classpath/BukkitClassPathAppender.java | 38 ------ .../classpath/PaperClassPathAppender.java | 45 ++++++ .../plugin/command/BukkitCommandManager.java | 2 +- .../plugin/command/BukkitSenderFactory.java | 2 +- .../bukkit/plugin/gui/BukkitGuiManager.java | 2 +- .../plugin/network/BukkitNetworkManager.java | 10 +- .../plugin/network/PacketConsumers.java | 4 +- .../scheduler/BukkitSchedulerAdapter.java | 4 +- .../plugin/scheduler/impl/BukkitExecutor.java | 20 +-- .../plugin/scheduler/impl/FoliaExecutor.java | 24 ++-- .../craftengine/bukkit/util/Reflections.java | 9 -- .../bukkit/world/BukkitWorldManager.java | 2 +- .../ReflectionClassPathAppender.java | 6 - .../core/plugin/dependency/Dependencies.java | 6 - .../craftengine/core/util/VersionHelper.java | 2 + settings.gradle.kts | 1 + 31 files changed, 361 insertions(+), 134 deletions(-) rename bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/{BukkitBootstrap.java => BukkitCraftEnginePlugin.java} (84%) create mode 100644 bukkit/paper-loader/build.gradle.kts create mode 100644 bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEngineBootstrap.java create mode 100644 bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEnginePlugin.java delete mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/BukkitClassPathAppender.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/PaperClassPathAppender.java diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index ae907026a..33b669ce1 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -141,7 +141,7 @@ public class BukkitCompatibilityManager implements CompatibilityManager { } private void initLuckPermsHook() { - new LuckPermsEventListeners(plugin.bootstrap(), (uuid) -> { + new LuckPermsEventListeners(plugin.javaPlugin(), (uuid) -> { BukkitFontManager fontManager = (BukkitFontManager) plugin.fontManager(); fontManager.refreshEmojiSuggestions(uuid); }); @@ -154,7 +154,7 @@ public class BukkitCompatibilityManager implements CompatibilityManager { Class.forName("com.infernalsuite.asp.api.AdvancedSlimePaperAPI"); SlimeFormatStorageAdaptor adaptor = new SlimeFormatStorageAdaptor(worldManager); worldManager.setStorageAdaptor(adaptor); - Bukkit.getPluginManager().registerEvents(adaptor, plugin.bootstrap()); + Bukkit.getPluginManager().registerEvents(adaptor, plugin.javaPlugin()); logHook("AdvancedSlimePaper"); } catch (ClassNotFoundException ignored) { } @@ -163,13 +163,13 @@ public class BukkitCompatibilityManager implements CompatibilityManager { Class.forName("com.infernalsuite.aswm.api.SlimePlugin"); LegacySlimeFormatStorageAdaptor adaptor = new LegacySlimeFormatStorageAdaptor(worldManager, 1); worldManager.setStorageAdaptor(adaptor); - Bukkit.getPluginManager().registerEvents(adaptor, plugin.bootstrap()); + Bukkit.getPluginManager().registerEvents(adaptor, plugin.javaPlugin()); logHook("AdvancedSlimePaper"); } catch (ClassNotFoundException ignored) { if (Bukkit.getPluginManager().isPluginEnabled("SlimeWorldPlugin")) { LegacySlimeFormatStorageAdaptor adaptor = new LegacySlimeFormatStorageAdaptor(worldManager, 2); worldManager.setStorageAdaptor(adaptor); - Bukkit.getPluginManager().registerEvents(adaptor, plugin.bootstrap()); + Bukkit.getPluginManager().registerEvents(adaptor, plugin.javaPlugin()); logHook("AdvancedSlimePaper"); } } diff --git a/bukkit/loader/build.gradle.kts b/bukkit/loader/build.gradle.kts index 24133897e..a210e47c6 100644 --- a/bukkit/loader/build.gradle.kts +++ b/bukkit/loader/build.gradle.kts @@ -25,7 +25,7 @@ dependencies { implementation("com.saicone.rtag:rtag-item:${rootProject.properties["rtag_version"]}") implementation("net.momirealms:sparrow-util:${rootProject.properties["sparrow_util_version"]}") implementation("net.momirealms:antigrieflib:${rootProject.properties["anti_grief_version"]}") - implementation("net.momirealms:craft-engine-nms-helper-mojmap:${rootProject.properties["nms_helper_version"]}") + implementation("net.momirealms:craft-engine-nms-helper:${rootProject.properties["nms_helper_version"]}") } java { @@ -44,7 +44,7 @@ tasks.withType { bukkit { load = net.minecrell.pluginyml.bukkit.BukkitPluginDescription.PluginLoadOrder.POSTWORLD - main = "net.momirealms.craftengine.bukkit.BukkitBootstrap" + main = "net.momirealms.craftengine.bukkit.BukkitCraftEnginePlugin" version = rootProject.properties["project_version"] as String name = "CraftEngine" apiVersion = "1.20" @@ -60,9 +60,6 @@ artifacts { tasks { shadowJar { - manifest { - attributes["paperweight-mappings-namespace"] = "mojang" - } archiveFileName = "${rootProject.name}-bukkit-plugin-${rootProject.properties["project_version"]}.jar" destinationDirectory.set(file("$rootDir/target")) relocate("net.kyori", "net.momirealms.craftengine.libraries") diff --git a/bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/BukkitBootstrap.java b/bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/BukkitCraftEnginePlugin.java similarity index 84% rename from bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/BukkitBootstrap.java rename to bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/BukkitCraftEnginePlugin.java index 3e73cf8ea..92019d129 100644 --- a/bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/BukkitBootstrap.java +++ b/bukkit/loader/src/main/java/net/momirealms/craftengine/bukkit/BukkitCraftEnginePlugin.java @@ -3,10 +3,10 @@ package net.momirealms.craftengine.bukkit; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import org.bukkit.plugin.java.JavaPlugin; -public class BukkitBootstrap extends JavaPlugin { +public class BukkitCraftEnginePlugin extends JavaPlugin { private final BukkitCraftEngine plugin; - public BukkitBootstrap() { + public BukkitCraftEnginePlugin() { this.plugin = new BukkitCraftEngine(this); } diff --git a/bukkit/paper-loader/build.gradle.kts b/bukkit/paper-loader/build.gradle.kts new file mode 100644 index 000000000..b2d1fb9d0 --- /dev/null +++ b/bukkit/paper-loader/build.gradle.kts @@ -0,0 +1,128 @@ +import net.minecrell.pluginyml.paper.PaperPluginDescription + +plugins { + id("com.gradleup.shadow") version "9.0.0-beta13" + id("de.eldoria.plugin-yml.paper") version "0.7.1" +} + +repositories { + maven("https://jitpack.io/") + maven("https://repo.papermc.io/repository/maven-public/") + maven("https://repo.momirealms.net/releases/") + mavenCentral() +} + +dependencies { + // Platform + compileOnly("io.papermc.paper:paper-api:${rootProject.properties["paper_version"]}-R0.1-SNAPSHOT") + + implementation(project(":shared")) + implementation(project(":core")) + implementation(project(":bukkit")) + implementation(project(":bukkit:legacy")) + implementation(project(":bukkit:compatibility")) + implementation(project(":bukkit:compatibility:legacy")) + implementation(project(":common-files")) + + implementation("com.saicone.rtag:rtag-item:${rootProject.properties["rtag_version"]}") + implementation("net.momirealms:sparrow-util:${rootProject.properties["sparrow_util_version"]}") + implementation("net.momirealms:antigrieflib:${rootProject.properties["anti_grief_version"]}") + implementation("net.momirealms:craft-engine-nms-helper-mojmap:${rootProject.properties["nms_helper_version"]}") +} + +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +tasks.withType { + options.encoding = "UTF-8" + options.release.set(21) + dependsOn(tasks.clean) +} + +paper { + load = net.minecrell.pluginyml.bukkit.BukkitPluginDescription.PluginLoadOrder.POSTWORLD + main = "net.momirealms.craftengine.bukkit.PaperCraftEnginePlugin" + bootstrapper = "net.momirealms.craftengine.bukkit.PaperCraftEngineBootstrap" + version = rootProject.properties["project_version"] as String + name = "CraftEngine" + apiVersion = "1.20" + authors = listOf("XiaoMoMi") + contributors = listOf("jhqwqmc", "iqtesterrr") + foliaSupported = true + serverDependencies { + register("PlaceholderAPI") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("WorldEdit") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("FastAsyncWorldEdit") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + joinClasspath = false + } + register("Skript") { + required = false + load = PaperPluginDescription.RelativeLoadOrder.BEFORE + } + register("NeigeItems") { + required = false + } + register("MMOItems") { + required = false + } + register("ModelEngine") { + required = false + } + register("BetterModel") { + required = false + } + register("AuraSkills") { + required = false + } + register("LuckPerms") { + required = false + } + register("ViaVersion") { + required = false + } + } +} + +artifacts { + archives(tasks.shadowJar) +} + +tasks { + shadowJar { + manifest { + attributes["paperweight-mappings-namespace"] = "mojang" + } + archiveFileName = "${rootProject.name}-paper-plugin-${rootProject.properties["project_version"]}.jar" + destinationDirectory.set(file("$rootDir/target")) + relocate("net.kyori", "net.momirealms.craftengine.libraries") + relocate("net.momirealms.sparrow.nbt", "net.momirealms.craftengine.libraries.nbt") + relocate("net.momirealms.antigrieflib", "net.momirealms.craftengine.libraries.antigrieflib") + relocate("com.saicone.rtag", "net.momirealms.craftengine.libraries.tag") + relocate("org.incendo", "net.momirealms.craftengine.libraries") + relocate("dev.dejvokep", "net.momirealms.craftengine.libraries") + relocate("org.bstats", "net.momirealms.craftengine.libraries.bstats") + relocate("com.github.benmanes.caffeine", "net.momirealms.craftengine.libraries.caffeine") + relocate("com.ezylang.evalex", "net.momirealms.craftengine.libraries.evalex") + relocate("net.bytebuddy", "net.momirealms.craftengine.libraries.bytebuddy") + relocate("org.yaml.snakeyaml", "net.momirealms.craftengine.libraries.snakeyaml") + relocate("org.ahocorasick", "net.momirealms.craftengine.libraries.ahocorasick") + relocate("net.jpountz", "net.momirealms.craftengine.libraries.jpountz") + relocate("software.amazon.awssdk", "net.momirealms.craftengine.libraries.awssdk") + relocate("software.amazon.eventstream", "net.momirealms.craftengine.libraries.eventstream") + relocate("com.google.common.jimfs", "net.momirealms.craftengine.libraries.jimfs") + relocate("org.apache.commons", "net.momirealms.craftengine.libraries.commons") + } +} diff --git a/bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEngineBootstrap.java b/bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEngineBootstrap.java new file mode 100644 index 000000000..debccb761 --- /dev/null +++ b/bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEngineBootstrap.java @@ -0,0 +1,51 @@ +package net.momirealms.craftengine.bukkit; + +import io.papermc.paper.plugin.bootstrap.BootstrapContext; +import io.papermc.paper.plugin.bootstrap.PluginBootstrap; +import io.papermc.paper.plugin.bootstrap.PluginProviderContext; +import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; +import net.momirealms.craftengine.bukkit.plugin.classpath.PaperClassPathAppender; +import net.momirealms.craftengine.core.plugin.logger.PluginLogger; +import net.momirealms.craftengine.core.plugin.logger.Slf4jPluginLogger; +import net.momirealms.craftengine.core.util.ReflectionUtils; +import org.bukkit.plugin.java.JavaPlugin; +import org.jetbrains.annotations.NotNull; + +import java.lang.reflect.Method; +import java.util.Objects; + +@SuppressWarnings("UnstableApiUsage") +public class PaperCraftEngineBootstrap implements PluginBootstrap { + private static final Class clazz$PluginProviderContext = PluginProviderContext.class; + private static final Class clazz$ComponentLogger = Objects.requireNonNull( + ReflectionUtils.getClazz( + "net{}kyori{}adventure{}text{}logger{}slf4j{}ComponentLogger".replace("{}", ".") + ) + ); + private static final Method method$PluginProviderContext$getLogger = Objects.requireNonNull( + ReflectionUtils.getMethod( + clazz$PluginProviderContext, clazz$ComponentLogger, new String[] { "getLogger" } + ) + ); + protected BukkitCraftEngine plugin; + + @Override + public void bootstrap(@NotNull BootstrapContext context) { + PluginLogger logger; + try { + logger = new Slf4jPluginLogger((org.slf4j.Logger) method$PluginProviderContext$getLogger.invoke(context)); + } catch (ReflectiveOperationException e) { + throw new RuntimeException("Failed to getLogger", e); + } + this.plugin = new BukkitCraftEngine( + logger, + context.getDataDirectory(), + new PaperClassPathAppender(this.getClass().getClassLoader()) + ); + } + + @Override + public @NotNull JavaPlugin createPlugin(@NotNull PluginProviderContext context) { + return new PaperCraftEnginePlugin(this); + } +} diff --git a/bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEnginePlugin.java b/bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEnginePlugin.java new file mode 100644 index 000000000..d78f5ed55 --- /dev/null +++ b/bukkit/paper-loader/src/main/java/net/momirealms/craftengine/bukkit/PaperCraftEnginePlugin.java @@ -0,0 +1,31 @@ +package net.momirealms.craftengine.bukkit; + +import org.bukkit.plugin.java.JavaPlugin; + +public class PaperCraftEnginePlugin extends JavaPlugin { + private final PaperCraftEngineBootstrap bootstrap; + private boolean hasLoaded = false; + + public PaperCraftEnginePlugin(PaperCraftEngineBootstrap bootstrap) { + this.bootstrap = bootstrap; + this.bootstrap.plugin.setJavaPlugin(this); + } + + @Override + public void onLoad() { + if (!this.hasLoaded) { + this.hasLoaded = true; + this.bootstrap.plugin.onPluginLoad(); + } + } + + @Override + public void onEnable() { + this.bootstrap.plugin.onPluginEnable(); + } + + @Override + public void onDisable() { + this.bootstrap.plugin.onPluginDisable(); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index 0da59b896..efe353959 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -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()); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java index 4f8927967..0932cb78f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureManager.java @@ -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 entities = world.getEntities(); for (Entity entity : entities) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java index 0b63e8dc9..c49a48f37 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java @@ -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 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); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java index 3a8fc1a34..efbb46748 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java @@ -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 diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 1875f3338..aeb3926bd 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -65,9 +65,9 @@ public class BukkitItemManager extends AbstractItemManager { @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 diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java index 55eca0cda..50f43aab6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java @@ -277,9 +277,9 @@ public class BukkitRecipeManager extends AbstractRecipeManager { @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()); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java index 2a1d1630b..46f2fdd28 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/loot/BukkitVanillaLootManager.java @@ -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 diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java index 59490e1a4..e144fe1da 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/pack/BukkitPackManager.java @@ -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) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index 0fb4724e7..075eaa50f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -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) 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(); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/BukkitClassPathAppender.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/BukkitClassPathAppender.java deleted file mode 100644 index ddb3b04da..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/BukkitClassPathAppender.java +++ /dev/null @@ -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); - } - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/PaperClassPathAppender.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/PaperClassPathAppender.java new file mode 100644 index 000000000..ddacca6b9 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/classpath/PaperClassPathAppender.java @@ -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); + } + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java index 0eee9c0aa..6701320b9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java @@ -22,7 +22,7 @@ public class BukkitCommandManager extends AbstractCommandManager public BukkitCommandManager(BukkitCraftEngine plugin) { super(plugin, new LegacyPaperCommandManager<>( - plugin.bootstrap(), + plugin.javaPlugin(), ExecutionCoordinator.simpleCoordinator(), SenderMapper.identity() )); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitSenderFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitSenderFactory.java index 132bdd29f..04b5747b9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitSenderFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitSenderFactory.java @@ -71,7 +71,7 @@ public class BukkitSenderFactory extends SenderFactory 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 diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 78e4beafb..b6bb98332 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -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) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/BukkitSchedulerAdapter.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/BukkitSchedulerAdapter.java index 169b9f3fb..ee46b70b3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/BukkitSchedulerAdapter.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/BukkitSchedulerAdapter.java @@ -14,9 +14,9 @@ public class BukkitSchedulerAdapter extends AbstractJavaScheduler { 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); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/BukkitExecutor.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/BukkitExecutor.java index 5270e29ea..783ca19ec 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/BukkitExecutor.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/BukkitExecutor.java @@ -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 { - 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 { @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 { 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 { runnable.run(); return; } - Bukkit.getScheduler().runTask(plugin, runnable); + Bukkit.getScheduler().runTask(plugin.javaPlugin(), runnable); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/FoliaExecutor.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/FoliaExecutor.java index 420c04d1d..d631d63f5 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/FoliaExecutor.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/scheduler/impl/FoliaExecutor.java @@ -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 { - 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 { 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 { @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); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 47bde67bb..9ca3fb952 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -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() diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java index afa8d1159..91cdf5584 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java @@ -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) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/classpath/ReflectionClassPathAppender.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/classpath/ReflectionClassPathAppender.java index b1f828f33..ab4c49464 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/classpath/ReflectionClassPathAppender.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/classpath/ReflectionClassPathAppender.java @@ -1,7 +1,5 @@ package net.momirealms.craftengine.core.plugin.classpath; -import net.momirealms.craftengine.core.plugin.Plugin; - import java.net.MalformedURLException; import java.net.URLClassLoader; import java.nio.file.Path; @@ -17,10 +15,6 @@ public class ReflectionClassPathAppender implements ClassPathAppender { } } - public ReflectionClassPathAppender(Plugin plugin) throws IllegalStateException { - this(plugin.getClass().getClassLoader()); - } - @Override public void addJarToClasspath(Path file) { try { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/dependency/Dependencies.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/dependency/Dependencies.java index 61b0db93f..d952ba1c1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/dependency/Dependencies.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/dependency/Dependencies.java @@ -4,12 +4,6 @@ import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.dependency.relocation.Relocation; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.attribute.BasicFileAttributes; -import java.nio.file.attribute.FileTime; -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; import java.util.Collections; import java.util.List; import java.util.jar.JarFile; diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java index d9b5fb78f..1ad85c41e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/VersionHelper.java @@ -60,6 +60,8 @@ public class VersionHelper { } } + public static void init() {} + public static float version() { return version; } diff --git a/settings.gradle.kts b/settings.gradle.kts index cb6c8aa27..50a1aa2c9 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -6,6 +6,7 @@ include(":bukkit:legacy") include(":bukkit:compatibility") include(":bukkit:compatibility:legacy") include(":bukkit:loader") +include(":bukkit:paper-loader") include(":server-mod:v1_20_1") include(":server-mod:v1_20_5") include(":server-mod:v1_21_5")