Filter new blocks/items in tag rewriting

Fixes ViaVersion/ViaBackwards#219
This commit is contained in:
KennyTV 2020-07-01 09:40:18 +02:00
parent b99b79f44a
commit 96485c444e
No known key found for this signature in database
GPG Key ID: 6BE3B555EBC5982B

View File

@ -1,5 +1,7 @@
package us.myles.ViaVersion.api.rewriters; 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.PacketWrapper;
import us.myles.ViaVersion.api.protocol.ClientboundPacketType; import us.myles.ViaVersion.api.protocol.ClientboundPacketType;
import us.myles.ViaVersion.api.protocol.Protocol; import us.myles.ViaVersion.api.protocol.Protocol;
@ -79,11 +81,21 @@ public class TagRewriter {
for (int i = 0; i < tagsSize; i++) { for (int i = 0; i < tagsSize; i++) {
wrapper.passthrough(Type.STRING); 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) { if (rewriteFunction != null) {
for (int j = 0; j < ids.length; j++) { // Map ids and filter out new blocks
ids[j] = rewriteFunction.rewrite(ids[j]); 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);
} }
} }