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": [ ],