From 7f941e02f596f73ce762765596bd63d119072100 Mon Sep 17 00:00:00 2001 From: gnembon Date: Wed, 23 Oct 2019 14:02:04 -0300 Subject: [PATCH 1/3] fixed position tracking --- .../java/carpet/script/value/EntityValue.java | 116 ++++++++++-------- 1 file changed, 65 insertions(+), 51 deletions(-) diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index 39d33280..39fdbd08 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -11,6 +11,7 @@ import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.minecraft.client.network.packet.EntityPassengersSetS2CPacket; import net.minecraft.client.network.packet.EntityPositionS2CPacket; +import net.minecraft.client.network.packet.PlayerPositionLookS2CPacket; import net.minecraft.command.EntitySelector; import net.minecraft.command.EntitySelectorReader; import net.minecraft.entity.Entity; @@ -43,11 +44,7 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; import org.apache.commons.lang3.tuple.Pair; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Predicate; @@ -418,13 +415,43 @@ public class EntityValue extends Value featureModifiers.get(what).accept(entity, toWhat); } - private static void updatePosition(Entity e) + private static void updatePosition(Entity e, double x, double y, double z, float yaw, float pitch) { + if ( + !Double.isFinite(x) || Double.isNaN(x) || + !Double.isFinite(y) || Double.isNaN(y) || + !Double.isFinite(z) || Double.isNaN(z) || + !Float.isFinite(yaw) || Float.isNaN(yaw) || + !Float.isFinite(pitch) || Float.isNaN(pitch) + ) + return; if (e instanceof ServerPlayerEntity) + { // TODO next - figure out proper way of informting client about pos changes - ((ServerPlayerEntity)e).networkHandler.requestTeleport(e.x, e.y, e.z, e.yaw, e.pitch); + //((ServerPlayerEntity) e).networkHandler.requestTeleport(e.x, e.y, e.z, e.yaw, e.pitch); + Set set_1 = EnumSet.allOf(PlayerPositionLookS2CPacket.Flag.class); + double prevX = e.x; + double prevY = e.y; + double prevZ = e.z; + float prevYaw = e.yaw; + float prevPitch = e.pitch; + + e.setPositionAnglesAndUpdate(x, y, z, yaw, pitch); + ((ServerPlayerEntity) e).networkHandler.sendPacket(new PlayerPositionLookS2CPacket( + x - prevX, + y - prevY, + z - prevZ, + yaw - prevYaw, + pitch - prevPitch, + set_1, -1) + ); + } else - ((ServerWorld)e.getEntityWorld()).method_14178().sendToNearbyPlayers(e,new EntityPositionS2CPacket(e)); + { + e.setPositionAnglesAndUpdate(x, y, z, yaw, pitch); + ((ServerWorld) e.getEntityWorld()).method_14178().sendToNearbyPlayers(e, new EntityPositionS2CPacket(e)); + } + } private static void updateVelocity(Entity e) @@ -446,15 +473,13 @@ public class EntityValue extends Value throw new InternalExpressionException("Expected a list of 5 parameters as a second argument"); } List coords = ((ListValue) v).getItems(); - e.x = NumericValue.asNumber(coords.get(0)).getDouble(); - e.y = NumericValue.asNumber(coords.get(1)).getDouble(); - e.z = NumericValue.asNumber(coords.get(2)).getDouble(); - e.pitch = (float) NumericValue.asNumber(coords.get(4)).getDouble(); - e.prevPitch = e.pitch; - e.yaw = (float) NumericValue.asNumber(coords.get(3)).getDouble(); - e.prevYaw = e.yaw; - e.setPosition(e.x, e.y, e.z); - updatePosition(e); + updatePosition(e, + NumericValue.asNumber(coords.get(0)).getDouble(), + NumericValue.asNumber(coords.get(1)).getDouble(), + NumericValue.asNumber(coords.get(2)).getDouble(), + (float) NumericValue.asNumber(coords.get(3)).getDouble(), + (float) NumericValue.asNumber(coords.get(4)).getDouble() + ); }); put("pos", (e, v) -> { @@ -463,48 +488,35 @@ public class EntityValue extends Value throw new InternalExpressionException("Expected a list of 3 parameters as a second argument"); } List coords = ((ListValue) v).getItems(); - e.x = NumericValue.asNumber(coords.get(0)).getDouble(); - e.y = NumericValue.asNumber(coords.get(1)).getDouble(); - e.z = NumericValue.asNumber(coords.get(2)).getDouble(); - e.setPosition(e.x, e.y, e.z); - updatePosition(e); + updatePosition(e, + NumericValue.asNumber(coords.get(0)).getDouble(), + NumericValue.asNumber(coords.get(1)).getDouble(), + NumericValue.asNumber(coords.get(2)).getDouble(), + e.yaw, + e.pitch + ); }); put("x", (e, v) -> { - e.x = NumericValue.asNumber(v).getDouble(); - e.setPosition(e.x, e.y, e.z); - updatePosition(e); + updatePosition(e, NumericValue.asNumber(v).getDouble(), e.y, e.z, e.yaw, e.pitch); }); put("y", (e, v) -> { - e.y = NumericValue.asNumber(v).getDouble(); - e.setPosition(e.x, e.y, e.z); - updatePosition(e); + updatePosition(e, e.x, NumericValue.asNumber(v).getDouble(), e.z, e.yaw, e.pitch); }); put("z", (e, v) -> { - e.z = NumericValue.asNumber(v).getDouble(); - e.setPosition(e.x, e.y, e.z); - updatePosition(e); - }); - put("pitch", (e, v) -> - { - float p = (float) NumericValue.asNumber(v).getDouble(); - if (Float.isNaN(p)) - return; - e.pitch = MathHelper.clamp(p, -90, 90); - e.prevPitch = e.pitch; - updatePosition(e); + updatePosition(e, e.x, e.y, NumericValue.asNumber(v).getDouble(), e.yaw, e.pitch); }); put("yaw", (e, v) -> { - float p = (float) NumericValue.asNumber(v).getDouble(); - if (Float.isNaN(p)) - return; - e.yaw = p % 360; - e.prevYaw = e.yaw; - updatePosition(e); + updatePosition(e, e.x, e.y, e.z, ((float)NumericValue.asNumber(v).getDouble()) % 360, e.pitch); }); + put("pitch", (e, v) -> + { + updatePosition(e, e.x, e.y, e.z, e.yaw, MathHelper.clamp((float)NumericValue.asNumber(v).getDouble(), -90, 90)); + }); + //"look" //"turn" //"nod" @@ -516,11 +528,13 @@ public class EntityValue extends Value throw new InternalExpressionException("Expected a list of 3 parameters as a second argument"); } List coords = ((ListValue) v).getItems(); - e.x += NumericValue.asNumber(coords.get(0)).getDouble(); - e.y += NumericValue.asNumber(coords.get(1)).getDouble(); - e.z += NumericValue.asNumber(coords.get(2)).getDouble(); - e.setPosition(e.x, e.y, e.z); - updatePosition(e); + updatePosition(e, + e.x + NumericValue.asNumber(coords.get(0)).getDouble(), + e.y + NumericValue.asNumber(coords.get(1)).getDouble(), + e.z + NumericValue.asNumber(coords.get(2)).getDouble(), + e.yaw, + e.pitch + ); }); put("motion", (e, v) -> From 835f63755d3f9d3d875ea6cf08d031b23ecd245b Mon Sep 17 00:00:00 2001 From: gnembon Date: Thu, 24 Oct 2019 00:20:29 -0300 Subject: [PATCH 2/3] -> now returns function name. --- src/main/java/carpet/commands/ScriptCommand.java | 7 ++++--- src/main/java/carpet/script/Expression.java | 5 ++++- src/main/java/carpet/script/ScriptHost.java | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) 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) From 19781b2a4d3f1bdf3d2c19bcc1e075b1b1e125ad Mon Sep 17 00:00:00 2001 From: gnembon Date: Thu, 24 Oct 2019 00:49:25 -0300 Subject: [PATCH 3/3] never star imports --- src/main/java/carpet/script/value/EntityValue.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index 39fdbd08..2cb9813e 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -44,7 +44,13 @@ import net.minecraft.util.math.Vec3d; import net.minecraft.util.registry.Registry; import org.apache.commons.lang3.tuple.Pair; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Predicate;