From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Connor Linfoot 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 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 getPacks() { + Collection enabledPacks = repository.getSelectedPacks(); + return repository.getAvailablePacks().stream().map(loader -> new PaperDatapack(loader, enabledPacks.contains(loader))).collect(Collectors.toList()); + } + + @Override + public Collection 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 99ff052c1935b9eba5fc519ae18c335893595337..1b320ab17379da9b82320e63babb0f395d4b85a8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -305,6 +305,7 @@ public final class CraftServer implements Server { private final List playerView; public int reloadCount; public Set activeCompatibilities = Collections.emptySet(); + private final io.papermc.paper.datapack.PaperDatapackManager datapackManager; // Paper public static Exception excessiveVelEx; // Paper - Velocity warnings static { @@ -389,6 +390,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) { @@ -3006,5 +3008,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 }