From 71a65ec3227d2bb712d76fe40397f175998c1ecb Mon Sep 17 00:00:00 2001 From: modmuss50 <modmuss50@gmail.com> Date: Fri, 23 Dec 2022 13:09:37 +0000 Subject: [PATCH] Disable the gametest command on the server by default. (#2769) Adds the "fabric-api.gametest.command" system property to enable/disable. --- .../fabric/impl/gametest/FabricGameTestHelper.java | 12 ++++++++++++ .../fabric/mixin/gametest/ArgumentTypesMixin.java | 4 +++- .../fabric/mixin/gametest/CommandManagerMixin.java | 4 +++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/impl/gametest/FabricGameTestHelper.java b/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/impl/gametest/FabricGameTestHelper.java index 39d6c1db2..cd7b466bb 100644 --- a/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/impl/gametest/FabricGameTestHelper.java +++ b/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/impl/gametest/FabricGameTestHelper.java @@ -30,6 +30,7 @@ import org.slf4j.LoggerFactory; import net.minecraft.resource.ResourcePackManager; import net.minecraft.server.MinecraftServer; +import net.minecraft.server.command.TestCommand; import net.minecraft.test.GameTestBatch; import net.minecraft.test.TestContext; import net.minecraft.test.TestFailureLogger; @@ -40,11 +41,22 @@ import net.minecraft.test.TestUtil; import net.minecraft.util.math.BlockPos; import net.minecraft.world.level.storage.LevelStorage; +import net.fabricmc.api.EnvType; import net.fabricmc.fabric.api.gametest.v1.FabricGameTest; +import net.fabricmc.loader.api.FabricLoader; public final class FabricGameTestHelper { public static final boolean ENABLED = System.getProperty("fabric-api.gametest") != null; + /** + * When enabled the {@link TestCommand} and related arguments will be registered. + * + * <p>When {@link EnvType#CLIENT} the default value is true. + * + * <p>When {@link EnvType#SERVER} the default value is false. + */ + public static final boolean COMMAND_ENABLED = Boolean.parseBoolean(System.getProperty("fabric-api.gametest.command", FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT ? "true" : "false")); + private static final Logger LOGGER = LoggerFactory.getLogger(FabricGameTestHelper.class); private FabricGameTestHelper() { diff --git a/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/ArgumentTypesMixin.java b/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/ArgumentTypesMixin.java index 70d079837..d760aa5a6 100644 --- a/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/ArgumentTypesMixin.java +++ b/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/ArgumentTypesMixin.java @@ -31,6 +31,8 @@ import net.minecraft.command.argument.serialize.ArgumentSerializer; import net.minecraft.command.argument.serialize.ConstantArgumentSerializer; import net.minecraft.registry.Registry; +import net.fabricmc.fabric.impl.gametest.FabricGameTestHelper; + @Mixin(ArgumentTypes.class) public abstract class ArgumentTypesMixin { @Shadow @@ -41,7 +43,7 @@ public abstract class ArgumentTypesMixin { @Inject(method = "register(Lnet/minecraft/registry/Registry;)Lnet/minecraft/command/argument/serialize/ArgumentSerializer;", at = @At("RETURN")) private static void register(Registry<ArgumentSerializer<?, ?>> registry, CallbackInfoReturnable<ArgumentSerializer<?, ?>> ci) { // Registered by vanilla when isDevelopment is enabled. - if (!SharedConstants.isDevelopment) { + if (FabricGameTestHelper.COMMAND_ENABLED && !SharedConstants.isDevelopment) { register(registry, "test_argument", TestFunctionArgumentType.class, ConstantArgumentSerializer.of(TestFunctionArgumentType::testFunction)); register(registry, "test_class", TestClassArgumentType.class, ConstantArgumentSerializer.of(TestClassArgumentType::testClass)); } diff --git a/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/CommandManagerMixin.java b/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/CommandManagerMixin.java index 76b8d5510..d0a1263bb 100644 --- a/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/CommandManagerMixin.java +++ b/fabric-gametest-api-v1/src/main/java/net/fabricmc/fabric/mixin/gametest/CommandManagerMixin.java @@ -30,6 +30,8 @@ import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.command.TestCommand; +import net.fabricmc.fabric.impl.gametest.FabricGameTestHelper; + @Mixin(CommandManager.class) public abstract class CommandManagerMixin { @Shadow @@ -39,7 +41,7 @@ public abstract class CommandManagerMixin { @Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/command/WorldBorderCommand;register(Lcom/mojang/brigadier/CommandDispatcher;)V", shift = At.Shift.AFTER)) private void construct(CommandManager.RegistrationEnvironment environment, CommandRegistryAccess registryAccess, CallbackInfo info) { // Registered by vanilla when isDevelopment is enabled. - if (!SharedConstants.isDevelopment) { + if (FabricGameTestHelper.COMMAND_ENABLED && !SharedConstants.isDevelopment) { TestCommand.register(this.dispatcher); } }