Update most packets

This commit is contained in:
TheMode 2021-05-31 18:29:44 +02:00
parent 98ccde56fb
commit 17fc62632d
23 changed files with 473 additions and 43 deletions

View File

@ -394,9 +394,9 @@ public class Entity implements Viewable, Tickable, EventHandler, DataContainer,
return false;
}
DestroyEntitiesPacket destroyEntitiesPacket = new DestroyEntitiesPacket();
destroyEntitiesPacket.entityIds = new int[]{getEntityId()};
player.getPlayerConnection().sendPacket(destroyEntitiesPacket);
DestroyEntityPacket destroyEntityPacket = new DestroyEntityPacket();
destroyEntityPacket.entityId = getEntityId();
player.getPlayerConnection().sendPacket(destroyEntityPacket);
player.viewableEntities.remove(this);
return true;
}

View File

@ -1229,8 +1229,8 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
if (instance == null)
return;
DestroyEntitiesPacket destroyEntitiesPacket = new DestroyEntitiesPacket();
destroyEntitiesPacket.entityIds = new int[]{getEntityId()};
DestroyEntityPacket destroyEntityPacket = new DestroyEntityPacket();
destroyEntityPacket.entityId = getEntityId();
final PlayerInfoPacket removePlayerPacket = getRemovePlayerToList();
final PlayerInfoPacket addPlayerPacket = getAddPlayerToList();
@ -1241,14 +1241,14 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
respawnPacket.isFlat = levelFlat;
playerConnection.sendPacket(removePlayerPacket);
playerConnection.sendPacket(destroyEntitiesPacket);
playerConnection.sendPacket(destroyEntityPacket);
playerConnection.sendPacket(respawnPacket);
playerConnection.sendPacket(addPlayerPacket);
{
// Remove player
sendPacketToViewers(removePlayerPacket);
sendPacketToViewers(destroyEntitiesPacket);
sendPacketToViewers(destroyEntityPacket);
// Show player again
getViewers().forEach(player -> showPlayer(player.getPlayerConnection()));

View File

@ -24,7 +24,7 @@ public class ServerPacketIdentifier {
public static final int BOSS_BAR = 0x0D;
public static final int SERVER_DIFFICULTY = 0x0E;
public static final int CHAT_MESSAGE = 0x0F;
// TODO clear titles
public static final int CLEAR_TITLES = 0x10;
public static final int TAB_COMPLETE = 0x11;
public static final int DECLARE_COMMANDS = 0x12;
//public static final int WINDOW_CONFIRMATION = 0x11;
@ -41,7 +41,7 @@ public class ServerPacketIdentifier {
public static final int UNLOAD_CHUNK = 0x1D;
public static final int CHANGE_GAME_STATE = 0x1E;
public static final int OPEN_HORSE_WINDOW = 0x1F;
// TODO initialize world border
public static final int INITIALIZE_WORLD_BORDER = 0x20;
public static final int KEEP_ALIVE = 0x21;
public static final int CHUNK_DATA = 0x22;
public static final int EFFECT = 0x23;
@ -60,22 +60,26 @@ public class ServerPacketIdentifier {
public static final int OPEN_SIGN_EDITOR = 0x2F;
public static final int CRAFT_RECIPE_RESPONSE = 0x30;
public static final int PLAYER_ABILITIES = 0x31;
//public static final int COMBAT_EVENT = 0x31;
// TODO END/ENTER/DEATH combat event
public static final int END_COMBAT_EVENT = 0x32;
public static final int ENTER_COMBAT_EVENT = 0x33;
public static final int DEATH_COMBAT_EVENT = 0x34;
public static final int PLAYER_INFO = 0x35;
public static final int FACE_PLAYER = 0x36;
public static final int PLAYER_POSITION_AND_LOOK = 0x37;
public static final int UNLOCK_RECIPES = 0x38;
// TODO destroy entity
//public static final int DESTROY_ENTITIES = 0x36;
public static final int DESTROY_ENTITY = 0x39;
public static final int REMOVE_ENTITY_EFFECT = 0x3A;
public static final int RESOURCE_PACK_SEND = 0x3B;
public static final int RESPAWN = 0x3C;
public static final int ENTITY_HEAD_LOOK = 0x3D;
public static final int MULTI_BLOCK_CHANGE = 0x3E;
public static final int SELECT_ADVANCEMENT_TAB = 0x3F;
// TODO action bar, wordborder packets
//public static final int WORLD_BORDER = 0x3D;
public static final int ACTION_BAR = 0x40;
public static final int WORLD_BORDER_CENTER = 0x41;
public static final int WORLD_BORDER_LERP_SIZE = 0x42;
public static final int WORLD_BORDER_SIZE = 0x43;
public static final int WORLD_BORDER_WARNING_DELAY = 0x44;
public static final int WORLD_BORDER_WARNING_REACH = 0x45;
public static final int CAMERA = 0x46;
public static final int HELD_ITEM_CHANGE = 0x47;
public static final int UPDATE_VIEW_POSITION = 0x48;
@ -92,9 +96,10 @@ public class ServerPacketIdentifier {
public static final int SET_PASSENGERS = 0x53;
public static final int TEAMS = 0x54;
public static final int UPDATE_SCORE = 0x55;
// TODO set title subtitle
public static final int SET_TITLE_SUBTITLE = 0x56;
public static final int TIME_UPDATE = 0x57;
// TODO set title text/time
public static final int SET_TITLE_TEXT = 0x58;
public static final int SET_TITLE_TIME = 0x59;
//public static final int TITLE = 0x4F;
public static final int ENTITY_SOUND_EFFECT = 0x5A;
public static final int SOUND_EFFECT = 0x5B;

View File

@ -0,0 +1,28 @@
package net.minestom.server.network.packet.server.play;
import net.kyori.adventure.text.Component;
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;
public class ActionBarPacket implements ServerPacket {
public Component actionBarText = Component.empty();
@Override
public void read(@NotNull BinaryReader reader) {
this.actionBarText = reader.readComponent();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeComponent(actionBarText);
}
@Override
public int getId() {
return ServerPacketIdentifier.ACTION_BAR;
}
}

View File

@ -6,24 +6,22 @@ import net.minestom.server.utils.binary.BinaryReader;
import net.minestom.server.utils.binary.BinaryWriter;
import org.jetbrains.annotations.NotNull;
public class DestroyEntitiesPacket implements ServerPacket {
public class ClearTitlesPacket implements ServerPacket {
public int[] entityIds = new int[0];
public DestroyEntitiesPacket() {}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeVarIntArray(entityIds);
}
public boolean reset;
@Override
public void read(@NotNull BinaryReader reader) {
entityIds = reader.readVarIntArray();
this.reset = reader.readBoolean();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeBoolean(reset);
}
@Override
public int getId() {
return ServerPacketIdentifier.DESTROY_ENTITIES;
return ServerPacketIdentifier.CLEAR_TITLES;
}
}

View File

@ -0,0 +1,34 @@
package net.minestom.server.network.packet.server.play;
import net.kyori.adventure.text.Component;
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;
public class DeathCombatEventPacket implements ServerPacket {
public int playerId;
public int entityId;
public Component message = Component.empty();
@Override
public void read(@NotNull BinaryReader reader) {
this.playerId = reader.readVarInt();
this.entityId = reader.readInt();
this.message = reader.readComponent(Integer.MAX_VALUE);
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeVarInt(playerId);
writer.writeInt(entityId);
writer.writeComponent(message);
}
@Override
public int getId() {
return ServerPacketIdentifier.DEATH_COMBAT_EVENT;
}
}

View File

@ -6,11 +6,12 @@ import net.minestom.server.utils.binary.BinaryReader;
import net.minestom.server.utils.binary.BinaryWriter;
import org.jetbrains.annotations.NotNull;
public class EntityMovementPacket implements ServerPacket {
public class DestroyEntityPacket implements ServerPacket {
public int entityId;
public EntityMovementPacket() {}
public DestroyEntityPacket() {
}
@Override
public void write(@NotNull BinaryWriter writer) {
@ -19,11 +20,11 @@ public class EntityMovementPacket implements ServerPacket {
@Override
public void read(@NotNull BinaryReader reader) {
entityId = reader.readVarInt();
this.entityId = reader.readVarInt();
}
@Override
public int getId() {
return ServerPacketIdentifier.ENTITY_MOVEMENT;
return ServerPacketIdentifier.DESTROY_ENTITY;
}
}

View File

@ -0,0 +1,30 @@
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;
public class EndCombatEventPacket implements ServerPacket {
public int duration;
public int entityId;
@Override
public void read(@NotNull BinaryReader reader) {
this.duration = reader.readVarInt();
this.entityId = reader.readInt();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeVarInt(duration);
writer.writeInt(entityId);
}
@Override
public int getId() {
return ServerPacketIdentifier.END_COMBAT_EVENT;
}
}

View File

@ -0,0 +1,23 @@
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;
public class EnterCombatEventPacket implements ServerPacket {
@Override
public void read(@NotNull BinaryReader reader) {
}
@Override
public void write(@NotNull BinaryWriter writer) {
}
@Override
public int getId() {
return ServerPacketIdentifier.ENTER_COMBAT_EVENT;
}
}

View File

@ -0,0 +1,47 @@
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;
public class InitializeWorldBorderPacket implements ServerPacket {
public double x, z;
public double oldDiameter;
public double newDiameter;
public long speed;
public int portalTeleportBoundary;
public int warningTime;
public int warningBlocks;
@Override
public void write(BinaryWriter writer) {
writer.writeDouble(x);
writer.writeDouble(z);
writer.writeDouble(oldDiameter);
writer.writeDouble(newDiameter);
writer.writeVarLong(speed);
writer.writeVarInt(portalTeleportBoundary);
writer.writeVarInt(warningTime);
writer.writeVarInt(warningBlocks);
}
@Override
public void read(@NotNull BinaryReader reader) {
this.x = reader.readDouble();
this.z = reader.readDouble();
this.oldDiameter = reader.readDouble();
this.newDiameter = reader.readDouble();
this.speed = reader.readVarLong();
this.portalTeleportBoundary = reader.readVarInt();
this.warningTime = reader.readVarInt();
this.warningBlocks = reader.readVarInt();
}
@Override
public int getId() {
return ServerPacketIdentifier.INITIALIZE_WORLD_BORDER;
}
}

View File

@ -17,8 +17,8 @@ public class MapDataPacket implements ComponentHoldingServerPacket {
public int mapId;
public byte scale;
public boolean trackingPosition;
public boolean locked;
public boolean trackingPosition;
public Icon[] icons = new Icon[0];
@ -28,14 +28,15 @@ public class MapDataPacket implements ComponentHoldingServerPacket {
public byte z;
public byte[] data = new byte[0];
public MapDataPacket() {}
public MapDataPacket() {
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeVarInt(mapId);
writer.writeByte(scale);
writer.writeBoolean(trackingPosition);
writer.writeBoolean(locked);
writer.writeBoolean(trackingPosition);
if (icons != null && icons.length > 0) {
writer.writeVarInt(icons.length);
@ -67,8 +68,8 @@ public class MapDataPacket implements ComponentHoldingServerPacket {
public void read(@NotNull BinaryReader reader) {
mapId = reader.readVarInt();
scale = reader.readByte();
trackingPosition = reader.readBoolean();
locked = reader.readBoolean();
trackingPosition = reader.readBoolean();
int iconCount = reader.readVarInt();
icons = new Icon[iconCount];
@ -78,7 +79,7 @@ public class MapDataPacket implements ComponentHoldingServerPacket {
}
columns = reader.readByte();
if(columns <= 0) {
if (columns <= 0) {
return;
}
@ -159,7 +160,7 @@ public class MapDataPacket implements ComponentHoldingServerPacket {
direction = reader.readByte();
boolean hasDisplayName = reader.readBoolean();
if(hasDisplayName) {
if (hasDisplayName) {
displayName = reader.readComponent(Integer.MAX_VALUE);
} else {
displayName = null;

View File

@ -12,6 +12,7 @@ public class PlayerPositionAndLookPacket implements ServerPacket {
public Position position;
public byte flags;
public int teleportId;
public boolean dismountVehicle;
public PlayerPositionAndLookPacket() {
position = new Position();
@ -28,6 +29,7 @@ public class PlayerPositionAndLookPacket implements ServerPacket {
writer.writeByte(flags);
writer.writeVarInt(teleportId);
writer.writeBoolean(dismountVehicle);
}
@Override
@ -36,6 +38,7 @@ public class PlayerPositionAndLookPacket implements ServerPacket {
flags = reader.readByte();
teleportId = reader.readVarInt();
dismountVehicle = reader.readBoolean();
}
@Override

View File

@ -1,5 +1,6 @@
package net.minestom.server.network.packet.server.play;
import net.kyori.adventure.text.Component;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import net.minestom.server.utils.binary.BinaryReader;
@ -10,19 +11,26 @@ public class ResourcePackSendPacket implements ServerPacket {
public String url = "";
public String hash = "0000000000000000000000000000000000000000"; // Size 40
public boolean forced;
public Component forcedMessage = Component.empty();
public ResourcePackSendPacket() {}
public ResourcePackSendPacket() {
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeSizedString(url);
writer.writeSizedString(hash);
writer.writeBoolean(forced);
writer.writeComponent(forcedMessage);
}
@Override
public void read(@NotNull BinaryReader reader) {
url = reader.readSizedString(Integer.MAX_VALUE);
hash = reader.readSizedString(Integer.MAX_VALUE);
this.url = reader.readSizedString(Integer.MAX_VALUE);
this.hash = reader.readSizedString(Integer.MAX_VALUE);
this.forced = reader.readBoolean();
this.forcedMessage = reader.readComponent();
}
@Override

View File

@ -1,17 +1,31 @@
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;
public class SculkVibrationSignal implements ServerPacket {
public BlockPosition position;
public String destinationIdentifier;
// TODO 'varies' destination
public int arrivalTicks;
@Override
public int getId() {
return 0;
public void read(@NotNull BinaryReader reader) {
}
@Override
public void write(@NotNull BinaryWriter writer) {
}
@Override
public int getId() {
return ServerPacketIdentifier.SCULK_VIBRATION_SIGNAL;
}
}

View File

@ -0,0 +1,28 @@
package net.minestom.server.network.packet.server.play;
import net.kyori.adventure.text.Component;
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;
public class SetTitleSubTitlePacket implements ServerPacket {
public Component subtitle = Component.empty();
@Override
public void read(@NotNull BinaryReader reader) {
this.subtitle = reader.readComponent();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeComponent(subtitle);
}
@Override
public int getId() {
return ServerPacketIdentifier.SET_TITLE_SUBTITLE;
}
}

View File

@ -0,0 +1,28 @@
package net.minestom.server.network.packet.server.play;
import net.kyori.adventure.text.Component;
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;
public class SetTitleTextPacker implements ServerPacket {
public Component title = Component.empty();
@Override
public void read(@NotNull BinaryReader reader) {
this.title = reader.readComponent();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeComponent(title);
}
@Override
public int getId() {
return ServerPacketIdentifier.SET_TITLE_TEXT;
}
}

View File

@ -0,0 +1,34 @@
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;
public class SetTitleTimePacket implements ServerPacket {
public int fadeIn;
public int stay;
public int fadeOut;
@Override
public void read(@NotNull BinaryReader reader) {
this.fadeIn = reader.readInt();
this.stay = reader.readInt();
this.fadeOut = reader.readInt();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeInt(fadeIn);
writer.writeInt(stay);
writer.writeInt(fadeOut);
}
@Override
public int getId() {
return ServerPacketIdentifier.SET_TITLE_TIME;
}
}

View File

@ -0,0 +1,30 @@
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;
public class WorldBorderCenterPacket implements ServerPacket {
public double x;
public double z;
@Override
public void read(@NotNull BinaryReader reader) {
this.x = reader.readDouble();
this.z = reader.readDouble();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeDouble(x);
writer.writeDouble(z);
}
@Override
public int getId() {
return ServerPacketIdentifier.WORLD_BORDER_CENTER;
}
}

View File

@ -0,0 +1,33 @@
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;
public class WorldBorderLerpSizePacket implements ServerPacket {
public double oldDiameter;
public double newDiameter;
public long speed;
@Override
public void read(@NotNull BinaryReader reader) {
this.oldDiameter = reader.readDouble();
this.newDiameter = reader.readDouble();
this.speed = reader.readVarLong();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeDouble(oldDiameter);
writer.writeDouble(newDiameter);
writer.writeVarLong(speed);
}
@Override
public int getId() {
return ServerPacketIdentifier.WORLD_BORDER_LERP_SIZE;
}
}

View File

@ -0,0 +1,27 @@
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;
public class WorldBorderSizePacket implements ServerPacket {
public double diameter;
@Override
public void read(@NotNull BinaryReader reader) {
this.diameter = reader.readDouble();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeDouble(diameter);
}
@Override
public int getId() {
return ServerPacketIdentifier.WORLD_BORDER_SIZE;
}
}

View File

@ -0,0 +1,27 @@
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;
public class WorldBorderWarningDelayPacket implements ServerPacket {
public int warningTime;
@Override
public void read(@NotNull BinaryReader reader) {
this.warningTime = reader.readVarInt();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeVarInt(warningTime);
}
@Override
public int getId() {
return ServerPacketIdentifier.WORLD_BORDER_WARNING_DELAY;
}
}

View File

@ -0,0 +1,27 @@
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;
public class WorldBorderWarningReachPacket implements ServerPacket {
public int warningBlocks;
@Override
public void read(@NotNull BinaryReader reader) {
this.warningBlocks = reader.readVarInt();
}
@Override
public void write(@NotNull BinaryWriter writer) {
writer.writeVarInt(warningBlocks);
}
@Override
public int getId() {
return ServerPacketIdentifier.WORLD_BORDER_WARNING_REACH;
}
}

View File

@ -200,6 +200,10 @@ public class BinaryReader extends InputStream {
return GsonComponentSerializer.gson().deserialize(jsonObject);
}
public Component readComponent() {
return readComponent(Integer.MAX_VALUE);
}
/**
* Creates a new object from the given supplier and calls its {@link Readable#read(BinaryReader)} method with this reader.
*