Skip to content

Commit

Permalink
Initial work on 1.20.80 support
Browse files Browse the repository at this point in the history
  • Loading branch information
Alemiz112 committed Apr 11, 2024
1 parent 6894f61 commit 46b4ad3
Show file tree
Hide file tree
Showing 17 changed files with 417 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class ClientboundDebugRendererSerializer_v428 implements BedrockPacketSer

@Override
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDebugRendererPacket packet) {
VarInts.writeUnsignedInt(buffer, packet.getDebugMarkerType().ordinal());
this.writeMarkerType(buffer, helper, packet.getDebugMarkerType());
if (packet.getDebugMarkerType() == ClientboundDebugRendererType.ADD_DEBUG_MARKER_CUBE) {
helper.writeString(buffer, packet.getMarkerText());
helper.writeVector3f(buffer, packet.getMarkerPosition());
Expand All @@ -30,7 +30,7 @@ public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDebu

@Override
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDebugRendererPacket packet) {
packet.setDebugMarkerType(ClientboundDebugRendererType.values()[VarInts.readUnsignedInt(buffer)]);
packet.setDebugMarkerType(this.readMarkerType(buffer, helper));
if (packet.getDebugMarkerType() == ClientboundDebugRendererType.ADD_DEBUG_MARKER_CUBE) {
packet.setMarkerText(helper.readString(buffer));
packet.setMarkerPosition(helper.readVector3f(buffer));
Expand All @@ -41,4 +41,12 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDe
packet.setMarkerDuration(buffer.readLongLE());
}
}

protected void writeMarkerType(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDebugRendererType type) {
VarInts.writeUnsignedInt(buffer, type.ordinal());
}

protected ClientboundDebugRendererType readMarkerType(ByteBuf buffer, BedrockCodecHelper helper) {
return ClientboundDebugRendererType.values()[VarInts.readUnsignedInt(buffer)];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package org.cloudburstmc.protocol.bedrock.codec.v671;

import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
import org.cloudburstmc.protocol.bedrock.codec.EntityDataTypeMap;
import org.cloudburstmc.protocol.bedrock.codec.v291.serializer.LevelEventSerializer_v291;
import org.cloudburstmc.protocol.bedrock.codec.v361.serializer.LevelEventGenericSerializer_v361;
import org.cloudburstmc.protocol.bedrock.codec.v575.BedrockCodecHelper_v575;
import org.cloudburstmc.protocol.bedrock.codec.v662.Bedrock_v662;
import org.cloudburstmc.protocol.bedrock.codec.v671.serializer.*;
import org.cloudburstmc.protocol.bedrock.data.LevelEventType;
import org.cloudburstmc.protocol.bedrock.data.ParticleType;
import org.cloudburstmc.protocol.bedrock.data.command.CommandParam;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.cloudburstmc.protocol.bedrock.packet.*;
import org.cloudburstmc.protocol.bedrock.transformer.FlagTransformer;
import org.cloudburstmc.protocol.common.util.TypeMap;

public class Bedrock_v671 extends Bedrock_v662 {

protected static final TypeMap<ParticleType> PARTICLE_TYPES = Bedrock_v662.PARTICLE_TYPES.toBuilder()
.insert(92, ParticleType.WOLF_ARMOR_BREAK)
.build();

protected static final TypeMap<LevelEventType> LEVEL_EVENTS = Bedrock_v662.LEVEL_EVENTS.toBuilder()
.insert(LEVEL_EVENT_PARTICLE_TYPE, PARTICLE_TYPES)
.build();

protected static final TypeMap<EntityFlag> ENTITY_FLAGS = Bedrock_v662.ENTITY_FLAGS
.toBuilder()
.insert(118, EntityFlag.BODY_ROTATION_BLOCKED)
.build();

protected static final EntityDataTypeMap ENTITY_DATA = Bedrock_v662.ENTITY_DATA
.toBuilder()
.update(EntityDataTypes.FLAGS, new FlagTransformer(ENTITY_FLAGS, 0))
.update(EntityDataTypes.FLAGS_2, new FlagTransformer(ENTITY_FLAGS, 1))
.build();

public static final BedrockCodec CODEC = Bedrock_v662.CODEC.toBuilder()
.raknetProtocolVersion(11)
.protocolVersion(671)
.minecraftVersion("1.20.80")
.helper(() -> new BedrockCodecHelper_v575(ENTITY_DATA, GAME_RULE_TYPES, ITEM_STACK_REQUEST_TYPES, CONTAINER_SLOT_TYPES, PLAYER_ABILITIES, TEXT_PROCESSING_ORIGINS))
.updateSerializer(LevelEventPacket.class, new LevelEventSerializer_v291(LEVEL_EVENTS))
.updateSerializer(LevelEventGenericPacket.class, new LevelEventGenericSerializer_v361(LEVEL_EVENTS))
.updateSerializer(ClientboundDebugRendererPacket.class, ClientboundDebugRendererSerializer_v671.INSTANCE)
.updateSerializer(CorrectPlayerMovePredictionPacket.class, CorrectPlayerMovePredictionSerializer_v671.INSTANCE)
.updateSerializer(ResourcePackStackPacket.class, ResourcePackStackSerializer_v671.INSTANCE)
.updateSerializer(UpdatePlayerGameTypePacket.class, UpdatePlayerGameTypeSerializer_v671.INSTANCE)
.updateSerializer(StartGamePacket.class, StartGameSerializer_v671.INSTANCE)
.updateSerializer(CraftingDataPacket.class, CraftingDataSerializer_v671.INSTANCE)
.deregisterPacket(FilterTextPacket.class) // TODO: check
// TODO: confirm change in AnimatePacket
.build();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.cloudburstmc.protocol.bedrock.codec.v671.serializer;

import io.netty.buffer.ByteBuf;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.v428.serializer.ClientboundDebugRendererSerializer_v428;
import org.cloudburstmc.protocol.bedrock.data.ClientboundDebugRendererType;

public class ClientboundDebugRendererSerializer_v671 extends ClientboundDebugRendererSerializer_v428 {
public static final ClientboundDebugRendererSerializer_v671 INSTANCE = new ClientboundDebugRendererSerializer_v671();

@Override
protected ClientboundDebugRendererType readMarkerType(ByteBuf buffer, BedrockCodecHelper helper) {
return ClientboundDebugRendererType.values()[buffer.readIntLE()];
}

@Override
protected void writeMarkerType(ByteBuf buffer, BedrockCodecHelper helper, ClientboundDebugRendererType type) {
buffer.writeIntLE(type.ordinal());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.cloudburstmc.protocol.bedrock.codec.v671.serializer;

import io.netty.buffer.ByteBuf;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.v649.serializer.CorrectPlayerMovePredictionSerializer_v649;
import org.cloudburstmc.protocol.bedrock.data.PredictionType;
import org.cloudburstmc.protocol.bedrock.packet.CorrectPlayerMovePredictionPacket;
import org.cloudburstmc.protocol.common.util.VarInts;

public class CorrectPlayerMovePredictionSerializer_v671 extends CorrectPlayerMovePredictionSerializer_v649 {
public static final CorrectPlayerMovePredictionSerializer_v671 INSTANCE = new CorrectPlayerMovePredictionSerializer_v671();

private static final PredictionType[] PREDICTION_TYPES = PredictionType.values();

@Override
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, CorrectPlayerMovePredictionPacket packet) {
buffer.writeByte(packet.getPredictionType().ordinal());
helper.writeVector3f(buffer, packet.getPosition());
helper.writeVector3f(buffer, packet.getDelta());
if (packet.getPredictionType() == PredictionType.VEHICLE) {
helper.writeVector2f(buffer, packet.getVehicleRotation());
}
buffer.writeBoolean(packet.isOnGround());
VarInts.writeUnsignedLong(buffer, packet.getTick());
}

@Override
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, CorrectPlayerMovePredictionPacket packet) {
packet.setPredictionType(PREDICTION_TYPES[buffer.readUnsignedByte()]);
packet.setPosition(helper.readVector3f(buffer));
packet.setDelta(helper.readVector3f(buffer));
if (packet.getPredictionType() == PredictionType.VEHICLE) {
packet.setVehicleRotation(helper.readVector2f(buffer));
}
packet.setOnGround(buffer.readBoolean());
packet.setTick(VarInts.readUnsignedInt(buffer));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package org.cloudburstmc.protocol.bedrock.codec.v671.serializer;

import io.netty.buffer.ByteBuf;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.v582.serializer.CraftingDataSerializer_v582;
import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData;
import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.CraftingDataType;
import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData;
import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount;
import org.cloudburstmc.protocol.common.util.VarInts;

import java.util.List;
import java.util.UUID;

public class CraftingDataSerializer_v671 extends CraftingDataSerializer_v582 {
public static final CraftingDataSerializer_v671 INSTANCE = new CraftingDataSerializer_v671();

@Override
protected void writeShapedRecipe(ByteBuf buffer, BedrockCodecHelper helper, ShapedRecipeData data) {
helper.writeString(buffer, data.getId());
VarInts.writeInt(buffer, data.getWidth());
VarInts.writeInt(buffer, data.getHeight());
int count = data.getWidth() * data.getHeight();
List<ItemDescriptorWithCount> inputs = data.getIngredients();
for (int i = 0; i < count; i++) {
helper.writeIngredient(buffer, inputs.get(i));
}
helper.writeArray(buffer, data.getResults(), helper::writeItemInstance);
helper.writeUuid(buffer, data.getUuid());
helper.writeString(buffer, data.getTag());
VarInts.writeInt(buffer, data.getPriority());
buffer.writeBoolean(data.isAssumeSymetry());
VarInts.writeUnsignedInt(buffer, data.getNetId());
}

@Override
protected ShapedRecipeData readShapedRecipe(ByteBuf buffer, BedrockCodecHelper helper, CraftingDataType type) {
String recipeId = helper.readString(buffer);
int width = VarInts.readInt(buffer);
int height = VarInts.readInt(buffer);
int inputCount = width * height;
List<ItemDescriptorWithCount> inputs = new ObjectArrayList<>(inputCount);
for (int i = 0; i < inputCount; i++) {
inputs.add(helper.readIngredient(buffer));
}
List<ItemData> outputs = new ObjectArrayList<>();
helper.readArray(buffer, outputs, helper::readItemInstance);
UUID uuid = helper.readUuid(buffer);
String craftingTag = helper.readString(buffer);
int priority = VarInts.readInt(buffer);
boolean assumeSymmetry = buffer.readBoolean();
int networkId = VarInts.readUnsignedInt(buffer);
return ShapedRecipeData.of(type, recipeId, width, height, inputs, outputs, uuid, craftingTag, priority, networkId, assumeSymmetry);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package org.cloudburstmc.protocol.bedrock.codec.v671.serializer;

import io.netty.buffer.ByteBuf;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.v419.serializer.ResourcePackStackSerializer_v419;
import org.cloudburstmc.protocol.bedrock.packet.ResourcePackStackPacket;

public class ResourcePackStackSerializer_v671 extends ResourcePackStackSerializer_v419 {
public static final ResourcePackStackSerializer_v671 INSTANCE = new ResourcePackStackSerializer_v671();

@Override
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackStackPacket packet) {
super.serialize(buffer, helper, packet);
buffer.writeBoolean(packet.isHasEditorPacks());
}

@Override
public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ResourcePackStackPacket packet) {
super.deserialize(buffer, helper, packet);
packet.setHasEditorPacks(buffer.readBoolean());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package org.cloudburstmc.protocol.bedrock.codec.v671.serializer;

import io.netty.buffer.ByteBuf;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
import org.cloudburstmc.protocol.bedrock.codec.v589.serializer.StartGameSerializer_v589;
import org.cloudburstmc.protocol.bedrock.data.*;
import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket;
import org.cloudburstmc.protocol.common.util.OptionalBoolean;
import org.cloudburstmc.protocol.common.util.VarInts;

public class StartGameSerializer_v671 extends StartGameSerializer_v589 {
public static final StartGameSerializer_v671 INSTANCE = new StartGameSerializer_v671();

@Override
protected void writeLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) {
writeSeed(buffer, packet.getSeed());
buffer.writeShortLE(packet.getSpawnBiomeType().ordinal());
helper.writeString(buffer, packet.getCustomBiomeName());
VarInts.writeInt(buffer, packet.getDimensionId());
VarInts.writeInt(buffer, packet.getGeneratorId());
VarInts.writeInt(buffer, packet.getLevelGameType().ordinal());
buffer.writeBoolean(packet.isHardcore());
VarInts.writeInt(buffer, packet.getDifficulty());
helper.writeBlockPosition(buffer, packet.getDefaultSpawn());
buffer.writeBoolean(packet.isAchievementsDisabled());
buffer.writeBoolean(packet.isWorldEditor());
buffer.writeBoolean(packet.isCreatedInEditor());
buffer.writeBoolean(packet.isExportedFromEditor());
VarInts.writeInt(buffer, packet.getDayCycleStopTime());
VarInts.writeInt(buffer, packet.getEduEditionOffers());
buffer.writeBoolean(packet.isEduFeaturesEnabled());
helper.writeString(buffer, packet.getEducationProductionId());
buffer.writeFloatLE(packet.getRainLevel());
buffer.writeFloatLE(packet.getLightningLevel());
buffer.writeBoolean(packet.isPlatformLockedContentConfirmed());
buffer.writeBoolean(packet.isMultiplayerGame());
buffer.writeBoolean(packet.isBroadcastingToLan());
VarInts.writeInt(buffer, packet.getXblBroadcastMode().ordinal());
VarInts.writeInt(buffer, packet.getPlatformBroadcastMode().ordinal());
buffer.writeBoolean(packet.isCommandsEnabled());
buffer.writeBoolean(packet.isTexturePacksRequired());
helper.writeArray(buffer, packet.getGamerules(), helper::writeGameRule);
helper.writeExperiments(buffer, packet.getExperiments());
buffer.writeBoolean(packet.isExperimentsPreviouslyToggled());
buffer.writeBoolean(packet.isBonusChestEnabled());
buffer.writeBoolean(packet.isStartingWithMap());
VarInts.writeInt(buffer, packet.getDefaultPlayerPermission().ordinal());
buffer.writeIntLE(packet.getServerChunkTickRange());
buffer.writeBoolean(packet.isBehaviorPackLocked());
buffer.writeBoolean(packet.isResourcePackLocked());
buffer.writeBoolean(packet.isFromLockedWorldTemplate());
buffer.writeBoolean(packet.isUsingMsaGamertagsOnly());
buffer.writeBoolean(packet.isFromWorldTemplate());
buffer.writeBoolean(packet.isWorldTemplateOptionLocked());
buffer.writeBoolean(packet.isOnlySpawningV1Villagers());
buffer.writeBoolean(packet.isDisablingPersonas());
buffer.writeBoolean(packet.isDisablingCustomSkins());
buffer.writeBoolean(packet.isEmoteChatMuted());
helper.writeString(buffer, packet.getVanillaVersion());
buffer.writeIntLE(packet.getLimitedWorldWidth());
buffer.writeIntLE(packet.getLimitedWorldHeight());
buffer.writeBoolean(packet.isNetherType());
helper.writeString(buffer, packet.getEduSharedUriResource().getButtonName());
helper.writeString(buffer, packet.getEduSharedUriResource().getLinkUri());
helper.writeOptional(buffer, OptionalBoolean::isPresent, packet.getForceExperimentalGameplay(),
(buf, optional) -> buf.writeBoolean(optional.getAsBoolean()));
buffer.writeByte(packet.getChatRestrictionLevel().ordinal());
buffer.writeBoolean(packet.isDisablingPlayerInteractions());
}

@Override
protected void readLevelSettings(ByteBuf buffer, BedrockCodecHelper helper, StartGamePacket packet) {
packet.setSeed(readSeed(buffer));
packet.setSpawnBiomeType(SpawnBiomeType.byId(buffer.readShortLE()));
packet.setCustomBiomeName(helper.readString(buffer));
packet.setDimensionId(VarInts.readInt(buffer));
packet.setGeneratorId(VarInts.readInt(buffer));
packet.setLevelGameType(GameType.from(VarInts.readInt(buffer)));
packet.setHardcore(buffer.readBoolean());
packet.setDifficulty(VarInts.readInt(buffer));
packet.setDefaultSpawn(helper.readBlockPosition(buffer));
packet.setAchievementsDisabled(buffer.readBoolean());
packet.setWorldEditor(buffer.readBoolean());
packet.setCreatedInEditor(buffer.readBoolean());
packet.setExportedFromEditor(buffer.readBoolean());
packet.setDayCycleStopTime(VarInts.readInt(buffer));
packet.setEduEditionOffers(VarInts.readInt(buffer));
packet.setEduFeaturesEnabled(buffer.readBoolean());
packet.setEducationProductionId(helper.readString(buffer));
packet.setRainLevel(buffer.readFloatLE());
packet.setLightningLevel(buffer.readFloatLE());
packet.setPlatformLockedContentConfirmed(buffer.readBoolean());
packet.setMultiplayerGame(buffer.readBoolean());
packet.setBroadcastingToLan(buffer.readBoolean());
packet.setXblBroadcastMode(GamePublishSetting.byId(VarInts.readInt(buffer)));
packet.setPlatformBroadcastMode(GamePublishSetting.byId(VarInts.readInt(buffer)));
packet.setCommandsEnabled(buffer.readBoolean());
packet.setTexturePacksRequired(buffer.readBoolean());
helper.readArray(buffer, packet.getGamerules(), helper::readGameRule);
helper.readExperiments(buffer, packet.getExperiments());
packet.setExperimentsPreviouslyToggled(buffer.readBoolean());
packet.setBonusChestEnabled(buffer.readBoolean());
packet.setStartingWithMap(buffer.readBoolean());
packet.setDefaultPlayerPermission(PLAYER_PERMISSIONS[VarInts.readInt(buffer)]);
packet.setServerChunkTickRange(buffer.readIntLE());
packet.setBehaviorPackLocked(buffer.readBoolean());
packet.setResourcePackLocked(buffer.readBoolean());
packet.setFromLockedWorldTemplate(buffer.readBoolean());
packet.setUsingMsaGamertagsOnly(buffer.readBoolean());
packet.setFromWorldTemplate(buffer.readBoolean());
packet.setWorldTemplateOptionLocked(buffer.readBoolean());
packet.setOnlySpawningV1Villagers(buffer.readBoolean());
packet.setDisablingPersonas(buffer.readBoolean());
packet.setDisablingCustomSkins(buffer.readBoolean());
packet.setEmoteChatMuted(buffer.readBoolean());
packet.setVanillaVersion(helper.readString(buffer));
packet.setLimitedWorldWidth(buffer.readIntLE());
packet.setLimitedWorldHeight(buffer.readIntLE());
packet.setNetherType(buffer.readBoolean());
packet.setEduSharedUriResource(new EduSharedUriResource(helper.readString(buffer), helper.readString(buffer)));
packet.setForceExperimentalGameplay(helper.readOptional(buffer, OptionalBoolean.empty(), buf -> OptionalBoolean.of(buf.readBoolean())));
packet.setChatRestrictionLevel(ChatRestrictionLevel.values()[buffer.readByte()]);
packet.setDisablingPlayerInteractions(buffer.readBoolean());
}
}
Loading

0 comments on commit 46b4ad3

Please sign in to comment.