Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Tags
Creators
Details
VNC (Version Numbering Converter)
Version Numbering Converter (VNC) is a Java 8 library for working with Minecraft versions across both numbering families:
- Classic Java-style versions such as
1.20.6and1.21.11 - Year-based drop versions such as
24.1,25.4, and26.1.1
The project is split so the common API can be used from any Java project without Bukkit on the classpath. Platform-specific runtime helpers live in separate modules and are selected through the bootstrap provider.
Modules
| Module | Artifact | Purpose |
|---|---|---|
bootstrap |
me.croabeast.vnc:VNC |
Final aggregate jar with VNC, core, and the provider implementations. |
core |
me.croabeast.vnc:core |
Common parser, provider contract, mapping tables, conversion schemes, protocol lookup, and generic runtime snapshots. |
bukkit |
me.croabeast.vnc:bukkit |
Internal Bukkit/Paper provider and ViaVersion-backed player protocol lookup. |
mod:fabric |
me.croabeast.vnc:fabric |
Fabric loader runtime version bridge. |
mod:quilt |
me.croabeast.vnc:quilt |
Quilt loader runtime version bridge. |
mod:forge |
me.croabeast.vnc:forge |
Forge runtime version bridge. |
mod:neoforge |
me.croabeast.vnc:neoforge |
NeoForge runtime version bridge compiled as Java 8 bytecode. |
mod:sponge |
me.croabeast.vnc:sponge |
Sponge runtime version bridge. |
mod:liteloader |
me.croabeast.vnc:liteloader |
Legacy LiteLoader bridge. |
proxy:bungee |
me.croabeast.vnc:bungee |
BungeeCord proxy version bridge. |
proxy:velocity |
me.croabeast.vnc:velocity |
Velocity proxy bridge for a supplied backend/support Minecraft version. |
Core API
MinecraftVersion classic = MinecraftVersion.parse("1.21.11");
MinecraftVersion drop = MinecraftVersion.parse("26.1");
classic.getVersion(); // "1.21.11"
classic.getProtocol(); // 774
classic.supportsHex(); // true
drop.getVersion(); // "26.1"
drop.getProtocol(); // 775
String dropName = VersionScheme.MOJANG.toDrop("1.20.3"); // "23.2"
String classicName = VersionScheme.MOJANG.toClassic("25.2.2"); // "1.21.8"
boolean modernRegistry = Versioning.isAtLeast(MinecraftVersion.parse("1.20.6"), "1.20.5");
int comparison = VNC.compare(MinecraftVersion.parse("26.1"), "1.21.11");
Platform Runtime API
Use bootstrap when you want VNC to detect the runtime provider:
VNCProvider provider = VNC.getProvider();
String platform = provider.getPlatform();
String classic = provider.getClassicVersion();
String drop = provider.getDropVersion();
int protocol = provider.getProtocol();
boolean modernRegistry = provider.isAtLeast("1.20.5");
VNC still exposes convenience methods for the detected provider:
MinecraftVersion server = VNC.SERVER_MINECRAFT_VERSION;
double legacy = VNC.SERVER_VERSION;
boolean modernRegistry = VNC.isAtLeast("1.20.5");
When the runtime may not have a supported provider, use the nullable accessor:
VNCProvider provider = VNC.getProviderOrNull();
if (provider != null && provider.isAtLeast("1.20.5")) {
// use modern behavior
}
Platform modules contain package-private provider implementations. Consumers should depend on bootstrap for runtime detection instead of calling loader-specific classes directly.
Velocity does not expose one global backend Minecraft version. Its provider is still detected from the Velocity API, but version methods need a minecraft.version system property.
Requirements
- Java 8 bytecode for every module
- Gradle 9.4.1 wrapper for local builds
- Optional platform APIs are
compileOnly; platform modules use direct APIs and guard runtime detection withThrowable/linkage protection - The NeoForge module targets NeoForge
21.1.230, compiles Maven-style withsource/target 1.8, and only resolves at runtime when Java21+and NeoForge are present
Build
./gradlew clean build
The final consumer jar is generated by the bootstrap module:
bootstrap/build/libs/VNC-${version}.jar
Maven repository publishing is handled only by .github/workflows/publish.yml.


