diff --git a/Paper-MojangAPI/pom.xml b/Paper-MojangAPI/pom.xml
new file mode 100644
index 0000000000..55482a6a92
--- /dev/null
+++ b/Paper-MojangAPI/pom.xml
@@ -0,0 +1,204 @@
+
+
+ 4.0.0
+
+ com.destroystokyo.paper
+ paper-parent
+ dev-SNAPSHOT
+
+
+ com.destroystokyo.paper
+ paper-mojangapi
+ 1.15.2-R0.1-SNAPSHOT
+ jar
+
+ Paper-MojangAPI
+ https://github.com/PaperMC/Paper
+ API additions that utilize Mojang Specific API's
+
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+ spigotmc-public
+ https://hub.spigotmc.org/nexus/content/groups/public/
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+ minecraft-libraries
+ Minecraft Libraries
+ https://libraries.minecraft.net
+
+
+
+
+
+ spigotmc-public
+ https://hub.spigotmc.org/nexus/content/groups/public/
+
+
+
+
+
+ com.destroystokyo.paper
+ paper-api
+ ${project.version}
+ provided
+
+
+
+ com.mojang
+ brigadier
+ 1.0.17
+ provided
+
+
+
+ it.unimi.dsi
+ fastutil
+ 8.2.2
+ provided
+
+
+
+ org.jetbrains
+ annotations
+ 18.0.0
+ provided
+
+
+
+ junit
+ junit
+ 4.13
+ test
+
+
+ org.hamcrest
+ hamcrest-library
+ 1.3
+ test
+
+
+ org.ow2.asm
+ asm-tree
+ 7.3.1
+ test
+
+
+
+
+ clean install
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+
+
+ org.codehaus.plexus
+ plexus-compiler-eclipse
+ 2.8.5-spigotmc
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.4
+
+
+
+ org.bukkit
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.1
+
+
+ package
+
+ shade
+
+
+
+
+ ${project.build.directory}/dependency-reduced-pom.xml
+
+ true
+
+
+
+
+
+
+
+ development
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-checkstyle-plugin
+ 3.1.0
+
+
+ process-classes
+
+ check
+
+
+
+
+ checkstyle.xml
+ true
+
+
+
+ com.puppycrawl.tools
+ checkstyle
+ 8.29
+
+
+
+
+ org.codehaus.mojo
+ animal-sniffer-maven-plugin
+ 1.18
+
+
+ process-classes
+
+ check
+
+
+
+
+
+ org.codehaus.mojo.signature
+ java18
+ 1.0
+
+
+
+
+
+
+
+
diff --git a/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/brigadier/BukkitBrigadierCommand.java b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/brigadier/BukkitBrigadierCommand.java
new file mode 100644
index 0000000000..3848933b67
--- /dev/null
+++ b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/brigadier/BukkitBrigadierCommand.java
@@ -0,0 +1,9 @@
+package com.destroystokyo.paper.brigadier;
+
+import com.mojang.brigadier.Command;
+import com.mojang.brigadier.suggestion.SuggestionProvider;
+
+import java.util.function.Predicate;
+
+public interface BukkitBrigadierCommand extends Command, Predicate, SuggestionProvider {
+}
diff --git a/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/brigadier/BukkitBrigadierCommandSource.java b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/brigadier/BukkitBrigadierCommandSource.java
new file mode 100644
index 0000000000..7a0e81658c
--- /dev/null
+++ b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/brigadier/BukkitBrigadierCommandSource.java
@@ -0,0 +1,21 @@
+package com.destroystokyo.paper.brigadier;
+
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Entity;
+import org.jetbrains.annotations.Nullable;
+
+public interface BukkitBrigadierCommandSource {
+
+ @Nullable
+ Entity getBukkitEntity();
+
+ @Nullable
+ World getBukkitWorld();
+
+ @Nullable
+ Location getBukkitLocation();
+
+ CommandSender getBukkitSender();
+}
diff --git a/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/event/brigadier/AsyncPlayerSendCommandsEvent.java b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/event/brigadier/AsyncPlayerSendCommandsEvent.java
new file mode 100644
index 0000000000..a275a85ad2
--- /dev/null
+++ b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/event/brigadier/AsyncPlayerSendCommandsEvent.java
@@ -0,0 +1,65 @@
+package com.destroystokyo.paper.event.brigadier;
+
+import com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource;
+import com.mojang.brigadier.tree.RootCommandNode;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Fired any time a Brigadier RootCommandNode is generated for a player to inform the client of commands.
+ * You may manipulate this CommandNode to change what the client sees.
+ *
+ * This event may fire on login, world change, and permission rebuilds, by plugin request, and potentially future means.
+ *
+ * This event will fire before {@link org.bukkit.event.player.PlayerCommandSendEvent}, so no filtering has been done by
+ * other plugins yet.
+ *
+ * WARNING: This event will potentially (and most likely) fire twice! Once for Async, and once again for Sync.
+ * It is important that you check event.isAsynchronous() and event.hasFiredAsync() to ensure you only act once.
+ * If for some reason we are unable to send this asynchronously in the future, only the sync method will fire.
+ *
+ * Your logic should look like this:
+ * if (event.isAsynchronous() || !event.hasFiredAsync()) { do stuff }
+ *
+ * If your logic is not safe to run asynchronously, only react to the synchronous version.
+ * @deprecated Draft API - Subject to change until confirmed solves desired use cases
+ */
+public class AsyncPlayerSendCommandsEvent extends PlayerEvent {
+
+ private static final HandlerList handlers = new HandlerList();
+ private final RootCommandNode node;
+ private final boolean hasFiredAsync;
+
+ public AsyncPlayerSendCommandsEvent(Player player, RootCommandNode node, boolean hasFiredAsync) {
+ super(player, !Bukkit.isPrimaryThread());
+ this.node = node;
+ this.hasFiredAsync = hasFiredAsync;
+ }
+
+ /**
+ * @return The full Root Command Node being sent to the client, which is mutable.
+ */
+ public RootCommandNode getCommandNode() {
+ return node;
+ }
+
+ /**
+ * @return If this event has already fired asynchronously.
+ */
+ public boolean hasFiredAsync() {
+ return hasFiredAsync;
+ }
+
+ @NotNull
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}
diff --git a/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/event/brigadier/CommandRegisteredEvent.java b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/event/brigadier/CommandRegisteredEvent.java
new file mode 100644
index 0000000000..92924622b5
--- /dev/null
+++ b/Paper-MojangAPI/src/main/java/com/destroystokyo/paper/event/brigadier/CommandRegisteredEvent.java
@@ -0,0 +1,122 @@
+package com.destroystokyo.paper.event.brigadier;
+
+import com.destroystokyo.paper.brigadier.BukkitBrigadierCommand;
+import com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource;
+import com.mojang.brigadier.tree.ArgumentCommandNode;
+import com.mojang.brigadier.tree.LiteralCommandNode;
+import com.mojang.brigadier.tree.RootCommandNode;
+import org.bukkit.command.Command;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.server.ServerEvent;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Fired anytime the server synchronizes Bukkit CommandMap to Brigadier.
+ *
+ * Allows a plugin to control the Literal and Argument nodes for this command to be
+ * sent to the client.
+ * This is done at Plugin Enable time after commands have been registered, but some
+ * plugins may use reflection to retrigger this rebuild during runtime.
+ *
+ * @deprecated Draft API - Subject to change until confirmed solves desired use cases
+ */
+public class CommandRegisteredEvent extends ServerEvent implements Cancellable {
+
+ private static final HandlerList handlers = new HandlerList();
+ private final String commandLabel;
+ private final Command command;
+ private final BukkitBrigadierCommand brigadierCommand;
+ private final RootCommandNode root;
+ private final ArgumentCommandNode defaultArgs;
+ private LiteralCommandNode literal;
+ private boolean cancelled = false;
+
+ public CommandRegisteredEvent(String commandLabel, BukkitBrigadierCommand brigadierCommand, Command command, RootCommandNode root, LiteralCommandNode literal, ArgumentCommandNode defaultArgs) {
+ this.commandLabel = commandLabel;
+ this.brigadierCommand = brigadierCommand;
+ this.command = command;
+ this.root = root;
+ this.literal = literal;
+ this.defaultArgs = defaultArgs;
+ }
+
+ /**
+ * @return The command name being registered
+ */
+ public String getCommandLabel() {
+ return commandLabel;
+ }
+
+ /**
+ * @return The Bukkit API Brigadier Wrapped Command Object to handle executions and suggestions
+ */
+ public BukkitBrigadierCommand getBrigadierCommand() {
+ return brigadierCommand;
+ }
+
+ public Command getCommand() {
+ return command;
+ }
+
+ /**
+ * @return Gets the root command node being used to register a command to.
+ */
+ public RootCommandNode getRoot() {
+ return root;
+ }
+
+ /**
+ * Returns the Bukkit API's default handling of Arguments, if you wish to reuse it.
+ * @return
+ */
+ public ArgumentCommandNode getDefaultArgs() {
+ return defaultArgs;
+ }
+
+ /**
+ * Returns the Bukkit API's default literal for this command, including the {@link #getDefaultArgs()} as a child already.
+ * @return
+ */
+ public LiteralCommandNode getLiteral() {
+ return literal;
+ }
+
+ /**
+ * Changes the literal used to register this command. The previous literable is mutable, so this is primarily if
+ * you want to completely replace the object.
+ * @param literal
+ */
+ public void setLiteral(LiteralCommandNode literal) {
+ this.literal = literal;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean isCancelled() {
+ return this.cancelled;
+ }
+
+ /**
+ * Cancels registering this command to Brigadier, but will remain in Bukkit Command Map. Can be used to hide a
+ * command from all players.
+ *
+ * {@inheritDoc}
+ */
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+
+ @NotNull
+ public HandlerList getHandlers() {
+ return handlers;
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
+ return handlers;
+ }
+}
diff --git a/Spigot-API-Patches/POM-changes.patch b/Spigot-API-Patches/POM-changes.patch
index 95f44384ac..1b16db1469 100644
--- a/Spigot-API-Patches/POM-changes.patch
+++ b/Spigot-API-Patches/POM-changes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] POM changes
diff --git a/pom.xml b/pom.xml
-index 8964b9e33..ce09baeab 100644
+index 8964b9e3..ce09baea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
@@ -110,4 +110,17 @@ index 8964b9e33..ce09baeab 100644
true
+diff --git a/src/main/java/org/bukkit/event/player/PlayerEvent.java b/src/main/java/org/bukkit/event/player/PlayerEvent.java
+index 793b661b..b7c8f2c3 100644
+--- a/src/main/java/org/bukkit/event/player/PlayerEvent.java
++++ b/src/main/java/org/bukkit/event/player/PlayerEvent.java
+@@ -0,0 +0,0 @@ public abstract class PlayerEvent extends Event {
+ player = who;
+ }
+
+- PlayerEvent(@NotNull final Player who, boolean async) {
++ public PlayerEvent(@NotNull final Player who, boolean async) { // Paper - wtf?
+ super(async);
+ player = who;
+
--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Handle-plugin-prefixes-using-Log4J-configuration.patch b/Spigot-Server-Patches/Handle-plugin-prefixes-using-Log4J-configuration.patch
index 238b6b3f33..2c2ddb850b 100644
--- a/Spigot-Server-Patches/Handle-plugin-prefixes-using-Log4J-configuration.patch
+++ b/Spigot-Server-Patches/Handle-plugin-prefixes-using-Log4J-configuration.patch
@@ -15,7 +15,7 @@ This may cause additional prefixes to be disabled for plugins bypassing
the plugin logger.
diff --git a/pom.xml b/pom.xml
-index 14c4ec25..5a230592 100644
+index 24cdeb6ff4..ab8c61ab53 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
@@ -28,7 +28,7 @@ index 14c4ec25..5a230592 100644
org.apache.logging.log4j
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
-index fdca3434..6d77bbc5 100644
+index fdca34346a..6d77bbc5aa 100644
--- a/src/main/java/org/spigotmc/SpigotConfig.java
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
@@ -0,0 +0,0 @@ public class SpigotConfig
@@ -41,7 +41,7 @@ index fdca3434..6d77bbc5 100644
public static int playerShuffle;
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
-index 620b9490..a8bdaaea 100644
+index 620b9490e5..a8bdaaeaa1 100644
--- a/src/main/resources/log4j2.xml
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +0,0 @@
diff --git a/Spigot-Server-Patches/Implement-Brigadier-Mojang-API.patch b/Spigot-Server-Patches/Implement-Brigadier-Mojang-API.patch
new file mode 100644
index 0000000000..13056f78d9
--- /dev/null
+++ b/Spigot-Server-Patches/Implement-Brigadier-Mojang-API.patch
@@ -0,0 +1,108 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar
+Date: Sun, 19 Apr 2020 18:15:29 -0400
+Subject: [PATCH] Implement Brigadier Mojang API
+
+Adds AsyncPlayerSendCommandsEvent
+ - Allows modifying on a per command basis what command data they see.
+
+Adds CommandRegisteredEvent
+ - Allows manipulating the CommandNode to add more children/metadata for the client
+
+diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java
+index 2414b0a552..2d512aa4f9 100644
+--- a/src/main/java/net/minecraft/server/CommandDispatcher.java
++++ b/src/main/java/net/minecraft/server/CommandDispatcher.java
+@@ -0,0 +0,0 @@ public class CommandDispatcher {
+ bukkit.add(node.getName());
+ }
+ // Paper start - Async command map building
++ new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(entityplayer.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper
+ MinecraftServer.getServer().execute(() -> {
+ runSync(entityplayer, bukkit, rootcommandnode);
+ });
+@@ -0,0 +0,0 @@ public class CommandDispatcher {
+
+ private void runSync(EntityPlayer entityplayer, Collection bukkit, RootCommandNode rootcommandnode) {
+ // Paper end - Async command map building
++ new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(entityplayer.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper
+ PlayerCommandSendEvent event = new PlayerCommandSendEvent(entityplayer.getBukkitEntity(), new LinkedHashSet<>(bukkit));
+ event.getPlayer().getServer().getPluginManager().callEvent(event);
+
+diff --git a/src/main/java/net/minecraft/server/CommandListenerWrapper.java b/src/main/java/net/minecraft/server/CommandListenerWrapper.java
+index 0b23a0548d..c988c929f1 100644
+--- a/src/main/java/net/minecraft/server/CommandListenerWrapper.java
++++ b/src/main/java/net/minecraft/server/CommandListenerWrapper.java
+@@ -0,0 +0,0 @@ import java.util.function.BinaryOperator;
+ import java.util.stream.Stream;
+ import javax.annotation.Nullable;
+
+-public class CommandListenerWrapper implements ICompletionProvider {
++public class CommandListenerWrapper implements ICompletionProvider, com.destroystokyo.paper.brigadier.BukkitBrigadierCommandSource { // Paper
+
+ public static final SimpleCommandExceptionType a = new SimpleCommandExceptionType(new ChatMessage("permissions.requires.player", new Object[0]));
+ public static final SimpleCommandExceptionType b = new SimpleCommandExceptionType(new ChatMessage("permissions.requires.entity", new Object[0]));
+@@ -0,0 +0,0 @@ public class CommandListenerWrapper implements ICompletionProvider {
+ return this.g;
+ }
+
++ // Paper start
++ @Override
++ public org.bukkit.entity.Entity getBukkitEntity() {
++ return getEntity() != null ? getEntity().getBukkitEntity() : null;
++ }
++
++ @Override
++ public org.bukkit.World getBukkitWorld() {
++ return getWorld() != null ? getWorld().getWorld() : null;
++ }
++
++ @Override
++ public org.bukkit.Location getBukkitLocation() {
++ Vec3D pos = getPosition();
++ org.bukkit.World world = getBukkitWorld();
++ return world != null && pos != null ? new org.bukkit.Location(world, pos.x, pos.y, pos.z) : null;
++ }
++ // Paper end
++
+ @Override
+ public boolean hasPermission(int i) {
+ // CraftBukkit start
+diff --git a/src/main/java/org/bukkit/craftbukkit/command/BukkitCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/BukkitCommandWrapper.java
+index 5f33c9e52a..e16ecdea7d 100644
+--- a/src/main/java/org/bukkit/craftbukkit/command/BukkitCommandWrapper.java
++++ b/src/main/java/org/bukkit/craftbukkit/command/BukkitCommandWrapper.java
+@@ -0,0 +0,0 @@ import net.minecraft.server.CommandListenerWrapper;
+ import org.bukkit.command.Command;
+ import org.bukkit.craftbukkit.CraftServer;
+
+-public class BukkitCommandWrapper implements com.mojang.brigadier.Command, Predicate, SuggestionProvider {
++public class BukkitCommandWrapper implements com.mojang.brigadier.Command, Predicate, SuggestionProvider, com.destroystokyo.paper.brigadier.BukkitBrigadierCommand { // Paper
+
+ private final CraftServer server;
+ private final Command command;
+@@ -0,0 +0,0 @@ public class BukkitCommandWrapper implements com.mojang.brigadier.Command register(CommandDispatcher dispatcher, String label) {
+- return dispatcher.register(
+- LiteralArgumentBuilder.literal(label).requires(this).executes(this)
+- .then(RequiredArgumentBuilder.argument("args", StringArgumentType.greedyString()).suggests(this).executes(this))
+- );
++ // Paper start - Expose Brigadier to Paper-MojangAPI
++ com.mojang.brigadier.tree.RootCommandNode root = dispatcher.getRoot();
++ LiteralCommandNode literal = LiteralArgumentBuilder.literal(label).requires(this).executes(this).build();
++ com.mojang.brigadier.tree.ArgumentCommandNode defaultArgs = RequiredArgumentBuilder.argument("args", StringArgumentType.greedyString()).suggests(this).executes(this).build();
++ literal.addChild(defaultArgs);
++ com.destroystokyo.paper.event.brigadier.CommandRegisteredEvent event = new com.destroystokyo.paper.event.brigadier.CommandRegisteredEvent<>(label, this, this.command, root, literal, defaultArgs);
++ if (!event.callEvent()) {
++ return null;
++ }
++ literal = event.getLiteral();
++ root.addChild(literal);
++ return literal;
++ // Paper end
+ }
+
+ @Override
+--
\ No newline at end of file
diff --git a/Spigot-Server-Patches/Include-Log4J2-SLF4J-implementation.patch b/Spigot-Server-Patches/Include-Log4J2-SLF4J-implementation.patch
index 23e4410365..abf6fa498f 100644
--- a/Spigot-Server-Patches/Include-Log4J2-SLF4J-implementation.patch
+++ b/Spigot-Server-Patches/Include-Log4J2-SLF4J-implementation.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Include Log4J2 SLF4J implementation
diff --git a/pom.xml b/pom.xml
-index 5a230592..6f2fe9c2 100644
+index ab8c61ab53..76ce7f4486 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
diff --git a/Spigot-Server-Patches/POM-Changes.patch b/Spigot-Server-Patches/POM-Changes.patch
index f6989f69f0..fb3f9ee5be 100644
--- a/Spigot-Server-Patches/POM-Changes.patch
+++ b/Spigot-Server-Patches/POM-Changes.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] POM Changes
diff --git a/pom.xml b/pom.xml
-index def28b3bec..3dc6c2a3f5 100644
+index def28b3bec..23f33d0477 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
@@ -46,6 +46,12 @@ index def28b3bec..3dc6c2a3f5 100644
- spigot-api
+ com.destroystokyo.paper
+ paper-api
++ ${project.version}
++ compile
++
++
++ com.destroystokyo.paper
++ paper-mojangapi
${project.version}
compile
diff --git a/Spigot-Server-Patches/Use-Log4j-IOStreams-to-redirect-System.out-err-to-lo.patch b/Spigot-Server-Patches/Use-Log4j-IOStreams-to-redirect-System.out-err-to-lo.patch
index 687158befa..ac7659ec19 100644
--- a/Spigot-Server-Patches/Use-Log4j-IOStreams-to-redirect-System.out-err-to-lo.patch
+++ b/Spigot-Server-Patches/Use-Log4j-IOStreams-to-redirect-System.out-err-to-lo.patch
@@ -12,7 +12,7 @@ results in a separate line, even though it should not result in
a line break. Log4j's implementation handles it correctly.
diff --git a/pom.xml b/pom.xml
-index b1f00873..14c4ec25 100644
+index dea7bc2619..24cdeb6ff4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
@@ -28,7 +28,7 @@ index b1f00873..14c4ec25 100644
org.ow2.asm
asm
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
-index d34f772f..ec257ba3 100644
+index d34f772fae..ec257ba31f 100644
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
@@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
diff --git a/Spigot-Server-Patches/Use-TerminalConsoleAppender-for-console-improvements.patch b/Spigot-Server-Patches/Use-TerminalConsoleAppender-for-console-improvements.patch
index d697247169..fb661cfa73 100644
--- a/Spigot-Server-Patches/Use-TerminalConsoleAppender-for-console-improvements.patch
+++ b/Spigot-Server-Patches/Use-TerminalConsoleAppender-for-console-improvements.patch
@@ -19,7 +19,7 @@ Other changes:
configuration
diff --git a/pom.xml b/pom.xml
-index 3dc6c2a3f5..b1f008738b 100644
+index 23f33d0477..dea7bc2619 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
diff --git a/Spigot-Server-Patches/Use-asynchronous-Log4j-2-loggers.patch b/Spigot-Server-Patches/Use-asynchronous-Log4j-2-loggers.patch
index c81e90a637..fb1c22d60b 100644
--- a/Spigot-Server-Patches/Use-asynchronous-Log4j-2-loggers.patch
+++ b/Spigot-Server-Patches/Use-asynchronous-Log4j-2-loggers.patch
@@ -5,7 +5,7 @@ Subject: [PATCH] Use asynchronous Log4j 2 loggers
diff --git a/pom.xml b/pom.xml
-index 6f2fe9c2..55679af9 100644
+index 76ce7f4486..28ff064c19 100644
--- a/pom.xml
+++ b/pom.xml
@@ -0,0 +0,0 @@
@@ -24,7 +24,7 @@ index 6f2fe9c2..55679af9 100644
asm
diff --git a/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java b/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java
new file mode 100644
-index 00000000..db652a1f
+index 0000000000..db652a1f7a
--- /dev/null
+++ b/src/main/java/com/destroystokyo/paper/log/LogFullPolicy.java
@@ -0,0 +0,0 @@
@@ -46,7 +46,7 @@ index 00000000..db652a1f
+ }
+}
diff --git a/src/main/resources/log4j2.component.properties b/src/main/resources/log4j2.component.properties
-index 0694b214..30efeb5f 100644
+index 0694b21465..30efeb5faf 100644
--- a/src/main/resources/log4j2.component.properties
+++ b/src/main/resources/log4j2.component.properties
@@ -1 +1,3 @@
diff --git a/pom.xml b/pom.xml
index 3541b9580b..4ddd1eb648 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,8 +14,9 @@
https://github.com/PaperMC/Paper
- Paper-Server
Paper-API
+ Paper-MojangAPI
+ Paper-Server