From 38921fd992b628cf8c221ec184afec7393522a7f Mon Sep 17 00:00:00 2001 From: basaigh <53559772+basaigh@users.noreply.github.com> Date: Wed, 27 Nov 2024 00:16:41 +0000 Subject: [PATCH] 24w45a --- .../protocol/codec/MinecraftCodec.java | 6 ++-- .../data/game/item/component/ArmorTrim.java | 3 +- .../game/item/component/CustomModelData.java | 6 ++++ .../item/component/DataComponentType.java | 2 +- .../game/item/component/ItemCodecHelper.java | 23 +++++++++++--- .../entity/ClientboundMoveVehiclePacket.java | 27 +++++++--------- .../ServerboundPlayerLoadedPacket.java | 18 +++++++++++ .../level/ServerboundMoveVehiclePacket.java | 30 +++++++++--------- protocol/src/main/resources/networkCodec.nbt | Bin 12475 -> 12399 bytes 9 files changed, 75 insertions(+), 40 deletions(-) create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/CustomModelData.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundPlayerLoadedPacket.java diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java index 57e1650a..a16a53c6 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java @@ -157,6 +157,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.Serverbound import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundConfigurationAcknowledgedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundDebugSampleSubscriptionPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundLockDifficultyPacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundPlayerLoadedPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerButtonClickPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClickPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; @@ -215,9 +216,9 @@ import org.geysermc.mcprotocollib.protocol.packet.status.serverbound.Serverbound public class MinecraftCodec { public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 220) + .protocolVersion((1 << 30) | 221) .helper(MinecraftCodecHelper::new) - .minecraftVersion("24w44a") + .minecraftVersion("24w45a") .state(ProtocolState.HANDSHAKE, MinecraftPacketRegistry.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) @@ -438,6 +439,7 @@ public class MinecraftCodec { .registerServerboundPacket(ServerboundPlayerActionPacket.class, ServerboundPlayerActionPacket::new) .registerServerboundPacket(ServerboundPlayerCommandPacket.class, ServerboundPlayerCommandPacket::new) .registerServerboundPacket(ServerboundPlayerInputPacket.class, ServerboundPlayerInputPacket::new) + .registerServerboundPacket(ServerboundPlayerLoadedPacket.class, (buf, helper) -> ServerboundPlayerLoadedPacket.INSTANCE) .registerServerboundPacket(ServerboundPongPacket.class, ServerboundPongPacket::new) .registerServerboundPacket(ServerboundRecipeBookChangeSettingsPacket.class, ServerboundRecipeBookChangeSettingsPacket::new) .registerServerboundPacket(ServerboundRecipeBookSeenRecipePacket.class, ServerboundRecipeBookSeenRecipePacket::new) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ArmorTrim.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ArmorTrim.java index f7e53664..103feaf2 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ArmorTrim.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ArmorTrim.java @@ -7,8 +7,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.Holder; import java.util.Map; public record ArmorTrim(Holder material, Holder pattern, boolean showInTooltip) { - public record TrimMaterial(String assetName, int ingredientId, float itemModelIndex, - Map overrideArmorMaterials, Component description) { + public record TrimMaterial(String assetName, int ingredientId, Map overrideArmorAssets, Component description) { } public record TrimPattern(Key assetId, int templateItemId, Component description, boolean decal) { diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/CustomModelData.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/CustomModelData.java new file mode 100644 index 00000000..e6cabb40 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/CustomModelData.java @@ -0,0 +1,6 @@ +package org.geysermc.mcprotocollib.protocol.data.game.item.component; + +import java.util.List; + +public record CustomModelData(List floats, List flags, List strings, List colors) { +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/DataComponentType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/DataComponentType.java index 889a2599..5e83a2fb 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/DataComponentType.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/DataComponentType.java @@ -35,7 +35,7 @@ public class DataComponentType { public static final DataComponentType CAN_PLACE_ON = new DataComponentType<>(ItemCodecHelper::readAdventureModePredicate, ItemCodecHelper::writeAdventureModePredicate, ObjectDataComponent::new); public static final DataComponentType CAN_BREAK = new DataComponentType<>(ItemCodecHelper::readAdventureModePredicate, ItemCodecHelper::writeAdventureModePredicate, ObjectDataComponent::new); public static final DataComponentType ATTRIBUTE_MODIFIERS = new DataComponentType<>(ItemCodecHelper::readItemAttributeModifiers, ItemCodecHelper::writeItemAttributeModifiers, ObjectDataComponent::new); - public static final IntComponentType CUSTOM_MODEL_DATA = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new); + public static final DataComponentType CUSTOM_MODEL_DATA = new DataComponentType<>(ItemCodecHelper::readCustomModelData, ItemCodecHelper::writeCustomModelData, ObjectDataComponent::new); public static final DataComponentType HIDE_ADDITIONAL_TOOLTIP = new DataComponentType<>(unitReader(), unitWriter(), ObjectDataComponent::new); public static final DataComponentType HIDE_TOOLTIP = new DataComponentType<>(unitReader(), unitWriter(), ObjectDataComponent::new); public static final IntComponentType REPAIR_COST = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new); diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ItemCodecHelper.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ItemCodecHelper.java index 85b3ef54..9b48bd96 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ItemCodecHelper.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ItemCodecHelper.java @@ -193,6 +193,21 @@ public class ItemCodecHelper extends MinecraftCodecHelper { buf.writeBoolean(modifiers.isShowInTooltip()); } + public CustomModelData readCustomModelData(ByteBuf buf) { + List floats = this.readList(buf, ByteBuf::readFloat); + List flags = this.readList(buf, ByteBuf::readBoolean); + List strings = this.readList(buf, this::readString); + List colors = this.readList(buf, ByteBuf::readInt); + return new CustomModelData(floats, flags, strings, colors); + } + + public void writeCustomModelData(ByteBuf buf, CustomModelData modelData) { + this.writeList(buf, modelData.floats(), ByteBuf::writeFloat); + this.writeList(buf, modelData.flags(), ByteBuf::writeBoolean); + this.writeList(buf, modelData.strings(), this::writeString); + this.writeList(buf, modelData.colors(), ByteBuf::writeInt); + } + public DyedItemColor readDyedItemColor(ByteBuf buf) { return new DyedItemColor(buf.readInt(), buf.readBoolean()); } @@ -394,7 +409,6 @@ public class ItemCodecHelper extends MinecraftCodecHelper { public ArmorTrim.TrimMaterial readTrimMaterial(ByteBuf buf) { String assetName = this.readString(buf); int ingredientId = this.readVarInt(buf); - float itemModelIndex = buf.readFloat(); Map overrideArmorMaterials = new HashMap<>(); int overrideCount = this.readVarInt(buf); @@ -403,16 +417,15 @@ public class ItemCodecHelper extends MinecraftCodecHelper { } Component description = this.readComponent(buf); - return new ArmorTrim.TrimMaterial(assetName, ingredientId, itemModelIndex, overrideArmorMaterials, description); + return new ArmorTrim.TrimMaterial(assetName, ingredientId, overrideArmorMaterials, description); } public void writeTrimMaterial(ByteBuf buf, ArmorTrim.TrimMaterial material) { this.writeString(buf, material.assetName()); this.writeVarInt(buf, material.ingredientId()); - buf.writeFloat(material.itemModelIndex()); - this.writeVarInt(buf, material.overrideArmorMaterials().size()); - for (Map.Entry entry : material.overrideArmorMaterials().entrySet()) { + this.writeVarInt(buf, material.overrideArmorAssets().size()); + for (Map.Entry entry : material.overrideArmorAssets().entrySet()) { this.writeResourceLocation(buf, entry.getKey()); this.writeString(buf, entry.getValue()); } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundMoveVehiclePacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundMoveVehiclePacket.java index 989860d0..385f2424 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundMoveVehiclePacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundMoveVehiclePacket.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf; import lombok.AllArgsConstructor; import lombok.Data; import lombok.With; +import org.cloudburstmc.math.vector.Vector3d; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; @@ -11,26 +12,22 @@ import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; @With @AllArgsConstructor public class ClientboundMoveVehiclePacket implements MinecraftPacket { - private final double x; - private final double y; - private final double z; - private final float yaw; - private final float pitch; + private final Vector3d position; + private final float yRot; + private final float xRot; public ClientboundMoveVehiclePacket(ByteBuf in, MinecraftCodecHelper helper) { - this.x = in.readDouble(); - this.y = in.readDouble(); - this.z = in.readDouble(); - this.yaw = in.readFloat(); - this.pitch = in.readFloat(); + this.position = Vector3d.from(in.readDouble(), in.readDouble(), in.readDouble()); + this.yRot = in.readFloat(); + this.xRot = in.readFloat(); } @Override public void serialize(ByteBuf out, MinecraftCodecHelper helper) { - out.writeDouble(this.x); - out.writeDouble(this.y); - out.writeDouble(this.z); - out.writeFloat(this.yaw); - out.writeFloat(this.pitch); + out.writeDouble(this.position.getX()); + out.writeDouble(this.position.getY()); + out.writeDouble(this.position.getZ()); + out.writeFloat(this.yRot); + out.writeFloat(this.xRot); } } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundPlayerLoadedPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundPlayerLoadedPacket.java new file mode 100644 index 00000000..49f44411 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundPlayerLoadedPacket.java @@ -0,0 +1,18 @@ +package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; + +import io.netty.buffer.ByteBuf; +import lombok.AccessLevel; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; + +@Data +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class ServerboundPlayerLoadedPacket implements MinecraftPacket { + public static final ServerboundPlayerLoadedPacket INSTANCE = new ServerboundPlayerLoadedPacket(); + + @Override + public void serialize(ByteBuf out, MinecraftCodecHelper helper) { + } +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/level/ServerboundMoveVehiclePacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/level/ServerboundMoveVehiclePacket.java index 7672d0b6..36816394 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/level/ServerboundMoveVehiclePacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/level/ServerboundMoveVehiclePacket.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf; import lombok.AllArgsConstructor; import lombok.Data; import lombok.With; +import org.cloudburstmc.math.vector.Vector3d; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; @@ -11,26 +12,25 @@ import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; @With @AllArgsConstructor public class ServerboundMoveVehiclePacket implements MinecraftPacket { - private final double x; - private final double y; - private final double z; - private final float yaw; - private final float pitch; + private final Vector3d position; + private final float yRot; + private final float xRot; + private final boolean onGround; public ServerboundMoveVehiclePacket(ByteBuf in, MinecraftCodecHelper helper) { - this.x = in.readDouble(); - this.y = in.readDouble(); - this.z = in.readDouble(); - this.yaw = in.readFloat(); - this.pitch = in.readFloat(); + this.position = Vector3d.from(in.readDouble(), in.readDouble(), in.readDouble()); + this.yRot = in.readFloat(); + this.xRot = in.readFloat(); + this.onGround = in.readBoolean(); } @Override public void serialize(ByteBuf out, MinecraftCodecHelper helper) { - out.writeDouble(this.x); - out.writeDouble(this.y); - out.writeDouble(this.z); - out.writeFloat(this.yaw); - out.writeFloat(this.pitch); + out.writeDouble(this.position.getX()); + out.writeDouble(this.position.getY()); + out.writeDouble(this.position.getZ()); + out.writeFloat(this.yRot); + out.writeFloat(this.xRot); + out.writeBoolean(this.onGround); } } diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index 48372c3bc26d32fe0d27fdb8eb81b899ded32d44..00853fc3c60b125ba05a1d08cee6c8872cd759b7 100644 GIT binary patch literal 12399 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

EGl zk*}x~2}p{lnMtL8{_njYD*fmSS*23Qfsf8$;!k@SrQUfFl=_=5j8dN!#F3z^X<|9V z99n*#By-i>B1LlAGg4$fNmBgT&wiGvRM`HBpIdGHmEYPzWc_FDXOgUcyq!H)yY*Lp zdw6M`+)=Qr$>s z>`s@ESX1;7@dM#O;emrE0ec>hy%=KJfmCnzS{?Bj--=>IFb4;&x4mOZ_bj|#M{srb zOZVM@wGT6s!xxHk`a*E>w7R~VlG}TetGUxGBo{c|Bu#+5F~0!5V5eE8WTxQ#Cx80| z(c)K`6`7R2&p8fh74~Kw^Z$##^MW{zKakB|jw<2Rj^5NU13FWgTeKP3iKTac7t4mD z9B`hL#?!!e^RmujEz1PIrU9b%B?iBQUSa^AaMrzp>C&J0w7H?JBei*_lfj-vKxG$@ z%*AgH_N2@`L&`yo307mGO1Q8icsp{5*TybhngX;437JWUTQ7_bpUKmQ6nExy7>vC1 z>h!nj%)7t&cV7^}eN+^%!+Ce=MrUN?p#ANGT$n~KOsdOy=UY^l^V#HmMANr!oh#9_ z^`rj2*0dbh15HaI{kyeX%eP`9L;Wc4dk2{(RT|)=EVM1pPNeq!w=2P3MQWhbHD4n9 zod!#Uua(K|$$$8t`)i2m-ULA9HepxdOGO>OwEJaO89H{O>`FpeqwGrVU;ny5`~Uru z{7U<5PDT2+1zv1loNM`(%=o<5+aOeBZzKfUWD;iV^@D>zUlr)z#H2^#(JkUQJLbrC zoFw4?@IZ+`Myp5SZM zBg_9qHIf|Lg#$w7Hk%^K@^-BNl+u{}X%Hqmpo{g4nZu}L%)CdIztg~O>>%15Ahjy_smm%{#!hXFzf4V6Z(&H1q|TC>&znU^1e6@7MdK&x zlk>;2TBCR@%kf8f~+)W7NaGR*-AZg h<}fOmGw+dQH+PX&6?+yC1)GNP{{e`TiOa8p0RXQmMl=8b literal 12475 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 F0RYKJVfp|7