Moar control over angles, fixes #510

This commit is contained in:
gnembon committed 2020-10-26 01:53:48 -03:00
1 parent 7d98f023ef
commit 3a26dae51d
2 files changed
+56 -5

No files matched your search

+11 -3
View File
@@ -127,10 +127,14 @@ Quin-tuple of the entity's position (x, y, and z coords), and rotation (yaw, pit
Respective component of entity's coordinates Respective component of entity's coordinates
### `query(e, 'pitch'), query(e, 'yaw')` ### `query(e, 'pitch')`, `query(e, 'yaw')`
Pitch and Yaw or where entity is looking. Pitch and Yaw or where entity is looking.
### `query(e, 'head_yaw')`, `query(e, 'body_yaw')`
Applies to living entites. Sets their individual head and body facing angle.
### `query(e, 'look')` ### `query(e, 'look')`
Returns a 3d vector where the entity is looking. Returns a 3d vector where the entity is looking.
@@ -522,9 +526,13 @@ Changes full location vector all at once.
Changes entity's location in the specified direction. Changes entity's location in the specified direction.
### `modify(e, 'pitch', pitch), modify(e, 'yaw', yaw)` ### `modify(e, 'pitch', angle), modify(e, 'yaw', angle)`
Changes entity's pitch or yaw. Changes entity's pitch or yaw angle.
### `modify(e, 'head_yaw', angle)`, `modify(e, 'body_yaw', angle)`
For living entities, controls their head and body yaw angle.
### `modify(e, 'move', x, y, z), modify(e, 'move', l(x,y,z) )` ### `modify(e, 'move', x, y, z), modify(e, 'move', l(x,y,z) )`
@@ -295,6 +295,21 @@ public class EntityValue extends Value
put("tags", (e, a) -> ListValue.wrap(e.getScoreboardTags().stream().map(StringValue::new).collect(Collectors.toList()))); put("tags", (e, a) -> ListValue.wrap(e.getScoreboardTags().stream().map(StringValue::new).collect(Collectors.toList())));
put("has_tag", (e, a) -> new NumericValue(e.getScoreboardTags().contains(a.getString()))); put("has_tag", (e, a) -> new NumericValue(e.getScoreboardTags().contains(a.getString())));
put("yaw", (e, a)-> new NumericValue(e.yaw)); put("yaw", (e, a)-> new NumericValue(e.yaw));
put("head_yaw", (e, a)-> {
if (e instanceof LivingEntity)
{
return new NumericValue(e.getHeadYaw());
}
return Value.NULL;
});
put("body_yaw", (e, a)-> {
if (e instanceof LivingEntity)
{
return new NumericValue(((LivingEntity) e).bodyYaw);
}
return Value.NULL;
});
put("pitch", (e, a)-> new NumericValue(e.pitch)); put("pitch", (e, a)-> new NumericValue(e.pitch));
put("look", (e, a) -> { put("look", (e, a) -> {
Vec3d look = e.getRotationVector(); Vec3d look = e.getRotationVector();
@@ -661,9 +676,22 @@ public class EntityValue extends Value
else else
{ {
e.refreshPositionAndAngles(x, y, z, yaw, pitch); e.refreshPositionAndAngles(x, y, z, yaw, pitch);
((ServerWorld) e.getEntityWorld()).getChunkManager().sendToNearbyPlayers(e, new EntityPositionS2CPacket(e)); // we were sending to players for not-living entites, that were untracked. Living entities should be tracked.
//((ServerWorld) e.getEntityWorld()).getChunkManager().sendToNearbyPlayers(e, new EntityS2CPacket.(e));
if (e instanceof LivingEntity)
{
LivingEntity le = (LivingEntity)e;
le.prevBodyYaw = le.prevYaw = yaw;
le.prevHeadYaw = le.headYaw = yaw;
// seems universal for:
//e.setHeadYaw(yaw);
//e.setYaw(yaw);
}
else
{
((ServerWorld) e.getEntityWorld()).getChunkManager().sendToNearbyPlayers(e, new EntityPositionS2CPacket(e));
}
} }
} }
private static void updateVelocity(Entity e) private static void updateVelocity(Entity e)
@@ -753,6 +781,21 @@ public class EntityValue extends Value
{ {
updatePosition(e, e.getX(), e.getY(), e.getZ(), ((float)NumericValue.asNumber(v).getDouble()) % 360, e.pitch); updatePosition(e, e.getX(), e.getY(), e.getZ(), ((float)NumericValue.asNumber(v).getDouble()) % 360, e.pitch);
}); });
put("head_yaw", (e, v) ->
{
if (e instanceof LivingEntity)
{
e.setHeadYaw((float)NumericValue.asNumber(v).getDouble() % 360);
}
});
put("body_yaw", (e, v) ->
{
if (e instanceof LivingEntity)
{
e.setYaw((float)NumericValue.asNumber(v).getDouble() % 360);
}
});
put("pitch", (e, v) -> put("pitch", (e, v) ->
{ {
updatePosition(e, e.getX(), e.getY(), e.getZ(), e.yaw, MathHelper.clamp((float)NumericValue.asNumber(v).getDouble(), -90, 90)); updatePosition(e, e.getX(), e.getY(), e.getZ(), e.yaw, MathHelper.clamp((float)NumericValue.asNumber(v).getDouble(), -90, 90));