mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
添加paper loader模块
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<JavaCompile> {
|
||||
|
||||
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")
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
128
bukkit/paper-loader/build.gradle.kts
Normal file
128
bukkit/paper-loader/build.gradle.kts
Normal file
@@ -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<JavaCompile> {
|
||||
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")
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -60,6 +60,8 @@ public class VersionHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public static void init() {}
|
||||
|
||||
public static float version() {
|
||||
return version;
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user