Skip to content

Commit bd1051d

Browse files
25w36a
1 parent fd30f3a commit bd1051d

File tree

10 files changed

+111
-24
lines changed

10 files changed

+111
-24
lines changed

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftCodec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@
226226

227227
public class MinecraftCodec {
228228
public static final PacketCodec CODEC = PacketCodec.builder()
229-
.protocolVersion((1 << 30) | 265)
230-
.minecraftVersion("25w35a")
229+
.protocolVersion((1 << 30) | 266)
230+
.minecraftVersion("25w36a")
231231
.state(ProtocolState.HANDSHAKE, MinecraftPacketRegistry.builder()
232232
.registerServerboundPacket(ClientIntentionPacket.class, ClientIntentionPacket::new)
233233
)

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftTypes.java

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.CopperGolemState;
4545
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata;
4646
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.GlobalPos;
47+
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MannequinProfile;
4748
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType;
4849
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataTypes;
4950
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.PaintingVariant;
@@ -55,6 +56,7 @@
5556
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.BlockBreakStage;
5657
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode;
5758
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.PlayerSpawnInfo;
59+
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile;
5860
import org.geysermc.mcprotocollib.protocol.data.game.inventory.VillagerTrade;
5961
import org.geysermc.mcprotocollib.protocol.data.game.item.HashedStack;
6062
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
@@ -78,8 +80,10 @@
7880
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.Particle;
7981
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleData;
8082
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ParticleType;
83+
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.PowerParticleData;
8184
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.SculkChargeParticleData;
8285
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.ShriekParticleData;
86+
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.SpellParticleData;
8387
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.TrailParticleData;
8488
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.VibrationParticleData;
8589
import org.geysermc.mcprotocollib.protocol.data.game.level.particle.positionsource.BlockPositionSource;
@@ -985,6 +989,7 @@ public static void writeParticle(ByteBuf buf, Particle particle) {
985989
public static ParticleData readParticleData(ByteBuf buf, ParticleType type) {
986990
return switch (type) {
987991
case BLOCK, BLOCK_MARKER, FALLING_DUST, DUST_PILLAR, BLOCK_CRUMBLE -> new BlockParticleData(MinecraftTypes.readVarInt(buf));
992+
case DRAGON_BREATH -> new PowerParticleData(buf.readFloat());
988993
case DUST -> {
989994
int color = buf.readInt();
990995
float scale = buf.readFloat();
@@ -996,7 +1001,12 @@ public static ParticleData readParticleData(ByteBuf buf, ParticleType type) {
9961001
float scale = buf.readFloat();
9971002
yield new DustColorTransitionParticleData(color, scale, newColor);
9981003
}
999-
case ENTITY_EFFECT, TINTED_LEAVES -> new ColorParticleData(buf.readInt());
1004+
case EFFECT, INSTANT_EFFECT -> {
1005+
int color = buf.readInt();
1006+
float power = buf.readFloat();
1007+
yield new SpellParticleData(color, power);
1008+
}
1009+
case ENTITY_EFFECT, TINTED_LEAVES, FLASH -> new ColorParticleData(buf.readInt());
10001010
case ITEM -> new ItemParticleData(MinecraftTypes.readItemStack(buf));
10011011
case SCULK_CHARGE -> new SculkChargeParticleData(buf.readFloat());
10021012
case SHRIEK -> new ShriekParticleData(MinecraftTypes.readVarInt(buf));
@@ -1544,6 +1554,51 @@ public static void writeDynamicGameProfile(ByteBuf buf, GameProfile profile) {
15441554
MinecraftTypes.writeList(buf, profile.getProperties(), MinecraftTypes::writeProperty);
15451555
}
15461556

1557+
public static ResolvableProfile readResolvableProfile(ByteBuf buf) {
1558+
return buf.readBoolean()
1559+
? new ResolvableProfile(MinecraftTypes.readStaticGameProfile(buf), false)
1560+
: new ResolvableProfile(MinecraftTypes.readDynamicGameProfile(buf), true);
1561+
}
1562+
1563+
public static void writeResolvableProfile(ByteBuf buf, ResolvableProfile profile) {
1564+
buf.writeBoolean(!profile.isDynamic());
1565+
if (!profile.isDynamic()) {
1566+
MinecraftTypes.writeStaticGameProfile(buf, profile.getProfile());
1567+
} else {
1568+
MinecraftTypes.writeDynamicGameProfile(buf, profile.getProfile());
1569+
}
1570+
}
1571+
1572+
public static MannequinProfile.CustomProfile readCustomProfile(ByteBuf buf) {
1573+
Key texture = MinecraftTypes.readResourceLocation(buf);
1574+
Key capeTexture = MinecraftTypes.readNullable(buf, MinecraftTypes::readResourceLocation);
1575+
Key elytraTexture = MinecraftTypes.readNullable(buf, MinecraftTypes::readResourceLocation);
1576+
GameProfile.TextureModel model = buf.readBoolean() ? GameProfile.TextureModel.SLIM : GameProfile.TextureModel.WIDE;
1577+
return new MannequinProfile.CustomProfile(texture, capeTexture, elytraTexture, model);
1578+
}
1579+
1580+
public static void writeCustomProfile(ByteBuf buf, MannequinProfile.CustomProfile profile) {
1581+
MinecraftTypes.writeResourceLocation(buf, profile.getTexture());
1582+
MinecraftTypes.writeNullable(buf, profile.getCapeTexture(), MinecraftTypes::writeResourceLocation);
1583+
MinecraftTypes.writeNullable(buf, profile.getElytraTexture(), MinecraftTypes::writeResourceLocation);
1584+
buf.writeBoolean(profile.getModel() == GameProfile.TextureModel.SLIM);
1585+
}
1586+
1587+
public static MannequinProfile readMannequinProfile(ByteBuf buf) {
1588+
return buf.readBoolean()
1589+
? new MannequinProfile(MinecraftTypes.readCustomProfile(buf), null)
1590+
: new MannequinProfile(null, MinecraftTypes.readResolvableProfile(buf));
1591+
}
1592+
1593+
public static void writeMannequinProfile(ByteBuf buf, MannequinProfile profile) {
1594+
buf.writeBoolean(profile.getCustomProfile() != null);
1595+
if (profile.getCustomProfile() != null) {
1596+
MinecraftTypes.writeCustomProfile(buf, profile.getCustomProfile());
1597+
} else {
1598+
MinecraftTypes.writeResolvableProfile(buf, profile.getProfile());
1599+
}
1600+
}
1601+
15471602
public static GameProfile.Property readProperty(ByteBuf buf) {
15481603
String name = MinecraftTypes.readString(buf);
15491604
String value = MinecraftTypes.readString(buf);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.With;
6+
import net.kyori.adventure.key.Key;
7+
import org.checkerframework.checker.nullness.qual.Nullable;
8+
import org.geysermc.mcprotocollib.auth.GameProfile;
9+
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile;
10+
11+
@Data
12+
@With
13+
@AllArgsConstructor
14+
public class MannequinProfile {
15+
private final @Nullable CustomProfile customProfile;
16+
private final @Nullable ResolvableProfile profile;
17+
18+
@Data
19+
@With
20+
@AllArgsConstructor
21+
public static class CustomProfile {
22+
private final Key texture;
23+
private final @Nullable Key capeTexture;
24+
private final @Nullable Key elytraTexture;
25+
private final GameProfile.TextureModel model;
26+
}
27+
}

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/MetadataTypes.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.cloudburstmc.math.imaginary.Quaternionf;
88
import org.cloudburstmc.math.vector.Vector3f;
99
import org.cloudburstmc.math.vector.Vector3i;
10-
import org.cloudburstmc.nbt.NbtMap;
1110
import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes;
1211
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
1312
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
@@ -45,7 +44,6 @@ public class MetadataTypes {
4544
public static final MetadataType<Optional<UUID>> OPTIONAL_LIVING_ENTITY_REFERENCE = register(id -> new MetadataType<>(id, optionalReader(MinecraftTypes::readUUID), optionalWriter(MinecraftTypes::writeUUID), ObjectEntityMetadata::new));
4645
public static final IntMetadataType BLOCK_STATE = register(id -> new IntMetadataType(id, MinecraftTypes::readVarInt, MinecraftTypes::writeVarInt, IntEntityMetadata::new));
4746
public static final IntMetadataType OPTIONAL_BLOCK_STATE = register(id -> new IntMetadataType(id, MinecraftTypes::readVarInt, MinecraftTypes::writeVarInt, IntEntityMetadata::new));
48-
public static final MetadataType<NbtMap> COMPOUND_TAG = register(id -> new MetadataType<>(id, MinecraftTypes::readCompoundTag, MinecraftTypes::writeAnyTag, ObjectEntityMetadata::new));
4947
public static final MetadataType<Particle> PARTICLE = register(id -> new MetadataType<>(id, MinecraftTypes::readParticle, MinecraftTypes::writeParticle, ObjectEntityMetadata::new));
5048
public static final MetadataType<List<Particle>> PARTICLES = register(id -> new MetadataType<>(id, listReader(MinecraftTypes::readParticle), listWriter(MinecraftTypes::writeParticle), ObjectEntityMetadata::new));
5149
public static final MetadataType<VillagerData> VILLAGER_DATA = register(id -> new MetadataType<>(id, MinecraftTypes::readVillagerData, MinecraftTypes::writeVillagerData, ObjectEntityMetadata::new));
@@ -66,6 +64,7 @@ public class MetadataTypes {
6664
public static final MetadataType<WeatheringCopperState> WEATHERING_COPPER_STATE = register(id -> new MetadataType<>(id, MinecraftTypes::readWeatheringCopperState, MinecraftTypes::writeWeatheringCopperState, ObjectEntityMetadata::new));
6765
public static final MetadataType<Vector3f> VECTOR3 = register(id -> new MetadataType<>(id, MinecraftTypes::readRotation, MinecraftTypes::writeRotation, ObjectEntityMetadata::new));
6866
public static final MetadataType<Quaternionf> QUATERNION = register(id -> new MetadataType<>(id, MinecraftTypes::readQuaternion, MinecraftTypes::writeQuaternion, ObjectEntityMetadata::new));
67+
public static final MetadataType<MannequinProfile> MANNEQUIN_PROFILE = register(id -> new MetadataType<>(id, MinecraftTypes::readMannequinProfile, MinecraftTypes::writeMannequinProfile, ObjectEntityMetadata::new));
6968

7069
public static <T extends MetadataType<?>> T register(Int2ObjectFunction<T> factory) {
7170
T value = factory.apply(VALUES.size());
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.geysermc.mcprotocollib.protocol.data.game.item.component;
1+
package org.geysermc.mcprotocollib.protocol.data.game.entity.player;
22

33
import lombok.AllArgsConstructor;
44
import lombok.Data;

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/type/EntityType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public enum EntityType {
8585
MAGMA_CUBE,
8686
MANGROVE_BOAT,
8787
MANGROVE_CHEST_BOAT,
88+
MANNEQUIN,
8889
MARKER,
8990
MINECART,
9091
MOOSHROOM,

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/DataComponentTypes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes;
1111
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
1212
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.PaintingVariant;
13+
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.ResolvableProfile;
1314
import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType;
1415
import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack;
1516
import org.geysermc.mcprotocollib.protocol.data.game.item.component.type.BooleanDataComponent;
@@ -86,7 +87,7 @@ public class DataComponentTypes {
8687
public static final DataComponentType<LodestoneTracker> LODESTONE_TRACKER = register(id -> new DataComponentType<>(id, "lodestone_tracker", ItemTypes::readLodestoneTarget, ItemTypes::writeLodestoneTarget, ObjectDataComponent::new));
8788
public static final DataComponentType<Fireworks.FireworkExplosion> FIREWORK_EXPLOSION = register(id -> new DataComponentType<>(id, "firework_explosion", ItemTypes::readFireworkExplosion, ItemTypes::writeFireworkExplosion, ObjectDataComponent::new));
8889
public static final DataComponentType<Fireworks> FIREWORKS = register(id -> new DataComponentType<>(id, "fireworks", ItemTypes::readFireworks, ItemTypes::writeFireworks, ObjectDataComponent::new));
89-
public static final DataComponentType<ResolvableProfile> PROFILE = register(id -> new DataComponentType<>(id, "profile", ItemTypes::readResolvableProfile, ItemTypes::writeResolvableProfile, ObjectDataComponent::new));
90+
public static final DataComponentType<ResolvableProfile> PROFILE = register(id -> new DataComponentType<>(id, "profile", MinecraftTypes::readResolvableProfile, MinecraftTypes::writeResolvableProfile, ObjectDataComponent::new));
9091
public static final DataComponentType<Key> NOTE_BLOCK_SOUND = register(id -> new DataComponentType<>(id, "note_block_sound", MinecraftTypes::readResourceLocation, MinecraftTypes::writeResourceLocation, ObjectDataComponent::new));
9192
public static final DataComponentType<List<BannerPatternLayer>> BANNER_PATTERNS = register(id -> new DataComponentType<>(id, "banner_patterns", listReader(ItemTypes::readBannerPatternLayer), listWriter(ItemTypes::writeBannerPatternLayer), ObjectDataComponent::new));
9293
public static final IntComponentType BASE_COLOR = register(id -> new IntComponentType(id, "base_color", MinecraftTypes::readVarInt, MinecraftTypes::writeVarInt, IntDataComponent::new));

protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ItemTypes.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import org.cloudburstmc.nbt.NbtList;
88
import org.cloudburstmc.nbt.NbtMap;
99
import org.cloudburstmc.nbt.NbtType;
10-
import org.geysermc.mcprotocollib.auth.GameProfile;
1110
import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes;
1211
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
1312
import org.geysermc.mcprotocollib.protocol.data.game.entity.Effect;
@@ -21,7 +20,6 @@
2120
import java.util.HashMap;
2221
import java.util.List;
2322
import java.util.Map;
24-
import java.util.UUID;
2523
import java.util.function.BiConsumer;
2624
import java.util.function.Function;
2725

@@ -697,21 +695,6 @@ public static void writeFireworkExplosion(ByteBuf buf, Fireworks.FireworkExplosi
697695
buf.writeBoolean(explosion.isHasTwinkle());
698696
}
699697

700-
public static ResolvableProfile readResolvableProfile(ByteBuf buf) {
701-
return buf.readBoolean()
702-
? new ResolvableProfile(MinecraftTypes.readStaticGameProfile(buf), false)
703-
: new ResolvableProfile(MinecraftTypes.readDynamicGameProfile(buf), true);
704-
}
705-
706-
public static void writeResolvableProfile(ByteBuf buf, ResolvableProfile profile) {
707-
buf.writeBoolean(!profile.isDynamic());
708-
if (!profile.isDynamic()) {
709-
MinecraftTypes.writeStaticGameProfile(buf, profile.getProfile());
710-
} else {
711-
MinecraftTypes.writeDynamicGameProfile(buf, profile.getProfile());
712-
}
713-
}
714-
715698
public static BannerPatternLayer readBannerPatternLayer(ByteBuf buf) {
716699
return new BannerPatternLayer(MinecraftTypes.readHolder(buf, ItemTypes::readBannerPattern), MinecraftTypes.readVarInt(buf));
717700
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.geysermc.mcprotocollib.protocol.data.game.level.particle;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
@Data
7+
@AllArgsConstructor
8+
public class PowerParticleData implements ParticleData {
9+
private final float power;
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.geysermc.mcprotocollib.protocol.data.game.level.particle;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
@Data
7+
@AllArgsConstructor
8+
public class SpellParticleData implements ParticleData {
9+
private final int color;
10+
private final float power;
11+
}

0 commit comments

Comments
 (0)