From 5644fa286ee71101e90f43f2b252bc2164b2349d Mon Sep 17 00:00:00 2001
From: modmuss50 <modmuss50@gmail.com>
Date: Sat, 2 May 2020 21:19:24 +0100
Subject: [PATCH] Fix commands on servers. (#604)

* Fix commands on servers.

Based off the same fix I made a year or two ago...

* Fix
---
 build.gradle                                  |  2 +-
 fabric-command-api-v1/build.gradle            |  2 +-
 .../mixin/command/MixinCommandManager.java    |  5 +-
 .../MixinMinecraftDedicatedServer.java        | 51 +++++++++++++++++++
 .../fabric-command-api-v1.mixins.json         |  3 +-
 5 files changed, 59 insertions(+), 4 deletions(-)
 create mode 100644 fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinMinecraftDedicatedServer.java

diff --git a/build.gradle b/build.gradle
index e4020d119..415b91741 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,7 +12,7 @@ plugins {
 def ENV = System.getenv()
 
 class Globals {
-	static def baseVersion = "0.10.1"
+	static def baseVersion = "0.10.2"
 	static def mcVersion = "20w18a"
 	static def yarnVersion = "+build.1"
 }
diff --git a/fabric-command-api-v1/build.gradle b/fabric-command-api-v1/build.gradle
index 159eae42d..10214b97b 100644
--- a/fabric-command-api-v1/build.gradle
+++ b/fabric-command-api-v1/build.gradle
@@ -1,5 +1,5 @@
 archivesBaseName = "fabric-command-api-v1"
-version = getSubprojectVersion(project, "1.0.0")
+version = getSubprojectVersion(project, "1.0.1")
 
 dependencies {
 	compile project(path: ':fabric-api-base', configuration: 'dev')
diff --git a/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinCommandManager.java b/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinCommandManager.java
index 06703e465..737f2f6d4 100644
--- a/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinCommandManager.java
+++ b/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinCommandManager.java
@@ -34,7 +34,10 @@ public abstract class MixinCommandManager {
 	 */
 	@Redirect(at = @At(value = "INVOKE", target = "Lcom/mojang/brigadier/CommandDispatcher;findAmbiguities(Lcom/mojang/brigadier/AmbiguityConsumer;)V"), method = "<init>")
 	private void fabric_addCommands(CommandDispatcher<ServerCommandSource> dispatcher, AmbiguityConsumer<ServerCommandSource> ambiguityConsumer, boolean isDedicated) {
-		CommandRegistrationCallback.EVENT.invoker().register(dispatcher, isDedicated);
+		if (!isDedicated) {
+			CommandRegistrationCallback.EVENT.invoker().register(dispatcher, isDedicated);
+		}
+
 		// Now mimic vanilla logic by calling findAmbiguities.
 		dispatcher.findAmbiguities(ambiguityConsumer);
 	}
diff --git a/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinMinecraftDedicatedServer.java b/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinMinecraftDedicatedServer.java
new file mode 100644
index 000000000..4019dea89
--- /dev/null
+++ b/fabric-command-api-v1/src/main/java/net/fabricmc/fabric/mixin/command/MixinMinecraftDedicatedServer.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2016, 2017, 2018, 2019 FabricMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.fabricmc.fabric.mixin.command;
+
+import java.io.File;
+import java.net.Proxy;
+
+import com.mojang.authlib.GameProfileRepository;
+import com.mojang.authlib.minecraft.MinecraftSessionService;
+import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService;
+import com.mojang.datafixers.DataFixer;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.WorldGenerationProgressListenerFactory;
+import net.minecraft.server.command.CommandManager;
+import net.minecraft.server.dedicated.MinecraftDedicatedServer;
+import net.minecraft.util.UserCache;
+
+import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
+
+@Mixin(MinecraftDedicatedServer.class)
+public abstract class MixinMinecraftDedicatedServer extends MinecraftServer {
+	public MixinMinecraftDedicatedServer(File gameDir, Proxy proxy, DataFixer dataFixer, CommandManager commandManager, YggdrasilAuthenticationService authService, MinecraftSessionService sessionService, GameProfileRepository gameProfileRepository, UserCache userCache, WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, String levelName) {
+		super(gameDir, proxy, dataFixer, commandManager, authService, sessionService, gameProfileRepository, userCache, worldGenerationProgressListenerFactory, levelName);
+	}
+
+	@Inject(method = "setupServer", at = @At("HEAD"))
+	private void setupServer(CallbackInfoReturnable<Boolean> info) {
+		CommandRegistrationCallback.EVENT.invoker().register(getCommandManager().getDispatcher(), true);
+
+		//Possibly call findAmbiguities here
+	}
+}
diff --git a/fabric-command-api-v1/src/main/resources/fabric-command-api-v1.mixins.json b/fabric-command-api-v1/src/main/resources/fabric-command-api-v1.mixins.json
index ff661a93b..280db679b 100644
--- a/fabric-command-api-v1/src/main/resources/fabric-command-api-v1.mixins.json
+++ b/fabric-command-api-v1/src/main/resources/fabric-command-api-v1.mixins.json
@@ -3,7 +3,8 @@
   "package": "net.fabricmc.fabric.mixin.command",
   "compatibilityLevel": "JAVA_8",
   "mixins": [
-    "MixinCommandManager"
+    "MixinCommandManager",
+    "MixinMinecraftDedicatedServer"
   ],
   "client": [
   ],