Skip to content

Commit

Permalink
Plugin Datapacks
Browse files Browse the repository at this point in the history
  • Loading branch information
Machine-Maker committed Feb 19, 2023
1 parent 7baf427 commit 5d3a7ac
Show file tree
Hide file tree
Showing 6 changed files with 415 additions and 22 deletions.
73 changes: 73 additions & 0 deletions patches/api/0419-Plugin-Datapacks.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sat, 9 Jan 2021 22:21:41 -0800
Subject: [PATCH] Plugin Datapacks


diff --git a/src/main/java/io/papermc/paper/plugin/DatapackConfiguration.java b/src/main/java/io/papermc/paper/plugin/DatapackConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e48ad4f2bd9d73fdaf1e05b5338e4a54d5cd146
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/DatapackConfiguration.java
@@ -0,0 +1,22 @@
+package io.papermc.paper.plugin;
+
+import net.kyori.adventure.text.Component;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public interface DatapackConfiguration {
+
+ /**
+ * Gets the directory inside the plugin's file for the datapack.
+ *
+ * @return the datapack directory
+ */
+ @NotNull String directory();
+
+ /**
+ * Gets the datapack's configured name.
+ *
+ * @return the name or null if none configured
+ */
+ @Nullable Component name();
+}
diff --git a/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java b/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java
index ef393f1f93ca48264fc1b6e3a27787f6a9152e1b..c0037d779cbfe926221559598fc9965717202768 100644
--- a/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java
+++ b/src/main/java/io/papermc/paper/plugin/configuration/PluginMeta.java
@@ -1,5 +1,6 @@
package io.papermc.paper.plugin.configuration;

+import io.papermc.paper.plugin.DatapackConfiguration;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginLoadOrder;
@@ -200,4 +201,11 @@ public interface PluginMeta {
@Nullable
String getAPIVersion();

+ /**
+ * Get the configuration for the datapack associated with the plugin.
+ *
+ * @return the datapack configuration (or null if none)
+ */
+ @Nullable DatapackConfiguration getDatapackConfiguration();
+
}
diff --git a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
index f1ae66989afaa433bf2896e0bfe2cea472f774d8..4eb40bbbc2740c1fa25adad9d56c1afe634687f1 100644
--- a/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
+++ b/src/main/java/org/bukkit/plugin/PluginDescriptionFile.java
@@ -317,6 +317,11 @@ public final class PluginDescriptionFile implements io.papermc.paper.plugin.conf
public @NotNull List<String> getProvidedPlugins() {
return this.provides;
}
+
+ @Override
+ public @Nullable io.papermc.paper.plugin.DatapackConfiguration getDatapackConfiguration() {
+ return null;
+ }
// Paper end

