aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0541-Add-basic-Datapack-API.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0541-Add-basic-Datapack-API.patch')
-rw-r--r--patches/server/0541-Add-basic-Datapack-API.patch125
1 files changed, 125 insertions, 0 deletions
diff --git a/patches/server/0541-Add-basic-Datapack-API.patch b/patches/server/0541-Add-basic-Datapack-API.patch
new file mode 100644
index 0000000000..5fe4cec9d3
--- /dev/null
+++ b/patches/server/0541-Add-basic-Datapack-API.patch
@@ -0,0 +1,125 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Connor Linfoot <[email protected]>
+Date: Sun, 16 May 2021 15:07:34 +0100
+Subject: [PATCH] Add basic Datapack API
+
+
+diff --git a/src/main/java/io/papermc/paper/datapack/PaperDatapack.java b/src/main/java/io/papermc/paper/datapack/PaperDatapack.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..9b7dd8a0fba4547f5268b3f99e21ddbe6b5bf566
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/datapack/PaperDatapack.java
+@@ -0,0 +1,50 @@
++package io.papermc.paper.datapack;
++
++import io.papermc.paper.event.server.ServerResourcesReloadedEvent;
++import net.minecraft.server.MinecraftServer;
++import net.minecraft.server.packs.repository.Pack;
++import java.util.List;
++import java.util.stream.Collectors;
++
++public class PaperDatapack implements Datapack {
++ private final String name;
++ private final Compatibility compatibility;
++ private final boolean enabled;
++
++ PaperDatapack(Pack loader, boolean enabled) {
++ this.name = loader.getId();
++ this.compatibility = Compatibility.valueOf(loader.getCompatibility().name());
++ this.enabled = enabled;
++ }
++
++ @Override
++ public String getName() {
++ return name;
++ }
++
++ @Override
++ public Compatibility getCompatibility() {
++ return compatibility;
++ }
++
++ @Override
++ public boolean isEnabled() {
++ return enabled;
++ }
++
++ @Override
++ public void setEnabled(boolean enabled) {
++ if (enabled == this.enabled) {
++ return;
++ }
++
++ MinecraftServer server = MinecraftServer.getServer();
++ List<String> enabledKeys = server.getPackRepository().getSelectedPacks().stream().map(Pack::getId).collect(Collectors.toList());
++ if (enabled) {
++ enabledKeys.add(this.name);
++ } else {
++ enabledKeys.remove(this.name);
++ }
++ server.reloadResources(enabledKeys, ServerResourcesReloadedEvent.Cause.PLUGIN);
++ }
++}
+diff --git a/src/main/java/io/papermc/paper/datapack/PaperDatapackManager.java b/src/main/java/io/papermc/paper/datapack/PaperDatapackManager.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..cf4374493c11057451a62a655514415cf6b298e0
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/datapack/PaperDatapackManager.java
+@@ -0,0 +1,25 @@
++package io.papermc.paper.datapack;
++
++import java.util.Collection;
++import java.util.stream.Collectors;
++import net.minecraft.server.packs.repository.Pack;
++import net.minecraft.server.packs.repository.PackRepository;
++
++public class PaperDatapackManager implements DatapackManager {
++ private final PackRepository repository;
++
++ public PaperDatapackManager(PackRepository repository) {
++ this.repository = repository;
++ }
++
++ @Override
++ public Collection<Datapack> getPacks() {
++ Collection<Pack> enabledPacks = repository.getSelectedPacks();
++ return repository.getAvailablePacks().stream().map(loader -> new PaperDatapack(loader, enabledPacks.contains(loader))).collect(Collectors.toList());
++ }
++
++ @Override
++ public Collection<Datapack> getEnabledPacks() {
++ return repository.getSelectedPacks().stream().map(loader -> new PaperDatapack(loader, true)).collect(Collectors.toList());
++ }
++}
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+index 1f6218e580a2a0138d128940a709147c20354b39..c4e63ba96a54fb9e1353510f77d848bed3656405 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -301,6 +301,7 @@ public final class CraftServer implements Server {
+ public boolean ignoreVanillaPermissions = false;
+ private final List<CraftPlayer> playerView;
+ public int reloadCount;
++ private final io.papermc.paper.datapack.PaperDatapackManager datapackManager; // Paper
+ public static Exception excessiveVelEx; // Paper - Velocity warnings
+
+ static {
+@@ -383,6 +384,7 @@ public final class CraftServer implements Server {
+ if (this.configuration.getBoolean("settings.use-map-color-cache")) {
+ MapPalette.setMapColorCache(new CraftMapColorCache(this.logger));
+ }
++ datapackManager = new io.papermc.paper.datapack.PaperDatapackManager(console.getPackRepository()); // Paper
+ }
+
+ public boolean getCommandBlockOverride(String command) {
+@@ -2971,5 +2973,11 @@ public final class CraftServer implements Server {
+ public com.destroystokyo.paper.entity.ai.MobGoals getMobGoals() {
+ return mobGoals;
+ }
++
++ @Override
++ public io.papermc.paper.datapack.PaperDatapackManager getDatapackManager() {
++ return datapackManager;
++ }
++
+ // Paper end
+ }