2020-04-24 03:25:58 +02:00
|
|
|
package net.minestom.server.network.packet.server.play;
|
2019-08-21 16:50:52 +02:00
|
|
|
|
2020-04-24 03:25:58 +02:00
|
|
|
import net.minestom.server.entity.GameMode;
|
|
|
|
import net.minestom.server.network.packet.server.ServerPacket;
|
|
|
|
import net.minestom.server.network.packet.server.ServerPacketIdentifier;
|
2021-02-06 18:58:52 +01:00
|
|
|
import net.minestom.server.utils.binary.BinaryReader;
|
2020-08-19 20:34:21 +02:00
|
|
|
import net.minestom.server.utils.binary.BinaryWriter;
|
2020-07-13 14:12:21 +02:00
|
|
|
import net.minestom.server.world.DimensionType;
|
2020-10-25 22:19:27 +01:00
|
|
|
import org.jetbrains.annotations.NotNull;
|
2021-02-06 18:58:52 +01:00
|
|
|
import org.jglrxavpok.hephaistos.nbt.NBTCompound;
|
|
|
|
import org.jglrxavpok.hephaistos.nbt.NBTException;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
2019-08-21 16:50:52 +02:00
|
|
|
|
|
|
|
public class RespawnPacket implements ServerPacket {
|
|
|
|
|
2020-07-13 14:12:21 +02:00
|
|
|
public DimensionType dimensionType;
|
2020-02-09 15:34:09 +01:00
|
|
|
public long hashedSeed;
|
2019-08-21 16:50:52 +02:00
|
|
|
public GameMode gameMode;
|
2020-10-25 22:19:27 +01:00
|
|
|
public boolean isDebug = false;
|
|
|
|
public boolean isFlat = true;
|
|
|
|
public boolean copyMeta = true;
|
2019-08-21 16:50:52 +02:00
|
|
|
|
2021-02-06 18:58:52 +01:00
|
|
|
public RespawnPacket() {
|
|
|
|
dimensionType = DimensionType.OVERWORLD;
|
|
|
|
gameMode = GameMode.SURVIVAL;
|
|
|
|
}
|
|
|
|
|
2019-08-21 16:50:52 +02:00
|
|
|
@Override
|
2020-10-25 22:19:27 +01:00
|
|
|
public void write(@NotNull BinaryWriter writer) {
|
2020-08-25 16:05:57 +02:00
|
|
|
writer.writeNBT("", dimensionType.toNBT());
|
2020-07-07 20:31:59 +02:00
|
|
|
|
|
|
|
// Warning: must be different for each dimension type! Otherwise the client seems to cache the world name
|
2020-08-20 18:18:36 +02:00
|
|
|
writer.writeSizedString(dimensionType.getName().toString());
|
2020-07-07 20:31:59 +02:00
|
|
|
|
2020-02-09 15:34:09 +01:00
|
|
|
writer.writeLong(hashedSeed);
|
2020-06-25 21:05:58 +02:00
|
|
|
writer.writeByte(gameMode.getId());
|
2020-04-24 03:25:58 +02:00
|
|
|
writer.writeByte(gameMode.getId()); // Hardcore flag not included
|
2020-10-25 22:19:27 +01:00
|
|
|
writer.writeBoolean(isDebug);
|
|
|
|
writer.writeBoolean(isFlat);
|
|
|
|
writer.writeBoolean(copyMeta);
|
2019-08-21 16:50:52 +02:00
|
|
|
}
|
|
|
|
|
2021-02-06 18:58:52 +01:00
|
|
|
@Override
|
|
|
|
public void read(@NotNull BinaryReader reader) {
|
|
|
|
try {
|
|
|
|
dimensionType = DimensionType.fromNBT((NBTCompound) reader.readTag());
|
|
|
|
|
|
|
|
// dimension type name
|
2021-06-11 16:19:17 +02:00
|
|
|
reader.readSizedString();
|
2021-02-06 18:58:52 +01:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-08-21 16:50:52 +02:00
|
|
|
@Override
|
|
|
|
public int getId() {
|
2020-02-11 16:48:06 +01:00
|
|
|
return ServerPacketIdentifier.RESPAWN;
|
2019-08-21 16:50:52 +02:00
|
|
|
}
|
|
|
|
}
|