public PluginDescriptionFile(@NotNull final InputStream stream) throws InvalidDescriptionException {
47 changes: 25 additions & 22 deletions patches/server/0013-Paper-Plugins.patch
Original file line number Diff line number Diff line change
Expand Up @@ -2033,7 +2033,7 @@ index 0000000000000000000000000000000000000000..22189a1c42459c00d3e8bdeb980d15a6
+}
diff --git a/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/LegacyPluginLoadingStrategy.java b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/LegacyPluginLoadingStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..8bc11d7e9341a31382c1b055565cc8d5fd3203ea
index 0000000000000000000000000000000000000000..883a9568e4f314632f965d18c15fa113ddf3d9c0
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/LegacyPluginLoadingStrategy.java
@@ -0,0 +1,260 @@
Expand Down Expand Up @@ -2069,8 +2069,8 @@ index 0000000000000000000000000000000000000000..8bc11d7e9341a31382c1b055565cc8d5
+ }
+
+ @Override
+ public List<T> loadProviders(List<PluginProvider<T>> providers) {
+ List<T> javapluginsLoaded = new ArrayList<>();
+ public List<Pair<T>> loadProviders(List<PluginProvider<T>> providers) {
+ List<Pair<T>> javapluginsLoaded = new ArrayList<>();
+ MutableGraph<String> dependencyGraph = GraphBuilder.directed().build();
+ GraphDependencyContext dependencyContext = new GraphDependencyContext(dependencyGraph);
+
Expand Down Expand Up @@ -2240,7 +2240,7 @@ index 0000000000000000000000000000000000000000..8bc11d7e9341a31382c1b055565cc8d5
+ if (this.configuration.load(file, loadedPlugin)) {
+ loadedPlugins.add(file.getMeta().getName());
+ loadedPlugins.addAll(file.getMeta().getProvidedPlugins());
+ javapluginsLoaded.add(loadedPlugin);
+ javapluginsLoaded.add(new Pair<>(file, loadedPlugin));
+ }
+
+ } catch (Exception ex) {
Expand Down Expand Up @@ -2271,7 +2271,7 @@ index 0000000000000000000000000000000000000000..8bc11d7e9341a31382c1b055565cc8d5
+ if (this.configuration.load(file, loadedPlugin)) {
+ loadedPlugins.add(file.getMeta().getName());
+ loadedPlugins.addAll(file.getMeta().getProvidedPlugins());
+ javapluginsLoaded.add(loadedPlugin);
+ javapluginsLoaded.add(new Pair<>(file, loadedPlugin));
+ }
+ break;
+ } catch (Exception ex) {
Expand Down Expand Up @@ -2299,7 +2299,7 @@ index 0000000000000000000000000000000000000000..8bc11d7e9341a31382c1b055565cc8d5
+}
diff --git a/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/ModernPluginLoadingStrategy.java b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/ModernPluginLoadingStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..a0363af157131a2b42c00028a260e9c3d3c543de
index 0000000000000000000000000000000000000000..b0f059e278c31cc79eccfd2511b6a2bd75efeb96
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/ModernPluginLoadingStrategy.java
@@ -0,0 +1,143 @@
Expand Down Expand Up @@ -2332,7 +2332,7 @@ index 0000000000000000000000000000000000000000..a0363af157131a2b42c00028a260e9c3
+ }
+
+ @Override
+ public List<T> loadProviders(List<PluginProvider<T>> pluginProviders) {
+ public List<Pair<T>> loadProviders(List<PluginProvider<T>> pluginProviders) {
+ MutableGraph<String> dependencyGraph = GraphBuilder.directed().build();
+ Map<String, PluginProviderEntry<T>> providerMap = new HashMap<>();
+ List<PluginProvider<T>> validatedProviders = new ArrayList<>();
Expand Down Expand Up @@ -2408,7 +2408,7 @@ index 0000000000000000000000000000000000000000..a0363af157131a2b42c00028a260e9c3
+ }
+
+ GraphDependencyContext graphDependencyContext = new GraphDependencyContext(dependencyGraph);
+ List<T> loadedPlugins = new ArrayList<>();
+ List<Pair<T>> loadedPlugins = new ArrayList<>();
+ for (String providerIdentifier : reversedTopographicSort) {
+ // It's possible that this will be null because the above dependencies for soft/load before aren't validated if they exist.
+ // The graph could be MutableGraph<PluginProvider<T>>, but we would have to check if each dependency exists there... just
Expand All @@ -2426,7 +2426,7 @@ index 0000000000000000000000000000000000000000..a0363af157131a2b42c00028a260e9c3
+
+ T instance = retrievedProvider.createInstance();
+ if (this.configuration.load(retrievedProvider, instance)) {
+ loadedPlugins.add(instance);
+ loadedPlugins.add(new Pair<>(retrievedProvider, instance));
+ }
+ } catch (Exception ex) {
+ LOGGER.error("Could not load plugin '%s' in folder '%s'".formatted(retrievedProvider.getFileName(), retrievedProvider.getParentSource()), ex); // Paper
Expand Down Expand Up @@ -2505,10 +2505,10 @@ index 0000000000000000000000000000000000000000..5e18616160014d70df2b539d7e65bb00
+}
diff --git a/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/ProviderLoadingStrategy.java b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/ProviderLoadingStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8d5ce5f137a960e353c6722e1f20f9b342d4ba5
index 0000000000000000000000000000000000000000..5207d356a5cbfbaa762944e31630f67a9e72aaf2
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/ProviderLoadingStrategy.java
@@ -0,0 +1,16 @@
@@ -0,0 +1,19 @@
+package io.papermc.paper.plugin.entrypoint.strategy;
+
+import io.papermc.paper.plugin.provider.PluginProvider;
Expand All @@ -2523,7 +2523,10 @@ index 0000000000000000000000000000000000000000..e8d5ce5f137a960e353c6722e1f20f9b
+ */
+public interface ProviderLoadingStrategy<P> {
+
+ List<P> loadProviders(List<PluginProvider<P>> providers);
+ List<Pair<P>> loadProviders(List<PluginProvider<P>> providers);
+
+ record Pair<P>(PluginProvider<P> provider, P provided) {
+ }
+}
diff --git a/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/TopographicGraphSorter.java b/src/main/java/io/papermc/paper/plugin/entrypoint/strategy/TopographicGraphSorter.java
new file mode 100644
Expand Down Expand Up @@ -2691,7 +2694,7 @@ index 0000000000000000000000000000000000000000..5fcce65009f715d46dd3013f1f92ec83
+}
diff --git a/src/main/java/io/papermc/paper/plugin/manager/MultiRuntimePluginProviderStorage.java b/src/main/java/io/papermc/paper/plugin/manager/MultiRuntimePluginProviderStorage.java
new file mode 100644
index 0000000000000000000000000000000000000000..a47c0c1dedf5f8cd7006b170639676429c17d74d
index 0000000000000000000000000000000000000000..b532e35505d5fffd4c525109f273012e2652f777
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/manager/MultiRuntimePluginProviderStorage.java
@@ -0,0 +1,49 @@
Expand Down Expand Up @@ -2729,8 +2732,8 @@ index 0000000000000000000000000000000000000000..a47c0c1dedf5f8cd7006b17063967642
+ }
+
+ @Override
+ public void processProvided(JavaPlugin provided) {
+ super.processProvided(provided);
+ public void processProvided(PluginProvider<JavaPlugin> provider, JavaPlugin provided) {
+ super.processProvided(provider, provided);
+ this.provided.add(provided);
+ }
+
Expand Down Expand Up @@ -3812,7 +3815,7 @@ index 0000000000000000000000000000000000000000..5d50d1d312388e979c0e1cd53a6bf597
+}
diff --git a/src/main/java/io/papermc/paper/plugin/manager/SingularRuntimePluginProviderStorage.java b/src/main/java/io/papermc/paper/plugin/manager/SingularRuntimePluginProviderStorage.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebc01cbffdc55ca9664897ff10ef14ad6c5ab726
index 0000000000000000000000000000000000000000..194f1439e322cb6b3433a72f80a8a4c7624b20d5
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/manager/SingularRuntimePluginProviderStorage.java
@@ -0,0 +1,80 @@
Expand Down Expand Up @@ -3882,8 +3885,8 @@ index 0000000000000000000000000000000000000000..ebc01cbffdc55ca9664897ff10ef14ad
+ }
+
+ @Override
+ public void processProvided(JavaPlugin provided) {
+ super.processProvided(provided);
+ public void processProvided(PluginProvider<JavaPlugin> provider, JavaPlugin provided) {
+ super.processProvided(provider, provided);
+ this.singleLoaded = provided;
+ }
+
Expand Down Expand Up @@ -5806,7 +5809,7 @@ index 0000000000000000000000000000000000000000..b049691292fb9d53ac598cb333fa408b
+}
diff --git a/src/main/java/io/papermc/paper/plugin/storage/SimpleProviderStorage.java b/src/main/java/io/papermc/paper/plugin/storage/SimpleProviderStorage.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac263f02a9a79fb3db24c4daa16c405f9b0f7459
index 0000000000000000000000000000000000000000..fa14e3dfb0439c2cfe23c375bc85ddf29c3e2668
--- /dev/null
+++ b/src/main/java/io/papermc/paper/plugin/storage/SimpleProviderStorage.java
@@ -0,0 +1,57 @@
Expand Down Expand Up @@ -5839,8 +5842,8 @@ index 0000000000000000000000000000000000000000..ac263f02a9a79fb3db24c4daa16c405f
+ this.filterLoadingProviders(providerList);
+
+ try {
+ for (T plugin : this.strategy.loadProviders(providerList)) {
+ this.processProvided(plugin);
+ for (ProviderLoadingStrategy.Pair<T> pair : this.strategy.loadProviders(providerList)) {
+ this.processProvided(pair.provider(), pair.provided());
+ }
+ } catch (PluginGraphCycleException exception) {
+ this.handleCycle(exception);
Expand All @@ -5852,7 +5855,7 @@ index 0000000000000000000000000000000000000000..ac263f02a9a79fb3db24c4daa16c405f
+ return this.providers;
+ }
+
+ public void processProvided(T provided) {}
+ public void processProvided(PluginProvider<T> provider, T provided) {}
+
+ // Mutable enter
+ protected void filterLoadingProviders(List<PluginProvider<T>> providers) {}
Expand Down
Loading

0 comments on commit 5d3a7ac

Please sign in to comment.