diff --git a/src/main/java/carpet/commands/ScriptCommand.java b/src/main/java/carpet/commands/ScriptCommand.java
index 839880bc..b7cec897 100644
--- a/src/main/java/carpet/commands/ScriptCommand.java
+++ b/src/main/java/carpet/commands/ScriptCommand.java
@@ -7,6 +7,7 @@ import carpet.script.CarpetEventServer;
import carpet.script.CarpetExpression;
import carpet.script.Expression;
import carpet.script.ExpressionInspector;
+import carpet.script.LazyValue;
import carpet.script.Tokenizer;
import carpet.script.exception.CarpetExpressionException;
import carpet.script.value.FunctionValue;
@@ -317,6 +318,13 @@ public class ScriptCommand
Messenger.m(source, "lb Stored functions"+((host == CarpetServer.scriptServer.globalHost)?":":" in "+host.getName()+":"));
host.globaFunctionNames(host.main, (str) -> all || !str.startsWith("__")).sorted().forEach( (s) -> {
FunctionValue fun = host.getFunction(s);
+ if (fun == null)
+ {
+ Messenger.m(source, "gb "+s, "g - unused import");
+ Messenger.m(source, "gi ----------------");
+ return;
+ }
+ CarpetSettings.LOG.error("printing function "+fun.getPrettyString());
Expression expr = fun.getExpression();
Tokenizer.Token tok = fun.getToken();
List Returns the result of ray tracing from entity perspective, indicating what it is looking at. Default reach is 4.5
* blocks (5 for creative players), and by default it traces for blocks and entities, identical to player attack tracing action.
- * This can be customized with
* query(e,'trace', reach?, options?...)options, use 'blocks' to trace for blocks only, 'liquids' to include liquid blocks
- * as possible results, and 'entities' to trace entities as well.options, use 'blocks' to trace for blocks, 'liquids' to include liquid blocks
+ * as possible results, and 'entities' to trace entities. Any combination of the above is possible. When tracing
+ * entities and blocks, blocks will take over the priority even if transparent or non-colliding (aka fighting chickens
+ * in tall grass).
Regardless of the options selected, the result could be null if nothing is in reach, entity, if look
- * targets an antity, and block value if block is in reach. Tracing always hits blocks. Even if an entity tracing is requested
- * and there is a block in the way - the block will be returned.
query(e,'nbt',path?)Returns full NBT of the entity. If path is specified, it fetches only that portion of the NBT,
* that corresponds to the path. For specification of path attribute, consult
@@ -2133,9 +2134,9 @@ public class CarpetExpression
*
modify(e, 'no_clip', boolean)Sets if the entity obeys any collisions, including collisions with the terrain and basic physics. * Not affecting players, since they are controlled client side
- *modify(e, 'effect', name, duration, amplifier?, show_particles?, show_icon?)modify(e, 'effect', name, duration?, amplifier?, show_particles?, show_icon?)Applies status effect to the living entity. Takes several optional parameters, which default to 0,
- * true and true.
true and true. If no duration is specified, or it is null or 0, the effect is removed.
* modify(e, 'home', null), modify(e, 'home', block, distance?), modify(e, 'home', x, y, z, distance?)Sets AI to stay around the home position, within distance blocks from it. distance
* defaults to 16 blocks. null removes it. May not work fully with mobs that have this AI built in, like
diff --git a/src/main/java/carpet/script/CarpetScriptServer.java b/src/main/java/carpet/script/CarpetScriptServer.java
index 34c206c4..f065a4e8 100644
--- a/src/main/java/carpet/script/CarpetScriptServer.java
+++ b/src/main/java/carpet/script/CarpetScriptServer.java
@@ -45,6 +45,7 @@ public class CarpetScriptServer
add(new BundledModule("camera", false));
add(new BundledModule("event_test", false));
add(new BundledModule("stats_test", false));
+ add(new BundledModule("math", true));
}};
public CarpetScriptServer()
diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java
index 84fc2fd7..bb30c389 100644
--- a/src/main/java/carpet/script/value/EntityValue.java
+++ b/src/main/java/carpet/script/value/EntityValue.java
@@ -385,6 +385,7 @@ public class EntityValue extends Value
float reach = 4.5f;
boolean entities = true;
boolean liquids = false;
+ boolean blocks = true;
if (a!=null)
{
@@ -401,12 +402,14 @@ public class EntityValue extends Value
if (args.size() > 1)
{
entities = false;
+ blocks = false;
for (int i = 1; i < args.size(); i++)
{
String what = args.get(i).getString();
if (what.equalsIgnoreCase("entities"))
entities = true;
- else if (what.equalsIgnoreCase("blocks")) {}
+ else if (what.equalsIgnoreCase("blocks"))
+ blocks = true;
else if (what.equalsIgnoreCase("liquids"))
liquids = true;
else throw new InternalExpressionException("Incorrect tracing: "+what);
@@ -420,11 +423,14 @@ public class EntityValue extends Value
}
HitResult hitres;
- if (entities)
+ if (entities && !blocks)
+ hitres = Tracer.rayTraceEntities(e, 1, reach, reach*reach);
+ else if (entities)
hitres = Tracer.rayTrace(e, 1, reach, liquids);
else
hitres = Tracer.rayTraceBlocks(e, 1, reach, liquids);
+ if (hitres == null) return Value.NULL;
switch (hitres.getType())
{
case MISS: return Value.NULL;
@@ -783,13 +789,23 @@ public class EntityValue extends Value
else if (v instanceof ListValue)
{
List