Tis

Minecraft 24w33a

As summer vacation ends, Mojang gives us one of the biggest snapshots ever. See the changelog.

Mobs

Mobs can now perform smash attacks with the mace, fixing MC-269428. The attack does the same damage and knockback as when a player performs a smash attack. The mob does not reset its momentum or accumulated fall distance, so the mob will take fall damage from the full height of the drop.

Mobs used to search for attackable targets within a 4 block vertical range of the mob’s hitbox. The vertical search range was changed to follow_range blocks, fixing MC-121013.

New Variants

Mob Width Height Eye Height Spawn Chance
Baby Dolphin 0.585 0.39 0.195 5%
Baby (Glow) Squid 0.4 0.4 0.2 5%
Salmon Size Spawn Chance
Small 3/19 ≈ 15.789%
Medium 10/19 ≈ 52.316%
Large 6/19 ≈ 31.579%

Salmon variants currently have the same hitbox size.

Bees

Bees now wander around randomly for 30 seconds instead of 2 minutes after exiting a nest/hive. Bees will spend 2 minutes instead of 30 seconds trying to return home before giving up.

“If a bee has a known nest/hive, it will travel less far from it” is incorrect. Bees now travel up to 24 blocks from a nest/hive instead of 22 blocks. However, bees are less likely to get lost since they must stray 48 blocks away from their nest/hive or flower before forgetting, instead of 32 blocks away.

Breeze

Breezes now remember mobs for 5 seconds after line of sight is lost, fixing MC-273076.

Drowned

If a drowned has a trident enchanted with Impaling, Loyalty, or Channeling, those enchantments will now function correctly. Riptide still does not work. Since Drowned do not keep track of item durability, the Unbreaking and Mending enchantments have no effect.

Zoglin

Zoglins spawned from spawn eggs have a 20% chance to be a baby.

Portals

Players stop “using” items (such as holding a shield or eating food) when they switch dimensions, fixing MC-86252 and MC-274372.

An entity cannot go through the end portal if any passenger is a player who has not seen the credits, fixing MC-272603.

Raids

When the raid wave countdown completes, there are 3 spawn attempt phases with 20 attempts per phase. Each spawn attempt now requires that the spawn position is within a certain vertical distance from the raid center (64 blocks in the first phase, 32 in the second phase, and 0 blocks in the third phase). If the chosen location is outside the vertical range, the spawn attempt fails.

Trial Chambers

The dispenser activated by tripwire in the parkour over dripstone trap (in encounter_4.nbt) is not always an arrow. The dispenser pulls from the usual loot tale.

Structure Files

The following structure files were modified. Note that quadrant_1-4.nbt is shorthand for quadrant_1.nbt, quadrant_2.nbt, etc. <color>_bed.nbt is shorthand for the 16 structure files for each bed color.

  chamber/
    assembly.nbt
    chamber_1.nbt
    chamber_2.nbt
    chamber_4.nbt
    chamber_8.nbt
    eruption.nbt
    pedestal.nbt
    slanted.nbt
    addon/
      full_corner_column.nbt
      full_stacked_walkway.nbt
    assembly/
      left_staircase_1-2.nbt
      right_staircase_1-2.nbt
    eruption/
      quadrant_5.nbt
      slice_3.nbt
    pedestal/
      center_1.nbt
    slanted/
      hallway_2.nbt
      hallway_3.nbt
-     hallway_4.nbt
-     hallway_5.nbt
      quadrant_1-4.nbt
  corridor/
    atrium_1.nbt
    end_2.nbt
    entrance_1.nbt
    straight_6.nbt
    addon/
      open_walkway_upper.nbt
      reward_upper.nbt
  decor/
+   <color>_bed.nbt
+   disposal.nbt
  hallway/
    corner_staircase.nbt
    corner_staircase_down.nbt
+   encounter_1-5.nbt
    left_corner.nbt
    right_corner.nbt
    straight_staircase.nbt
+   trapped_staircase.nbt
  intersection/
    intersection_1-3.nbt

Misc

Players can no longer fill cauldrons with lava or powder snow if the block above is water or a waterlogged block, fixing MC-203748 and MC-240948. Players can still place water on top of lava or powder snow cauldrons and push cauldrons underwater with pistons.

Experience caps at 2147483647 levels, fixing MC-3266.

Dedicated servers will not pause if a /tick sprint is ongoing.

Redstone Experiment

See this post by SpaceWalkerRS for a technical breakdown of how the new redstone mechanics work.

Keep in mind that:

  • The redstone changes are experimental with no target release version and subject to change
  • Other components, such as repeaters, are still directional
  • The experiment contains bugs that may complicate testing

Minecart Experiment

