mirror of
https://github.com/ViaVersion/ViaBackwards.git
synced 2024-11-21 12:07:38 +01:00
Handle new relative arguments in PLAYER_POSITION and TELEPORT_ENTITY
This commit is contained in:
parent
545365786f
commit
30d3b0d02e
@ -181,7 +181,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
|||||||
updateRotation(wrapper);
|
updateRotation(wrapper);
|
||||||
|
|
||||||
final int relativeArguments = wrapper.read(Types.VAR_INT);
|
final int relativeArguments = wrapper.read(Types.VAR_INT);
|
||||||
// TODO Similar to player position
|
handleRelativeArguments(wrapper, relativeArguments, movementX, movementY, movementZ);
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerClientbound(ClientboundPackets1_21_2.PLAYER_POSITION, wrapper -> {
|
protocol.registerClientbound(ClientboundPackets1_21_2.PLAYER_POSITION, wrapper -> {
|
||||||
@ -198,44 +198,16 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
|||||||
wrapper.passthrough(Types.FLOAT); // Y rot
|
wrapper.passthrough(Types.FLOAT); // Y rot
|
||||||
wrapper.passthrough(Types.FLOAT); // X rot
|
wrapper.passthrough(Types.FLOAT); // X rot
|
||||||
|
|
||||||
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
|
||||||
storage.setCoordinates(wrapper, true);
|
|
||||||
storage.setRotation(wrapper);
|
|
||||||
|
|
||||||
// Just keep the new values in there
|
// Just keep the new values in there
|
||||||
final int relativeArguments = wrapper.read(Types.INT);
|
final int relativeArguments = wrapper.read(Types.INT);
|
||||||
wrapper.write(Types.BYTE, (byte) relativeArguments);
|
wrapper.write(Types.BYTE, (byte) relativeArguments);
|
||||||
wrapper.write(Types.VAR_INT, teleportId);
|
wrapper.write(Types.VAR_INT, teleportId);
|
||||||
|
|
||||||
if (true) {
|
|
||||||
return; // TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send alongside separate entity motion
|
// Send alongside separate entity motion
|
||||||
wrapper.send(Protocol1_21_2To1_21.class);
|
wrapper.send(Protocol1_21_2To1_21.class);
|
||||||
wrapper.cancel();
|
wrapper.cancel();
|
||||||
|
|
||||||
if ((relativeArguments & 1 << 4) != 0) {
|
handleRelativeArguments(wrapper, relativeArguments, movementX, movementY, movementZ);
|
||||||
// Rotate delta
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delta x, y, z
|
|
||||||
if ((relativeArguments & 1 << 5) != 0) {
|
|
||||||
//movementX += currentMovementX;
|
|
||||||
}
|
|
||||||
if ((relativeArguments & 1 << 6) != 0) {
|
|
||||||
//movementY += currentMovementY;
|
|
||||||
}
|
|
||||||
if ((relativeArguments & 1 << 7) != 0) {
|
|
||||||
//movementZ += currentMovementZ;
|
|
||||||
}
|
|
||||||
|
|
||||||
final PacketWrapper entityMotionPacket = wrapper.create(ClientboundPackets1_21_2.MOVE_ENTITY_POS);
|
|
||||||
entityMotionPacket.write(Types.VAR_INT, tracker(wrapper.user()).clientEntityId());
|
|
||||||
entityMotionPacket.write(Types.SHORT, (short) (movementX * 8000));
|
|
||||||
entityMotionPacket.write(Types.SHORT, (short) (movementY * 8000));
|
|
||||||
entityMotionPacket.write(Types.SHORT, (short) (movementZ * 8000));
|
|
||||||
entityMotionPacket.send(Protocol1_21_2To1_21.class);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
protocol.registerServerbound(ServerboundPackets1_20_5.PLAYER_COMMAND, wrapper -> {
|
protocol.registerServerbound(ServerboundPackets1_20_5.PLAYER_COMMAND, wrapper -> {
|
||||||
@ -299,7 +271,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
|||||||
fixOnGround(wrapper);
|
fixOnGround(wrapper);
|
||||||
|
|
||||||
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
||||||
storage.setCoordinates(wrapper, false);
|
storage.setPosition(wrapper);
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_POS_ROT, wrapper -> {
|
protocol.registerServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_POS_ROT, wrapper -> {
|
||||||
wrapper.passthrough(Types.DOUBLE); // X
|
wrapper.passthrough(Types.DOUBLE); // X
|
||||||
@ -310,7 +282,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
|||||||
fixOnGround(wrapper);
|
fixOnGround(wrapper);
|
||||||
|
|
||||||
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
||||||
storage.setCoordinates(wrapper, false);
|
storage.setPosition(wrapper);
|
||||||
storage.setRotation(wrapper);
|
storage.setRotation(wrapper);
|
||||||
});
|
});
|
||||||
protocol.registerServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_ROT, wrapper -> {
|
protocol.registerServerbound(ServerboundPackets1_20_5.MOVE_PLAYER_ROT, wrapper -> {
|
||||||
@ -330,7 +302,7 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
|||||||
wrapper.passthrough(Types.FLOAT); // Pitch
|
wrapper.passthrough(Types.FLOAT); // Pitch
|
||||||
|
|
||||||
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
||||||
storage.setCoordinates(wrapper, false);
|
storage.setPosition(wrapper);
|
||||||
storage.setRotation(wrapper);
|
storage.setRotation(wrapper);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -384,6 +356,57 @@ public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Clientbound
|
|||||||
wrapper.write(Types.BYTE, (byte) Math.floor(pitch * 256F / 360F));
|
wrapper.write(Types.BYTE, (byte) Math.floor(pitch * 256F / 360F));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleRelativeArguments(final PacketWrapper wrapper, final int relativeArguments, double movementX, double movementY, double movementZ) {
|
||||||
|
final PlayerStorage storage = wrapper.user().get(PlayerStorage.class);
|
||||||
|
storage.setPosition(wrapper);
|
||||||
|
|
||||||
|
// Rotate Delta
|
||||||
|
if ((relativeArguments & 1 << 8) != 0) {
|
||||||
|
float yaw = wrapper.get(Types.FLOAT, 4);
|
||||||
|
if ((relativeArguments & 1 << 3) != 0) {
|
||||||
|
yaw += storage.yaw();
|
||||||
|
}
|
||||||
|
|
||||||
|
float pitch = wrapper.get(Types.FLOAT, 5);
|
||||||
|
if ((relativeArguments & 1 << 4) != 0) {
|
||||||
|
pitch += storage.pitch();
|
||||||
|
}
|
||||||
|
|
||||||
|
final double deltaYaw = Math.toRadians(storage.yaw() - yaw);
|
||||||
|
final double deltaYawCos = Math.cos(deltaYaw);
|
||||||
|
final double deltaYawSin = Math.sin(deltaYaw);
|
||||||
|
movementX = movementX * deltaYawCos + movementZ * deltaYawSin;
|
||||||
|
movementZ = movementZ * deltaYawCos - movementX * deltaYawSin;
|
||||||
|
|
||||||
|
final double deltaPitch = Math.toRadians(storage.pitch() - pitch);
|
||||||
|
final double deltaPitchCos = Math.cos(deltaPitch);
|
||||||
|
final double deltaPitchSin = Math.sin(deltaPitch);
|
||||||
|
movementY = movementY * deltaPitchCos + movementZ * deltaPitchSin;
|
||||||
|
movementZ = movementZ * deltaPitchCos - movementY * deltaPitchSin;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delta x, y, z
|
||||||
|
if ((relativeArguments & 1 << 5) != 0) {
|
||||||
|
movementX += storage.movementX();
|
||||||
|
}
|
||||||
|
if ((relativeArguments & 1 << 6) != 0) {
|
||||||
|
movementY += storage.movementY();
|
||||||
|
}
|
||||||
|
if ((relativeArguments & 1 << 7) != 0) {
|
||||||
|
movementZ += storage.movementZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
final PacketWrapper entityMotionPacket = wrapper.create(ClientboundPackets1_21_2.MOVE_ENTITY_POS);
|
||||||
|
entityMotionPacket.write(Types.VAR_INT, tracker(wrapper.user()).clientEntityId());
|
||||||
|
entityMotionPacket.write(Types.SHORT, (short) (movementX * 8000));
|
||||||
|
entityMotionPacket.write(Types.SHORT, (short) (movementY * 8000));
|
||||||
|
entityMotionPacket.write(Types.SHORT, (short) (movementZ * 8000));
|
||||||
|
entityMotionPacket.send(Protocol1_21_2To1_21.class);
|
||||||
|
|
||||||
|
storage.setRotation(wrapper);
|
||||||
|
storage.setDeltaMovement(movementX, movementY, movementZ);
|
||||||
|
}
|
||||||
|
|
||||||
private int boatTypeFromEntityType(final EntityType type) {
|
private int boatTypeFromEntityType(final EntityType type) {
|
||||||
if (type == EntityTypes1_21_2.OAK_BOAT) {
|
if (type == EntityTypes1_21_2.OAK_BOAT) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -23,9 +23,25 @@ import com.viaversion.viaversion.api.type.Types;
|
|||||||
|
|
||||||
public final class PlayerStorage extends PlayerPositionStorage {
|
public final class PlayerStorage extends PlayerPositionStorage {
|
||||||
|
|
||||||
|
private double movementX;
|
||||||
|
private double movementY;
|
||||||
|
private double movementZ;
|
||||||
|
|
||||||
private float yaw;
|
private float yaw;
|
||||||
private float pitch;
|
private float pitch;
|
||||||
|
|
||||||
|
public double movementX() {
|
||||||
|
return movementX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double movementY() {
|
||||||
|
return movementY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double movementZ() {
|
||||||
|
return movementZ;
|
||||||
|
}
|
||||||
|
|
||||||
public float yaw() {
|
public float yaw() {
|
||||||
return yaw;
|
return yaw;
|
||||||
}
|
}
|
||||||
@ -34,9 +50,21 @@ public final class PlayerStorage extends PlayerPositionStorage {
|
|||||||
return pitch;
|
return pitch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPosition(PacketWrapper wrapper) {
|
||||||
|
setX(wrapper.get(Types.DOUBLE, 0));
|
||||||
|
setY(wrapper.get(Types.DOUBLE, 1));
|
||||||
|
setZ(wrapper.get(Types.DOUBLE, 2));
|
||||||
|
}
|
||||||
|
|
||||||
public void setRotation(final PacketWrapper wrapper) {
|
public void setRotation(final PacketWrapper wrapper) {
|
||||||
this.yaw = wrapper.get(Types.FLOAT, 0);
|
this.yaw = wrapper.get(Types.FLOAT, 0);
|
||||||
this.pitch = wrapper.get(Types.FLOAT, 1);
|
this.pitch = wrapper.get(Types.FLOAT, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setDeltaMovement(final double x, final double y, final double z) {
|
||||||
|
this.movementX = x;
|
||||||
|
this.movementY = y;
|
||||||
|
this.movementZ = z;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user