metadataList) {
- for (Metadata metadata : metadataList) {
- if (metadata.id() == index) {
- return metadata;
- }
- }
- return null;
- }
-
protected void rewriteParticle(Particle particle) {
ParticleMappings mappings = protocol.getMappingData().getParticleMappings();
int id = particle.getId();
diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/meta/MetaFilter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/meta/MetaFilter.java
index 85d0ab754..28433d69a 100644
--- a/common/src/main/java/com/viaversion/viaversion/rewriter/meta/MetaFilter.java
+++ b/common/src/main/java/com/viaversion/viaversion/rewriter/meta/MetaFilter.java
@@ -20,20 +20,24 @@ package com.viaversion.viaversion.rewriter.meta;
import com.google.common.base.Preconditions;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
+import com.viaversion.viaversion.api.minecraft.metadata.MetaType;
import com.viaversion.viaversion.api.minecraft.metadata.Metadata;
import com.viaversion.viaversion.rewriter.EntityRewriter;
+import it.unimi.dsi.fastutil.ints.Int2ObjectFunction;
import java.util.Objects;
import org.checkerframework.checker.nullness.qual.Nullable;
public class MetaFilter {
private final MetaHandler handler;
private final EntityType type;
+ private final MetaType metaType;
private final int index;
private final boolean filterFamily;
- public MetaFilter(@Nullable EntityType type, boolean filterFamily, int index, MetaHandler handler) {
+ public MetaFilter(@Nullable EntityType type, boolean filterFamily, @Nullable MetaType metaType, int index, MetaHandler handler) {
Preconditions.checkNotNull(handler, "MetaHandler cannot be null");
this.type = type;
+ this.metaType = metaType;
this.filterFamily = filterFamily;
this.index = index;
this.handler = handler;
@@ -57,6 +61,15 @@ public class MetaFilter {
return type;
}
+ /**
+ * Returns the meta type to filter, or null.
+ *
+ * @return the meta type to filter, or null if unset
+ */
+ public @Nullable MetaType metaType() {
+ return metaType;
+ }
+
/**
* Returns the metadata handler.
*
@@ -86,7 +99,8 @@ public class MetaFilter {
// Check if no specific index is filtered or the indexes are equal
// Then check if the filter has no entity type or the type is equal to or part of the filtered parent type
return (this.index == -1 || metadata.id() == this.index)
- && (this.type == null || matchesType(type));
+ && (this.type == null || matchesType(type))
+ && (this.metaType == null || metadata.metaType() == this.metaType);
}
private boolean matchesType(@Nullable EntityType type) {
@@ -101,6 +115,7 @@ public class MetaFilter {
if (index != that.index) return false;
if (filterFamily != that.filterFamily) return false;
if (!handler.equals(that.handler)) return false;
+ if (!Objects.equals(metaType, that.metaType)) return false;
return Objects.equals(type, that.type);
}
@@ -108,6 +123,7 @@ public class MetaFilter {
public int hashCode() {
int result = handler.hashCode();
result = 31 * result + (type != null ? type.hashCode() : 0);
+ result = 31 * result + (metaType != null ? metaType.hashCode() : 0);
result = 31 * result + index;
result = 31 * result + (filterFamily ? 1 : 0);
return result;
@@ -118,6 +134,7 @@ public class MetaFilter {
return "MetaFilter{" +
"type=" + type +
", filterFamily=" + filterFamily +
+ ", metaType=" + metaType +
", index=" + index +
", handler=" + handler +
'}';
@@ -126,6 +143,7 @@ public class MetaFilter {
public static final class Builder {
private final EntityRewriter, ?> rewriter;
private EntityType type;
+ private MetaType metaType;
private int index = -1;
private boolean filterFamily;
private MetaHandler handler;
@@ -134,9 +152,43 @@ public class MetaFilter {
this.rewriter = rewriter;
}
+ public Builder metaType(MetaType metaType) {
+ Preconditions.checkArgument(this.metaType == null);
+ this.metaType = metaType;
+ return this;
+ }
+
+ /**
+ * Sets the type to filter, including subtypes.
+ *
+ * You should always register a type when accessing specific indexes,
+ * even if it is the base entity type, to avoid metadata from unregistered
+ * entities causing issues.
+ *
+ * @param type entity type to filter
+ * @return this builder
+ */
public Builder type(EntityType type) {
Preconditions.checkArgument(this.type == null);
this.type = type;
+ this.filterFamily = true;
+ return this;
+ }
+
+ /**
+ * Sets the type to filter, not including subtypes.
+ *
+ * You should always register a type when accessing specific indexes,
+ * even if it is the base entity type, to avoid metadata from unregistered
+ * entities causing issues.
+ *
+ * @param type exact entity type to filter
+ * @return this builder
+ */
+ public Builder exactType(EntityType type) {
+ Preconditions.checkArgument(this.type == null);
+ this.type = type;
+ this.filterFamily = false;
return this;
}
@@ -146,13 +198,6 @@ public class MetaFilter {
return this;
}
- public Builder filterFamily(EntityType type) {
- Preconditions.checkArgument(this.type == null);
- this.type = type;
- this.filterFamily = true;
- return this;
- }
-
public Builder handlerNoRegister(MetaHandler handler) {
Preconditions.checkArgument(this.handler == null);
this.handler = handler;
@@ -172,6 +217,17 @@ public class MetaFilter {
register();
}
+ public void mapMetaType(Int2ObjectFunction updateFunction) {
+ handler((event, meta) -> {
+ MetaType mappedType = updateFunction.apply(meta.metaType().typeId());
+ if (mappedType != null) {
+ meta.setMetaType(mappedType);
+ } else {
+ event.cancel();
+ }
+ });
+ }
+
/**
* Sets a handler to remove metadata at the given index without affecting any other indexes and registers the filter.
* Should always be called last.
@@ -243,7 +299,7 @@ public class MetaFilter {
* @return created meta filter
*/
public MetaFilter build() {
- return new MetaFilter(type, filterFamily, index, handler);
+ return new MetaFilter(type, filterFamily, metaType, index, handler);
}
}
}
diff --git a/common/src/test/java/com/viaversion/viaversion/common/dummy/DummyInitializer.java b/common/src/test/java/com/viaversion/viaversion/common/dummy/DummyInitializer.java
index 2b20f280f..04decb134 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/dummy/DummyInitializer.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/dummy/DummyInitializer.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/dummy/TestConfig.java b/common/src/test/java/com/viaversion/viaversion/common/dummy/TestConfig.java
index 14f5367e8..ba30e34dd 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/dummy/TestConfig.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/dummy/TestConfig.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java b/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java
index b84e7cec3..f5ba4e891 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/dummy/TestPlatform.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/entities/EntityTypesTest.java b/common/src/test/java/com/viaversion/viaversion/common/entities/EntityTypesTest.java
index 329932bfd..2d5183dc7 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/entities/EntityTypesTest.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/entities/EntityTypesTest.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java b/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java
index ebd22351d..899d47fb8 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/nbt/NBTTagTest.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/protocol/ProtocolVersionTest.java b/common/src/test/java/com/viaversion/viaversion/common/protocol/ProtocolVersionTest.java
index d88c1927d..6b377f0ab 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/protocol/ProtocolVersionTest.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/protocol/ProtocolVersionTest.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java b/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java
index af91eaea9..a9c00b750 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/type/ItemTypeTest.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/common/src/test/java/com/viaversion/viaversion/common/type/StringTypeTest.java b/common/src/test/java/com/viaversion/viaversion/common/type/StringTypeTest.java
index 28e3835c1..361e9e7a6 100644
--- a/common/src/test/java/com/viaversion/viaversion/common/type/StringTypeTest.java
+++ b/common/src/test/java/com/viaversion/viaversion/common/type/StringTypeTest.java
@@ -1,6 +1,6 @@
/*
* This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion
- * Copyright (C) 2016-2021 ViaVersion and contributors
+ * Copyright (C) 2016-2024 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java
index 6fdd9d654..a25ec6ed1 100644
--- a/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java
+++ b/sponge/src/main/java/com/viaversion/viaversion/sponge/handlers/SpongeChannelInitializer.java
@@ -68,11 +68,6 @@ public class SpongeChannelInitializer extends ChannelInitializer implem
}
}
- /*@Deprecated(forRemoval = true)*/
- public ChannelInitializer getOriginal() {
- return original;
- }
-
@Override
public ChannelInitializer original() {
return original;
diff --git a/template/src/main/java/com/viaversion/viaversion/template/protocols/rewriter/EntityPacketRewriter1_99.java b/template/src/main/java/com/viaversion/viaversion/template/protocols/rewriter/EntityPacketRewriter1_99.java
index 3d25f02e2..4f17ac03a 100644
--- a/template/src/main/java/com/viaversion/viaversion/template/protocols/rewriter/EntityPacketRewriter1_99.java
+++ b/template/src/main/java/com/viaversion/viaversion/template/protocols/rewriter/EntityPacketRewriter1_99.java
@@ -84,12 +84,12 @@ public final class EntityPacketRewriter1_99 extends EntityRewriter {
- final int id = meta.metaType().typeId();
+ filter().mapMetaType(typeId -> {
+ final int id = typeId;
if (id >= SomeAddedIndex) {
id++;
}
- meta.setMetaType(Types1_20_5.META_TYPES.byId(id));
+ return Types1_20_5.META_TYPES.byId(id);
});*/
// Registers registry type id changes
@@ -101,7 +101,7 @@ public final class EntityPacketRewriter1_99 extends EntityRewriter {
+ filter().type(EntityTypes1_20_5.MINECART_ABSTRACT).index(11).handler((event, meta) -> {
final int blockState = meta.value();
meta.setValue(protocol.getMappingData().getNewBlockStateId(blockState));
});