diff --git a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java index 24d38b97..6451e89a 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java @@ -27,6 +27,7 @@ import com.viaversion.viaversion.api.data.Int2IntMapMappings; import com.viaversion.viaversion.api.data.entity.StoredEntityData; import com.viaversion.viaversion.api.data.entity.TrackedEntity; import com.viaversion.viaversion.api.minecraft.ClientWorld; +import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.metadata.MetaType; import com.viaversion.viaversion.api.minecraft.metadata.Metadata; @@ -210,12 +211,13 @@ public abstract class EntityRewriterBase { MetaType type = meta.metaType(); @@ -231,6 +233,11 @@ public abstract class EntityRewriterBase extends com.viaversi } if (mappedId != soundEventHolder.id()) { - soundEventHolder = new Holder<>(mappedId); + soundEventHolder = Holder.of(mappedId); } wrapper.write(Type.SOUND_EVENT, soundEventHolder); @@ -128,7 +128,7 @@ public class SoundRewriter extends com.viaversi final String mappedIdentifier = protocol.getMappingData().getMappedNamedSound(soundEvent.identifier()); if (mappedIdentifier != null) { if (!mappedIdentifier.isEmpty()) { - return new Holder<>(soundEvent.withIdentifier(mappedIdentifier)); + return Holder.of(soundEvent.withIdentifier(mappedIdentifier)); } wrapper.cancel(); } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/Protocol1_20_3To1_20_5.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/Protocol1_20_3To1_20_5.java index 7e1ab9f2..798d0127 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/Protocol1_20_3To1_20_5.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/Protocol1_20_3To1_20_5.java @@ -74,6 +74,8 @@ public final class Protocol1_20_3To1_20_5 extends BackwardsProtocol tagRewriter = new TagRewriter<>(this); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/BlockItemPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/BlockItemPacketRewriter1_20_5.java index c26ec1da..8dbc653b 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/BlockItemPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/BlockItemPacketRewriter1_20_5.java @@ -166,7 +166,7 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem if (item == null) return null; // Convert to structured item first - final Item structuredItem = vvProtocol.getItemRewriter().toStructuredItem(item, false); + final Item structuredItem = vvProtocol.getItemRewriter().toStructuredItem(item); return super.handleItemToServer(structuredItem); } } \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/EntityPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/EntityPacketRewriter1_20_5.java index 0ef40375..314e9dfd 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/EntityPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_3to1_20_5/rewriter/EntityPacketRewriter1_20_5.java @@ -23,6 +23,7 @@ import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.Protocol1_20_ import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.RegistryDataStorage; import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.SecureChatStorage; import com.viaversion.viaversion.api.data.entity.DimensionData; +import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.RegistryEntry; import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_20_5; @@ -34,7 +35,9 @@ import com.viaversion.viaversion.api.type.types.version.Types1_20_5; import com.viaversion.viaversion.data.entity.DimensionDataImpl; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; -import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.AttributeMappings; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Attributes1_20_5; import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundConfigurationPackets1_20_5; import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPacket1_20_5; import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPackets1_20_5; @@ -79,9 +82,14 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter { final String registryKey = Key.stripMinecraftNamespace(wrapper.read(Type.STRING)); - final RegistryEntry[] entries = wrapper.read(Type.REGISTRY_ENTRY_ARRAY); + // TODO Track banner pattern/material ids + if (registryKey.equals("wolf_variant") || registryKey.equals("banner_pattern") || registryKey.equals("banner_material")) { + wrapper.cancel(); + return; + } // Track data + final RegistryEntry[] entries = wrapper.read(Type.REGISTRY_ENTRY_ARRAY); final RegistryDataStorage registryDataStorage = wrapper.user().get(RegistryDataStorage.class); if (registryKey.equals("worldgen/biome")) { tracker(wrapper.user()).setBiomesSent(entries.length); @@ -109,6 +117,15 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter { - wrapper.passthrough(Type.VAR_INT); // Entity ID + final int entityId = wrapper.passthrough(Type.VAR_INT); final int size = wrapper.passthrough(Type.VAR_INT); int newSize = size; for (int i = 0; i < size; i++) { // From a registry int ID to a string - int id = protocol.getMappingData().getAttributeMappings().getNewId(wrapper.read(Type.VAR_INT)); - final String attribute = AttributeMappings.attribute(id); - if ("horse.jump_strength".equals(attribute)) { - // Jump strength only applies to horses in old versions - id = -1; + final int attributeId = wrapper.read(Type.VAR_INT); + final String attribute = Attributes1_20_5.idToKey(attributeId); + int mappedId = protocol.getMappingData().getAttributeMappings().getNewId(attributeId); + if ("generic.jump_strength".equals(attribute)) { + final EntityType type = tracker(wrapper.user()).entityType(entityId); + if (type == null || !type.isOrHasParent(EntityTypes1_20_5.HORSE)) { + // Jump strength only applies to horses in old versions + mappedId = -1; + } } - if (id == -1) { + if (mappedId == -1) { // Remove new attributes from the list newSize--; @@ -227,25 +249,38 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter { + if (typeId == Types1_20_5.META_TYPES.particlesType.typeId()) { + return Types1_20_5.META_TYPES.particlesType; + } + int id = typeId; + if (typeId >= Types1_20_5.META_TYPES.wolfVariantType.typeId()) { + id--; + } if (typeId >= Types1_20_5.META_TYPES.armadilloState.typeId()) { id--; } - if (typeId >= Types1_20_5.META_TYPES.wolfVariantType.typeId()) { + if (typeId >= Types1_20_5.META_TYPES.particlesType.typeId()) { id--; } return Types1_20_3.META_TYPES.byId(id); }); registerMetaTypeHandler1_20_3( - Types1_20_3.META_TYPES.itemType, - Types1_20_3.META_TYPES.blockStateType, - Types1_20_3.META_TYPES.optionalBlockStateType, - Types1_20_3.META_TYPES.particleType, - Types1_20_3.META_TYPES.componentType, - Types1_20_3.META_TYPES.optionalComponentType + Types1_20_3.META_TYPES.itemType, + Types1_20_3.META_TYPES.blockStateType, + Types1_20_3.META_TYPES.optionalBlockStateType, + Types1_20_3.META_TYPES.particleType, + null, + Types1_20_3.META_TYPES.componentType, + Types1_20_3.META_TYPES.optionalComponentType ); + filter().type(EntityTypes1_20_5.LIVINGENTITY).index(10).handler((event, meta) -> { + final Particle[] particles = meta.value(); + meta.setTypeAndValue(Types1_20_3.META_TYPES.varIntType, 0); // TODO + }); + filter().type(EntityTypes1_20_5.MINECART_ABSTRACT).index(11).handler((event, meta) -> { final int blockState = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(blockState)); @@ -256,6 +291,14 @@ public final class EntityPacketRewriter1_20_5 extends EntityRewriter