192 lines
5.4 KiB
Java
192 lines
5.4 KiB
Java
package net.minecraft.network.protocol.game;
|
|
|
|
import net.minecraft.network.FriendlyByteBuf;
|
|
import net.minecraft.network.codec.StreamCodec;
|
|
import net.minecraft.network.protocol.Packet;
|
|
import net.minecraft.network.protocol.PacketType;
|
|
import net.minecraft.util.Mth;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.level.Level;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public abstract class ClientboundMoveEntityPacket implements Packet<ClientGamePacketListener> {
|
|
protected final int entityId;
|
|
protected final short xa;
|
|
protected final short ya;
|
|
protected final short za;
|
|
protected final byte yRot;
|
|
protected final byte xRot;
|
|
protected final boolean onGround;
|
|
protected final boolean hasRot;
|
|
protected final boolean hasPos;
|
|
|
|
protected ClientboundMoveEntityPacket(int entityId, short xa, short ya, short za, byte yRot, byte xRot, boolean onGround, boolean hasRot, boolean hasPos) {
|
|
this.entityId = entityId;
|
|
this.xa = xa;
|
|
this.ya = ya;
|
|
this.za = za;
|
|
this.yRot = yRot;
|
|
this.xRot = xRot;
|
|
this.onGround = onGround;
|
|
this.hasRot = hasRot;
|
|
this.hasPos = hasPos;
|
|
}
|
|
|
|
@Override
|
|
public abstract PacketType<? extends ClientboundMoveEntityPacket> type();
|
|
|
|
/**
|
|
* Passes this Packet on to the NetHandler for processing.
|
|
*/
|
|
public void handle(ClientGamePacketListener handler) {
|
|
handler.handleMoveEntity(this);
|
|
}
|
|
|
|
public String toString() {
|
|
return "Entity_" + super.toString();
|
|
}
|
|
|
|
@Nullable
|
|
public Entity getEntity(Level level) {
|
|
return level.getEntity(this.entityId);
|
|
}
|
|
|
|
public short getXa() {
|
|
return this.xa;
|
|
}
|
|
|
|
public short getYa() {
|
|
return this.ya;
|
|
}
|
|
|
|
public short getZa() {
|
|
return this.za;
|
|
}
|
|
|
|
public float getYRot() {
|
|
return Mth.unpackDegrees(this.yRot);
|
|
}
|
|
|
|
public float getXRot() {
|
|
return Mth.unpackDegrees(this.xRot);
|
|
}
|
|
|
|
public boolean hasRotation() {
|
|
return this.hasRot;
|
|
}
|
|
|
|
public boolean hasPosition() {
|
|
return this.hasPos;
|
|
}
|
|
|
|
public boolean isOnGround() {
|
|
return this.onGround;
|
|
}
|
|
|
|
public static class Pos extends ClientboundMoveEntityPacket {
|
|
public static final StreamCodec<FriendlyByteBuf, ClientboundMoveEntityPacket.Pos> STREAM_CODEC = Packet.codec(
|
|
ClientboundMoveEntityPacket.Pos::write, ClientboundMoveEntityPacket.Pos::read
|
|
);
|
|
|
|
public Pos(int entityId, short xa, short ya, short za, boolean onGround) {
|
|
super(entityId, xa, ya, za, (byte)0, (byte)0, onGround, false, true);
|
|
}
|
|
|
|
private static ClientboundMoveEntityPacket.Pos read(FriendlyByteBuf buffer) {
|
|
int i = buffer.readVarInt();
|
|
short s = buffer.readShort();
|
|
short t = buffer.readShort();
|
|
short u = buffer.readShort();
|
|
boolean bl = buffer.readBoolean();
|
|
return new ClientboundMoveEntityPacket.Pos(i, s, t, u, bl);
|
|
}
|
|
|
|
/**
|
|
* Writes the raw packet data to the data stream.
|
|
*/
|
|
private void write(FriendlyByteBuf buffer) {
|
|
buffer.writeVarInt(this.entityId);
|
|
buffer.writeShort(this.xa);
|
|
buffer.writeShort(this.ya);
|
|
buffer.writeShort(this.za);
|
|
buffer.writeBoolean(this.onGround);
|
|
}
|
|
|
|
@Override
|
|
public PacketType<ClientboundMoveEntityPacket.Pos> type() {
|
|
return GamePacketTypes.CLIENTBOUND_MOVE_ENTITY_POS;
|
|
}
|
|
}
|
|
|
|
public static class PosRot extends ClientboundMoveEntityPacket {
|
|
public static final StreamCodec<FriendlyByteBuf, ClientboundMoveEntityPacket.PosRot> STREAM_CODEC = Packet.codec(
|
|
ClientboundMoveEntityPacket.PosRot::write, ClientboundMoveEntityPacket.PosRot::read
|
|
);
|
|
|
|
public PosRot(int entityId, short xa, short ya, short za, byte yRot, byte xRot, boolean onGround) {
|
|
super(entityId, xa, ya, za, yRot, xRot, onGround, true, true);
|
|
}
|
|
|
|
private static ClientboundMoveEntityPacket.PosRot read(FriendlyByteBuf buffer) {
|
|
int i = buffer.readVarInt();
|
|
short s = buffer.readShort();
|
|
short t = buffer.readShort();
|
|
short u = buffer.readShort();
|
|
byte b = buffer.readByte();
|
|
byte c = buffer.readByte();
|
|
boolean bl = buffer.readBoolean();
|
|
return new ClientboundMoveEntityPacket.PosRot(i, s, t, u, b, c, bl);
|
|
}
|
|
|
|
/**
|
|
* Writes the raw packet data to the data stream.
|
|
*/
|
|
private void write(FriendlyByteBuf buffer) {
|
|
buffer.writeVarInt(this.entityId);
|
|
buffer.writeShort(this.xa);
|
|
buffer.writeShort(this.ya);
|
|
buffer.writeShort(this.za);
|
|
buffer.writeByte(this.yRot);
|
|
buffer.writeByte(this.xRot);
|
|
buffer.writeBoolean(this.onGround);
|
|
}
|
|
|
|
@Override
|
|
public PacketType<ClientboundMoveEntityPacket.PosRot> type() {
|
|
return GamePacketTypes.CLIENTBOUND_MOVE_ENTITY_POS_ROT;
|
|
}
|
|
}
|
|
|
|
public static class Rot extends ClientboundMoveEntityPacket {
|
|
public static final StreamCodec<FriendlyByteBuf, ClientboundMoveEntityPacket.Rot> STREAM_CODEC = Packet.codec(
|
|
ClientboundMoveEntityPacket.Rot::write, ClientboundMoveEntityPacket.Rot::read
|
|
);
|
|
|
|
public Rot(int entityId, byte yRot, byte xRot, boolean onGround) {
|
|
super(entityId, (short)0, (short)0, (short)0, yRot, xRot, onGround, true, false);
|
|
}
|
|
|
|
private static ClientboundMoveEntityPacket.Rot read(FriendlyByteBuf buffer) {
|
|
int i = buffer.readVarInt();
|
|
byte b = buffer.readByte();
|
|
byte c = buffer.readByte();
|
|
boolean bl = buffer.readBoolean();
|
|
return new ClientboundMoveEntityPacket.Rot(i, b, c, bl);
|
|
}
|
|
|
|
/**
|
|
* Writes the raw packet data to the data stream.
|
|
*/
|
|
private void write(FriendlyByteBuf buffer) {
|
|
buffer.writeVarInt(this.entityId);
|
|
buffer.writeByte(this.yRot);
|
|
buffer.writeByte(this.xRot);
|
|
buffer.writeBoolean(this.onGround);
|
|
}
|
|
|
|
@Override
|
|
public PacketType<ClientboundMoveEntityPacket.Rot> type() {
|
|
return GamePacketTypes.CLIENTBOUND_MOVE_ENTITY_ROT;
|
|
}
|
|
}
|
|
}
|