diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java index 93f64612d..22d6b3bd4 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java @@ -78,7 +78,7 @@ public class MappingDataBase implements MappingData { Mappings particles = loadFromArray(oldMappings, newMappings, diffmapping, "particles"); if (particles != null) { - particleMappings = new ParticleMappings(oldMappings.getAsJsonArray("particles"), particles); + particleMappings = new ParticleMappings(oldMappings.getAsJsonArray("particles"), newMappings.getAsJsonArray("particles"), particles); } if (loadItems && newMappings.has("items")) { diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/ParticleMappings.java b/api/src/main/java/com/viaversion/viaversion/api/data/ParticleMappings.java index 73dcc21aa..0036593af 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/ParticleMappings.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/ParticleMappings.java @@ -29,15 +29,17 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; public class ParticleMappings { private final Object2IntMap stringToId; + private final Object2IntMap mappedStringToId; private final Mappings mappings; private final IntList itemParticleIds = new IntArrayList(2); private final IntList blockParticleIds = new IntArrayList(4); - public ParticleMappings(JsonArray oldMappings, Mappings mappings) { + public ParticleMappings(JsonArray oldMappings, JsonArray newMappings, Mappings mappings) { this.mappings = mappings; - stringToId = MappingDataLoader.arrayToMap(oldMappings); + mappedStringToId = MappingDataLoader.arrayToMap(newMappings); stringToId.defaultReturnValue(-1); + mappedStringToId.defaultReturnValue(-1); addBlockParticle("block"); addBlockParticle("falling_dust"); addBlockParticle("block_marker"); @@ -54,6 +56,16 @@ public class ParticleMappings { return stringToId.getInt(identifier); } + /** + * Returns the mapped integer id for the given mapped identifier, or -1 if not found. + * + * @param mappedIdentifier mapped string identifier + * @return mapped int id, or -1 if not found + */ + public int mappedId(String mappedIdentifier) { + return mappedStringToId.getInt(mappedIdentifier); + } + public Mappings getMappings() { return mappings; } diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ParticleType.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ParticleType.java index f34230dfa..4d9e1d345 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ParticleType.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/minecraft/ParticleType.java @@ -46,7 +46,11 @@ public class ParticleType extends Type { } public ParticleTypeFiller filler(final Protocol protocol) { - return this.new ParticleTypeFiller(protocol); + return filler(protocol, true); + } + + public ParticleTypeFiller filler(final Protocol protocol, final boolean useMappedNames) { + return this.new ParticleTypeFiller(protocol, useMappedNames); } @Override @@ -97,7 +101,13 @@ public class ParticleType extends Type { }; public static final ParticleReader VIBRATION = (buf, particle) -> { particle.add(Type.POSITION1_14, Type.POSITION1_14.read(buf)); // From block pos - final String resourceLocation = Type.STRING.read(buf); + + String resourceLocation = Type.STRING.read(buf); + particle.add(Type.STRING, resourceLocation); + if (resourceLocation.startsWith("minecraft:")) { + resourceLocation = resourceLocation.substring(10); + } + if (resourceLocation.equals("block")) { particle.add(Type.POSITION1_14, Type.POSITION1_14.read(buf)); // Target block pos } else if (resourceLocation.equals("entity")) { @@ -112,13 +122,15 @@ public class ParticleType extends Type { public final class ParticleTypeFiller { private final ParticleMappings mappings; + private final boolean useMappedNames; - private ParticleTypeFiller(final Protocol protocol) { + private ParticleTypeFiller(final Protocol protocol, final boolean useMappedNames) { this.mappings = protocol.getMappingData().getParticleMappings(); + this.useMappedNames = useMappedNames; } public ParticleTypeFiller reader(final String identifier, final ParticleReader reader) { - readers.put(mappings.id(identifier), reader); + readers.put(useMappedNames ? mappings.mappedId(identifier) : mappings.id(identifier), reader); return this; } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java index d4384d91f..491fd77b0 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java @@ -149,15 +149,15 @@ public class Protocol1_14To1_13_2 extends AbstractProtocol { filter().handler((event, meta) -> { meta.setMetaType(Types1_18.META_TYPES.byId(meta.metaType().typeId())); if (meta.metaType() == Types1_18.META_TYPES.particleType) { - Particle particle = (Particle) meta.getValue(); + final Particle particle = (Particle) meta.getValue(); if (particle.getId() == 2) { // Barrier particle.setId(3); // Block marker particle.getArguments().add(new Particle.ParticleData(Type.VAR_INT, 7754)); // Barrier state diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java index 4435beb6f..8995ed70a 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java @@ -27,6 +27,7 @@ import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.minecraft.metadata.MetaType; import com.viaversion.viaversion.api.minecraft.metadata.Metadata; import com.viaversion.viaversion.api.protocol.Protocol; @@ -482,9 +483,10 @@ public abstract class EntityRewriter extends RewriterBase if (mappings.isBlockParticle(id)) { Particle.ParticleData data = particle.getArguments().get(0); data.setValue(protocol.getMappingData().getNewBlockStateId(data.get())); - } else if (mappings.isItemParticle(id)) { + } else if (mappings.isItemParticle(id) && protocol.getItemRewriter() != null) { Particle.ParticleData data = particle.getArguments().get(0); - data.setValue(protocol.getMappingData().getNewItemId(data.get())); + Item item = data.get(); + protocol.getItemRewriter().handleItemToClient(item); } particle.setId(protocol.getMappingData().getNewParticleId(id)); diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e750102e0..84d1f85fd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists