Folia/patches/server/0010-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch
Spottedleaf 4a59238743 Update to 1.20.2
Very early build, network configuration switching is supported
but not tested (note: changes need to be backported to Paper)

Changes:
 - Supports per player mob caps
 - Adds entity tracker optimisations which are not in Paper
   (and will not be ported to Paper due to plugin conflicts)
 - No longer reverts paper distance map optimisations, as
   those are replaced by the NearbyPlayers class

These changes should bring Folia in-line with Paper's optimisations
at least (probably more given the entity tracker optimisations),
still missing features like world loading / some commands
2023-09-26 13:28:33 -07:00

83 lines
4.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com>
Date: Wed, 29 Mar 2023 16:50:14 -0400
Subject: [PATCH] Require plugins to be explicitly marked as Folia supported
diff --git a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java
index 45bd29b70782e29eb11c36eaca0f940aee49799b..b930bd722caf6ecc6e2d584535cdd7a8924d9e08 100644
--- a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java
+++ b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java
@@ -60,6 +60,7 @@ public class PaperPluginMeta implements PluginMeta {
@Required
@PluginConfigConstraints.PluginVersion
private String apiVersion;
+ private boolean foliaSupported = false; // Folia
private Map<PluginDependencyLifeCycle, Map<String, DependencyConfiguration>> dependencies = new EnumMap<>(PluginDependencyLifeCycle.class);
@@ -228,6 +229,13 @@ public class PaperPluginMeta implements PluginMeta {
return this.apiVersion;
}
+ // Folia start
+ @Override
+ public boolean isFoliaSupported() {
+ return this.foliaSupported;
+ }
+ // Folia end
+
@Override
public @NotNull List<String> getProvidedPlugins() {
return this.provides;
diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java
index 84305ea4bd21acf0ff2415808933552696686ac7..7858c88ffc505b7b79155f9c95316f825c5ee575 100644
--- a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java
+++ b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java
@@ -24,6 +24,11 @@ class PaperPluginProviderFactory implements PluginTypeFactory<PaperPluginParent,
@Override
public PaperPluginParent build(JarFile file, PaperPluginMeta configuration, Path source) throws Exception {
+ // Folia start - block plugins not marked as supported
+ if (!configuration.isFoliaSupported()) {
+ throw new RuntimeException("Could not load plugin '" + configuration.getDisplayName() + "' as it is not marked as supporting Folia!");
+ }
+ // Folia end - block plugins not marked as supported
Logger jul = PaperPluginLogger.getLogger(configuration);
ComponentLogger logger = ComponentLogger.logger(jul.getName());
PluginProviderContext context = PluginProviderContextImpl.create(configuration, logger, source);
diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java
index 14ed05945ba5bfeb2b539d4786278b0e04130404..ad13d60eeb94a75c97b3d0696c39d834d6082bfa 100644
--- a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java
+++ b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java
@@ -17,6 +17,11 @@ class SpigotPluginProviderFactory implements PluginTypeFactory<SpigotPluginProvi
@Override
public SpigotPluginProvider build(JarFile file, PluginDescriptionFile configuration, Path source) throws Exception {
+ // Folia start - block plugins not marked as supported
+ if (!configuration.isFoliaSupported()) {
+ throw new RuntimeException("Could not load plugin '" + configuration.getDisplayName() + "' as it is not marked as supporting Folia!");
+ }
+ // Folia end - block plugins not marked as supported
// Copied from SimplePluginManager#loadPlugins
// Spigot doesn't validate the name when the config is created, and instead when the plugin is loaded.
// Paper plugin configuration will do these checks in config serializer instead of when this is created.
diff --git a/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java b/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java
index ba271c35eb2804f94cfc893bf94affb9ae13d3ba..db9285c2ff0c805f5d9564b6e8520c33ea5bb65a 100644
--- a/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java
+++ b/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java
@@ -20,6 +20,13 @@ public class TestPluginMeta implements PluginMeta {
this.identifier = identifier;
}
+ // Folia start - region threading
+ @Override
+ public boolean isFoliaSupported() {
+ return true;
+ }
+ // Folia end - region threading
+
@Override
public @NotNull String getName() {
return this.identifier;