mirror of https://github.com/Minestom/Minestom.git
More readable server packets
This commit is contained in:
parent
7b8a8e3eb0
commit
f9dcbafddf
|
@ -3,9 +3,14 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.entity.GameMode;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.world.DimensionType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
||||
import org.jglrxavpok.hephaistos.nbt.NBTException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class RespawnPacket implements ServerPacket {
|
||||
|
||||
|
@ -16,6 +21,11 @@ public class RespawnPacket implements ServerPacket {
|
|||
public boolean isFlat = true;
|
||||
public boolean copyMeta = true;
|
||||
|
||||
public RespawnPacket() {
|
||||
dimensionType = DimensionType.OVERWORLD;
|
||||
gameMode = GameMode.SURVIVAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeNBT("", dimensionType.toNBT());
|
||||
|
@ -31,6 +41,27 @@ public class RespawnPacket implements ServerPacket {
|
|||
writer.writeBoolean(copyMeta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
try {
|
||||
dimensionType = DimensionType.fromNBT((NBTCompound) reader.readTag());
|
||||
|
||||
// dimension type name
|
||||
reader.readSizedString(Integer.MAX_VALUE);
|
||||
|
||||
hashedSeed = reader.readLong();
|
||||
gameMode = GameMode.values()[reader.readByte()];
|
||||
// TODO: hardcore flag
|
||||
reader.readByte();
|
||||
isDebug = reader.readBoolean();
|
||||
isFlat = reader.readBoolean();
|
||||
copyMeta = reader.readBoolean();
|
||||
} catch (IOException | NBTException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("Failed to read DimensionType inside RespawnPacket", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.RESPAWN;
|
||||
|
|
|
@ -4,6 +4,7 @@ import net.kyori.adventure.text.Component;
|
|||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -32,6 +33,12 @@ public class ScoreboardObjectivePacket implements ComponentHoldingServerPacket {
|
|||
*/
|
||||
public Type type;
|
||||
|
||||
public ScoreboardObjectivePacket() {
|
||||
objectiveName = "";
|
||||
objectiveValue = Component.empty();
|
||||
type = Type.INTEGER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeSizedString(objectiveName);
|
||||
|
@ -43,6 +50,17 @@ public class ScoreboardObjectivePacket implements ComponentHoldingServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
objectiveName = reader.readSizedString(Integer.MAX_VALUE);
|
||||
mode = reader.readByte();
|
||||
|
||||
if(mode == 0 || mode == 2) {
|
||||
objectiveValue = reader.readComponent(Integer.MAX_VALUE);
|
||||
type = Type.values()[reader.readVarInt()];
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SCOREBOARD_OBJECTIVE;
|
||||
|
|
|
@ -2,13 +2,18 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class SelectAdvancementTabPacket implements ServerPacket {
|
||||
|
||||
@Nullable
|
||||
public String identifier;
|
||||
|
||||
public SelectAdvancementTabPacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
final boolean hasId = identifier != null;
|
||||
|
@ -19,6 +24,16 @@ public class SelectAdvancementTabPacket implements ServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
boolean hasID = reader.readBoolean();
|
||||
if(hasID) {
|
||||
identifier = reader.readSizedString(Integer.MAX_VALUE);
|
||||
} else {
|
||||
identifier = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SELECT_ADVANCEMENT_TAB;
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.world.Difficulty;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
@ -11,12 +12,22 @@ public class ServerDifficultyPacket implements ServerPacket {
|
|||
public Difficulty difficulty;
|
||||
public boolean locked;
|
||||
|
||||
public ServerDifficultyPacket() {
|
||||
difficulty = Difficulty.NORMAL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeByte((byte) difficulty.ordinal());
|
||||
writer.writeBoolean(locked);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
difficulty = Difficulty.values()[reader.readByte()];
|
||||
locked = reader.readBoolean();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SERVER_DIFFICULTY;
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -10,12 +11,20 @@ public class SetCooldownPacket implements ServerPacket {
|
|||
public int itemId;
|
||||
public int cooldownTicks;
|
||||
|
||||
public SetCooldownPacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(itemId);
|
||||
writer.writeVarInt(cooldownTicks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
itemId = reader.readVarInt();
|
||||
cooldownTicks = reader.readVarInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SET_COOLDOWN;
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -11,6 +12,8 @@ public class SetExperiencePacket implements ServerPacket {
|
|||
public int level;
|
||||
public int totalExperience;
|
||||
|
||||
public SetExperiencePacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeFloat(percentage);
|
||||
|
@ -18,6 +21,13 @@ public class SetExperiencePacket implements ServerPacket {
|
|||
writer.writeVarInt(totalExperience);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
percentage = reader.readFloat();
|
||||
level = reader.readVarInt();
|
||||
totalExperience = reader.readVarInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SET_EXPERIENCE;
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -10,12 +11,22 @@ public class SetPassengersPacket implements ServerPacket {
|
|||
public int vehicleEntityId;
|
||||
public int[] passengersId;
|
||||
|
||||
public SetPassengersPacket() {
|
||||
passengersId = new int[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(vehicleEntityId);
|
||||
writer.writeVarIntArray(passengersId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
vehicleEntityId = reader.readVarInt();
|
||||
passengersId = reader.readVarIntArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SET_PASSENGERS;
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.item.ItemStack;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -12,6 +13,10 @@ public class SetSlotPacket implements ServerPacket {
|
|||
public short slot;
|
||||
public ItemStack itemStack;
|
||||
|
||||
public SetSlotPacket() {
|
||||
itemStack = ItemStack.getAirItem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeByte(windowId);
|
||||
|
@ -19,6 +24,13 @@ public class SetSlotPacket implements ServerPacket {
|
|||
writer.writeItemStack(itemStack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
windowId = reader.readByte();
|
||||
slot = reader.readShort();
|
||||
itemStack = reader.readItemStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SET_SLOT;
|
||||
|
|
|
@ -6,6 +6,7 @@ import net.minestom.server.network.packet.server.ServerPacket;
|
|||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.sound.SoundEvent;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -17,6 +18,10 @@ public class SoundEffectPacket implements ServerPacket {
|
|||
public float volume;
|
||||
public float pitch;
|
||||
|
||||
public SoundEffectPacket() {
|
||||
soundSource = Source.AMBIENT;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static SoundEffectPacket create(Source category, SoundEvent sound, Position position, float volume, float pitch) {
|
||||
SoundEffectPacket packet = new SoundEffectPacket();
|
||||
|
@ -41,6 +46,17 @@ public class SoundEffectPacket implements ServerPacket {
|
|||
writer.writeFloat(pitch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
soundId = reader.readVarInt();
|
||||
soundSource = Source.values()[reader.readVarInt()];
|
||||
x = reader.readInt()/8;
|
||||
y = reader.readInt()/8;
|
||||
z = reader.readInt()/8;
|
||||
volume = reader.readFloat();
|
||||
pitch = reader.readFloat();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SOUND_EFFECT;
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -17,6 +18,11 @@ public class SpawnEntityPacket implements ServerPacket {
|
|||
public int data;
|
||||
public short velocityX, velocityY, velocityZ;
|
||||
|
||||
public SpawnEntityPacket() {
|
||||
uuid = new UUID(0, 0);
|
||||
position = new Position();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(entityId);
|
||||
|
@ -37,6 +43,24 @@ public class SpawnEntityPacket implements ServerPacket {
|
|||
writer.writeShort(velocityZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
entityId = reader.readVarInt();
|
||||
uuid = reader.readUuid();
|
||||
type = reader.readVarInt();
|
||||
|
||||
position = new Position(reader.readDouble(), reader.readDouble(), reader.readDouble());
|
||||
|
||||
position.setYaw(reader.readByte() * 360f / 256f);
|
||||
position.setPitch(reader.readByte() * 360f / 256f);
|
||||
|
||||
data = reader.readInt();
|
||||
|
||||
velocityX = reader.readShort();
|
||||
velocityY = reader.readShort();
|
||||
velocityZ = reader.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SPAWN_ENTITY;
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -12,6 +13,10 @@ public class SpawnExperienceOrbPacket implements ServerPacket {
|
|||
public Position position;
|
||||
public short expCount;
|
||||
|
||||
public SpawnExperienceOrbPacket() {
|
||||
position = new Position();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(entityId);
|
||||
|
@ -21,6 +26,13 @@ public class SpawnExperienceOrbPacket implements ServerPacket {
|
|||
writer.writeShort(expCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
entityId = reader.readVarInt();
|
||||
position = new Position(reader.readDouble(), reader.readDouble(), reader.readDouble());
|
||||
expCount = reader.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SPAWN_EXPERIENCE_ORB;
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -17,6 +18,11 @@ public class SpawnLivingEntityPacket implements ServerPacket {
|
|||
public float headPitch;
|
||||
public short velocityX, velocityY, velocityZ;
|
||||
|
||||
public SpawnLivingEntityPacket() {
|
||||
entityUuid = new UUID(0, 0);
|
||||
position = new Position();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(entityId);
|
||||
|
@ -34,7 +40,23 @@ public class SpawnLivingEntityPacket implements ServerPacket {
|
|||
writer.writeShort(velocityX);
|
||||
writer.writeShort(velocityY);
|
||||
writer.writeShort(velocityZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
entityId = reader.readVarInt();
|
||||
entityUuid = reader.readUuid();
|
||||
entityType = reader.readVarInt();
|
||||
|
||||
position = new Position(reader.readDouble(), reader.readDouble(), reader.readDouble());
|
||||
|
||||
position.setYaw(reader.readByte() * 360f / 256f);
|
||||
position.setPitch(reader.readByte() * 360f / 256f);
|
||||
headPitch = reader.readByte() * 360f / 256f;
|
||||
|
||||
velocityX = reader.readShort();
|
||||
velocityY = reader.readShort();
|
||||
velocityZ = reader.readShort();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -16,6 +17,11 @@ public class SpawnPaintingPacket implements ServerPacket {
|
|||
public BlockPosition position;
|
||||
public byte direction;
|
||||
|
||||
public SpawnPaintingPacket() {
|
||||
entityUuid = new UUID(0, 0);
|
||||
position = new BlockPosition(0, 0, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(entityId);
|
||||
|
@ -25,6 +31,15 @@ public class SpawnPaintingPacket implements ServerPacket {
|
|||
writer.writeByte(direction);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
entityId = reader.readVarInt();
|
||||
entityUuid = reader.readUuid();
|
||||
motive = reader.readVarInt();
|
||||
position = reader.readBlockPosition();
|
||||
direction = reader.readByte();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SPAWN_PAINTING;
|
||||
|
|
|
@ -2,7 +2,9 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.Position;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -14,6 +16,11 @@ public class SpawnPlayerPacket implements ServerPacket {
|
|||
public UUID playerUuid;
|
||||
public Position position;
|
||||
|
||||
public SpawnPlayerPacket() {
|
||||
playerUuid = new UUID(0,0);
|
||||
position = new Position();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(entityId);
|
||||
|
@ -25,6 +32,15 @@ public class SpawnPlayerPacket implements ServerPacket {
|
|||
writer.writeByte((byte) (position.getPitch() * 256f / 360f));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
entityId = reader.readVarInt();
|
||||
playerUuid = reader.readUuid();
|
||||
position = new Position(reader.readDouble(), reader.readDouble(), reader.readDouble());
|
||||
position.setYaw((reader.readByte() * 360f) / 256f);
|
||||
position.setPitch((reader.readByte() * 360f) / 256f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SPAWN_PLAYER;
|
||||
|
|
|
@ -2,6 +2,8 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.BlockPosition;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -9,11 +11,21 @@ public class SpawnPositionPacket implements ServerPacket {
|
|||
|
||||
public int x, y, z;
|
||||
|
||||
public SpawnPositionPacket() {}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeBlockPosition(x, y, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
BlockPosition pos = reader.readBlockPosition();
|
||||
x = pos.getX();
|
||||
y = pos.getY();
|
||||
z = pos.getZ();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.SPAWN_POSITION;
|
||||
|
|
|
@ -3,13 +3,20 @@ package net.minestom.server.network.packet.server.play;
|
|||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.stat.StatisticCategory;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.binary.Readable;
|
||||
import net.minestom.server.utils.binary.Writeable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class StatisticsPacket implements ServerPacket {
|
||||
|
||||
public Statistic[] statistics;
|
||||
|
||||
public StatisticsPacket() {
|
||||
statistics = new Statistic[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(statistics.length);
|
||||
|
@ -18,22 +25,40 @@ public class StatisticsPacket implements ServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
int length = reader.readVarInt();
|
||||
statistics = new Statistic[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
statistics[i] = new Statistic();
|
||||
statistics[i].read(reader);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.STATISTICS;
|
||||
}
|
||||
|
||||
public static class Statistic {
|
||||
public static class Statistic implements Writeable, Readable {
|
||||
|
||||
public StatisticCategory category;
|
||||
public int statisticId;
|
||||
public int value;
|
||||
|
||||
private void write(BinaryWriter writer) {
|
||||
@Override
|
||||
public void write(BinaryWriter writer) {
|
||||
writer.writeVarInt(category.ordinal());
|
||||
writer.writeVarInt(statisticId);
|
||||
writer.writeVarInt(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
category = StatisticCategory.values()[reader.readVarInt()];
|
||||
statisticId = reader.readVarInt();
|
||||
value = reader.readVarInt();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -11,6 +12,10 @@ public class StopSoundPacket implements ServerPacket {
|
|||
public int source;
|
||||
public String sound;
|
||||
|
||||
public StopSoundPacket() {
|
||||
sound = "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeByte(flags);
|
||||
|
@ -20,6 +25,17 @@ public class StopSoundPacket implements ServerPacket {
|
|||
writer.writeSizedString(sound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
flags = reader.readByte();
|
||||
if(flags == 3 || flags == 1) {
|
||||
source = reader.readVarInt();
|
||||
}
|
||||
if(flags == 2 || flags == 3) {
|
||||
sound = reader.readSizedString(Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.STOP_SOUND;
|
||||
|
|
|
@ -5,6 +5,7 @@ import net.minestom.server.adventure.ComponentHolder;
|
|||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
@ -21,6 +22,10 @@ public class TabCompletePacket implements ComponentHoldingServerPacket {
|
|||
public int length;
|
||||
public Match[] matches;
|
||||
|
||||
public TabCompletePacket() {
|
||||
matches = new Match[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(@NotNull BinaryWriter writer) {
|
||||
writer.writeVarInt(transactionId);
|
||||
|
@ -36,6 +41,29 @@ public class TabCompletePacket implements ComponentHoldingServerPacket {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
transactionId = reader.readVarInt();
|
||||
start = reader.readVarInt();
|
||||
length = reader.readVarInt();
|
||||
|
||||
int matchCount = reader.readVarInt();
|
||||
matches = new Match[matchCount];
|
||||
for (int i = 0; i < matchCount; i++) {
|
||||
String match = reader.readSizedString(Integer.MAX_VALUE);
|
||||
boolean hasTooltip = reader.readBoolean();
|
||||
JsonMessage tooltip = null;
|
||||
if(hasTooltip) {
|
||||
tooltip = reader.readJsonMessage(Integer.MAX_VALUE);
|
||||
}
|
||||
Match newMatch = new Match();
|
||||
newMatch.match = match;
|
||||
newMatch.hasTooltip = hasTooltip;
|
||||
newMatch.tooltip = tooltip;
|
||||
matches[i] = newMatch;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.TAB_COMPLETE;
|
||||
|
|
|
@ -6,8 +6,11 @@ import net.minestom.server.adventure.AdventurePacketConvertor;
|
|||
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.validate.Check;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -61,6 +64,11 @@ public class TeamsPacket implements ComponentHoldingServerPacket {
|
|||
*/
|
||||
public String[] entities;
|
||||
|
||||
public TeamsPacket() {
|
||||
teamName = "";
|
||||
action = Action.REMOVE_TEAM;
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes data into the {@link BinaryWriter}
|
||||
*
|
||||
|
@ -97,6 +105,32 @@ public class TeamsPacket implements ComponentHoldingServerPacket {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
teamName = reader.readSizedString(Integer.MAX_VALUE);
|
||||
action = Action.values()[reader.readByte()];
|
||||
|
||||
switch (action) {
|
||||
case CREATE_TEAM:
|
||||
case UPDATE_TEAM_INFO:
|
||||
this.teamDisplayName = reader.readJsonMessage(Integer.MAX_VALUE);
|
||||
this.friendlyFlags = reader.readByte();
|
||||
nameTagVisibility = NameTagVisibility.fromIdentifier(reader.readSizedString(Integer.MAX_VALUE));
|
||||
collisionRule = CollisionRule.fromIdentifier(reader.readSizedString(Integer.MAX_VALUE));
|
||||
this.teamColor = reader.readVarInt();
|
||||
this.teamPrefix = reader.readJsonMessage(Integer.MAX_VALUE);
|
||||
this.teamSuffix = reader.readJsonMessage(Integer.MAX_VALUE);
|
||||
break;
|
||||
case REMOVE_TEAM:
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (action == Action.CREATE_TEAM || action == Action.ADD_PLAYERS_TEAM || action == Action.REMOVE_PLAYERS_TEAM) {
|
||||
entities = reader.readSizedStringArray(Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the identifier of the packet
|
||||
*
|
||||
|
@ -197,6 +231,16 @@ public class TeamsPacket implements ComponentHoldingServerPacket {
|
|||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static NameTagVisibility fromIdentifier(String identifier) {
|
||||
for(NameTagVisibility v : values()) {
|
||||
if(v.getIdentifier().equals(identifier))
|
||||
return v;
|
||||
}
|
||||
Check.fail("Identifier for NameTagVisibility is invalid: "+identifier);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the client identifier
|
||||
*
|
||||
|
@ -243,6 +287,16 @@ public class TeamsPacket implements ComponentHoldingServerPacket {
|
|||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static CollisionRule fromIdentifier(String identifier) {
|
||||
for(CollisionRule v : values()) {
|
||||
if(v.getIdentifier().equals(identifier))
|
||||
return v;
|
||||
}
|
||||
Check.fail("Identifier for CollisionRule is invalid: "+identifier);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the identifier of the rule
|
||||
*
|
||||
|
|
|
@ -2,9 +2,14 @@ package net.minestom.server.network.packet.server.play;
|
|||
|
||||
import net.minestom.server.network.packet.server.ServerPacket;
|
||||
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
||||
import net.minestom.server.utils.binary.BinaryReader;
|
||||
import net.minestom.server.utils.binary.BinaryWriter;
|
||||
import net.minestom.server.utils.binary.Readable;
|
||||
import net.minestom.server.utils.binary.Writeable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class WorldBorderPacket implements ServerPacket {
|
||||
|
||||
public Action action;
|
||||
|
@ -26,27 +31,42 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
wbAction.write(writer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
action = Action.values()[reader.readVarInt()];
|
||||
wbAction = action.generateNewInstance();
|
||||
wbAction.read(reader);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return ServerPacketIdentifier.WORLD_BORDER;
|
||||
}
|
||||
|
||||
public enum Action {
|
||||
SET_SIZE,
|
||||
LERP_SIZE,
|
||||
SET_CENTER,
|
||||
INITIALIZE,
|
||||
SET_WARNING_TIME,
|
||||
SET_WARNING_BLOCKS
|
||||
SET_SIZE(() -> new WBSetSize(0.0)),
|
||||
LERP_SIZE(() -> new WBLerpSize(0.0, 0.0, 0)),
|
||||
SET_CENTER(() -> new WBSetCenter(0.0, 0.0)),
|
||||
INITIALIZE(() -> new WBInitialize(0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0)),
|
||||
SET_WARNING_TIME(() -> new WBSetWarningTime(0)),
|
||||
SET_WARNING_BLOCKS(() -> new WBSetWarningBlocks(0));
|
||||
|
||||
private Supplier<WBAction> generator;
|
||||
|
||||
Action(Supplier<WBAction> generator) {
|
||||
this.generator = generator;
|
||||
}
|
||||
|
||||
public WBAction generateNewInstance() {
|
||||
return generator.get();
|
||||
}
|
||||
}
|
||||
|
||||
public static abstract class WBAction {
|
||||
public abstract void write(BinaryWriter writer);
|
||||
}
|
||||
public static abstract class WBAction implements Writeable, Readable {}
|
||||
|
||||
public static class WBSetSize extends WBAction {
|
||||
|
||||
public final double diameter;
|
||||
public double diameter;
|
||||
|
||||
public WBSetSize(double diameter) {
|
||||
this.diameter = diameter;
|
||||
|
@ -56,13 +76,18 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
public void write(BinaryWriter writer) {
|
||||
writer.writeDouble(diameter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
diameter = reader.readDouble();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WBLerpSize extends WBAction {
|
||||
|
||||
public final double oldDiameter;
|
||||
public final double newDiameter;
|
||||
public final long speed;
|
||||
public double oldDiameter;
|
||||
public double newDiameter;
|
||||
public long speed;
|
||||
|
||||
public WBLerpSize(double oldDiameter, double newDiameter, long speed) {
|
||||
this.oldDiameter = oldDiameter;
|
||||
|
@ -76,11 +101,18 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
writer.writeDouble(newDiameter);
|
||||
writer.writeVarLong(speed);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
oldDiameter = reader.readDouble();
|
||||
newDiameter = reader.readDouble();
|
||||
speed = reader.readVarLong();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WBSetCenter extends WBAction {
|
||||
|
||||
public final double x, z;
|
||||
public double x, z;
|
||||
|
||||
public WBSetCenter(double x, double z) {
|
||||
this.x = x;
|
||||
|
@ -92,17 +124,23 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
writer.writeDouble(x);
|
||||
writer.writeDouble(z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
x = reader.readDouble();
|
||||
z = reader.readDouble();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WBInitialize extends WBAction {
|
||||
|
||||
public final double x, z;
|
||||
public final double oldDiameter;
|
||||
public final double newDiameter;
|
||||
public final long speed;
|
||||
public final int portalTeleportBoundary;
|
||||
public final int warningTime;
|
||||
public final int warningBlocks;
|
||||
public double x, z;
|
||||
public double oldDiameter;
|
||||
public double newDiameter;
|
||||
public long speed;
|
||||
public int portalTeleportBoundary;
|
||||
public int warningTime;
|
||||
public int warningBlocks;
|
||||
|
||||
public WBInitialize(double x, double z, double oldDiameter, double newDiameter, long speed,
|
||||
int portalTeleportBoundary, int warningTime, int warningBlocks) {
|
||||
|
@ -127,11 +165,23 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
writer.writeVarInt(warningTime);
|
||||
writer.writeVarInt(warningBlocks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
x = reader.readDouble();
|
||||
z = reader.readDouble();
|
||||
oldDiameter = reader.readDouble();
|
||||
newDiameter = reader.readDouble();
|
||||
speed = reader.readVarLong();
|
||||
portalTeleportBoundary = reader.readVarInt();
|
||||
warningTime = reader.readVarInt();
|
||||
warningBlocks = reader.readVarInt();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WBSetWarningTime extends WBAction {
|
||||
|
||||
public final int warningTime;
|
||||
public int warningTime;
|
||||
|
||||
public WBSetWarningTime(int warningTime) {
|
||||
this.warningTime = warningTime;
|
||||
|
@ -141,11 +191,16 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
public void write(BinaryWriter writer) {
|
||||
writer.writeVarInt(warningTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
warningTime = reader.readVarInt();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WBSetWarningBlocks extends WBAction {
|
||||
|
||||
public final int warningBlocks;
|
||||
public int warningBlocks;
|
||||
|
||||
public WBSetWarningBlocks(int warningBlocks) {
|
||||
this.warningBlocks = warningBlocks;
|
||||
|
@ -155,6 +210,11 @@ public class WorldBorderPacket implements ServerPacket {
|
|||
public void write(BinaryWriter writer) {
|
||||
writer.writeVarInt(warningBlocks);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(@NotNull BinaryReader reader) {
|
||||
warningBlocks = reader.readVarInt();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -88,6 +88,24 @@ public final class Utils {
|
|||
return result;
|
||||
}
|
||||
|
||||
public static long readVarLong(ByteBuf buffer) {
|
||||
int numRead = 0;
|
||||
long result = 0;
|
||||
byte read;
|
||||
do {
|
||||
read = buffer.readByte();
|
||||
long value = (read & 0b01111111);
|
||||
result |= (value << (7 * numRead));
|
||||
|
||||
numRead++;
|
||||
if (numRead > 10) {
|
||||
throw new RuntimeException("VarLong is too big");
|
||||
}
|
||||
} while ((read & 0b10000000) != 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void writeVarLong(BinaryWriter writer, long value) {
|
||||
do {
|
||||
byte temp = (byte) (value & 0b01111111);
|
||||
|
|
|
@ -43,6 +43,10 @@ public class BinaryReader extends InputStream {
|
|||
return Utils.readVarInt(buffer);
|
||||
}
|
||||
|
||||
public long readVarLong() {
|
||||
return Utils.readVarLong(buffer);
|
||||
}
|
||||
|
||||
public boolean readBoolean() {
|
||||
return buffer.readBoolean();
|
||||
}
|
||||
|
|
|
@ -37,6 +37,11 @@ public final class Check {
|
|||
}
|
||||
}
|
||||
|
||||
@Contract("_ -> fail")
|
||||
public static void fail(@NotNull String reason) {
|
||||
throw new IllegalArgumentException(reason);
|
||||
}
|
||||
|
||||
@Contract("true, _ -> fail")
|
||||
public static void stateCondition(boolean condition, @NotNull String reason) {
|
||||
if (condition) {
|
||||
|
|
|
@ -82,6 +82,24 @@ public class DimensionType {
|
|||
return new DimensionTypeBuilder();
|
||||
}
|
||||
|
||||
public static DimensionType fromNBT(NBTCompound nbt) {
|
||||
return DimensionType.builder(NamespaceID.from(nbt.getString("name")))
|
||||
.ambientLight(nbt.getFloat("ambient_light"))
|
||||
.infiniburn(NamespaceID.from(nbt.getString("infiniburn")))
|
||||
.natural(nbt.getByte("natural") != 0)
|
||||
.ceilingEnabled(nbt.getByte("has_ceiling") != 0)
|
||||
.skylightEnabled(nbt.getByte("has_skylight") != 0)
|
||||
.ultrawarm(nbt.getByte("ultrawarm") != 0)
|
||||
.raidCapable(nbt.getByte("has_raids") != 0)
|
||||
.respawnAnchorSafe(nbt.getByte("respawn_anchor_works") != 0)
|
||||
.bedSafe(nbt.getByte("bed_works") != 0)
|
||||
.effects(nbt.getString("effects"))
|
||||
.piglinSafe(nbt.getByte("piglin_safe") != 0)
|
||||
.logicalHeight(nbt.getInt("logical_height"))
|
||||
.coordinateScale(nbt.getInt("coordinate_scale"))
|
||||
.build();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public NBTCompound toIndexedNBT() {
|
||||
NBTCompound nbt = new NBTCompound();
|
||||
|
|
Loading…
Reference in New Issue