The minecartMaxSpeed gamerule ranges from 1 to 1000.

Minecarts no longer snap to rails diagonally. Minecarts snap to the cardinal direction closest to the minecart’s velocity. The minecart always snaps to 0.1 blocks above if the rail is flat and 0.6 blocks above if the rail is sloped.

Minecarts with no passengers now have a drag coefficient of 0.975 instead of 0.96. Minecarts apply drag linearly every tick.

Minecarts used to pick up entities within a 1.02×1.02 horizontal square (0.02 blocks from the edge of the minecart). Now, minecarts pick up entities that it physically collides with.

Players and dispensers cannot place minecarts intersecting the hitbox of another minecart.

Fast-moving hopper minecarts may pull items multiple times per tick, but it can still miss containers at high speeds.

A TNT minecart now only explodes if a collision reduced its horizontal velocity from above 0.1 blocks/tick to below 0.1 blocks/tick.

Data

Damage Types

Added two new damage types: mace_smash and ender_pearl.

Added a new death message for when killed by a mace smash attack:

<victim> was smashed by <attacker>

<victim> was smashed by <attacker> with <weapon>

Data Components

The use_duration field in the instrument data component is rounded down to the nearest tick (0.05 seconds).

The value field in the enchantable data component is the “enchantability” value.

Text Filtering

text-filtering-config in server.properties is used to implement Realms text filtering, though third-party servers can also set up their own text filtering service.

Added text-filtering-version to server.properties. It defaults to version 0 (the existing behavior). No changes were made to the existing behavior.

When text-filtering-version is 1, text-filtering-config is a JSON object with the following schema:

{
  "apiServer": String, // The server which to send filtering requests to
  "apiPath": String, // The path to the endpoint which to send filtering requests to
  "scope": String, // The OAuth 2.0 scope from Entra ID
  "serverId": String = "", // A string identifying this server
  "applicationId": String, // `clientID` UUID from Entra ID
  "tenantId": String, // `TenantID` from Entra ID (business apps only)
  "roomId": String = "Java:Chat", // A "room ID" sent to the filtering service
  "certificatePath": String, // The path to the X509 certificate file
  "certificatePassword": String = "", // Password used if the certificate is password-protected
  "hashesToDrop": int = -1, // See below
  "maxConcurrentRequests": Integer = 7, // Thread pool size
  "fullyFilteredEvents": String[], // See below
  "connectionReadTimeoutMs": Integer = 2000 // Time to connect before timing out
}

apiPath no longer requires a leading /.

The server uses the Microsoft Authentication Library for Java to authenticate with Microsoft Entra ID:

String certificatePath = ...;
String certificatePassword = ...;
String applicationId = ...;
String tenantId = ...;
String scope = ...;

InputStream is = Files.newInputStream(Path.of(certificatePath));
IClientCertificate cert = ClientCredentialFactory.createFromCertificate(is, certificatePassword);

ConfidentialClientApplication client = ConfidentialClientApplication.builder(applicationId, cert)
  .sendX5c(true)
  .executorService(executorService)
  .authority(String.format(Locale.ROOT, "https://login.microsoftonline.com/%s/", tenantId))
  .build();

ClientCredentialParameters params = ClientCredentialParameters.builder(Set.of(scope)).build();

All future requests must be authenticated by setting the Authorization header to:

"Bearer " + client.acquireToken(params).join()

The server sends a POST request to the text filtering endpoint with the following payload:

{
  "userId": String, // UUID of player
  "userDisplayName": String, // Username of player
  "server": String, // `serverId` from config
  "room": String, // `roomId` from config
  "area": "JavaChatRealms",
  "data": String, // Raw chat message text
  "language": "*"
}

The text filtering service responds with the following format:

{
  // If null, the entire message will be filtered and replaced with `*`
  "result": {
    // If false, the message will display unchanged
    "filtered": Boolean = true,
    // List of "events" (or rules) that were flagged by the filtering service
    "events": Array[
      {
        "id": String
      }
    ] = [],
    // List of characters to filter and change to `*`
    // Each integer is an index into the chat message string
    "redactedTextIndex": Integer[] = []
  } = null
}

If any event ID from the response matches an event ID found in fullyFilteredEvents from the config, the entire message will be filtered.

If the number of characters filtered (size of redactedTextIndex) is greater than or equal to hashesToDrop from the config, the entire message will be filtered. Setting hashesToDrop to -1 disables this behavior.

Edits

August 30 2024

  • Fixed typo

September 5 2024

  • Clarify raid mechanics

September 7 2024

  • Clarify that powder snow cauldrons are included

September 10 2024

  • Correct velocity required for TNT minecart explosion
  • Fixed typo