From a8756aad161682daabc8ea4ebf40149cfeede1da Mon Sep 17 00:00:00 2001 From: basaigh <53559772+basaigh@users.noreply.github.com> Date: Fri, 3 May 2024 16:51:24 +0100 Subject: [PATCH 01/10] 24w18a --- protocol/build.gradle.kts | 2 +- .../protocol/codec/MinecraftCodec.java | 4 ++-- .../game/entity/attribute/AttributeType.java | 15 ++++++++++--- .../data/game/entity/type/PaintingType.java | 22 ++++++++++++++++++- .../data/game/level/sound/BuiltinSound.java | 3 +++ 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/protocol/build.gradle.kts b/protocol/build.gradle.kts index 7ace4fbf0..346a08c14 100644 --- a/protocol/build.gradle.kts +++ b/protocol/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("mcprotocollib.publish-conventions") } -version = "1.20.6-SNAPSHOT" +version = "1.21-SNAPSHOT" description = "MCProtocolLib is a simple library for communicating with Minecraft clients and servers." dependencies { 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 cb02421e3..1defd64d8 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 @@ -223,9 +223,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion(766) + .protocolVersion((1 << 30) | 193) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("1.20.6") + .minecraftVersion("24w18a") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeType.java index d735809d7..6cce6ec30 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeType.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeType.java @@ -39,9 +39,11 @@ enum Builtin implements AttributeType { GENERIC_ATTACK_SPEED("minecraft:generic.attack_speed", 4, 0, 1024), PLAYER_BLOCK_BREAK_SPEED("minecraft:player.block_break_speed", 1, 0, 1024), PLAYER_BLOCK_INTERACTION_RANGE("minecraft:player.block_interaction_range", 4.5, 0, 64), + GENERIC_BURNING_TIME("minecraft:generic.burning_time", 1, 0, 1024), + GENERIC_EXPLOSION_KNOCKBACK_RESISTANCE("minecraft:generic.explosion_knockback_resistance", 0, 0, 1), PLAYER_ENTITY_INTERACTION_RANGE("minecraft:player.entity_interaction_range", 3, 0, 64), GENERIC_FALL_DAMAGE_MULTIPLIER("minecraft:generic.fall_damage_multiplier", 1, 0, 100), - GENERIC_FLYING_SPEED("minecraft:generic.flying_speed", 0.4F, 0, 1024), + GENERIC_FLYING_SPEED("minecraft:generic.flying_speed", 0.4, 0, 1024), GENERIC_FOLLOW_RANGE("minecraft:generic.follow_range", 32, 0, 2048), GENERIC_GRAVITY("minecraft:generic.gravity", 0.08, -1, 1), GENERIC_JUMP_STRENGTH("minecraft:generic.jump_strength", 0.42, 0, 32), @@ -49,11 +51,18 @@ enum Builtin implements AttributeType { GENERIC_LUCK("minecraft:generic.luck", 0, -1024, 1024), GENERIC_MAX_ABSORPTION("minecraft:generic.max_absorption", 0, 0, 2048), GENERIC_MAX_HEALTH("minecraft:generic.max_health", 20, 1, 1024), - GENERIC_MOVEMENT_SPEED("minecraft:generic.movement_speed", 0.7F, 0, 1024), + PLAYER_MINING_EFFICIENCY("player.mining_efficiency", 0, 0, 1024), + GENERIC_MOVEMENT_EFFICIENCY("generic.movement_efficiency", 0, 0, 1), + GENERIC_MOVEMENT_SPEED("minecraft:generic.movement_speed", 0.7, 0, 1024), + GENERIC_OXYGEN_BONUS("minecraft:generic.oxygen_bonus", 0, 0, 1024), GENERIC_SAFE_FALL_DISTANCE("minecraft:generic.safe_fall_distance", 3, -1024, 1024), GENERIC_SCALE("minecraft:generic.scale", 1, 0.0625, 16), + PLAYER_SNEAKING_SPEED("minecraft:player.sneaking_speed", 0.3, 0, 1), ZOMBIE_SPAWN_REINFORCEMENTS("minecraft:zombie.spawn_reinforcements", 0, 0, 1), - GENERIC_STEP_HEIGHT("minecraft:generic.step_height", 0.6, 0, 10); + GENERIC_STEP_HEIGHT("minecraft:generic.step_height", 0.6, 0, 10), + PLAYER_SUBMERGED_MINING_SPEED("minecraft:player.submerged_mining_speed", 0.2, 0, 20), + PLAYER_SWEEPING_DAMAGE_RATIO("minecraft:player.sweeping_damage_ratio", 0, 0, 1), + GENERIC_WATER_MOVEMENT_EFFICIENCY("minecraft:generic.water_movement_efficiency", 0, 0, 1); private final String identifier; private final double def; diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/type/PaintingType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/type/PaintingType.java index 2f6f31ca6..fa86e9355 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/type/PaintingType.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/type/PaintingType.java @@ -30,7 +30,27 @@ public enum PaintingType { WIND, WATER, FIRE, - DONKEY_KONG; + DONKEY_KONG, + BAROQUE, + HUMBLE, + MEDITATIVE, + PRAIRIE_RIDE, + UNPACKED, + BACKYARD, + BOUQUET, + CAVEBIRD, + CHANGING, + COTAN, + ENDBOSS, + FERN, + FINDING, + LOWMIST, + ORB, + OWLEMONS, + PASSAGE, + POND, + SUNFLOWERS, + TIDES; private static final PaintingType[] VALUES = values(); diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java index 013a1015d..9af06524d 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java @@ -893,6 +893,9 @@ public enum BuiltinSound implements Sound { MUSIC_DISC_WARD("music_disc.ward"), MUSIC_DISC_OTHERSIDE("music_disc.otherside"), MUSIC_DISC_RELIC("music_disc.relic"), + MUSIC_DISC_CREATOR("music_disc.creator"), + MUSIC_DISC_CREATOR_MUSIC_BOX("music_disc.creator_music_box"), + MUSIC_DISC_PRECIPICE("music_disc.precipice"), MUSIC_DRAGON("music.dragon"), MUSIC_END("music.end"), MUSIC_GAME("music.game"), From ba9a35e43c77bd5ce7b20ff9e3be85640aef9ac2 Mon Sep 17 00:00:00 2001 From: basaigh <53559772+basaigh@users.noreply.github.com> Date: Wed, 22 May 2024 18:38:12 +0100 Subject: [PATCH 02/10] 24w19a --- .../protocol/codec/MinecraftCodec.java | 4 ++-- .../data/game/level/sound/BuiltinSound.java | 4 ++-- .../ClientboundProjectilePowerPacket.java | 12 +++--------- protocol/src/main/resources/networkCodec.nbt | Bin 5780 -> 11325 bytes 4 files changed, 7 insertions(+), 13 deletions(-) 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 1defd64d8..89c21366f 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 @@ -223,9 +223,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 193) + .protocolVersion((1 << 30) | 194) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("24w18a") + .minecraftVersion("24w19a") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java index 9af06524d..a3bfced26 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java @@ -690,9 +690,9 @@ public enum BuiltinSound implements Sound { BLOCK_TRIAL_SPAWNER_SPAWN_ITEM("block.trial_spawner.spawn_item"), BLOCK_TRIAL_SPAWNER_SPAWN_ITEM_BEGIN("block.trial_spawner.spawn_item_begin"), BLOCK_TRIAL_SPAWNER_DETECT_PLAYER("block.trial_spawner.detect_player"), - BLOCK_TRIAL_SPAWNER_CHARGE_ACTIVATE("block.trial_spawner.charge_activate"), + BLOCK_TRIAL_SPAWNER_OMINOUS_ACTIVATE("block.trial_spawner.ominous_activate"), BLOCK_TRIAL_SPAWNER_AMBIENT("block.trial_spawner.ambient"), - BLOCK_TRIAL_SPAWNER_AMBIENT_CHARGED("block.trial_spawner.ambient_charged"), + BLOCK_TRIAL_SPAWNER_AMBIENT_OMINOUS("block.trial_spawner.ambient_ominous"), BLOCK_TRIAL_SPAWNER_OPEN_SHUTTER("block.trial_spawner.open_shutter"), BLOCK_TRIAL_SPAWNER_CLOSE_SHUTTER("block.trial_spawner.close_shutter"), BLOCK_TRIAL_SPAWNER_EJECT_ITEM("block.trial_spawner.eject_item"), diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundProjectilePowerPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundProjectilePowerPacket.java index a8a99ca58..81f41311b 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundProjectilePowerPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundProjectilePowerPacket.java @@ -12,22 +12,16 @@ @AllArgsConstructor public class ClientboundProjectilePowerPacket implements MinecraftPacket { private final int id; - private final double xPower; - private final double yPower; - private final double zPower; + private final double accelerationPower; public ClientboundProjectilePowerPacket(ByteBuf in, MinecraftCodecHelper helper) { this.id = helper.readVarInt(in); - this.xPower = in.readDouble(); - this.yPower = in.readDouble(); - this.zPower = in.readDouble(); + this.accelerationPower = in.readDouble(); } @Override public void serialize(ByteBuf out, MinecraftCodecHelper helper) { helper.writeVarInt(out, this.id); - out.writeDouble(this.xPower); - out.writeDouble(this.yPower); - out.writeDouble(this.zPower); + out.writeDouble(this.accelerationPower); } } diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index 9b5814f73efd2cd81224104ea425a64e366a2cc3..40ae002d8b3d77b97fed35e418516c081d60b3bc 100644 GIT binary patch literal 11325 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 literal 5780 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 S2NVM}5&D03Q(6 Date: Wed, 22 May 2024 18:39:18 +0100 Subject: [PATCH 03/10] 24w19b --- .../geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 89c21366f..42b40217a 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 @@ -223,9 +223,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 194) + .protocolVersion((1 << 30) | 195) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("24w19a") + .minecraftVersion("24w19b") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) From 8965b5dc43cdfce4e614f10555763c64cc56f807 Mon Sep 17 00:00:00 2001 From: basaigh <53559772+basaigh@users.noreply.github.com> Date: Sun, 2 Jun 2024 13:33:35 +0100 Subject: [PATCH 04/10] 24w20a --- .../protocol/MinecraftProtocol.java | 2 +- .../protocol/codec/MinecraftCodec.java | 4 +- .../protocol/codec/MinecraftCodecHelper.java | 87 +++++++++++++++++- .../data/game/chat/BuiltinChatType.java | 39 -------- .../protocol/data/game/chat/ChatType.java | 8 ++ .../game/entity/metadata/MetadataType.java | 5 +- .../game/entity/metadata/PaintingVariant.java | 4 + .../game/entity/metadata/WolfVariant.java | 7 ++ .../ClientboundDisguisedChatPacket.java | 12 +-- .../ClientboundPlayerChatPacket.java | 12 +-- .../clientbound/ClientboundRespawnPacket.java | 10 +- .../player/ServerboundUseItemPacket.java | 6 ++ protocol/src/main/resources/networkCodec.nbt | Bin 11325 -> 11327 bytes 13 files changed, 129 insertions(+), 67 deletions(-) delete mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/BuiltinChatType.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/PaintingVariant.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/WolfVariant.java diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftProtocol.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftProtocol.java index 81d19c6e3..ec2d53af3 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftProtocol.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/MinecraftProtocol.java @@ -250,7 +250,7 @@ public Class getServerboundClass(int id) { public static NbtMap loadNetworkCodec() { try (InputStream inputStream = Objects.requireNonNull(MinecraftProtocol.class.getClassLoader().getResourceAsStream("networkCodec.nbt"))) { - return (NbtMap) NbtUtils.createGZIPReader(inputStream).readTag(); + return (NbtMap) NbtUtils.createGZIPReader(inputStream).readTag(512); } catch (Exception e) { throw new AssertionError("Unable to load network codec.", e); } 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 42b40217a..210e49dfb 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 @@ -223,9 +223,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 195) + .protocolVersion((1 << 30) | 196) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("24w19b") + .minecraftVersion("24w20a") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java index c0f979b7e..d0b84999f 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java @@ -21,6 +21,7 @@ import org.geysermc.mcprotocollib.protocol.data.DefaultComponentSerializer; import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.Identifier; +import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatType; import org.geysermc.mcprotocollib.protocol.data.game.chat.numbers.BlankFormat; import org.geysermc.mcprotocollib.protocol.data.game.chat.numbers.FixedFormat; import org.geysermc.mcprotocollib.protocol.data.game.chat.numbers.NumberFormat; @@ -42,9 +43,11 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.GlobalPos; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.PaintingVariant; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.Pose; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.SnifferState; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.VillagerData; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.WolfVariant; import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.BlockBreakStage; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -459,12 +462,56 @@ public void writePose(ByteBuf buf, Pose pose) { this.writeEnum(buf, pose); } - public PaintingType readPaintingType(ByteBuf buf) { - return PaintingType.from(this.readVarInt(buf)); + public Holder readWolfVariant(ByteBuf buf) { + return this.readHolder(buf, input -> { + String wildTexture = this.readResourceLocation(input); + String tameTexture = this.readResourceLocation(input); + String angryTexture = this.readResourceLocation(input); + String biomeLocation = null; + int[] biomeHolders = null; + + int length = this.readVarInt(input) - 1; + if (length == -1) { + biomeLocation = this.readResourceLocation(input); + } else { + biomeHolders = new int[length]; + for (int j = 0; j < length; j++) { + biomeHolders[j] = this.readVarInt(input); + } + } + return new WolfVariant(wildTexture, tameTexture, angryTexture, biomeLocation, biomeHolders); + }); + } + + public void writeWolfVariant(ByteBuf buf, Holder variantHolder) { + this.writeHolder(buf, variantHolder, (output, variant) -> { + this.writeResourceLocation(output, variant.wildTexture()); + this.writeResourceLocation(output, variant.tameTexture()); + this.writeResourceLocation(output, variant.angryTexture()); + if (variant.biomeLocation() != null) { + this.writeVarInt(output, 0); + this.writeResourceLocation(output, variant.biomeLocation()); + } else { + this.writeVarInt(output, variant.biomeHolders().length + 1); + for (int holder : variant.biomeHolders()) { + this.writeVarInt(output, holder); + } + } + }); } - public void writePaintingType(ByteBuf buf, PaintingType type) { - this.writeEnum(buf, type); + public Holder readPaintingVariant(ByteBuf buf) { + return this.readHolder(buf, input -> { + return new PaintingVariant(this.readVarInt(input), this.readVarInt(input), this.readResourceLocation(input)); + }); + } + + public void writePaintingVariant(ByteBuf buf, Holder variantHolder) { + this.writeHolder(buf, variantHolder, (output, variant) -> { + this.writeVarInt(buf, variant.width()); + this.writeVarInt(buf, variant.height()); + this.writeResourceLocation(buf, variant.assetId()); + }); } public SnifferState readSnifferState(ByteBuf buf) { @@ -699,6 +746,38 @@ public void writeNumberFormat(ByteBuf buf, NumberFormat numberFormat) { } } + public ChatType readChatType(ByteBuf buf) { + return new ChatType(readChatTypeDecoration(buf), readChatTypeDecoration(buf)); + } + + public void writeChatType(ByteBuf buf, ChatType chatType) { + this.writeChatTypeDecoration(buf, chatType.chat()); + this.writeChatTypeDecoration(buf, chatType.narration()); + } + + public ChatType.ChatTypeDecoration readChatTypeDecoration(ByteBuf buf) { + String translationKey = this.readString(buf); + + int[] parameters = new int[this.readVarInt(buf)]; + for (int i = 0; i < parameters.length; i++) { + parameters[i] = this.readVarInt(buf); + } + + NbtMap style = this.readCompoundTag(buf); + return new ChatType.ChatTypeDecoration(translationKey, parameters, style); + } + + public void writeChatTypeDecoration(ByteBuf buf, ChatType.ChatTypeDecoration decoration) { + this.writeString(buf, decoration.translationKey()); + + this.writeVarInt(buf, decoration.parameters().length); + for (int parameter : decoration.parameters()) { + this.writeVarInt(buf, parameter); + } + + this.writeAnyTag(buf, decoration.style()); + } + public PositionSource readPositionSource(ByteBuf buf) { PositionSourceType type = PositionSourceType.from(this.readVarInt(buf)); return switch (type) { diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/BuiltinChatType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/BuiltinChatType.java deleted file mode 100644 index 9edddbee2..000000000 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/BuiltinChatType.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.geysermc.mcprotocollib.protocol.data.game.chat; - -import org.geysermc.mcprotocollib.protocol.data.game.Identifier; - -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -public enum BuiltinChatType { - CHAT, - SAY_COMMAND, - MSG_COMMAND_INCOMING, - MSG_COMMAND_OUTGOING, - TEAM_MSG_COMMAND_INCOMING, - TEAM_MSG_COMMAND_OUTGOING, - EMOTE_COMMAND; - - private final String resourceLocation; - - BuiltinChatType() { - this.resourceLocation = Identifier.formalize(name().toLowerCase(Locale.ROOT)); - } - - public String getResourceLocation() { - return resourceLocation; - } - - private static final Map VALUES = new HashMap<>(); - - public static BuiltinChatType from(String resourceLocation) { - return VALUES.get(resourceLocation); - } - - static { - for (BuiltinChatType type : values()) { - VALUES.put(type.getResourceLocation(), type); - } - } -} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java new file mode 100644 index 000000000..14c3446b6 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java @@ -0,0 +1,8 @@ +package org.geysermc.mcprotocollib.protocol.data.game.chat; + +import org.cloudburstmc.nbt.NbtMap; + +public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) { + public record ChatTypeDecoration(String translationKey, int[] parameters, NbtMap style) { + } +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/MetadataType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/MetadataType.java index 1501714cb..7cf8e0509 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/MetadataType.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/MetadataType.java @@ -8,6 +8,7 @@ import org.cloudburstmc.math.vector.Vector4f; import org.cloudburstmc.nbt.NbtMap; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.FloatEntityMetadata; @@ -51,10 +52,10 @@ public class MetadataType { public static final OptionalIntMetadataType OPTIONAL_VARINT = new OptionalIntMetadataType(ObjectEntityMetadata::new); public static final MetadataType POSE = new MetadataType<>(MinecraftCodecHelper::readPose, MinecraftCodecHelper::writePose, ObjectEntityMetadata::new); public static final IntMetadataType CAT_VARIANT = new IntMetadataType(MinecraftCodecHelper::readVarInt, MinecraftCodecHelper::writeVarInt, IntEntityMetadata::new); - public static final IntMetadataType WOLF_VARIANT = new IntMetadataType(MinecraftCodecHelper::readVarInt, MinecraftCodecHelper::writeVarInt, IntEntityMetadata::new); + public static final MetadataType> WOLF_VARIANT = new MetadataType<>(MinecraftCodecHelper::readWolfVariant, MinecraftCodecHelper::writeWolfVariant, ObjectEntityMetadata::new); public static final IntMetadataType FROG_VARIANT = new IntMetadataType(MinecraftCodecHelper::readVarInt, MinecraftCodecHelper::writeVarInt, IntEntityMetadata::new); public static final MetadataType> OPTIONAL_GLOBAL_POS = new MetadataType<>(optionalReader(MinecraftCodecHelper::readGlobalPos), optionalWriter(MinecraftCodecHelper::writeGlobalPos), ObjectEntityMetadata::new); - public static final MetadataType PAINTING_VARIANT = new MetadataType<>(MinecraftCodecHelper::readPaintingType, MinecraftCodecHelper::writePaintingType, ObjectEntityMetadata::new); + public static final MetadataType> PAINTING_VARIANT = new MetadataType<>(MinecraftCodecHelper::readPaintingVariant, MinecraftCodecHelper::writePaintingVariant, ObjectEntityMetadata::new); public static final MetadataType SNIFFER_STATE = new MetadataType<>(MinecraftCodecHelper::readSnifferState, MinecraftCodecHelper::writeSnifferState, ObjectEntityMetadata::new); public static final MetadataType ARMADILLO_STATE = new MetadataType<>(MinecraftCodecHelper::readArmadilloState, MinecraftCodecHelper::writeArmadilloState, ObjectEntityMetadata::new); public static final MetadataType VECTOR3 = new MetadataType<>(MinecraftCodecHelper::readRotation, MinecraftCodecHelper::writeRotation, ObjectEntityMetadata::new); diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/PaintingVariant.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/PaintingVariant.java new file mode 100644 index 000000000..bc8db771a --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/PaintingVariant.java @@ -0,0 +1,4 @@ +package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; + +public record PaintingVariant(int width, int height, String assetId) { +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/WolfVariant.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/WolfVariant.java new file mode 100644 index 000000000..10bfb006b --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/WolfVariant.java @@ -0,0 +1,7 @@ +package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; + +import org.jetbrains.annotations.Nullable; + +public record WolfVariant(String wildTexture, String tameTexture, String angryTexture, + @Nullable String biomeLocation, int @Nullable [] biomeHolders) { +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundDisguisedChatPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundDisguisedChatPacket.java index 85ecce193..15d236e9b 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundDisguisedChatPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundDisguisedChatPacket.java @@ -8,24 +8,22 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; -import org.geysermc.mcprotocollib.protocol.data.game.chat.BuiltinChatType; +import org.geysermc.mcprotocollib.protocol.data.game.Holder; +import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatType; @Data @With @AllArgsConstructor public class ClientboundDisguisedChatPacket implements MinecraftPacket { private final Component message; - /** - * Is {@link BuiltinChatType} defined in the order sent by the server in the login packet. - */ - private final int chatType; + private final Holder chatType; private final Component name; private final @Nullable Component targetName; public ClientboundDisguisedChatPacket(ByteBuf in, MinecraftCodecHelper helper) { this.message = helper.readComponent(in); - this.chatType = helper.readVarInt(in); + this.chatType = helper.readHolder(in, helper::readChatType); this.name = helper.readComponent(in); this.targetName = helper.readNullable(in, helper::readComponent); } @@ -33,7 +31,7 @@ public ClientboundDisguisedChatPacket(ByteBuf in, MinecraftCodecHelper helper) { @Override public void serialize(ByteBuf out, MinecraftCodecHelper helper) { helper.writeComponent(out, this.message); - helper.writeVarInt(out, this.chatType); + helper.writeHolder(out, this.chatType, helper::writeChatType); helper.writeComponent(out, this.name); helper.writeNullable(out, this.targetName, helper::writeComponent); } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundPlayerChatPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundPlayerChatPacket.java index bbb5ac298..9379bb934 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundPlayerChatPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundPlayerChatPacket.java @@ -8,8 +8,9 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; -import org.geysermc.mcprotocollib.protocol.data.game.chat.BuiltinChatType; +import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatFilterType; +import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatType; import org.geysermc.mcprotocollib.protocol.data.game.chat.MessageSignature; import java.util.ArrayList; @@ -29,10 +30,7 @@ public class ClientboundPlayerChatPacket implements MinecraftPacket { private final List lastSeenMessages; private final @Nullable Component unsignedContent; private final ChatFilterType filterMask; - /** - * Is {@link BuiltinChatType} defined in the order sent by the server in the login packet. - */ - private final int chatType; + private final Holder chatType; private final Component name; private final @Nullable Component targetName; @@ -58,7 +56,7 @@ public ClientboundPlayerChatPacket(ByteBuf in, MinecraftCodecHelper helper) { this.unsignedContent = helper.readNullable(in, helper::readComponent); this.filterMask = ChatFilterType.from(helper.readVarInt(in)); - this.chatType = helper.readVarInt(in); + this.chatType = helper.readHolder(in, helper::readChatType); this.name = helper.readComponent(in); this.targetName = helper.readNullable(in, helper::readComponent); } @@ -86,7 +84,7 @@ public void serialize(ByteBuf out, MinecraftCodecHelper helper) { helper.writeNullable(out, this.unsignedContent, helper::writeComponent); helper.writeVarInt(out, this.filterMask.ordinal()); - helper.writeVarInt(out, this.chatType); + helper.writeHolder(out, this.chatType, helper::writeChatType); helper.writeComponent(out, this.name); helper.writeNullable(out, this.targetName, helper::writeComponent); } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundRespawnPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundRespawnPacket.java index eadc282ee..555ea1765 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundRespawnPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundRespawnPacket.java @@ -12,18 +12,18 @@ @With @AllArgsConstructor public class ClientboundRespawnPacket implements MinecraftPacket { - private static final byte KEEP_ATTRIBUTES = 1; + private static final byte KEEP_ATTRIBUTE_MODIFIERS = 1; private static final byte KEEP_ENTITY_DATA = 2; private final PlayerSpawnInfo commonPlayerSpawnInfo; // The following two are the dataToKeep byte private final boolean keepMetadata; - private final boolean keepAttributes; + private final boolean keepAttributeModifiers; public ClientboundRespawnPacket(ByteBuf in, MinecraftCodecHelper helper) { this.commonPlayerSpawnInfo = helper.readPlayerSpawnInfo(in); byte dataToKeep = in.readByte(); - this.keepAttributes = (dataToKeep & KEEP_ATTRIBUTES) != 0; + this.keepAttributeModifiers = (dataToKeep & KEEP_ATTRIBUTE_MODIFIERS) != 0; this.keepMetadata = (dataToKeep & KEEP_ENTITY_DATA) != 0; } @@ -34,8 +34,8 @@ public void serialize(ByteBuf out, MinecraftCodecHelper helper) { if (this.keepMetadata) { dataToKeep += KEEP_ENTITY_DATA; } - if (this.keepAttributes) { - dataToKeep += KEEP_ATTRIBUTES; + if (this.keepAttributeModifiers) { + dataToKeep += KEEP_ATTRIBUTE_MODIFIERS; } out.writeByte(dataToKeep); } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/player/ServerboundUseItemPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/player/ServerboundUseItemPacket.java index eb9fb1f90..bdf926397 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/player/ServerboundUseItemPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/player/ServerboundUseItemPacket.java @@ -15,15 +15,21 @@ public class ServerboundUseItemPacket implements MinecraftPacket { private final @NonNull Hand hand; private final int sequence; + private final float yRot; + private final float xRot; public ServerboundUseItemPacket(ByteBuf in, MinecraftCodecHelper helper) { this.hand = Hand.from(helper.readVarInt(in)); this.sequence = helper.readVarInt(in); + this.yRot = in.readFloat(); + this.xRot = in.readFloat(); } @Override public void serialize(ByteBuf out, MinecraftCodecHelper helper) { helper.writeVarInt(out, this.hand.ordinal()); helper.writeVarInt(out, this.sequence); + out.writeFloat(this.yRot); + out.writeFloat(this.xRot); } } diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index 40ae002d8b3d77b97fed35e418516c081d60b3bc..c687fe71918c05534bfb503ec5d5998383b40d41 100644 GIT binary patch delta 10938 zcmV;rDn-@3Sie}17JuEm5Ai;lqSk-buyzgm&wxLz1-zDTdkudq4BH;>C-Ic}1C5t_)3^=&siDf8@L7P#tN$Pk&r{R+;wqM@05{PHFFI z)|kvIigJ;*wY4Ep&L(ZUj^$4&CrpEWr$|l`iwueF&njnpG8|c&PgIlsO?gl3qH6BY zaaE4V8=C&WwEJq*V_rFB5Kni_k#9Pbz&YR5Y>$0WZbI4?W0;E!rZTI{YMw`Yl~R); zv8A*PqH7iAkvqwg`VZ?MI20*(*o<#v=$gl znHJc$d?p4?G9=pNm|$I+W`e<#F~PneOq@?zxSHt^H-BPdCWnnqx>H?7Zc7*mpbD&H z2+bcCuGx(^IazL8&>l^X3kp&;F6gIxZFrPicR%7`wwyMCPEBhgfGX2Q@U?)Mfi_A^ zYpx_Syi?=MaHvvd_*aCP3!sf@5nGSl?tBh6iVr-Bdky3j4+^5M%c&v`NTJkn2$5%<`dSX>G_1g zl+7pXTfPh4B`+c#&X#k*v`5n}n1YnKVEQRv3wxStL>!zerv=ufX)Q3AGA*!g2oslJ zi~XKy8;SQlpTo%#(yuN%3sQDMzyePg#Rb|it$$cM7fNb}c4=HY6sA-=^c!G;F8Qve z7LG#-+BG#RT3E`y!HyUr=M;hh7fTAL>J+}V+P$BftaBs zV_xV=x(6k)@Ax7+Gr=c}86}6A=W82VYo8(WFv3iL0go6AQyV(Afh;!Xm21u}aoxmu zN1(k~1cGul{EKR6?hYS9P!`z^q8LtwzhZLu;`?7o<*@Pj=bwJIBFN#clWhYSf3B`d z8ChQbWNCGy93vqL-1+pKgp28t>P&T4PO<;uio7f~#Y}pdeZcs?{>|@8`Ty+m=gTXf zAt4OHKc^98-gF%sS?!i(o^@AFvHun_&l_RPvkwUKALm)|=by6wm1CaMh{l+fHZnbQ zku32_yn||KUyUtO+3ut#1orxhE4#LN_||{9>%R{#WSI8}gLtk(zUY z9}zx2`aaJ}S3g_(bgkT+6JP*LfQW!n>G@8Q;hdAPf%Hkm0@2TyO7d9Qf8Jc)SlTQX z3q&}A*abu>UCp-Xq@GH^OB=vI={+n3uXzLwlFmg$QXbSDvaj6iT8_R0)8-t}B7-1H zp3_gLMRgt5ki;?>ytid|ISfhOBKU~oc1?Z9LlfQQadQ|l-25XR! zsFTl7^stB`4hxbbMVQcZ18FiI338gtrRs4JRUtG;R}RvIvYU7#e?egLxuiWQL0U#; zd1wo_j!xC`D%1k{W6zi5(@I-F07GH{ z!N&wQh@JMS0=!gfN)kXxrX-X^Bo9VLRUugUnmCrj8Ua$<&c* zg$BQ%jUcw$f3kUi@ zN;WWIn>>PaiaUvk77jvC04krLpbc*3K?}p#v!R*at7qmSFqxT)t#C6>+6ZQTzn+<= zpvlZU)eMcS!$we84{Al$0FWfI1}*Z8X=oZok~Vt#e;~#bfXX+fpbeT#30nvndsr)( z0wGC~DX>XG&E-r3>a`+T9_7+xL8e%D6k|CCAg(@p< z0|fM>ma-ruiLzi5bihXqyp)vQsWsr!&?Eys-3%RNNh2VrcWaF@0hDBv32k`R9e4y{ z>jTa9e*?5ZZXf>&6Z`KXOlfpRSG8Wxv`s%Qn*`;55>b$5K=b6cNDqxM7H1A^C6}q&jG|qYB(a3RqN+#P^@|1fIGOE|Q7WsfF ze=FFCoKof(X&iW<9BIMM11ROha0Pi&g61`Q*R(k0Y?ok4nb{+O16EF;D-mk>M0I+U z9)I9EBgcp%!3T zc#mi!RxBfUt#*#rdV+f`#N^Vhf9nKvU2W=V$P3*Xd(39(oUGi16v8hb1O|mh3SE;L zAf0FQvFl-Hr9?N^<}Nz%TJy>sFjig4y&aW|Gaebv%2Uls^{M81m8pigkI{(z_25&D zAia#fW}&`XXb9Q0*s(b}#C2CJcIx9q9>8*8F$=do7ojY!3+-O2z(S$ljMWOYB>4JJ^N-uXlty!)Vuri=N zJZ44#EtQ}paOK_o5et|-f7P^i#}<`?)-^3QH&l222c3aS_~K_u@TanqJ=2hrl?6*! zWH_BOTpvk>Ysz8^g2Rl5y(9IooIpu&4$<@hQllaXAmPvkDd51V245&rHg!j1{2*5G zT?r4s+LX77xkSaEl(Y)as%i@5e4!E_CdCu&E0 zJUmrXL$p~OuEP!1Ps~2s+?uYjQ?KJsKyF%9;Pa2f-(Db{!)TQ!|zmSf+9;4dW%o>31aF zJ>;@NkiLLB_{8g$j?m#T8=e=4^Nll=95zVsc|*+`s8LKxe`VF9q9?X6+72|8ms)Js z4e**;MOT>0^VZO}aZQK1I+TU8K}P<77c_t>+>_F5bdM0fsa4w_{^36vt!?N_9Xj!>cDBj# zrm;!78(T}ue`U>ZzPcHLF7s7#13ky_(KPf__1u6U=;l@$T}q;dMwf|pkecTb&Z?A2 zwyCa(0jC-`n=xs5YEXJ%BpY~8K!Ob=#&=(wuvjr!umMuu=2msmUEQRXW^^}JsLgfP zJ6&UGrL(!UzP7&EU0OD_H)`12YIU1Kw?1SE#DLEVf6h-b%_V}$7+VV(+dR7A+Y19T zHYGG_~oII0Q*{PC-Ia4qvS9XSZi|mKEai+|x zV1`DESbF>x505DwIik?`c3k9yLz z15}|Ze_sbNMbIvu&lmkubjT`gYA_z(MQHad>g6dU{{J2_F%f;$Tb96j6wf7>607QGP zf4W95z4Zd-g`P!!K#uX1SPOw_AWHL>jAo0X8)A`*moeSm zkm$C{j#rk>uicbrmWjEvcLu|_M@a-Xw4N!Up_jA+C7bKQHL67;&f?Ve`sB+09@rIS~nfB^(oe=IICN`!>eUiw~3IZeGd?bml%YWiS%MR9lx z=aTvO@4-ITDP_j#^_axia0&jj6z-X$=oET&(~U+lh$n`cuk-7~!VXDS;C6V@tW@XB zRnueJ>3TFi3}-a?HVzi5g5WWXLoH1w8Mc3*e}akTRM3pa+fm$2Bi5h7h?S*3e_Kn8 zmfuLP$CwGR5yJ1L3`o5T!eMhbVlI;bWy;&-X)vlQcJy}awUwzMJCVl%;VC+BKKUBm zuF zx~Wu}LnF9z9^&Z(7r0Il8$U7Ei(^Wa%e%^r_Pwif2|x31+F*& zDZID>6S-cZgmGYy8rj1xF^>l`bB)B;X7$8Zr6NV1Las1X-NlU{7HH`tIf$3oN(4+h z7b|HM#5%l4n(z4RO-ZaMp!l}sv^e=1qn!vsz^r>ZXTS^TT%It3G?QI4i3sWF+HOuC#tc)U?d z&s5WY*iZ7Al_8oHDckvDMS(uS**#vll+gzXBKpMgL4@cX31>iv^o z^)6(G0Wmt;Ds99Se<)3FrcGd(cvoU>{Mw&tYemU2A-0&RxrBSt#bQJpnoSs)#MOZl zxmL+QZ=*I5!91FgKn=4fssXHM7J1vOk`zKD(t;Ym16c(~?~LG0sn-uD$$0^g%F|1= z4(Dgi0Uf#WdtglG8?wLh*{i(dreq(O+d}Eu)4RAw$kgiGW+-2)Gr0;>Q1@?oYC`WT zQ-|94oC%6b=c?DCPEE1^GL*}Ld8cgp=Aqkk>lHE7=4bI!Fb7l4P)`+j z(WVSlQplfUoduJ4og%5x*iMe8-)d?X;8mT(8#h0&neeca$`cW?B8BQ+i9A+Q$0k_Hw7Uv1WAE$mVuu zYeV1c^tM*FS66yVOPfTmu|j$>;bJ7|1%-L`BstUoBwHt&%P}Rd2j7*Gu@o6Vvyykc z(e=Vrgb?Q6XSst|NIAUdx`U8!b-A#`N@0uDL)rAZ@KQGYLLRH;1s9~jV+0UOT(g&D zN9;Btv9tUXwBvF@OF`@CAh{PdJo>8d*;I@hp%%a+jb=R-b_i zCU$)bbV1J83NF`1UPL(9@t3KFuFVokdD#n24E!`}EFP#ixl0CS_(o>kORc0d+WWaQ zR=8U3e#UfoeWAwhGmI_-n+g7zz6>lnGsF(p_pE*HeCl&sfmxA^%kfP((E)k2yMLcO z2W`C@|G3x>ZW(_T`IO0f&AI7up}bKf7GyyFYsP-~U4F zh|d3v(z?KDUFbU0%LyxNuy~19*s(Oi_W%N1AP$dv7p=dyHhXIu+V)0gV{4<=S=*$4 z>n^RXcUD%&@&+N>WNCGa@t$*n?|)_M1{NL(cPMb#-T|_W2wjleI`l9{(y&W?ad+7h z*+$pstS=c<+)GEUE4HP*2u=zW=7l%T(n4MTEiLgX^92JGr?bCfqevu zpl{-XH=M>x9o~HTHX%2Pyo)uIIamYfo5B9Yi5%;nq5&(l6NmmwW$lAF2Y>Nl6O$2( zCx80S!zF7I$7(MDEF;G=gK#d8>^YMq{>H&Q=w0Upqi>|K z=O(Q<Ce%ow zi=14#%+N;6Kk=JT!*?)DJ6sGf7~vBW@d5#Q2asGH+h)&klPh=di&S5w)3SLPL|M)t zwt&(%rovlq_XrvBjVYs#J@MAeRfI^LanIGlx`;WOS`M9*9rwU{BY#|awnLj76x_3L zY#^6%3L+CClt-fdu_vOUw&6s^V~?URWZhUbmbNy#9fNcU4MSEpJKgnF(lNHydaJ$O z`f_i1vqt6o3)<0?);yrs8X;H!pvW{*w=RGIOC$%oQ(fkjx&&C7Y9(d`RwK--@NEw zX3$tD`s%wvWq&V3DB2aOe73H}k|gl}bq+J{YIb-uRe0y_NjWDn4>PjSD|g}z2`};e z3|Y7n^ITyMS#rKOCB8Zye9yEEwM%=)Cmi3Yv?8o`9kXnA0c11Iuq&zA-Cz6_x*(PD z^iP%O&t&hfxDb>tnCz+hzzr!U!<*e`;Ky$oBT*9O34hRY@RQ1g8WwrR57K#Yw&Zb| z+(pn~G117payfaCFTN^P>b5>E;{}5W=&Z$QOXmZ@wE+DwRVEplK6_|_w`Q?ba7Wy; z-$GL~oKu79_N+H#x+@Evw^j}obiLfy&1(3~M9YQiUX~6`NTI-d9zP?yAMrQ%WcNwr zRsq%!d4H*!PW$W&@(TG`_WL3Oz37t{KD)(Hb16`&Kkgk)C^H^mj~*!}>9F)EES4#? zH8(0$%|N^&LR<{mk}{Cd>=vDNeRi68IHVp5c^6vF+qr}i4x|C*>VO10Wgu+w`Vmho zZOS5-IMhB-hPiuTZ*Or(JdZ}$i`1pE?80IMj(^`UxzC1aTX!rP!cF&GZNH_=n7(G2 zdP_Mf%9e=58T)+)h-Kdck+@(#$>O68xr%isQ4$~f{;g`fT1rBegpm8R<220)5TvJQ7 z6n}D>zzJ^!DSyhb#7hA*Cmw==dZYh8N~u~@QzI<40Xpz6n}HJ zSTQmHsN~=yM06DzA7?mM%u%*0s(rZbwT-Tm9JD!K$qU4tQ9i)P>Jc|Ku?xj0GChmN zN{@Y|b2M^AX^F9t^e&QC&lK)FyHtz@>s;jd*{deV)rciLSkM!N59U+478qzl{>AwSBkkn`WAVv9e>i*;wkcKrKlzBTI5qKXK!dG)5*0;`i?sn@xiwj zko%5GjPkH6iUDq55QDD#SfMm>1CC5wlK!a7z_Ap^jdgOfSYGLl=Ug-+=1(O1S@fo zag+z7$SZq382^tedF8Nck$+eA#&*wQ_nXBmJt?+nNq~rv~mNM5RM(~juVYD-kGD_RBzI6UG zyw;R*)^hs%EJq~r*4H!2dEIebgB8e-;FQJF|E(y2aIT9?hU~FD(5X~me;^cI*bjd@ znN!$LO@x8i|KW!peo5&ZTfVF9Y4ihC1tVG~X81zSOhPU?*MG(Asw`6!d(+k%?H+mU zwj|mG5ZPV&BynRWN@!JSN~_m#trEMeJ{71>1?V%&;IuN|GhfiQ?3S=VM^{IMDpp>; ziWNS=l^ehc8q_ff*aS``Q!*{LaMAtw5Db%%s z=vu*sb958MRDX`H6@C{IuB=whcnoYPTTBfnWBeWH zHg)J@kDrvI{Oqy~4V%vO!C8s6GEZI%=y$dw8JtC&5BK(2q|pu@Jd4c@l#F#Xx}XVl z%9qi|i~%T_(X2gf-z&g(jzazO0nnc^n6t`7gJ}Lhjept%b?heJ0i_VAV)>JyG=?|( zHX2>&n(mK1#PKyKrkMbVWY=amf_c>`fr7}uPlkIk&P~JwrWp#{odh+rVM&CC z+A3?o(D8~xWM8yVm&w^J0? zpQWgNE=UB-%RQHnuVR}ykGovns9Bdg6Cg%?Zg^`7vSHjH0VhK&Xr4a&rtX-Df-X)* zK_RMNHzg)JaD26AIZnKsxO8YkiK6~7!;C742H=u?>O+pFM4I4`dTSyYqXdYf=^7*; zynj2Mt{xHtzA_Oy&P2$5!f>JUxuxyK`#)C?OF`2ND=HnnjI)C)T`X)IQD9JKgZS5wa!Updh9wqJ)6k7y%TRs`dM>gY4T+jFM|2CCNi7 z$j<)6hycFB5&hZi$qX07oj56f2BsmpCVyZra0+?;I})EJ$A)) z*Kv&`vvqeejx9v?oZ~_xr~poC{47jnZ5F;c9g}e*Lq=wacJBa7wDU2v#WZH&rcs-Q zCtb&h%ed~B#))V@0f){b-pGvI^@BqgmXJ}l&gjGYf8U39Cw~)J z1V|*+2p~`NXfjJ)jsrDxcGr!sc8TlmtKG2|=ZPMpUUFvS>@*uwoaF>OXZW8}^r(i! z`%j+Wlm(5NbPwVE6F5aMo%POS+*5!A-))L6|IbupG)Tb75KBSCtc#K2W z!XI=^XNZ+Yhz;PT%ro>TkiqI!Vs{{%6HcyRXb;C8I}Z7lODG3AVOJ5jY!8nAu7oG0 z4MMq7l;8Yidz*MI)5=6T^S zfBkoVGNqj9IhM(!75w%G?6-5gK1S_1{qWazdzHdU{{74U#9#%jf?uBQ{>eO*yyFr$MKqkcKI`^iF})vWFw z=jl#BpQpgRfAqsEs+yLlny23CDp1YSUau!nji*^Yqtn;0eY_@A^LAP_!4C6c3U|T4 znoYLSGhidZ2@n@8#~IBl=QJa@lEaH04hqS7r>KA2afXUEeAdg>$$!(o`mg@Rzy5E( z_X)hcmI|LPb-UpeHXr?;|NK9w;2eJQf`?p+us5Iqsj9J%r-Zo;)KPQhRwy+Fb&`Go zM8934B_|}NFryQU;Ke^YE`#%n?|%j4^D(=}7@NbpCIjAcT#_7CnQnG$F38;45~qUWIoYh0Ka>OoY2;O-f`^Fc1dv5x!MlY3YR3g1Qh!IEjSH@3CGU+Kwy-T> zcB@lU&AHZM*-bh)5Nh?@osFi+PM=Jb^!VSfHk|L>6(CK{G< zX$e9)Gck)hdZRN>Nbu=S;t@BF1V;!%`RD~@l!{`Sa8Nq?!}QLc(o8kqfou%~q4jhxa+ zFD9p-8d?Ti`Pb98mur1WoCgr7Oed3!<%E@d}26t|xG7guU)m_deWeWY9qyjw6 zAn4?+LyP?0Cegdx$4w!djI>_Gag{fz-vjco3|8;F=MPk@9RBSil?;A8 z%Hi*#+8NOwRbMmv@!cd3o7K&`a@_zjLJIP<^cVl`G11b;--ucgW^sHBc_VkMr}Xsb zi0bKgj*Xta&WW}_=u5?HCIuUh3nzouqpSr?mO@tk$(zYCeKmlm?P|6i5A1h;3MKT~ z)vbjRVkg^uqK%PD6kcmdfnw<3!E{#oV|qe8%X@{gQeKP7ANa_z?dfPS;iu5vU@|mfCICEw#H_ zB&1LO{r@~#BdzQqO)8`b5xZtq*!KO=;gf7C87?Iw_3{@H-DuyKXn}^v_@q~oAmU?J z3442Fc-RKXQ}cDjx#9XOjUd8w7sb<580! zD;5C@lQ%0YNrN0L5tt0`@0942X1}=VEG>X1Ww3}c0B_igv?RShCFlQ!97%@l+yNnS zn@*UddApkfN@~pR*z@CEv*~)q%wbeAX5J&s-({1mD>MP~li@2A7fS$^^X$9kDB<~J cO`ZcN)p!p2qhA~{JcG9Bs<}hQ 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 Date: Sun, 2 Jun 2024 15:25:56 +0100 Subject: [PATCH 05/10] 24w21a --- .../protocol/codec/MinecraftCodec.java | 10 +++- .../protocol/data/game/ServerLink.java | 9 +++ .../entity/attribute/AttributeModifier.java | 9 +-- .../game/entity/attribute/ModifierType.java | 29 ---------- .../item/component/DataComponentType.java | 1 + .../game/item/component/ItemCodecHelper.java | 42 ++++++++++++++ .../game/item/component/JukeboxPlayable.java | 11 ++++ .../data/game/level/sound/BuiltinSound.java | 1 + .../ClientboundCustomReportDetailsPacket.java | 36 ++++++++++++ .../ClientboundServerLinksPacket.java | 54 ++++++++++++++++++ .../ClientboundUpdateAttributesPacket.java | 6 +- protocol/src/main/resources/networkCodec.nbt | Bin 11327 -> 11553 bytes 12 files changed, 168 insertions(+), 40 deletions(-) create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java delete mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/ModifierType.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/JukeboxPlayable.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundCustomReportDetailsPacket.java create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.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 210e49dfb..c68a98802 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 @@ -7,11 +7,13 @@ import org.geysermc.mcprotocollib.protocol.data.game.level.sound.BuiltinSound; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundCookieRequestPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundCustomPayloadPacket; +import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundCustomReportDetailsPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundDisconnectPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundKeepAlivePacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundPingPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundResourcePackPopPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundResourcePackPushPacket; +import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundServerLinksPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundStoreCookiePacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundTransferPacket; import org.geysermc.mcprotocollib.protocol.packet.common.clientbound.ClientboundUpdateTagsPacket; @@ -223,9 +225,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 196) + .protocolVersion((1 << 30) | 197) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("24w20a") + .minecraftVersion("24w21a") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) @@ -262,6 +264,8 @@ public class MinecraftCodec { .registerClientboundPacket(ClientboundUpdateEnabledFeaturesPacket.class, ClientboundUpdateEnabledFeaturesPacket::new) .registerClientboundPacket(ClientboundUpdateTagsPacket.class, ClientboundUpdateTagsPacket::new) .registerClientboundPacket(ClientboundSelectKnownPacks.class, ClientboundSelectKnownPacks::new) + .registerClientboundPacket(ClientboundCustomReportDetailsPacket.class, ClientboundCustomReportDetailsPacket::new) + .registerClientboundPacket(ClientboundServerLinksPacket.class, ClientboundServerLinksPacket::new) .registerServerboundPacket(ServerboundClientInformationPacket.class, ServerboundClientInformationPacket::new) .registerServerboundPacket(ServerboundCookieResponsePacket.class, ServerboundCookieResponsePacket::new) .registerServerboundPacket(ServerboundCustomPayloadPacket.class, ServerboundCustomPayloadPacket::new) @@ -393,6 +397,8 @@ public class MinecraftCodec { .registerClientboundPacket(ClientboundUpdateRecipesPacket.class, ClientboundUpdateRecipesPacket::new) .registerClientboundPacket(ClientboundUpdateTagsPacket.class, ClientboundUpdateTagsPacket::new) .registerClientboundPacket(ClientboundProjectilePowerPacket.class, ClientboundProjectilePowerPacket::new) + .registerClientboundPacket(ClientboundCustomReportDetailsPacket.class, ClientboundCustomReportDetailsPacket::new) + .registerClientboundPacket(ClientboundServerLinksPacket.class, ClientboundServerLinksPacket::new) .registerServerboundPacket(ServerboundAcceptTeleportationPacket.class, ServerboundAcceptTeleportationPacket::new) .registerServerboundPacket(ServerboundBlockEntityTagQueryPacket.class, ServerboundBlockEntityTagQueryPacket::new) .registerServerboundPacket(ServerboundChangeDifficultyPacket.class, ServerboundChangeDifficultyPacket::new) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java new file mode 100644 index 000000000..b28b0f102 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java @@ -0,0 +1,9 @@ +package org.geysermc.mcprotocollib.protocol.data.game; + +import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.Nullable; + +import java.util.OptionalInt; + +public record ServerLink(OptionalInt knownType, @Nullable Component unknownType, String url) { +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeModifier.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeModifier.java index 935a11b72..2f14672c4 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeModifier.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeModifier.java @@ -7,15 +7,12 @@ @Data public class AttributeModifier { - /** - * Use {@link ModifierType} to determine built-in modifiers. - */ - private final @NonNull UUID uuid; + private final @NonNull String id; private final double amount; private final @NonNull ModifierOperation operation; - public AttributeModifier(@NonNull UUID uuid, double amount, @NonNull ModifierOperation operation) { - this.uuid = uuid; + public AttributeModifier(@NonNull String id, double amount, @NonNull ModifierOperation operation) { + this.id = id; this.amount = amount; this.operation = operation; } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/ModifierType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/ModifierType.java deleted file mode 100644 index 01c9309d8..000000000 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/ModifierType.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.geysermc.mcprotocollib.protocol.data.game.entity.attribute; - -import java.util.UUID; - -public final class ModifierType { // TODO: out of date - public static final UUID CREATURE_FLEE_SPEED_BONUS = UUID.fromString("E199AD21-BA8A-4C53-8D13-6182D5C69D3A"); - public static final UUID ENDERMAN_ATTACK_SPEED_BOOST = UUID.fromString("020E0DFB-87AE-4653-9556-831010E291A0"); - public static final UUID SPRINT_SPEED_BOOST = UUID.fromString("662A6B8D-DA3E-4C1C-8813-96EA6097278D"); - public static final UUID PIGZOMBIE_ATTACK_SPEED_BOOST = UUID.fromString("49455A49-7EC5-45BA-B886-3B90B23A1718"); - public static final UUID WITCH_DRINKING_SPEED_PENALTY = UUID.fromString("5CD17E52-A79A-43D3-A529-90FDE04B181E"); - public static final UUID ZOMBIE_BABY_SPEED_BOOST = UUID.fromString("B9766B59-9566-4402-BC1F-2EE2A276D836"); - public static final UUID ATTACK_DAMAGE_MODIFIER = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); - public static final UUID ATTACK_SPEED_MODIFIER = UUID.fromString("FA233E1C-4180-4865-B01B-BCCE9785ACA3"); - public static final UUID SPEED_POTION_MODIFIER = UUID.fromString("91AEAA56-376B-4498-935B-2F7F68070635"); - public static final UUID HEALTH_BOOST_POTION_MODIFIER = UUID.fromString("5D6F0BA2-1186-46AC-B896-C61C5CEE99CC"); - public static final UUID SLOW_POTION_MODIFIER = UUID.fromString("7107DE5E-7CE8-4030-940E-514C1F160890"); - public static final UUID STRENGTH_POTION_MODIFIER = UUID.fromString("648D7064-6A60-4F59-8ABE-C2C23A6DD7A9"); - public static final UUID WEAKNESS_POTION_MODIFIER = UUID.fromString("22653B89-116E-49DC-9B6B-9971489B5BE5"); - public static final UUID HASTE_POTION_MODIFIER = UUID.fromString("AF8B6E3F-3328-4C0A-AA36-5BA2BB9DBEF3"); - public static final UUID MINING_FATIGUE_POTION_MODIFIER = UUID.fromString("55FCED67-E92A-486E-9800-B47F202C4386"); - public static final UUID LUCK_POTION_MODIFIER = UUID.fromString("03C3C89D-7037-4B42-869F-B146BCB64D2E"); - public static final UUID UNLUCK_POTION_MODIFIER = UUID.fromString("CC5AF142-2BD2-4215-B636-2605AED11727"); - public static final UUID BOOTS_MODIFIER = UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"); - public static final UUID LEGGINGS_MODIFIER = UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"); - public static final UUID CHESTPLATE_MODIFIER = UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"); - public static final UUID HELMET_MODIFIER = UUID.fromString("2AD3F246-FEE1-4E67-B886-69FD380BB150"); - public static final UUID BODY_MODIFIER = UUID.fromString("C1C72771-8B8E-BA4A-ACE0-81A93C8928B2"); - public static final UUID COVERED_ARMOR_BONUS = UUID.fromString("7E0292F2-9434-48D5-A29F-9583AF7DF27F"); -} 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 24453b959..b0e38c1ae 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 @@ -62,6 +62,7 @@ public class DataComponentType { public static final DataComponentType BLOCK_ENTITY_DATA = new DataComponentType<>(ItemCodecHelper::readCompoundTag, ItemCodecHelper::writeAnyTag, ObjectDataComponent::new); public static final DataComponentType> INSTRUMENT = new DataComponentType<>(ItemCodecHelper::readInstrument, ItemCodecHelper::writeInstrument, ObjectDataComponent::new); public static final IntComponentType OMINOUS_BOTTLE_AMPLIFIER = new IntComponentType(ItemCodecHelper::readVarInt, ItemCodecHelper::writeVarInt, IntDataComponent::new); + public static final DataComponentType JUKEBOX_PLAYABLE = new DataComponentType<>(ItemCodecHelper::readJukeboxPlayable, ItemCodecHelper::writeJukeboxPlayable, ObjectDataComponent::new); public static final DataComponentType> RECIPES = new DataComponentType<>(ItemCodecHelper::readRecipes, ItemCodecHelper::writeRecipes, ObjectDataComponent::new); public static final DataComponentType LODESTONE_TRACKER = new DataComponentType<>(ItemCodecHelper::readLodestoneTarget, ItemCodecHelper::writeLodestoneTarget, ObjectDataComponent::new); public static final DataComponentType FIREWORK_EXPLOSION = new DataComponentType<>(ItemCodecHelper::readFireworkExplosion, ItemCodecHelper::writeFireworkExplosion, ObjectDataComponent::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 1b61fccc4..ff7b18e33 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 @@ -474,6 +474,48 @@ public void writeRecipes(ByteBuf buf, NbtList recipes) { this.writeAnyTag(buf, recipes); } + public JukeboxPlayable readJukeboxPlayable(ByteBuf buf) { + Holder songHolder = null; + String songLocation = null; + if (buf.readBoolean()) { + songHolder = this.readHolder(buf, this::readJukeboxSong); + } else { + songLocation = this.readResourceLocation(buf); + } + boolean showInTooltip = buf.readBoolean(); + return new JukeboxPlayable(songHolder, songLocation, showInTooltip); + } + + public void writeJukeboxPlayable(ByteBuf buf, JukeboxPlayable playable) { + buf.writeBoolean(playable.songHolder() != null); + if (playable.songHolder() != null) { + this.writeHolder(buf, playable.songHolder(), this::writeJukeboxSong); + } else { + this.writeResourceLocation(buf, playable.songLocation()); + } + buf.writeBoolean(playable.showInTooltip()); + } + + public JukeboxPlayable.JukeboxSong readJukeboxSong(ByteBuf buf) { + Sound soundEvent = this.readById(buf, BuiltinSound::from, this::readSoundEvent); + Component description = this.readComponent(buf); + float lengthInSeconds = buf.readFloat(); + int comparatorOutput = this.readVarInt(buf); + return new JukeboxPlayable.JukeboxSong(soundEvent, description, lengthInSeconds, comparatorOutput); + } + + public void writeJukeboxSong(ByteBuf buf, JukeboxPlayable.JukeboxSong song) { + if (song.soundEvent() instanceof CustomSound) { + this.writeVarInt(buf, 0); + this.writeSoundEvent(buf, song.soundEvent()); + } else { + this.writeVarInt(buf, ((BuiltinSound) song.soundEvent()).ordinal() + 1); + } + this.writeComponent(buf, song.description()); + buf.writeFloat(song.lengthInSeconds()); + this.writeVarInt(buf, song.comparatorOutput()); + } + public LodestoneTracker readLodestoneTarget(ByteBuf buf) { return new LodestoneTracker(this.readNullable(buf, this::readGlobalPos), buf.readBoolean()); } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/JukeboxPlayable.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/JukeboxPlayable.java new file mode 100644 index 000000000..8e1b317e8 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/JukeboxPlayable.java @@ -0,0 +1,11 @@ +package org.geysermc.mcprotocollib.protocol.data.game.item.component; + +import net.kyori.adventure.text.Component; +import org.geysermc.mcprotocollib.protocol.data.game.Holder; +import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound; +import org.jetbrains.annotations.Nullable; + +public record JukeboxPlayable(@Nullable Holder songHolder, @Nullable String songLocation, boolean showInTooltip) { + public record JukeboxSong(Sound soundEvent, Component description, float lengthInSeconds, int comparatorOutput) { + } +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java index a3bfced26..a0bde82d5 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/BuiltinSound.java @@ -1449,6 +1449,7 @@ public enum BuiltinSound implements Sound { BLOCK_VAULT_CLOSE_SHUTTER("block.vault.close_shutter"), BLOCK_VAULT_DEACTIVATE("block.vault.deactivate"), BLOCK_VAULT_EJECT_ITEM("block.vault.eject_item"), + BLOCK_VAULT_REJECT_REWARDED_PLAYER("block.vault.reject_rewarded_player"), BLOCK_VAULT_FALL("block.vault.fall"), BLOCK_VAULT_HIT("block.vault.hit"), BLOCK_VAULT_INSERT_ITEM("block.vault.insert_item"), diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundCustomReportDetailsPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundCustomReportDetailsPacket.java new file mode 100644 index 000000000..17d144c3e --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundCustomReportDetailsPacket.java @@ -0,0 +1,36 @@ +package org.geysermc.mcprotocollib.protocol.packet.common.clientbound; + +import io.netty.buffer.ByteBuf; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.With; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; + +import java.util.HashMap; +import java.util.Map; + +@Data +@With +@AllArgsConstructor +public class ClientboundCustomReportDetailsPacket implements MinecraftPacket { + private final Map details; + + public ClientboundCustomReportDetailsPacket(ByteBuf in, MinecraftCodecHelper helper) { + this.details = new HashMap<>(); + + int count = helper.readVarInt(in); + for (int i = 0; i < count; i++) { + this.details.put(helper.readString(in, 128), helper.readString(in, 4096)); + } + } + + @Override + public void serialize(ByteBuf out, MinecraftCodecHelper helper) { + helper.writeVarInt(out, this.details.size()); + for (Map.Entry entry : this.details.entrySet()) { + helper.writeString(out, entry.getKey()); + helper.writeString(out, entry.getValue()); + } + } +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java new file mode 100644 index 000000000..66b93e2d8 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java @@ -0,0 +1,54 @@ +package org.geysermc.mcprotocollib.protocol.packet.common.clientbound; + +import io.netty.buffer.ByteBuf; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.With; +import net.kyori.adventure.text.Component; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; +import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; +import org.geysermc.mcprotocollib.protocol.data.game.ServerLink; + +import java.util.ArrayList; +import java.util.List; +import java.util.OptionalInt; + +@Data +@With +@AllArgsConstructor +public class ClientboundServerLinksPacket implements MinecraftPacket { + private final List links; + + public ClientboundServerLinksPacket(ByteBuf in, MinecraftCodecHelper helper) { + this.links = new ArrayList<>(); + + int length = helper.readVarInt(in); + for (int i = 0; i < length; i++) { + OptionalInt knownType = OptionalInt.empty(); + Component unknownType = null; + if (in.readBoolean()) { + knownType = OptionalInt.of(helper.readVarInt(in)); + } else { + unknownType = helper.readComponent(in); + } + + String url = helper.readString(in); + this.links.add(new ServerLink(knownType, unknownType, url)); + } + } + + @Override + public void serialize(ByteBuf out, MinecraftCodecHelper helper) { + helper.writeVarInt(out, this.links.size()); + for (ServerLink link : this.links) { + out.writeBoolean(link.knownType().isPresent()); + if (link.knownType().isPresent()) { + helper.writeVarInt(out, link.knownType().getAsInt()); + } else { + helper.writeComponent(out, link.unknownType()); + } + + helper.writeString(out, link.url()); + } + } +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundUpdateAttributesPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundUpdateAttributesPacket.java index f95c11df6..4fe3b57f5 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundUpdateAttributesPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/ClientboundUpdateAttributesPacket.java @@ -31,10 +31,10 @@ public ClientboundUpdateAttributesPacket(ByteBuf in, MinecraftCodecHelper helper List modifiers = new ArrayList<>(); int len = helper.readVarInt(in); for (int ind = 0; ind < len; ind++) { - modifiers.add(new AttributeModifier(helper.readUUID(in), in.readDouble(), helper.readModifierOperation(in))); + modifiers.add(new AttributeModifier(helper.readResourceLocation(in), in.readDouble(), helper.readModifierOperation(in))); } - AttributeType type = AttributeType.Builtin.BUILTIN.get(attributeId); //.computeIfAbsent(attributeId, AttributeType.Custom::new); TODO + AttributeType type = AttributeType.Builtin.BUILTIN.get(attributeId); this.attributes.add(new Attribute(type, value, modifiers)); } } @@ -48,7 +48,7 @@ public void serialize(ByteBuf out, MinecraftCodecHelper helper) { out.writeDouble(attribute.getValue()); helper.writeVarInt(out, attribute.getModifiers().size()); for (AttributeModifier modifier : attribute.getModifiers()) { - helper.writeUUID(out, modifier.getUuid()); + helper.writeResourceLocation(out, modifier.getId()); out.writeDouble(modifier.getAmount()); helper.writeModifierOperation(out, modifier.getOperation()); } diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index c687fe71918c05534bfb503ec5d5998383b40d41..e1301ab585af3867955964c184b1d35b74833b77 100644 GIT binary patch literal 11553 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 B*x~>H From 2cccc328f9d700fe3b6f1776741236590650e9e5 Mon Sep 17 00:00:00 2001 From: basaigh <53559772+basaigh@users.noreply.github.com> Date: Sun, 2 Jun 2024 16:38:52 +0100 Subject: [PATCH 06/10] 1.21-pre1 --- .../protocol/codec/MinecraftCodec.java | 4 ++-- .../protocol/data/game/ServerLink.java | 4 +--- .../protocol/data/game/ServerLinkType.java | 20 ++++++++++++++++++ .../ClientboundServerLinksPacket.java | 17 ++++++++------- .../ClientboundHorseScreenOpenPacket.java | 6 +++--- protocol/src/main/resources/networkCodec.nbt | Bin 11553 -> 11505 bytes 6 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLinkType.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 c68a98802..4649725f9 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 @@ -225,9 +225,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 197) + .protocolVersion((1 << 30) | 199) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("24w21a") + .minecraftVersion("1.21-pre1") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java index b28b0f102..4562b1762 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java @@ -3,7 +3,5 @@ import net.kyori.adventure.text.Component; import org.jetbrains.annotations.Nullable; -import java.util.OptionalInt; - -public record ServerLink(OptionalInt knownType, @Nullable Component unknownType, String url) { +public record ServerLink(@Nullable ServerLinkType knownType, @Nullable Component unknownType, String link) { } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLinkType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLinkType.java new file mode 100644 index 000000000..206b20de3 --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLinkType.java @@ -0,0 +1,20 @@ +package org.geysermc.mcprotocollib.protocol.data.game; + +public enum ServerLinkType { + BUG_REPORT, + COMMUNITY_GUIDELINES, + SUPPORT, + STATUS, + FEEDBACK, + COMMUNITY, + WEBSITE, + FORUMS, + NEWS, + ANNOUNCEMENTS; + + private static final ServerLinkType[] VALUES = values(); + + public static ServerLinkType from(int id) { + return VALUES[id]; + } +} diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java index 66b93e2d8..e6a28a10e 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundServerLinksPacket.java @@ -8,6 +8,7 @@ import org.geysermc.mcprotocollib.protocol.codec.MinecraftCodecHelper; import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; import org.geysermc.mcprotocollib.protocol.data.game.ServerLink; +import org.geysermc.mcprotocollib.protocol.data.game.ServerLinkType; import java.util.ArrayList; import java.util.List; @@ -24,16 +25,16 @@ public ClientboundServerLinksPacket(ByteBuf in, MinecraftCodecHelper helper) { int length = helper.readVarInt(in); for (int i = 0; i < length; i++) { - OptionalInt knownType = OptionalInt.empty(); + ServerLinkType knownType = null; Component unknownType = null; if (in.readBoolean()) { - knownType = OptionalInt.of(helper.readVarInt(in)); + knownType = ServerLinkType.from(helper.readVarInt(in)); } else { unknownType = helper.readComponent(in); } - String url = helper.readString(in); - this.links.add(new ServerLink(knownType, unknownType, url)); + String link = helper.readString(in); + this.links.add(new ServerLink(knownType, unknownType, link)); } } @@ -41,14 +42,14 @@ public ClientboundServerLinksPacket(ByteBuf in, MinecraftCodecHelper helper) { public void serialize(ByteBuf out, MinecraftCodecHelper helper) { helper.writeVarInt(out, this.links.size()); for (ServerLink link : this.links) { - out.writeBoolean(link.knownType().isPresent()); - if (link.knownType().isPresent()) { - helper.writeVarInt(out, link.knownType().getAsInt()); + out.writeBoolean(link.knownType() != null); + if (link.knownType() != null) { + helper.writeVarInt(out, link.knownType().ordinal()); } else { helper.writeComponent(out, link.unknownType()); } - helper.writeString(out, link.url()); + helper.writeString(out, link.link()); } } } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/inventory/ClientboundHorseScreenOpenPacket.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/inventory/ClientboundHorseScreenOpenPacket.java index 0accd19ab..32371832f 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/inventory/ClientboundHorseScreenOpenPacket.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/inventory/ClientboundHorseScreenOpenPacket.java @@ -12,19 +12,19 @@ @AllArgsConstructor public class ClientboundHorseScreenOpenPacket implements MinecraftPacket { private final int containerId; - private final int numberOfSlots; + private final int inventoryColumns; private final int entityId; public ClientboundHorseScreenOpenPacket(ByteBuf in, MinecraftCodecHelper helper) { this.containerId = in.readByte(); - this.numberOfSlots = helper.readVarInt(in); + this.inventoryColumns = helper.readVarInt(in); this.entityId = in.readInt(); } @Override public void serialize(ByteBuf out, MinecraftCodecHelper helper) { out.writeByte(this.containerId); - helper.writeVarInt(out, this.numberOfSlots); + helper.writeVarInt(out, this.inventoryColumns); out.writeInt(this.entityId); } } diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index e1301ab585af3867955964c184b1d35b74833b77..98fd5a27eba87dcc18e3e6a5cd607ff920d7169e 100644 GIT binary patch literal 11505 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 Date: Sun, 2 Jun 2024 16:57:42 +0100 Subject: [PATCH 07/10] 1.21-pre2 --- .../protocol/codec/MinecraftCodec.java | 4 ++-- protocol/src/main/resources/networkCodec.nbt | Bin 11505 -> 11508 bytes 2 files changed, 2 insertions(+), 2 deletions(-) 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 4649725f9..30d543820 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 @@ -225,9 +225,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 199) + .protocolVersion((1 << 30) | 200) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("1.21-pre1") + .minecraftVersion("1.21-pre2") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index 98fd5a27eba87dcc18e3e6a5cd607ff920d7169e..4e7bad1c44f01ce9c9a2f98e1f2fd25b6bf2a1e9 100644 GIT binary patch delta 4491 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 delta 4482 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 Date: Sun, 2 Jun 2024 20:42:03 -0400 Subject: [PATCH 08/10] Holder helper methods and chat changes --- .../protocol/codec/MinecraftCodecHelper.java | 21 +++++++----- .../protocol/data/game/Holder.java | 33 ++++++++++++++----- .../protocol/data/game/chat/ChatType.java | 6 +++- .../data/game/chat/ChatTypeDecoration.java | 22 +++++++++++++ 4 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatTypeDecoration.java diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java index 84fc6a43d..2e67bf45b 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodecHelper.java @@ -22,6 +22,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.Holder; import org.geysermc.mcprotocollib.protocol.data.game.Identifier; import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatType; +import org.geysermc.mcprotocollib.protocol.data.game.chat.ChatTypeDecoration; import org.geysermc.mcprotocollib.protocol.data.game.chat.numbers.BlankFormat; import org.geysermc.mcprotocollib.protocol.data.game.chat.numbers.FixedFormat; import org.geysermc.mcprotocollib.protocol.data.game.chat.numbers.NumberFormat; @@ -95,6 +96,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.function.BiConsumer; import java.util.function.Function; @@ -772,24 +774,25 @@ public void writeChatType(ByteBuf buf, ChatType chatType) { this.writeChatTypeDecoration(buf, chatType.narration()); } - public ChatType.ChatTypeDecoration readChatTypeDecoration(ByteBuf buf) { + public ChatTypeDecoration readChatTypeDecoration(ByteBuf buf) { String translationKey = this.readString(buf); - int[] parameters = new int[this.readVarInt(buf)]; - for (int i = 0; i < parameters.length; i++) { - parameters[i] = this.readVarInt(buf); + int size = this.readVarInt(buf); + List parameters = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + parameters.add(ChatTypeDecoration.Parameter.VALUES[this.readVarInt(buf)]); } NbtMap style = this.readCompoundTag(buf); - return new ChatType.ChatTypeDecoration(translationKey, parameters, style); + return new ChatType.ChatTypeDecorationImpl(translationKey, parameters, style); } - public void writeChatTypeDecoration(ByteBuf buf, ChatType.ChatTypeDecoration decoration) { + public void writeChatTypeDecoration(ByteBuf buf, ChatTypeDecoration decoration) { this.writeString(buf, decoration.translationKey()); - this.writeVarInt(buf, decoration.parameters().length); - for (int parameter : decoration.parameters()) { - this.writeVarInt(buf, parameter); + this.writeVarInt(buf, decoration.parameters().size()); + for (ChatTypeDecoration.Parameter parameter : decoration.parameters()) { + this.writeVarInt(buf, parameter.ordinal()); } this.writeAnyTag(buf, decoration.style()); diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/Holder.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/Holder.java index 3c11577cf..a18ad07b2 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/Holder.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/Holder.java @@ -1,6 +1,8 @@ package org.geysermc.mcprotocollib.protocol.data.game; import java.util.function.Consumer; +import java.util.function.IntConsumer; +import java.util.function.IntFunction; /** * Represents an object that could either be a network ID, or a custom-defined one. @@ -22,9 +24,14 @@ static Holder ofCustom(T object) { T custom(); - Holder ifId(Consumer> action); + Holder ifId(IntConsumer action); - Holder ifCustom(Consumer> action); + Holder ifCustom(Consumer action); + + /** + * Returns the holder as an object, or else looks up the item in the registry. + */ + T getOrCompute(IntFunction supplier); record IdHolder(int id) implements Holder { @Override @@ -43,16 +50,21 @@ public T custom() { } @Override - public Holder ifId(Consumer> action) { - action.accept(this); + public Holder ifId(IntConsumer action) { + action.accept(id); return this; } @Override - public Holder ifCustom(Consumer> action) { + public Holder ifCustom(Consumer action) { // no-op return this; } + + @Override + public T getOrCompute(IntFunction supplier) { + return supplier.apply(id); + } } record CustomHolder(T object) implements Holder { @@ -77,14 +89,19 @@ public T custom() { } @Override - public Holder ifId(Consumer> action) { + public Holder ifId(IntConsumer action) { return this; } @Override - public Holder ifCustom(Consumer> action) { - action.accept(this); + public Holder ifCustom(Consumer action) { + action.accept(object); return this; } + + @Override + public T getOrCompute(IntFunction supplier) { + return object; + } } } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java index 14c3446b6..1b65426ca 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java @@ -2,7 +2,11 @@ import org.cloudburstmc.nbt.NbtMap; +import java.util.List; + public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) { - public record ChatTypeDecoration(String translationKey, int[] parameters, NbtMap style) { + public record ChatTypeDecorationImpl(String translationKey, + List parameters, + NbtMap style) implements ChatTypeDecoration { } } diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatTypeDecoration.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatTypeDecoration.java new file mode 100644 index 000000000..038e60caf --- /dev/null +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatTypeDecoration.java @@ -0,0 +1,22 @@ +package org.geysermc.mcprotocollib.protocol.data.game.chat; + +import org.cloudburstmc.nbt.NbtMap; + +import java.util.List; + +// Here for implementation if one wants to cache the Style tag while we don't have DFU Codecs. +public interface ChatTypeDecoration { + String translationKey(); + + List parameters(); + + NbtMap style(); + + enum Parameter { + CONTENT, + SENDER, + TARGET; + + public static final Parameter[] VALUES = values(); + } +} From 9fa4df56aed5cd8de7de713adc31102169274389 Mon Sep 17 00:00:00 2001 From: basaigh <53559772+basaigh@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:57:16 +0100 Subject: [PATCH 09/10] 1.21-rc1 --- .../protocol/codec/MinecraftCodec.java | 4 ++-- .../data/game/level/event/LevelEventType.java | 1 + protocol/src/main/resources/networkCodec.nbt | Bin 11553 -> 11515 bytes 3 files changed, 3 insertions(+), 2 deletions(-) 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 30d543820..3e2749371 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 @@ -225,9 +225,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 200) + .protocolVersion((1 << 30) | 203) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("1.21-pre2") + .minecraftVersion("1.21-rc1") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) ) diff --git a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/LevelEventType.java b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/LevelEventType.java index bcd9c1e0b..ae0787ee2 100644 --- a/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/LevelEventType.java +++ b/protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/LevelEventType.java @@ -46,6 +46,7 @@ public enum LevelEventType implements LevelEvent { ENTITY_SKELETON_CONVERTED_TO_STRAY(1048), BLOCK_CRAFTER_CRAFT(1049), BLOCK_CRAFTER_FAIL(1050), + SOUND_WIND_CHARGE_SHOOT(1051), COMPOSTER(1500), BLOCK_LAVA_EXTINGUISH(1501), diff --git a/protocol/src/main/resources/networkCodec.nbt b/protocol/src/main/resources/networkCodec.nbt index e1301ab585af3867955964c184b1d35b74833b77..2272a799106fc068676e35bebb4b2a18fd18748f 100644 GIT binary patch literal 11515 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 literal 11553 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 Date: Wed, 12 Jun 2024 22:50:37 -0400 Subject: [PATCH 10/10] Prepare for release protocol --- .../geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 3e2749371..41cdb88e7 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 @@ -225,9 +225,9 @@ public class MinecraftCodec { } public static final PacketCodec CODEC = PacketCodec.builder() - .protocolVersion((1 << 30) | 203) + .protocolVersion(767) .helper(() -> new MinecraftCodecHelper(LEVEL_EVENTS, SOUND_NAMES)) - .minecraftVersion("1.21-rc1") + .minecraftVersion("1.21") .state(ProtocolState.HANDSHAKE, PacketStateCodec.builder() .registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new) )