Distribute public keys

This commit is contained in:
Noel Németh 2022-06-10 13:13:51 +02:00
parent cb5b9d4175
commit 8424679c08
4 changed files with 20 additions and 6 deletions

View File

@ -1897,7 +1897,8 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
List.of(new PlayerInfoPacket.AddPlayer.Property("textures", skin.textures(), skin.signature())) :
Collections.emptyList();
return new PlayerInfoPacket(PlayerInfoPacket.Action.ADD_PLAYER,
new PlayerInfoPacket.AddPlayer(getUuid(), getUsername(), prop, getGameMode(), getLatency(), displayName));
new PlayerInfoPacket.AddPlayer(getUuid(), getUsername(), prop, getGameMode(), getLatency(), displayName,
getPlayerConnection().getPlayerPublicKey()));
}
/**

View File

@ -2,6 +2,7 @@ package net.minestom.server.network.packet.server.play;
import net.kyori.adventure.text.Component;
import net.minestom.server.adventure.ComponentHolder;
import net.minestom.server.crypto.PlayerPublicKey;
import net.minestom.server.entity.GameMode;
import net.minestom.server.network.packet.server.ComponentHoldingServerPacket;
import net.minestom.server.network.packet.server.ServerPacket;
@ -128,7 +129,8 @@ public record PlayerInfoPacket(@NotNull Action action,
}
public record AddPlayer(UUID uuid, String name, List<Property> properties, GameMode gameMode, int ping,
Component displayName) implements Entry, ComponentHolder<AddPlayer> {
Component displayName, @Nullable PlayerPublicKey playerPublicKey) implements Entry,
ComponentHolder<AddPlayer> {
public AddPlayer {
properties = List.copyOf(properties);
}
@ -137,7 +139,7 @@ public record PlayerInfoPacket(@NotNull Action action,
this(uuid, reader.readSizedString(),
reader.readVarIntList(Property::new),
GameMode.values()[reader.readVarInt()], reader.readVarInt(),
reader.readBoolean() ? reader.readComponent() : null);
reader.readBoolean() ? reader.readComponent() : null, reader.readBoolean() ? new PlayerPublicKey(reader) : null);
}
@Override
@ -148,7 +150,7 @@ public record PlayerInfoPacket(@NotNull Action action,
writer.writeVarInt(ping);
writer.writeBoolean(displayName != null);
if (displayName != null) writer.writeComponent(displayName);
writer.writeBoolean(false);
writer.writeNullable(playerPublicKey);
}
@Override
@ -159,7 +161,7 @@ public record PlayerInfoPacket(@NotNull Action action,
@Override
public @NotNull AddPlayer copyWithOperator(@NotNull UnaryOperator<Component> operator) {
return displayName != null ?
new AddPlayer(uuid, name, properties, gameMode, ping, operator.apply(displayName)) : this;
new AddPlayer(uuid, name, properties, gameMode, ping, operator.apply(displayName), playerPublicKey) : this;
}
public record Property(@NotNull String name, @NotNull String value,

View File

@ -9,6 +9,7 @@ import net.minestom.server.utils.SerializerUtils;
import net.minestom.server.utils.Utils;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jglrxavpok.hephaistos.nbt.CompressedProcesser;
import org.jglrxavpok.hephaistos.nbt.NBT;
import org.jglrxavpok.hephaistos.nbt.NBTWriter;
@ -325,6 +326,15 @@ public class BinaryWriter extends OutputStream {
}
}
public void writeNullable(@Nullable Writeable writeable) {
if (writeable == null) {
writeBoolean(false);
} else {
writeBoolean(true);
write(writeable);
}
}
/**
* Writes the given writeable object into this writer.
*

View File

@ -122,7 +122,8 @@ public class PacketWriteReadTest {
SERVER_PACKETS.add(new PlayerInfoPacket(PlayerInfoPacket.Action.UPDATE_LATENCY,
new PlayerInfoPacket.UpdateLatency(UUID.randomUUID(), 5)));
SERVER_PACKETS.add(new PlayerInfoPacket(PlayerInfoPacket.Action.ADD_PLAYER,
new PlayerInfoPacket.AddPlayer(UUID.randomUUID(), "TheMode911", List.of(new PlayerInfoPacket.AddPlayer.Property("name", "value")), GameMode.CREATIVE, 5, COMPONENT)));
new PlayerInfoPacket.AddPlayer(UUID.randomUUID(), "TheMode911", List.of(new PlayerInfoPacket.AddPlayer.Property("name", "value")), GameMode.CREATIVE, 5, COMPONENT, null)));
// TODO Test with public key
SERVER_PACKETS.add(new PlayerInfoPacket(PlayerInfoPacket.Action.REMOVE_PLAYER, new PlayerInfoPacket.RemovePlayer(UUID.randomUUID())));
//SERVER_PACKETS.add(new MultiBlockChangePacket(5,5,5,true, new long[]{0,5,543534,1321}));