Skip to content

Instantly share code, notes, and snippets.

View mworzala's full-sized avatar
👾

Matt Worzala mworzala

👾
View GitHub Profile

Minestom 26.1

The 26.1 branch has now been merged, thanks to all who tested and contributed to it!

New in Minecraft

  • Added world clocks and clock time markers
    • These allow multiple time definitions across worlds (eg overworld vs end time) and separate control of each.
    • Minestom loads the vanilla clocks by default.
  • Vanilla gamerules are now strongly typed in GameRule.
    • The client now may request and send back gamerule values via the new operator-only in-menu gamerule editor.
  • Added cat, chicken, cow, pig sound variants (and their associated dynamic registries)
local store = require('@mapmaker/store')
local players = require('@mapmaker/players')
local world = require('@mapmaker/world')
local SPAWN_HEIGHT = 300
local SPAWN_POS = vec(0.5, SPAWN_HEIGHT, 0.5)
local BASE_COINS_PER_LEVEL = 10
local PRESTIGE_MINIMUM = 50
package net.hollowcube.luau;
import org.junit.jupiter.api.Test;
import java.lang.foreign.Arena;
import java.util.concurrent.atomic.AtomicInteger;
import static net.hollowcube.luau.TestHelpers.eval;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@mworzala
mworzala / hollow-cube-individual-contributor-license-agreement.md
Created March 19, 2026 23:34
Hollow Cube Individual Contributor License Agreement

Individual Contributor License Agreement

You accept and agree to the following terms and conditions for Your present and future Contributions submitted to Hollow Cube. Except for the license granted herein to Hollow Cube. and recipients of software distributed by Hollow Cube, You reserve all right, title, and interest in and to Your Contributions.

Definitions

“You” (or “Your”) shall mean the copyright owner or legal entity authorized by the copyright owner that is making this Agreement with Hollow Cube.

package net.hollowcube.multipart.resourcepack;
import com.google.gson.JsonObject;
import net.kyori.adventure.key.Key;
/// Remaps resource pack keys from server data to the client. This should be used if you remap
/// resource pack entries inside a [ResourcePackWriter] implementation.
///
/// @see ResourcePackWriter#writeItem(Key, JsonObject)
public interface ResourcePackMapper {

Minestom 1.21.11

The 1.21.11 branch has now been merged, thanks to all who tested and contributed to it!

Environment Attributes & Timelines

See minecraft.wiki Environment Attributes and Timelines for exact format details.

Environment attributes bring a pretty notable breaking change to the Biome and DimensionType API (many fields have changed, all of the removed fields are now configured via Environment Attributes as well as many new options).

Both Biome.Builder and DimensionType.Builder have a new setAttribute(EnvironmentAttribute, T) to override a single attribute. Biome additionally has an option to modify an inherited attribute (reminder: attributes are merged with their parent) via modifyAttribute(EnvironmentAttribute, Modifier, Arg). The available modifiers for a given attribute can be observed in the operators argument of the EnvironmentAttributeTypes initializers. For example, whe

Damage Types

Parkour Relevant

  • IN_FIRE
  • CAMPFIRE
  • ON_FIRE
  • LAVA
  • HOT_FLOOR
  • DROWN

Damage Types

Parkour Relevant

  • IN_FIRE
  • CAMPFIRE
  • ON_FIRE
  • LAVA
  • HOT_FLOOR
  • DROWN

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 {
static {
var packetListenerManager = MinecraftServer.getPacketListenerManager();
packetListenerManager.setPlayListener(ClientCommandChatPacket.class, CommandHandlingPlayer::execCommand);
packetListenerManager.setPlayListener(ClientTabCompletePacket.class, CommandHandlingPlayer::tabCommand);
}
private static void execCommand(@NotNull ClientCommandChatPacket packet, @NotNull Player player) {
final String command = packet.message();