fix: death location type to WorldPos (same type as metadata), fix missing world pos serialization (was npe)

This commit is contained in:
mworzala 2024-04-10 08:31:47 -04:00
parent b5c35e0144
commit 54212ebc97
No known key found for this signature in database
GPG Key ID: B148F922E64797C7
7 changed files with 38 additions and 32 deletions

View File

@ -64,7 +64,7 @@ import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.common.*;
import net.minestom.server.network.packet.server.login.LoginDisconnectPacket;
import net.minestom.server.network.packet.server.play.*;
import net.minestom.server.network.packet.server.play.data.DeathLocation;
import net.minestom.server.network.packet.server.play.data.WorldPos;
import net.minestom.server.network.player.GameProfile;
import net.minestom.server.network.player.PlayerConnection;
import net.minestom.server.network.player.PlayerSocketConnection;
@ -88,7 +88,6 @@ import net.minestom.server.utils.function.IntegerBiConsumer;
import net.minestom.server.utils.identity.NamedAndIdentified;
import net.minestom.server.utils.instance.InstanceUtils;
import net.minestom.server.utils.inventory.PlayerInventoryUtils;
import net.minestom.server.utils.player.PlayerUtils;
import net.minestom.server.utils.time.Cooldown;
import net.minestom.server.utils.time.TimeUnit;
import net.minestom.server.utils.validate.Check;
@ -145,7 +144,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
private Instance pendingInstance = null;
private DimensionType dimensionType;
private GameMode gameMode;
private DeathLocation deathLocation;
private WorldPos deathLocation;
/**
* Keeps track of what chunks are sent to the client, this defines the center of the loaded area
@ -1218,10 +1217,10 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
}
public void setDeathLocation(@NotNull DimensionType type, @NotNull Pos position) {
this.deathLocation = new DeathLocation(type.getName().asString(), position);
this.deathLocation = new WorldPos(type.getName().asString(), position);
}
public @Nullable DeathLocation getDeathLocation() {
public @Nullable WorldPos getDeathLocation() {
return this.deathLocation;
}

View File

@ -8,7 +8,7 @@ import net.minestom.server.entity.metadata.animal.SnifferMeta;
import net.minestom.server.entity.metadata.animal.tameable.CatMeta;
import net.minestom.server.entity.metadata.other.PaintingMeta;
import net.minestom.server.item.ItemStack;
import net.minestom.server.network.packet.server.play.data.DeathLocation;
import net.minestom.server.network.packet.server.play.data.WorldPos;
import net.minestom.server.particle.Particle;
import net.minestom.server.utils.Direction;
import net.minestom.server.utils.validate.Check;
@ -55,7 +55,7 @@ public final class NetworkBuffer {
// METADATA
public static final Type<Integer> BLOCK_STATE = new NetworkBufferTypeImpl.BlockStateType();
public static final Type<int[]> VILLAGER_DATA = new NetworkBufferTypeImpl.VillagerDataType();
public static final Type<DeathLocation> DEATH_LOCATION = new NetworkBufferTypeImpl.DeathLocationType();
public static final Type<WorldPos> DEATH_LOCATION = new NetworkBufferTypeImpl.DeathLocationType();
public static final Type<Point> VECTOR3 = new NetworkBufferTypeImpl.Vector3Type();
public static final Type<Point> VECTOR3D = new NetworkBufferTypeImpl.Vector3DType();
public static final Type<float[]> QUATERNION = new NetworkBufferTypeImpl.QuaternionType();

View File

@ -7,7 +7,7 @@ import net.minestom.server.coordinate.Point;
import net.minestom.server.coordinate.Vec;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import net.minestom.server.network.packet.server.play.data.DeathLocation;
import net.minestom.server.network.packet.server.play.data.WorldPos;
import net.minestom.server.particle.Particle;
import net.minestom.server.particle.data.ParticleData;
import net.minestom.server.utils.validate.Check;
@ -532,22 +532,15 @@ interface NetworkBufferTypeImpl<T> extends NetworkBuffer.Type<T> {
}
}
record DeathLocationType() implements NetworkBufferTypeImpl<DeathLocation> {
record DeathLocationType() implements NetworkBufferTypeImpl<WorldPos> {
@Override
public void write(@NotNull NetworkBuffer buffer, DeathLocation value) {
buffer.writeOptional(writer -> {
writer.write(STRING, value.dimension());
writer.write(BLOCK_POSITION, value.position());
});
public void write(@NotNull NetworkBuffer buffer, WorldPos value) {
buffer.writeOptional(value);
}
@Override
public DeathLocation read(@NotNull NetworkBuffer buffer) {
return buffer.readOptional(networkBuffer -> {
final String dimension = networkBuffer.read(STRING);
final Point position = networkBuffer.read(BLOCK_POSITION);
return new DeathLocation(dimension, position);
});
public WorldPos read(@NotNull NetworkBuffer buffer) {
return buffer.readOptional(WorldPos::new);
}
}

View File

@ -4,7 +4,7 @@ import net.minestom.server.entity.GameMode;
import net.minestom.server.network.NetworkBuffer;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import net.minestom.server.network.packet.server.play.data.DeathLocation;
import net.minestom.server.network.packet.server.play.data.WorldPos;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -17,7 +17,7 @@ public record JoinGamePacket(
int viewDistance, int simulationDistance, boolean reducedDebugInfo, boolean enableRespawnScreen,
boolean doLimitedCrafting,
String dimensionType, String world, long hashedSeed, GameMode gameMode, GameMode previousGameMode,
boolean isDebug, boolean isFlat, DeathLocation deathLocation, int portalCooldown
boolean isDebug, boolean isFlat, WorldPos deathLocation, int portalCooldown
) implements ServerPacket.Play {
public static final int MAX_WORLDS = Short.MAX_VALUE;

View File

@ -4,7 +4,7 @@ import net.minestom.server.entity.GameMode;
import net.minestom.server.network.NetworkBuffer;
import net.minestom.server.network.packet.server.ServerPacket;
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
import net.minestom.server.network.packet.server.play.data.DeathLocation;
import net.minestom.server.network.packet.server.play.data.WorldPos;
import org.jetbrains.annotations.NotNull;
import static net.minestom.server.network.NetworkBuffer.*;
@ -12,7 +12,7 @@ import static net.minestom.server.network.NetworkBuffer.*;
public record RespawnPacket(
String dimensionType, String worldName,
long hashedSeed, GameMode gameMode, GameMode previousGameMode,
boolean isDebug, boolean isFlat, DeathLocation deathLocation,
boolean isDebug, boolean isFlat, WorldPos deathLocation,
int portalCooldown, int copyData
) implements ServerPacket.Play {
public static final int COPY_NONE = 0x0;

View File

@ -1,8 +0,0 @@
package net.minestom.server.network.packet.server.play.data;
import net.minestom.server.coordinate.Point;
import org.jetbrains.annotations.NotNull;
public record DeathLocation(@NotNull String dimension, @NotNull Point position) {
}

View File

@ -0,0 +1,22 @@
package net.minestom.server.network.packet.server.play.data;
import net.minestom.server.coordinate.Point;
import net.minestom.server.network.NetworkBuffer;
import org.jetbrains.annotations.NotNull;
import static net.minestom.server.network.NetworkBuffer.BLOCK_POSITION;
import static net.minestom.server.network.NetworkBuffer.STRING;
public record WorldPos(@NotNull String dimension, @NotNull Point position) implements NetworkBuffer.Writer {
public WorldPos(@NotNull NetworkBuffer reader) {
this(reader.read(STRING), reader.read(BLOCK_POSITION));
}
@Override
public void write(@NotNull NetworkBuffer writer) {
writer.write(STRING, dimension);
writer.write(BLOCK_POSITION, position);
}
}