cleanup
This commit is contained in:
1 parent
83a8f35094
commit
5bb813be76
7 files changed
+41
-37
No files matched your search
@@ -44,27 +44,25 @@ import static net.minecraft.server.command.CommandSource.suggestMatching;
|
||||
public class ScriptCommand
|
||||
{
|
||||
|
||||
private static CompletableFuture<Suggestions> suggestCode(SuggestionsBuilder suggestionsBuilder) {
|
||||
private static CompletableFuture<Suggestions> suggestCode(
|
||||
CommandContext<ServerCommandSource> 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<ServerCommandSource> 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"),
|
||||
|
||||
@@ -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(<b, e>, <n>) -> 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(<b, e>, <n>, <amount=1, 0-whatever's there>) -> 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(<b, e>, <item> or null (first empty slot), <start_from=0> ) -> <N> 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(<b,e>, <n>, <count>, <item>, <nbt>)
|
||||
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)
|
||||
|
||||
@@ -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<Value> 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<Value> 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());
|
||||
|
||||
@@ -34,7 +34,7 @@ public class ExpressionInspector
|
||||
APIFunctions = new TreeSet<>(allFunctions.stream().filter(s -> !scarpetFunctions.contains(s)).collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
public static List<String> suggestFunctions(String previous, String prefix)
|
||||
public static List<String> 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;
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -47,7 +47,7 @@ public abstract class Validator<T>
|
||||
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;
|
||||
|
||||
Reference in new issue
Block a user