diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/BlockItemPackets1_17.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/BlockItemPackets1_17.java index a30f1633..753d6a77 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/BlockItemPackets1_17.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/BlockItemPackets1_17.java @@ -56,7 +56,7 @@ public class BlockItemPackets1_17 extends nl.matsv.viabackwards.api.rewriters.It protocol.registerOutgoing(ClientboundPackets1_17.SPAWN_PARTICLE, new PacketRemapper() { @Override public void registerMap() { - map(Type.INT); // Particle Id + map(Type.INT); // Particle id map(Type.BOOLEAN); // Long distance map(Type.DOUBLE); // X map(Type.DOUBLE); // Y @@ -68,16 +68,18 @@ public class BlockItemPackets1_17 extends nl.matsv.viabackwards.api.rewriters.It map(Type.INT); // Particle count handler(wrapper -> { int id = wrapper.get(Type.INT, 0); - if (id == 15) { - // Dust color transition -> Dust - wrapper.passthrough(Type.DOUBLE); // R - wrapper.passthrough(Type.DOUBLE); // G - wrapper.passthrough(Type.DOUBLE); // B + if (id == 14 || id == 15) { + wrapper.write(Type.FLOAT, wrapper.read(Type.DOUBLE).floatValue()); // R + wrapper.write(Type.FLOAT, wrapper.read(Type.DOUBLE).floatValue()); // G + wrapper.write(Type.FLOAT, wrapper.read(Type.DOUBLE).floatValue()); // B wrapper.passthrough(Type.FLOAT); // Scale - wrapper.read(Type.DOUBLE); // R - wrapper.read(Type.DOUBLE); // G - wrapper.read(Type.DOUBLE); // B + if (id == 15) { + // Dust color transition -> Dust + wrapper.read(Type.DOUBLE); // R + wrapper.read(Type.DOUBLE); // G + wrapper.read(Type.DOUBLE); // B + } } else if (id == 36) { // Vibration signal - no nice mapping possible without tracking entity positions and doing particle tasks wrapper.cancel(); diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java index 094ca65a..a2218822 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java @@ -82,13 +82,23 @@ public class EntityPackets1_17 extends EntityRewriter { } } else if (type == MetaType1_14.PARTICLE) { Particle particle = (Particle) meta.getValue(); - if (particle.getId() == 15) { - // Remove target color values 4-6 - particle.getArguments().subList(4, 7).clear(); - } else if (particle.getId() == 36) { - // Vibration signal - no nice mapping possible without tracking entity positions and doing particle tasks + if (particle.getId() == 14 || particle.getId() == 15) { // Dust / Dust Transition + // RGB is encoded as doubles in 1.17 + for (int i = 0; i < 3; i++) { + Particle.ParticleData data = particle.getArguments().get(i); + data.setValue(((Number) data.getValue()).floatValue()); + data.setType(Type.FLOAT); + } + + if (particle.getId() == 15) { + // Remove transition target color values 4-6 + particle.getArguments().subList(4, 7).clear(); + } + } else if (particle.getId() == 36) { // Vibration Signal + // No nice mapping possible without tracking entity positions and doing particle tasks particle.setId(0); particle.getArguments().clear(); + return meta; } rewriteParticle(particle);