diff --git a/src/main/java/carpet/commands/ScriptCommand.java b/src/main/java/carpet/commands/ScriptCommand.java index 921c3a11..9e779d9d 100644 --- a/src/main/java/carpet/commands/ScriptCommand.java +++ b/src/main/java/carpet/commands/ScriptCommand.java @@ -71,7 +71,8 @@ public class ScriptCommand public static void register(CommandDispatcher dispatcher) { LiteralArgumentBuilder b = literal("globals"). - executes(ScriptCommand::listGlobals); + executes(context -> listGlobals(context, false)). + then(literal("all").executes(context -> listGlobals(context, true))); LiteralArgumentBuilder o = literal("stop"). executes( (cc) -> { CarpetServer.scriptServer.stopAll = true; return 1;}); LiteralArgumentBuilder u = literal("resume"). @@ -308,13 +309,13 @@ public class ScriptCommand } return 1; } - private static int listGlobals(CommandContext context) + private static int listGlobals(CommandContext context, boolean all) { ScriptHost host = getHost(context); ServerCommandSource source = context.getSource(); Messenger.m(source, "lb Stored functions"+((host == CarpetServer.scriptServer.globalHost)?":":" in "+host.getName()+":")); - for (String fname : host.getAvailableFunctions()) + for (String fname : host.getAvailableFunctions(all)) { Expression expr = host.getExpressionForFunction(fname); Tokenizer.Token tok = host.getTokenForFunction(fname); diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index 370c2fa8..a5753701 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -978,17 +978,20 @@ public class Expression implements Cloneable addLazyBinaryOperatorWithDelegation("->", precedence.get("def->"), false, (c, type, e, t, lv1, lv2) -> { Value v1 = lv1.evalValue(c, Context.SIGNATURE); + String result; if (v1 instanceof FunctionSignatureValue) { FunctionSignatureValue sign = (FunctionSignatureValue) v1; addContextFunction(c, sign.getName(), e, t, sign.getArgs(), sign.getGlobals(), lv2); + result = sign.getName(); } else { v1.assertAssignable(); c.setVariable(v1.getVariable(), lv2); + result = v1.getVariable(); } - return (cc, tt) -> new StringValue("OK"); + return (cc, tt) -> new StringValue(result); }); addFunction("exit", (lv) -> { throw new ExitStatement(lv.size()==0?Value.NULL:lv.get(0)); }); diff --git a/src/main/java/carpet/script/ScriptHost.java b/src/main/java/carpet/script/ScriptHost.java index f8f0b4be..7b8a736c 100644 --- a/src/main/java/carpet/script/ScriptHost.java +++ b/src/main/java/carpet/script/ScriptHost.java @@ -108,9 +108,9 @@ public class ScriptHost { return globalFunctions.keySet().stream().filter((str) -> !str.startsWith("_")).collect(Collectors.toList()); } - public List getAvailableFunctions() + public List getAvailableFunctions(boolean all) { - return globalFunctions.keySet().stream().filter((str) -> !str.startsWith("__")).collect(Collectors.toList()); + return globalFunctions.keySet().stream().filter((str) -> all || !str.startsWith("__")).collect(Collectors.toList()); } public String call(ServerCommandSource source, String call, List coords, String arg)