From 96485c444efc797ccc8fa1a1d5a686e574607cb5 Mon Sep 17 00:00:00 2001 From: KennyTV Date: Wed, 1 Jul 2020 09:40:18 +0200 Subject: [PATCH] Filter new blocks/items in tag rewriting Fixes ViaVersion/ViaBackwards#219 --- .../ViaVersion/api/rewriters/TagRewriter.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/us/myles/ViaVersion/api/rewriters/TagRewriter.java b/common/src/main/java/us/myles/ViaVersion/api/rewriters/TagRewriter.java index 0773b50e9..b7aa557ec 100644 --- a/common/src/main/java/us/myles/ViaVersion/api/rewriters/TagRewriter.java +++ b/common/src/main/java/us/myles/ViaVersion/api/rewriters/TagRewriter.java @@ -1,5 +1,7 @@ package us.myles.ViaVersion.api.rewriters; +import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntList; import us.myles.ViaVersion.api.PacketWrapper; import us.myles.ViaVersion.api.protocol.ClientboundPacketType; import us.myles.ViaVersion.api.protocol.Protocol; @@ -79,11 +81,21 @@ public class TagRewriter { for (int i = 0; i < tagsSize; i++) { wrapper.passthrough(Type.STRING); - int[] ids = wrapper.passthrough(Type.VAR_INT_ARRAY_PRIMITIVE); + int[] ids = wrapper.read(Type.VAR_INT_ARRAY_PRIMITIVE); if (rewriteFunction != null) { - for (int j = 0; j < ids.length; j++) { - ids[j] = rewriteFunction.rewrite(ids[j]); + // Map ids and filter out new blocks + IntList idList = new IntArrayList(ids.length); + for (int id : ids) { + int mappedId = rewriteFunction.rewrite(id); + if (mappedId != -1) { + idList.add(mappedId); + } } + + wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, idList.toArray(EMPTY_ARRAY)); + } else { + // Write the original array + wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, ids); } }