This commit is contained in:
gnembon committed 2023-10-11 18:20:30 +02:00
1 parent 4a881264b4
commit 1fe486a5e8
7 files changed
+17 -23

No files matched your search

+4 -4
View File
@@ -407,14 +407,14 @@ read_file('foo', 'shared_text') => ['one', 'two', 'three', '', 'four', '', '
### `run(expr)` ### `run(expr)`
Runs a vanilla command from the string result of the `expr` and returns a triple of success count, Runs a vanilla command from the string result of the `expr` and returns a triple of 0 (unused after success count removal),
intercepted list of output messages, and error message if the command resulted in a failure. intercepted list of output messages, and error message if the command resulted in a failure.
Successful commands return `null` as their error. Successful commands return `null` as their error.
<pre> <pre>
run('fill 1 1 1 10 10 10 air') -> [123, ["Successfully filled 123 blocks"], null] // 123 block were filled, this operation was successful 123 times out of a possible 1000 block volume run('fill 1 1 1 10 10 10 air') -> [0, ["Successfully filled 123 blocks"], null]
run('give @s stone 4') -> [1, ["Gave 4 [Stone] to gnembon"], null] // this operation was successful once run('give @s stone 4') -> [0, ["Gave 4 [Stone] to gnembon"], null]
run('seed') -> [-170661413, ["Seed: [4031384495743822299]"], null] run('seed') -> [0, ["Seed: [4031384495743822299]"], null]
run('sed') -> [0, [], "sed<--[HERE]"] // wrong command run('sed') -> [0, [], "sed<--[HERE]"] // wrong command
</pre> </pre>
+1 -1
View File
@@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check https://fabricmc.net/develop/ # check https://fabricmc.net/develop/
minecraft_version=23w40a minecraft_version=23w41a
loader_version=0.14.22 loader_version=0.14.22
jsr305_version=3.0.2 jsr305_version=3.0.2
fabric_version=0.89.3+1.20.2 fabric_version=0.89.3+1.20.2
@@ -15,8 +15,6 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(Commands.class) @Mixin(Commands.class)
public abstract class Commands_customCommandsMixin public abstract class Commands_customCommandsMixin
@@ -32,14 +30,14 @@ public abstract class Commands_customCommandsMixin
} }
@Inject(method = "performCommand", at = @At("HEAD")) @Inject(method = "performCommand", at = @At("HEAD"))
private void onExecuteBegin(ParseResults<CommandSourceStack> parseResults, String string, CallbackInfoReturnable<Integer> cir) private void onExecuteBegin(ParseResults<CommandSourceStack> parseResults, String string, CallbackInfo ci)
{ {
if (!CarpetSettings.fillUpdates) if (!CarpetSettings.fillUpdates)
CarpetSettings.impendingFillSkipUpdates.set(true); CarpetSettings.impendingFillSkipUpdates.set(true);
} }
@Inject(method = "performCommand", at = @At("RETURN")) @Inject(method = "performCommand", at = @At("RETURN"))
private void onExecuteEnd(ParseResults<CommandSourceStack> parseResults, String string, CallbackInfoReturnable<Integer> cir) private void onExecuteEnd(ParseResults<CommandSourceStack> parseResults, String string, CallbackInfo ci)
{ {
CarpetSettings.impendingFillSkipUpdates.set(false); CarpetSettings.impendingFillSkipUpdates.set(false);
} }
@@ -94,7 +94,6 @@ public class CarpetClient
CarpetSettings.LOG.info("Server Response:"); CarpetSettings.LOG.info("Server Response:");
CompoundTag tag = (CompoundTag) t; CompoundTag tag = (CompoundTag) t;
CarpetSettings.LOG.info(" - id: " + tag.getString("id")); CarpetSettings.LOG.info(" - id: " + tag.getString("id"));
CarpetSettings.LOG.info(" - code: " + tag.getInt("code"));
if (tag.contains("error")) if (tag.contains("error"))
{ {
CarpetSettings.LOG.warn(" - error: " + tag.getString("error")); CarpetSettings.LOG.warn(" - error: " + tag.getString("error"));
@@ -84,20 +84,18 @@ public class ServerNetworkHandler
String id = commandData.getString("id"); String id = commandData.getString("id");
List<Component> output = new ArrayList<>(); List<Component> output = new ArrayList<>();
Component[] error = {null}; Component[] error = {null};
int resultCode = -1;
if (player.getServer() == null) if (player.getServer() == null)
{ {
error[0] = Component.literal("No Server"); error[0] = Component.literal("No Server");
} }
else else
{ {
resultCode = player.getServer().getCommands().performPrefixedCommand( player.getServer().getCommands().performPrefixedCommand(
new SnoopyCommandSource(player, error, output), command new SnoopyCommandSource(player, error, output), command
); );
} }
CompoundTag result = new CompoundTag(); CompoundTag result = new CompoundTag();
result.putString("id", id); result.putString("id", id);
result.putInt("code", resultCode);
if (error[0] != null) if (error[0] != null)
{ {
result.putString("error", error[0].getContents().toString()); result.putString("error", error[0].getContents().toString());
@@ -690,12 +690,11 @@ public class Auxiliary
{ {
Component[] error = {null}; Component[] error = {null};
List<Component> output = new ArrayList<>(); List<Component> output = new ArrayList<>();
Value retval = new NumericValue(s.getServer().getCommands().performPrefixedCommand( s.getServer().getCommands().performPrefixedCommand(
new SnoopyCommandSource(s, error, output), new SnoopyCommandSource(s, error, output),
lv.get(0).getString()) lv.get(0).getString());
);
return ListValue.of( return ListValue.of(
retval, NumericValue.ZERO,
ListValue.wrap(output.stream().map(FormattedTextValue::new)), ListValue.wrap(output.stream().map(FormattedTextValue::new)),
FormattedTextValue.of(error[0]) FormattedTextValue.of(error[0])
); );
@@ -1,7 +1,7 @@
package carpet.script.utils; package carpet.script.utils;
import carpet.script.external.Vanilla; import carpet.script.external.Vanilla;
import com.mojang.brigadier.ResultConsumer; import net.minecraft.commands.CommandResultConsumer;
import net.minecraft.commands.CommandSigningContext; import net.minecraft.commands.CommandSigningContext;
import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.CommandSourceStack;
@@ -33,7 +33,7 @@ public class SnoopyCommandSource extends CommandSourceStack
private final MinecraftServer server; private final MinecraftServer server;
// skipping silent since snooper is never silent // skipping silent since snooper is never silent
private final Entity entity; private final Entity entity;
private final ResultConsumer<CommandSourceStack> resultConsumer; private final CommandResultConsumer<CommandSourceStack> resultConsumer;
private final EntityAnchorArgument.Anchor entityAnchor; private final EntityAnchorArgument.Anchor entityAnchor;
private final Vec2 rotation; private final Vec2 rotation;
// good stuff // good stuff
@@ -91,7 +91,7 @@ public class SnoopyCommandSource extends CommandSourceStack
this.taskChainer = TaskChainer.immediate(player.server); this.taskChainer = TaskChainer.immediate(player.server);
} }
private SnoopyCommandSource(CommandSource output, Vec3 pos, Vec2 rot, ServerLevel world, int level, String simpleName, Component name, MinecraftServer server, @Nullable Entity entity, ResultConsumer<CommandSourceStack> consumer, EntityAnchorArgument.Anchor entityAnchor, CommandSigningContext context, TaskChainer chainer, private SnoopyCommandSource(CommandSource output, Vec3 pos, Vec2 rot, ServerLevel world, int level, String simpleName, Component name, MinecraftServer server, @Nullable Entity entity, CommandResultConsumer<CommandSourceStack> consumer, EntityAnchorArgument.Anchor entityAnchor, CommandSigningContext context, TaskChainer chainer,
Component[] error, List<Component> chatOutput Component[] error, List<Component> chatOutput
) )
{ {
@@ -134,15 +134,15 @@ public class SnoopyCommandSource extends CommandSourceStack
} }
@Override @Override
public CommandSourceStack withCallback(ResultConsumer<CommandSourceStack> consumer) public CommandSourceStack withCallback(CommandResultConsumer<CommandSourceStack> consumer)
{ {
return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, consumer, entityAnchor, signingContext, taskChainer, error, chatOutput); return new SnoopyCommandSource(output, position, rotation, world, level, simpleName, name, server, entity, consumer, entityAnchor, signingContext, taskChainer, error, chatOutput);
} }
@Override @Override
public CommandSourceStack withCallback(ResultConsumer<CommandSourceStack> consumer, BinaryOperator<ResultConsumer<CommandSourceStack>> binaryOperator) public CommandSourceStack withCallback(CommandResultConsumer<CommandSourceStack> consumer, BinaryOperator<CommandResultConsumer<CommandSourceStack>> binaryOperator)
{ {
ResultConsumer<CommandSourceStack> resultConsumer = binaryOperator.apply(this.resultConsumer, consumer); CommandResultConsumer<CommandSourceStack> resultConsumer = binaryOperator.apply(this.resultConsumer, consumer);
return this.withCallback(resultConsumer); return this.withCallback(resultConsumer);
} }