Skip to content

Enrich NBTAttribute coverage with version-gated resolution for modern NMS#133

Open
Copilot wants to merge 3 commits into
devfrom
copilot/add-nbtattribute-enrichment
Open

Enrich NBTAttribute coverage with version-gated resolution for modern NMS#133
Copilot wants to merge 3 commits into
devfrom
copilot/add-nbtattribute-enrichment

Conversation

Copy link
Copy Markdown

Copilot AI commented Apr 25, 2026

Higher NMS versions introduced additional item attributes, and the previous NBTAttribute enum only covered a small legacy subset. This PR expands attribute support and ensures each attribute is only resolvable from its minimum supported server version, with compatibility handling for renamed/refactored attribute keys.

  • Attribute coverage expansion

    • Added missing NBTAttribute entries for 1.20.2, 1.20.5/1.20.6, 1.21, and 1.21.2-era attributes (e.g. MAX_ABSORPTION, SCALE, GRAVITY, MINING_EFFICIENCY, LUCK, BLOCK_BREAK_SPEED, STEP_HEIGHT, etc.).
    • Kept legacy attributes in place and unified all definitions in one enum.
  • Per-attribute version gating

    • Added an introducedVersion to each enum constant.
    • getAttribute() now rejects unsupported attributes on older runtimes instead of attempting invalid resolution.
  • Namespace/refactor-safe attribute lookup

    • Switched from eager enum-time lookup to lazy runtime resolution.
    • Added fallback name resolution paths for attributes with historical naming differences (e.g. jump strength / zombie reinforcement cases), reducing breakage across NMS namespace changes.
  • Enum internals cleanup

    • Updated enum constructor/fields to support lazy caching and fallback lookup names.
    • Simplified error path for unresolved attribute mappings.
@NotNull
public Attribute getAttribute() {
    if (!Version.CURRENT.isAtLeast(this.introducedVersion)) {
        throw new IllegalArgumentException("Attribute '" + this.name()
                + "' is only supported from " + this.introducedVersion.name() + " and above.");
    }

    if (this.att != null) return this.att;

    IllegalArgumentException last = null;
    for (String lookupName : this.nmsLookupNames) {
        try {
            this.att = VersionManager.getNms().getAttribute(lookupName);
            return this.att;
        } catch (IllegalArgumentException ex) {
            last = ex;
        }
    }

    throw new IllegalArgumentException("Unknown attribute mappings for '" + this.name() + "'.", last);
}

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • jitpack.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -B test (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -B -pl codex-api -am test (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • maven.devs.beer
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -B test (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -B -pl codex-api -am test (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)
  • repo.travja.dev
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -B test (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -B -pl codex-api -am test (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.14/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.14/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.14 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.14/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/codex/codex org.codehaus.plexus.classworlds.launcher.Launcher -f pom.xml -B -V -e -Dfindbugs.skip -Dcheckstyle.skip -Dpmd.skip=true -Dspotbugs.skip -Denforcer.skip -Dmaven.javadoc.skip (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI linked an issue Apr 25, 2026 that may be closed by this pull request
Copilot AI changed the title [WIP] Add NBTAttribute enrichment for higher versions Enrich NBTAttribute coverage with version-gated resolution for modern NMS Apr 25, 2026
Copilot AI requested a review from MaksyKun April 25, 2026 21:12
@MaksyKun MaksyKun marked this pull request as ready for review April 25, 2026 21:38
@MaksyKun MaksyKun requested review from Travja and removed request for MaksyKun April 25, 2026 21:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NBTAttribute enrichment for higher versions

2 participants