From 5bb813be769ab9b51ea192c75574e8cfcac82af2 Mon Sep 17 00:00:00 2001 From: gnembon Date: Sat, 29 Jun 2019 20:39:41 -0300 Subject: [PATCH] cleanup --- .../java/carpet/commands/ScriptCommand.java | 22 +++++++++---------- .../java/carpet/script/CarpetExpression.java | 19 ++++++++++------ src/main/java/carpet/script/Expression.java | 21 +++++++++--------- .../carpet/script/ExpressionInspector.java | 9 ++++++-- .../script/value/NBTSerializableValue.java | 3 --- .../java/carpet/settings/CarpetSettings.java | 2 +- src/main/java/carpet/settings/Validator.java | 2 +- 7 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/main/java/carpet/commands/ScriptCommand.java b/src/main/java/carpet/commands/ScriptCommand.java index 4f54e583..2068990f 100644 --- a/src/main/java/carpet/commands/ScriptCommand.java +++ b/src/main/java/carpet/commands/ScriptCommand.java @@ -44,27 +44,25 @@ import static net.minecraft.server.command.CommandSource.suggestMatching; public class ScriptCommand { - private static CompletableFuture suggestCode(SuggestionsBuilder suggestionsBuilder) { + private static CompletableFuture suggestCode( + CommandContext context, + SuggestionsBuilder suggestionsBuilder + ) + { + ScriptHost currentHost = getHost(context); String previous = suggestionsBuilder.getRemaining().toLowerCase(Locale.ROOT); int strlen = previous.length(); StringBuilder lastToken = new StringBuilder(); for (int idx = strlen-1; idx >=0; idx--) { char ch = previous.charAt(idx); - if (Character.isLetterOrDigit(ch) || ch == '_') - { - lastToken.append(ch); - } - else - { - break; - } + if (Character.isLetterOrDigit(ch) || ch == '_') lastToken.append(ch); else break; } if (lastToken.length() == 0) return suggestionsBuilder.buildFuture(); String prefix = lastToken.reverse().toString(); String previousString = previous.substring(0,previous.length()-prefix.length()) ; - ExpressionInspector.suggestFunctions(previousString, prefix).forEach(text -> suggestionsBuilder.suggest(previousString+text)); + ExpressionInspector.suggestFunctions(currentHost, previousString, prefix).forEach(text -> suggestionsBuilder.suggest(previousString+text)); return suggestionsBuilder.buildFuture(); } @@ -78,7 +76,7 @@ public class ScriptCommand executes( (cc) -> { CarpetServer.scriptServer.stopAll = false; return 1;}); LiteralArgumentBuilder l = literal("run"). requires((player) -> player.hasPermissionLevel(2)). - then(argument("expr", StringArgumentType.greedyString()).suggests((cc, bb) -> suggestCode(bb)). + then(argument("expr", StringArgumentType.greedyString()).suggests((cc, bb) -> suggestCode(cc, bb)). executes((cc) -> compute( cc, StringArgumentType.getString(cc, "expr")))); @@ -141,7 +139,7 @@ public class ScriptCommand then(argument("from", BlockPosArgumentType.create()). then(argument("to", BlockPosArgumentType.create()). then(argument("expr", StringArgumentType.greedyString()). - suggests((cc, bb) -> suggestCode(bb)). + suggests((cc, bb) -> suggestCode(cc, bb)). executes( (cc) -> scriptScan( cc, BlockPosArgumentType.getBlockPos(cc, "origin"), diff --git a/src/main/java/carpet/script/CarpetExpression.java b/src/main/java/carpet/script/CarpetExpression.java index e3b19e40..4f63e39e 100644 --- a/src/main/java/carpet/script/CarpetExpression.java +++ b/src/main/java/carpet/script/CarpetExpression.java @@ -866,7 +866,6 @@ public class CarpetExpression BlockSoundGroup blockSoundGroup = placementState.getSoundGroup(); cc.s.getWorld().playSound(null, where, blockSoundGroup.getPlaceSound(), SoundCategory.BLOCKS, (blockSoundGroup.getVolume() + 1.0F) / 2.0F, blockSoundGroup.getPitch() * 0.8F); return (_c, _t) -> Value.TRUE; - } } } @@ -907,13 +906,15 @@ public class CarpetExpression public void API_InventoryManipulation() { - this.expr.addLazyFunction("stack_limit", 1, (c, t, lv) -> { + this.expr.addLazyFunction("stack_limit", 1, (c, t, lv) -> + { ItemStackArgument item = NBTSerializableValue.parseItem(lv.get(0).evalValue(c).getString()); Value res = new NumericValue(item.getItem().getMaxCount()); return (_c, _t) -> res; }); - this.expr.addLazyFunction("inventory_size", -1, (c, t, lv) -> { + this.expr.addLazyFunction("inventory_size", -1, (c, t, lv) -> + { CarpetContext cc = (CarpetContext) c; NBTSerializableValue.InventoryLocator inventoryLocator = NBTSerializableValue.locateInventory(cc, lv, 0); if (inventoryLocator == null) @@ -923,7 +924,8 @@ public class CarpetExpression }); //inventory_get(, ) -> item_triple - this.expr.addLazyFunction("inventory_get", -1, (c, t, lv) -> { + this.expr.addLazyFunction("inventory_get", -1, (c, t, lv) -> + { CarpetContext cc = (CarpetContext) c; NBTSerializableValue.InventoryLocator inventoryLocator = NBTSerializableValue.locateInventory(cc, lv, 0); if (inventoryLocator == null) @@ -947,7 +949,8 @@ public class CarpetExpression }); //inventory_drop(, , ) -> entity_item (and sets slot) or null if cannot - this.expr.addLazyFunction("inventory_drop", -1, (c, t, lv) -> { + this.expr.addLazyFunction("inventory_drop", -1, (c, t, lv) -> + { CarpetContext cc = (CarpetContext) c; NBTSerializableValue.InventoryLocator inventoryLocator = NBTSerializableValue.locateInventory(cc, lv, 0); if (inventoryLocator == null) @@ -1000,7 +1003,8 @@ public class CarpetExpression }); //inventory_find(, or null (first empty slot), ) -> or null - this.expr.addLazyFunction("inventory_find", -1, (c, t, lv) -> { + this.expr.addLazyFunction("inventory_find", -1, (c, t, lv) -> + { CarpetContext cc = (CarpetContext) c; NBTSerializableValue.InventoryLocator inventoryLocator = NBTSerializableValue.locateInventory(cc, lv, 0); if (inventoryLocator == null) @@ -1031,7 +1035,8 @@ public class CarpetExpression }); //inventory_set(, , , , ) - this.expr.addLazyFunction("inventory_set", -1, (c, t, lv) -> { + this.expr.addLazyFunction("inventory_set", -1, (c, t, lv) -> + { CarpetContext cc = (CarpetContext) c; NBTSerializableValue.InventoryLocator inventoryLocator = NBTSerializableValue.locateInventory(cc, lv, 0); if (inventoryLocator == null) diff --git a/src/main/java/carpet/script/Expression.java b/src/main/java/carpet/script/Expression.java index 5cb5c750..2468efef 100644 --- a/src/main/java/carpet/script/Expression.java +++ b/src/main/java/carpet/script/Expression.java @@ -1840,11 +1840,10 @@ public class Expression implements Cloneable return LazyListValue.range(from, to, step); }); - addBinaryFunction("get", (v1, v2) -> { + addBinaryFunction("get", (v1, v2) -> + { if (v1 instanceof LazyListValue || !(v1 instanceof ListValue)) - { throw new InternalExpressionException("First argument of element should be a list"); - } List items = ((ListValue)v1).getItems(); long index = NumericValue.asNumber(v2).getLong(); int numitems = items.size(); @@ -1854,12 +1853,11 @@ public class Expression implements Cloneable return items.get((int)index); }); - //Deprecated - addBinaryFunction("element", (v1, v2) -> { + //Deprecated, use "get" instead + addBinaryFunction("element", (v1, v2) -> + { if (v1 instanceof LazyListValue || !(v1 instanceof ListValue)) - { throw new InternalExpressionException("First argument of element should be a list"); - } List items = ((ListValue)v1).getItems(); long index = NumericValue.asNumber(v2).getLong(); int numitems = items.size(); @@ -1868,6 +1866,7 @@ public class Expression implements Cloneable index = index % numitems; return items.get((int)index); }); + addFunction("put", (lv) -> { if(lv.size()<3) @@ -2777,10 +2776,10 @@ public class Expression implements Cloneable { return exit.retval; } - //catch (StackOverflowError ignored) - //{ - // throw new ExpressionException("Your thoughts are too deep"); - //} + catch (StackOverflowError ignored) + { + throw new ExpressionException("Your thoughts are too deep"); + } catch (InternalExpressionException exc) { throw new ExpressionException("Your expression result is incorrect:"+exc.getMessage()); diff --git a/src/main/java/carpet/script/ExpressionInspector.java b/src/main/java/carpet/script/ExpressionInspector.java index 0602c933..56d602c5 100644 --- a/src/main/java/carpet/script/ExpressionInspector.java +++ b/src/main/java/carpet/script/ExpressionInspector.java @@ -34,7 +34,7 @@ public class ExpressionInspector APIFunctions = new TreeSet<>(allFunctions.stream().filter(s -> !scarpetFunctions.contains(s)).collect(Collectors.toSet())); } - public static List suggestFunctions(String previous, String prefix) + public static List suggestFunctions(ScriptHost host, String previous, String prefix) { previous = previous.replace("\\'", ""); int quoteCount = StringUtils.countMatches(previous,'\''); @@ -45,7 +45,12 @@ public class ExpressionInspector filter(s -> s.startsWith(prefix) && s.length() <= maxLen).map(s -> s+"(").collect(Collectors.toList()); scarpetMatches.addAll(APIFunctions.stream(). filter(s -> s.startsWith(prefix) && s.length() <= maxLen).map(s -> s+"(").collect(Collectors.toList())); - scarpetMatches.addAll(CarpetServer.scriptServer.globalHost.globalVariables.keySet().stream(). + // not that useful in commandline, more so in external scripts, so skipping here + //scarpetMatches.addAll(CarpetServer.scriptServer.events.eventHandlers.keySet().stream(). + // filter(s -> s.startsWith(prefix) && s.length() <= maxLen).map(s -> "__"+s+"(").collect(Collectors.toList())); + scarpetMatches.addAll(host.globalFunctions.keySet().stream(). + filter(s -> s.startsWith(prefix)).map(s -> s+"(").collect(Collectors.toList())); + scarpetMatches.addAll(host.globalVariables.keySet().stream(). filter(s -> s.startsWith(prefix)).collect(Collectors.toList())); return scarpetMatches; } diff --git a/src/main/java/carpet/script/value/NBTSerializableValue.java b/src/main/java/carpet/script/value/NBTSerializableValue.java index 2423539b..14d72f80 100644 --- a/src/main/java/carpet/script/value/NBTSerializableValue.java +++ b/src/main/java/carpet/script/value/NBTSerializableValue.java @@ -163,13 +163,10 @@ public class NBTSerializableValue extends Value public boolean equals(final Value o) { if (o instanceof NBTSerializableValue) - { return getTag().equals(((NBTSerializableValue) o).getTag()); - } return super.equals(o); } - @Override public String getString() { diff --git a/src/main/java/carpet/settings/CarpetSettings.java b/src/main/java/carpet/settings/CarpetSettings.java index 835c6e35..f99044b1 100644 --- a/src/main/java/carpet/settings/CarpetSettings.java +++ b/src/main/java/carpet/settings/CarpetSettings.java @@ -204,7 +204,7 @@ public class CarpetSettings @Rule(desc = "Enables /script command", extra = "An in-game scripting API for Scarpet programming language", category = COMMAND) public static boolean commandScript = true; - @Rule(desc = "Enables /player command to control/spawn players", category = COMMAND) + @Rule(desc = "Enables /player command to control/spawn players", category = COMMAND, validate = Validator.WIP.class) public static boolean commandPlayer = true; @Rule(desc = "Placing carpets may issue carpet commands for non-op players", category = SURVIVAL) diff --git a/src/main/java/carpet/settings/Validator.java b/src/main/java/carpet/settings/Validator.java index 98d6f084..8d0ea4e2 100644 --- a/src/main/java/carpet/settings/Validator.java +++ b/src/main/java/carpet/settings/Validator.java @@ -47,7 +47,7 @@ public abstract class Validator if (source != null) try { - Messenger.m(source, "r Work in progress - limited or no functionality available for "+currentRule.name); + Messenger.m(source, "r "+currentRule.name+" not yet fully implemented - we are still working on it."); } catch (NullPointerException ignored) { } return newValue;