Files
GameStarter/src/js/net/minecraft/client/entity/PlayerEntityMultiplayer.js
T
2022-06-20 15:21:06 +02:00

96 lines
3.8 KiB
JavaScript

import PlayerEntity from "./PlayerEntity.js";
import ClientPlayerMovementPacket from "../network/packet/play/client/ClientPlayerMovementPacket.js";
import ClientPlayerRotationPacket from "../network/packet/play/client/ClientPlayerRotationPacket.js";
import ClientPlayerPositionPacket from "../network/packet/play/client/ClientPlayerPositionPacket.js";
import ClientPlayerPositionRotationPacket from "../network/packet/play/client/ClientPlayerPositionRotationPacket.js";
import ClientPlayerStatePacket from "../network/packet/play/client/ClientPlayerStatePacket.js";
import ClientSwingArmPacket from "../network/packet/play/client/ClientSwingArmPacket.js";
export default class PlayerEntityMultiplayer extends PlayerEntity {
constructor(minecraft, world, networkHandler, id) {
super(minecraft, world, id);
this.networkHandler = networkHandler;
this.positionUpdateTicks = 0;
this.lastReportedX = 0;
this.lastReportedY = 0;
this.lastReportedZ = 0;
this.lastReportedYaw = 0;
this.lastReportedPitch = 0;
this.serverSprintState = false;
this.serverSneakState = false;
}
onUpdate() {
super.onUpdate();
this.onUpdateWalkingPlayer();
}
swingArm() {
super.swingArm();
this.networkHandler.sendPacket(new ClientSwingArmPacket());
}
onUpdateWalkingPlayer() {
// Send sprinting to server
let isSprinting = this.isSprinting();
if (isSprinting !== this.serverSprintState) {
let state = isSprinting ? ClientPlayerStatePacket.START_SPRINTING : ClientPlayerStatePacket.STOP_SPRINTING;
this.networkHandler.sendPacket(new ClientPlayerStatePacket(this.id, state));
this.serverSprintState = isSprinting;
}
// Send sneaking to server
let isSneaking = this.isSneaking();
if (isSneaking !== this.serverSneakState) {
let state = isSneaking ? ClientPlayerStatePacket.START_SNEAKING : ClientPlayerStatePacket.STOP_SNEAKING;
this.networkHandler.sendPacket(new ClientPlayerStatePacket(this.id, state));
this.serverSneakState = isSneaking;
}
let movementX = this.x - this.lastReportedX;
let movementY = this.y - this.lastReportedY;
let movementZ = this.z - this.lastReportedZ;
let movementYaw = this.rotationYaw - this.lastReportedYaw;
let movementPitch = this.rotationPitch - this.lastReportedPitch;
let reportPosition = movementX * movementX + movementY * movementY + movementZ * movementZ > 9.0E-4 || this.positionUpdateTicks >= 20;
let reportRotation = movementYaw !== 0.0 || movementPitch !== 0.0;
// Send position and rotation to server
if (reportPosition && reportRotation) {
this.networkHandler.sendPacket(new ClientPlayerPositionRotationPacket(this.onGround, this.x, this.y, this.z, this.rotationYaw, this.rotationPitch));
} else if (reportPosition) {
this.networkHandler.sendPacket(new ClientPlayerPositionPacket(this.onGround, this.x, this.y, this.z));
} else if (reportRotation) {
this.networkHandler.sendPacket(new ClientPlayerRotationPacket(this.onGround, this.rotationYaw, this.rotationPitch));
} else {
this.networkHandler.sendPacket(new ClientPlayerMovementPacket(this.onGround));
}
this.positionUpdateTicks++;
if (reportPosition) {
this.lastReportedX = this.x;
this.lastReportedY = this.y;
this.lastReportedZ = this.z;
this.positionUpdateTicks = 0;
}
if (reportRotation) {
this.lastReportedYaw = this.rotationYaw;
this.lastReportedPitch = this.rotationPitch;
}
}
getNetworkHandler() {
return this.networkHandler;
}
}