mirror of
https://github.com/GeyserMC/Geyser.git
synced 2024-08-14 23:57:35 +00:00
Lock camel rotation if stationary
This commit is contained in:
parent
30a37fa8a5
commit
16d766dfd1
3 changed files with 26 additions and 13 deletions
|
|
@ -26,6 +26,7 @@
|
|||
package org.geysermc.geyser.entity.vehicle;
|
||||
|
||||
import lombok.Setter;
|
||||
import org.cloudburstmc.math.vector.Vector2f;
|
||||
import org.cloudburstmc.math.vector.Vector3f;
|
||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
||||
import org.geysermc.geyser.entity.type.living.animal.horse.CamelEntity;
|
||||
|
|
@ -112,6 +113,14 @@ public class CamelVehicleComponent extends VehicleComponent<CamelEntity> {
|
|||
return inputVelocity;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Vector2f getVehicleRotation() {
|
||||
if (isStationary()) {
|
||||
return Vector2f.from(vehicle.getYaw(), vehicle.getPitch());
|
||||
}
|
||||
return super.getVehicleRotation();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the camel is sitting
|
||||
* or transitioning to standing pose.
|
||||
|
|
|
|||
|
|
@ -636,10 +636,14 @@ public class VehicleComponent<T extends LivingEntity & ClientVehicle> {
|
|||
return Vector3f.from(input.getX() * cos - input.getY() * sin, 0, input.getY() * cos + input.getX() * sin);
|
||||
}
|
||||
|
||||
protected Vector2f getVehicleRotation() {
|
||||
LivingEntity player = vehicle.getSession().getPlayerEntity();
|
||||
return Vector2f.from(player.getYaw(), player.getPitch() * 0.5f);
|
||||
}
|
||||
|
||||
protected void moveVehicle(Vector3d javaPos, boolean isOnGround) {
|
||||
Vector3f bedrockPos = javaPos.toFloat();
|
||||
float yaw = vehicle.getSession().getPlayerEntity().getYaw();
|
||||
float pitch = vehicle.getSession().getPlayerEntity().getPitch() * 0.5f;
|
||||
Vector2f rotation = getVehicleRotation();
|
||||
|
||||
MoveEntityDeltaPacket moveEntityDeltaPacket = new MoveEntityDeltaPacket();
|
||||
moveEntityDeltaPacket.setRuntimeEntityId(vehicle.getGeyserId());
|
||||
|
|
@ -663,27 +667,27 @@ public class VehicleComponent<T extends LivingEntity & ClientVehicle> {
|
|||
}
|
||||
vehicle.setPosition(bedrockPos);
|
||||
|
||||
if (vehicle.getYaw() != yaw) {
|
||||
if (vehicle.getYaw() != rotation.getX()) {
|
||||
moveEntityDeltaPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_YAW);
|
||||
moveEntityDeltaPacket.setYaw(yaw);
|
||||
vehicle.setYaw(yaw);
|
||||
moveEntityDeltaPacket.setYaw(rotation.getX());
|
||||
vehicle.setYaw(rotation.getX());
|
||||
}
|
||||
if (vehicle.getPitch() != pitch) {
|
||||
if (vehicle.getPitch() != rotation.getY()) {
|
||||
moveEntityDeltaPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_PITCH);
|
||||
moveEntityDeltaPacket.setPitch(pitch);
|
||||
vehicle.setPitch(pitch);
|
||||
moveEntityDeltaPacket.setPitch(rotation.getY());
|
||||
vehicle.setPitch(rotation.getY());
|
||||
}
|
||||
if (vehicle.getHeadYaw() != yaw) { // Same as yaw
|
||||
if (vehicle.getHeadYaw() != rotation.getX()) { // Same as yaw
|
||||
moveEntityDeltaPacket.getFlags().add(MoveEntityDeltaPacket.Flag.HAS_HEAD_YAW);
|
||||
moveEntityDeltaPacket.setHeadYaw(yaw);
|
||||
vehicle.setHeadYaw(yaw);
|
||||
moveEntityDeltaPacket.setHeadYaw(rotation.getX());
|
||||
vehicle.setHeadYaw(rotation.getX());
|
||||
}
|
||||
|
||||
if (!moveEntityDeltaPacket.getFlags().isEmpty()) {
|
||||
vehicle.getSession().sendUpstreamPacket(moveEntityDeltaPacket);
|
||||
}
|
||||
|
||||
ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket(javaPos.getX(), javaPos.getY(), javaPos.getZ(), yaw, pitch);
|
||||
ServerboundMoveVehiclePacket moveVehiclePacket = new ServerboundMoveVehiclePacket(javaPos.getX(), javaPos.getY(), javaPos.getZ(), rotation.getX(), rotation.getY());
|
||||
vehicle.getSession().sendDownstreamPacket(moveVehiclePacket);
|
||||
vehicle.getSession().setLastVehicleMoveTimestamp(System.currentTimeMillis());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 6b661f0d517d895aebc1f55a25d2c86f033beb1d
|
||||
Subproject commit 968a22bbab02d7d003c5b451a40d8bb2439b0d97
|
||||
Loading…
Add table
Add a link
Reference in a new issue