Update Upstream

9516002 Register platforms and commands in a more proper way (1766)
This commit is contained in:
NotMyFault
2021-06-05 10:27:38 +02:00
parent f139088b6e
commit d1af6c38e7
21 changed files with 858 additions and 81 deletions

View File

@ -328,7 +328,7 @@ public class BukkitPlayer extends AbstractPlayerActor {
@Override
public void sendAnnouncements() {
if (WorldEditPlugin.getInstance().getBukkitImplAdapter() == null) {
if (WorldEditPlugin.getInstance().getLifecycledBukkitImplAdapter() == null) {
print(Caption.of("worldedit.version.bukkit.unsupported-adapter",
TextComponent.of("https://intellectualsites.github.io/download/fawe.html", TextColor.AQUA)
.clickEvent(ClickEvent.openUrl("https://intellectualsites.github.io/download/fawe.html"))));

View File

@ -27,6 +27,7 @@ import com.sk89q.bukkit.util.CommandInfo;
import com.sk89q.bukkit.util.CommandRegistration;
import com.sk89q.worldedit.LocalConfiguration;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.adapter.BukkitImplAdapter;
import com.sk89q.worldedit.command.util.PermissionCondition;
import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.extension.platform.AbstractPlatform;
@ -38,6 +39,7 @@ import com.sk89q.worldedit.extension.platform.Watchdog;
import com.sk89q.worldedit.internal.util.LogManagerCompat;
import com.sk89q.worldedit.util.SideEffect;
import com.sk89q.worldedit.util.concurrency.LazyReference;
import com.sk89q.worldedit.util.lifecycle.Lifecycled;
import com.sk89q.worldedit.world.DataFixer;
import com.sk89q.worldedit.world.registry.Registries;
import org.apache.logging.log4j.Logger;
@ -67,22 +69,17 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
public final Server server;
public final WorldEditPlugin plugin;
private final CommandRegistration dynamicCommands;
private final LazyReference<Watchdog> watchdog;
private final RelighterFactory religherFactory;
private final Lifecycled<Watchdog> watchdog;
private final RelighterFactory relighterFactory;
private boolean hookingEvents;
public BukkitServerInterface(WorldEditPlugin plugin, Server server) {
this.plugin = plugin;
this.server = server;
this.dynamicCommands = new CommandRegistration(plugin);
this.watchdog = LazyReference.from(() -> {
if (plugin.getBukkitImplAdapter() != null) {
return plugin.getBukkitImplAdapter().supportsWatchdog()
? new BukkitWatchdog(plugin.getBukkitImplAdapter())
: null;
}
return null;
});
this.watchdog = plugin.getLifecycledBukkitImplAdapter()
.filter(BukkitImplAdapter::supportsWatchdog)
.map(BukkitWatchdog::new);
RelighterFactory tempFactory;
try {
Class.forName("com.tuinity.tuinity.config.TuinityConfig");
@ -92,7 +89,7 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
tempFactory = new NMSRelighterFactory();
LOGGER.info("Using FAWE for relighting");
}
this.religherFactory = tempFactory;
this.relighterFactory = tempFactory;
}
CommandRegistration getDynamicCommands() {
@ -111,7 +108,7 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
@SuppressWarnings("deprecation")
@Override
public int getDataVersion() {
if (plugin.getBukkitImplAdapter() != null) {
if (plugin.getLifecycledBukkitImplAdapter() != null) {
return Bukkit.getUnsafe().getDataVersion();
}
return -1;
@ -147,7 +144,7 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
@Override
public Watchdog getWatchdog() {
return watchdog.getValue();
return watchdog.valueOrThrow();
}
@Override
@ -208,8 +205,8 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
}
@Override
public void registerGameHooks() {
hookingEvents = true;
public void setGameHooksEnabled(boolean enabled) {
this.hookingEvents = enabled;
}
@Override
@ -265,7 +262,7 @@ public class BukkitServerInterface extends AbstractPlatform implements MultiUser
@Override
public @NotNull RelighterFactory getRelighterFactory() {
return this.religherFactory;
return this.relighterFactory;
}
public void unregisterCommands() {

View File

@ -37,6 +37,8 @@ import com.sk89q.worldedit.bukkit.adapter.impl.FAWE_Spigot_v1_16_R3;
import com.sk89q.worldedit.event.platform.CommandEvent;
import com.sk89q.worldedit.event.platform.CommandSuggestionEvent;
import com.sk89q.worldedit.event.platform.PlatformReadyEvent;
import com.sk89q.worldedit.event.platform.PlatformUnreadyEvent;
import com.sk89q.worldedit.event.platform.PlatformsRegisteredEvent;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extension.platform.Capability;
import com.sk89q.worldedit.extension.platform.Platform;
@ -44,6 +46,8 @@ import com.sk89q.worldedit.extent.inventory.BlockBag;
import com.sk89q.worldedit.internal.anvil.ChunkDeleter;
import com.sk89q.worldedit.internal.command.CommandUtil;
import com.sk89q.worldedit.internal.util.LogManagerCompat;
import com.sk89q.worldedit.util.lifecycle.Lifecycled;
import com.sk89q.worldedit.util.lifecycle.SimpleLifecycled;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockCategory;
import com.sk89q.worldedit.world.entity.EntityType;
@ -69,7 +73,6 @@ import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.java.JavaPlugin;
import org.incendo.serverlib.ServerLib;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.FileNotFoundException;
@ -94,9 +97,11 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
private static final Logger LOGGER = LogManagerCompat.getLogger();
public static final String CUI_PLUGIN_CHANNEL = "worldedit:cui";
private static WorldEditPlugin INSTANCE;
private static final int BSTATS_ID = 1403;
private BukkitImplAdapter bukkitAdapter;
private BukkitServerInterface server;
private final SimpleLifecycled<BukkitImplAdapter> adapter =
SimpleLifecycled.invalid();
private BukkitServerInterface platform;
private BukkitConfiguration config;
private BukkitPermissionAttachmentManager permissionAttachmentManager;
@ -110,8 +115,12 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
WorldEdit worldEdit = WorldEdit.getInstance();
// Setup platform
server = new BukkitServerInterface(this, getServer());
worldEdit.getPlatformManager().register(server);
platform = new BukkitServerInterface(this, getServer());
worldEdit.getPlatformManager().register(platform);
createDefaultConfiguration("config-legacy.yml"); // Create the default configuration file for WorldEdit, for it's config-legacy.yml
config = new BukkitConfiguration(new YAMLProcessor(new File(getDataFolder(), "config-legacy.yml"), true), this);
permissionAttachmentManager = new BukkitPermissionAttachmentManager(this);
@ -139,6 +148,8 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
new FaweBukkit(this);
WorldEdit.getInstance().getEventBus().post(new PlatformsRegisteredEvent());
PermissionsResolverManager.initialize(this); // Setup permission resolver
// Register CUI
@ -171,7 +182,7 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
}
// Setup metrics
new Metrics(this, 1403);
new Metrics(this, BSTATS_ID);
// Check whether the server runs on 11 or greater
ServerLib.checkJavaLTS();
@ -181,14 +192,15 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
private void setupPreWorldData() {
loadAdapter();
loadConfig();
config.load();
WorldEdit.getInstance().loadMappings();
}
private void setupWorldData() {
setupTags(); // datapacks aren't loaded until just before the world is, and bukkit has no event for this
// datapacks aren't loaded until just before the world is, and bukkit has no event for this
// so the earliest we can do this is in WorldInit
WorldEdit.getInstance().getEventBus().post(new PlatformReadyEvent());
setupTags();
WorldEdit.getInstance().getEventBus().post(new PlatformReadyEvent(platform));
}
@SuppressWarnings({ "deprecation", "unchecked" })
@ -196,11 +208,7 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
// Biome
for (Biome biome : Biome.values()) {
String lowerCaseBiomeName = biome.name().toLowerCase(Locale.ROOT);
BiomeType biomeType = BiomeType.REGISTRY.register(
"minecraft:" + lowerCaseBiomeName, new BiomeType("minecraft:" + lowerCaseBiomeName));
if (bukkitAdapter != null) {
biomeType.setLegacyId(bukkitAdapter.getInternalBiomeId(biomeType));
}
BiomeType.REGISTRY.register("minecraft:" + lowerCaseBiomeName, new BiomeType("minecraft:" + lowerCaseBiomeName));
}
/*
@ -271,17 +279,6 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
}
}
private void loadConfig() {
createDefaultConfiguration("config-legacy.yml"); // Create the default configuration file
config = new BukkitConfiguration(new YAMLProcessor(new File(getDataFolder(), "config-legacy.yml"), true), this);
config.load();
// Create schematics folder
WorldEdit worldEdit = WorldEdit.getInstance();
File dir = worldEdit.getWorkingDirectoryPath(worldEdit.getConfiguration().saveDir).toFile();
dir.mkdirs();
}
private void loadAdapter() {
WorldEdit worldEdit = WorldEdit.getInstance();
@ -308,17 +305,19 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
LOGGER.warn("Failed to search " + getFile() + " for Bukkit adapters", e);
}
try {
bukkitAdapter = adapterLoader.loadAdapter();
BukkitImplAdapter bukkitAdapter = adapterLoader.loadAdapter();
LOGGER.info("Using " + bukkitAdapter.getClass().getCanonicalName() + " as the Bukkit adapter");
this.adapter.newValue(bukkitAdapter);
} catch (AdapterLoadException e) {
Platform platform = worldEdit.getPlatformManager().queryCapability(Capability.WORLD_EDITING);
if (platform instanceof BukkitServerInterface) {
LOGGER.warn(e.getMessage());
} else {
LOGGER.info("WorldEdit could not find a Bukkit adapter for this MC version, "
+ "but it seems that you have another implementation of WorldEdit installed (" + platform.getPlatformName() + ") "
LOGGER.info("FastAsyncWorldEdit could not find a Bukkit adapter for this MC version, "
+ "but it seems that you have another implementation of FastAsyncWorldEdit installed (" + platform.getPlatformName() + ") "
+ "that handles the world editing.");
}
this.adapter.invalidate();
}
}
@ -330,13 +329,14 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
Fawe.get().onDisable();
WorldEdit worldEdit = WorldEdit.getInstance();
worldEdit.getSessionManager().unload();
worldEdit.getPlatformManager().unregister(server);
if (platform != null) {
worldEdit.getEventBus().post(new PlatformUnreadyEvent(platform));
worldEdit.getPlatformManager().unregister(platform);
platform.unregisterCommands();
}
if (config != null) {
config.unload();
}
if (server != null) {
server.unregisterCommands();
}
this.getServer().getScheduler().cancelTasks(this);
}
@ -526,7 +526,7 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
}
public BukkitServerInterface getInternalPlatform() {
return server;
return platform;
}
/**
@ -553,9 +553,12 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter
*
* @return the adapter
*/
@Nullable
Lifecycled<BukkitImplAdapter> getLifecycledBukkitImplAdapter() {
return adapter;
}
public BukkitImplAdapter getBukkitImplAdapter() {
return bukkitAdapter;
return adapter.value().orElse(null);
}
private class WorldInitListener implements Listener {