Skip to content

Instantly share code, notes, and snippets.

@mworzala
Last active October 11, 2025 15:19
Show Gist options
  • Save mworzala/4b7526d4f616d07b823c3f6f272ef689 to your computer and use it in GitHub Desktop.
Save mworzala/4b7526d4f616d07b823c3f6f272ef689 to your computer and use it in GitHub Desktop.

Minestom 1.21.10

The 1.21.10 (including 1.21.9) branch has now been merged, thanks to all who tested and contributed to it!

Java 25

Minestom tracks the latest LTS version of Java. Since Java 25 has been released, it is now the minimum required version of Java to use Minestom. To use Java 25 you must be on IntelliJ IDEA 2025.2 or higher.

In gradle (Kotlin), you can set the Java version as such:

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(25))    
    }
}

New in Minecraft

This is a new segment to these release notes, a high level description of how some of the new Minecraft features appear in Minestom:

  • Mannequins and Copper Golems are now spawnable with the associated EntityType and MannequinMeta/CopperGolemMeta.
    • Note: Some fields from PlayerMeta were moved to the common AvatarMeta between player/mannequin. Offsets may have changed for those editing metadata manually for player entities.
  • Object text components may be used with the adventure API, see Javadocs.
  • The server code of conduct may be sent during configuration with the CodeOfConductPacket, at which point you should block the AsyncPlayerConfigurationEvent until receiving a ClientAcceptCodeOfConductPacket.

Misc Changes

  • The IChunkLoader interface has been renamed to ChunkLoader.
  • Minestom now tracks the server and client connection states separately, and play->configuration state changes only occur between ticks. These changes significantly improve stability when reentering the configuration phase from play. As such, PlayerConnection#getConnectionState has been fatally deprecated in favor #getServerState and #getClientState. When updating, #getConnectionState can be translated directly into #getClientState to preserve prior behavior. However, some logic may benefit from being side-state aware around configuration swaps.
  • Block collision and occlusion shapes are now distinct, they can be accessed with myBlock.registry().collisionShape() and myBlock.registry().occlusionShape() respectively.
  • PlayerChangeHeldSlotEvent#getOldSlot now returns a byte (inline with other methods about player held slots) instead of an int.
  • The ResourceLocation argument now uses an Adventure Key instead of a raw string.
  • Adventure API, Key, and NBT are exported as transitive dependencies of Minestom.
  • Fastutil is no longer exported as a transitive dependency of Minestom.

Misc Future Tasks

  • Receiving transfers and correctly processing entity passenger/vehicle offsets remain as TODO items from 1.20.6.
  • API to send and automatically wait for code of conduct acceptance from 1.21.9.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment