diff --git a/api/src/main/java/com/viaversion/viaversion/api/platform/UnsupportedSoftware.java b/api/src/main/java/com/viaversion/viaversion/api/platform/UnsupportedSoftware.java index 69f5ba382..20ef96404 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/platform/UnsupportedSoftware.java +++ b/api/src/main/java/com/viaversion/viaversion/api/platform/UnsupportedSoftware.java @@ -22,6 +22,8 @@ */ package com.viaversion.viaversion.api.platform; +import org.checkerframework.checker.nullness.qual.Nullable; + public interface UnsupportedSoftware { /** @@ -38,10 +40,19 @@ public interface UnsupportedSoftware { */ String getReason(); + /** + * Returns the name of unsupported software if present. + * + * @return name of unsupported software if it is matched, else null + */ + @Nullable String match(); + /** * Returns whether the unsupported software is present. * * @return true if the unsupported software is found */ - boolean findMatch(); + default boolean findMatch() { + return match() != null; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java b/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java index 72d97ebc3..ff0142339 100644 --- a/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/ViaManagerImpl.java @@ -237,7 +237,8 @@ public class ViaManagerImpl implements ViaManager { private void unsupportedSoftwareWarning() { boolean found = false; for (final UnsupportedSoftware software : platform.getUnsupportedSoftwareClasses()) { - if (!software.findMatch()) { + final String match = software.match(); + if (match == null) { continue; } @@ -249,7 +250,7 @@ public class ViaManagerImpl implements ViaManager { found = true; } - platform.getLogger().severe("We strongly advise against using " + software.getName() + ":"); + platform.getLogger().severe("We strongly advise against using " + match + ":"); platform.getLogger().severe(software.getReason()); platform.getLogger().severe(""); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java index ef34a4a6e..7c155aa37 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java @@ -162,7 +162,7 @@ public final class EntityPackets extends EntityRewriter= 2 ? id + 1 : id)); // long added }); - registerMetaTypeHandler(Types1_19_3.META_TYPES.itemType, Types1_19_3.META_TYPES.blockStateType, Types1_19_3.META_TYPES.particleType); + registerMetaTypeHandler(Types1_19_3.META_TYPES.itemType, Types1_19_3.META_TYPES.blockStateType, null, Types1_19_3.META_TYPES.particleType); filter().index(6).handler((event, meta) -> { // Sitting pose added diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java index b5ece54b3..ff0e9762c 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java @@ -233,7 +233,7 @@ public final class EntityPackets extends EntityRewriter { final int blockState = meta.value(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java index f9036a05a..9ca898f40 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java @@ -355,7 +355,7 @@ public final class EntityPackets extends EntityRewriter meta.setMetaType(Types1_19.META_TYPES.byId(meta.metaType().typeId()))); - registerMetaTypeHandler(Types1_19.META_TYPES.itemType, Types1_19.META_TYPES.blockStateType, Types1_19.META_TYPES.particleType); + registerMetaTypeHandler(Types1_19.META_TYPES.itemType, Types1_19.META_TYPES.blockStateType, null, Types1_19.META_TYPES.particleType); filter().filterFamily(Entity1_19Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> { // Convert to new block id diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java index 32f68fc1a..7a327d6a0 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java @@ -69,7 +69,7 @@ public final class EntityPackets extends EntityRewriter meta.setMetaType(Types1_20.META_TYPES.byId(meta.metaType().typeId()))); - registerMetaTypeHandler(Types1_20.META_TYPES.itemType, Types1_20.META_TYPES.blockStateType, Types1_20.META_TYPES.particleType); + registerMetaTypeHandler(Types1_20.META_TYPES.itemType, Types1_20.META_TYPES.blockStateType, Types1_20.META_TYPES.optionalBlockStateType, Types1_20.META_TYPES.particleType); filter().filterFamily(Entity1_19_4Types.MINECART_ABSTRACT).index(11).handler((event, meta) -> { final int blockState = meta.value(); 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 1cb4bb636..a4a30439e 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java @@ -234,18 +234,25 @@ public abstract class EntityRewriter { - if (itemType != null && meta.metaType() == itemType) { + final MetaType type = meta.metaType(); + if (type == itemType) { protocol.getItemRewriter().handleItemToClient(meta.value()); - } else if (blockType != null && meta.metaType() == blockType) { + } else if (type == blockStateType) { int data = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); - } else if (particleType != null && meta.metaType() == particleType) { + } else if (type == optionalBlockStateType) { + int data = meta.value(); + if (data != 0) { + meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); + } + } else if (type == particleType) { rewriteParticle(meta.value()); } }); diff --git a/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedPlugin.java b/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedPlugin.java index 95da11a3b..9e496e4dc 100644 --- a/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedPlugin.java +++ b/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedPlugin.java @@ -23,6 +23,7 @@ import com.viaversion.viaversion.api.platform.UnsupportedSoftware; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; public final class UnsupportedPlugin implements UnsupportedSoftware { @@ -50,13 +51,13 @@ public final class UnsupportedPlugin implements UnsupportedSoftware { } @Override - public final boolean findMatch() { + public final @Nullable String match() { for (final String identifier : identifiers) { if (Via.getPlatform().hasPlugin(identifier)) { - return true; + return identifier; } } - return false; + return null; } public static final class Builder { diff --git a/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedServerSoftware.java b/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedServerSoftware.java index cebe298b0..3972c4f62 100644 --- a/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedServerSoftware.java +++ b/common/src/main/java/com/viaversion/viaversion/unsupported/UnsupportedServerSoftware.java @@ -24,6 +24,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; public final class UnsupportedServerSoftware implements UnsupportedSoftware { @@ -53,20 +54,20 @@ public final class UnsupportedServerSoftware implements UnsupportedSoftware { } @Override - public final boolean findMatch() { + public final @Nullable String match() { for (String className : classNames) { try { Class.forName(className); - return true; + return name; } catch (ClassNotFoundException ignored) { } } for (UnsupportedMethods method : methods) { if (method.findMatch()) { - return true; + return name; } } - return false; + return null; } public static final class Builder { diff --git a/common/src/main/resources/assets/viaversion/data/blockConnections.nbt b/common/src/main/resources/assets/viaversion/data/blockConnections.nbt index 50cb500da..de3adb767 100644 Binary files a/common/src/main/resources/assets/viaversion/data/blockConnections.nbt and b/common/src/main/resources/assets/viaversion/data/blockConnections.nbt differ