Posted on Leave a comment

Talk to your Fedora system with the linux-mcp-server!

Talk to your Fedora system with the Linux MCP Server!

Generative AI systems are changing the way people interact with computers. MCP (model context protocol) is a way that enables LLMs to run commands and use tools to enable live, conversational interaction with systems. Using the new linux-mcp-server, let’s walk through how you can talk with your Fedora system for understanding your system and getting help troubleshooting it!

Introduction

 Large language models (LLMs) can be an invaluable tool when investigating an issue on a Linux system. However, this can involve a lot of copy/pasting of information from the Linux terminal into a web based interface to an LLM model.  

The model context protocol (MCP) acts as a bridge, enabling LLMs to interact with external tools and data sources.  The linux-mcp-server utilizes this protocol to give LLMs the ability to interact with a Fedora Linux system.  Instead of you manually copying and pasting terminal output, the linux-mcp-server enables the LLM to directly query system information and log entries.  

By enabling an LLM direct access to system information and logs, it is transformed into an active part of the investigation process when troubleshooting an issue.  It empowers an LLM to directly query the system state, allowing it to help identify performance bottlenecks, and identify important log entries that might be missed by a manual review.  

What is the model context protocol (MCP)?

Anthropic introduced MCP in November 2024 as an open standard for LLM tool use. This provides a way for LLMs to interact with outside systems and data sources.  

Prior to MCP,  there wasn’t as strong a standard and ecosystem for LLM systems to call tools. LLMs were thus frequently limited to have only the information contained in their training. They were isolated from the outside world.  For example, if you asked an LLM “what is the weather going to be next week”, the LLM would respond with a message indicating that it doesn’t know what the weather will be, as it doesn’t have access to that information. MCP helps solve this problem by enabling a standardized way for an LLM to access an outside data source, such as the weather forecast.   

At a high level, users can use an AI agent application, such as Goose (open source), or Claude Desktop, and specify which MCP servers they would like to use.  The AI agent application informs the LLM that there are tools available via these MCP servers that can be used to help answer the requests from the user. The LLM model can then decide when to invoke these tools.  

MCP is an open standard. You have the flexibility to use MCP servers, such as linux-mcp-server, with either open source-licensed LLM models, or hosted proprietary LLM models. 

What is the linux-mcp-server?

The linux-mcp-server is a project started by Red Hat’s RHEL Engineering team.  It provides a number of tools that enable an LLM to query information from a Linux system, such as system info, service information and logs, process information, journald and other logs, network information, and storage and disk information.  For a full list of the tools provided, refer to the project’s Github page.  

These tools, provided by linux-mcp-server, are focused on providing the LLM access to read-only information.  In the future, we’ll be exploring expanding past these read-only use cases.  

The linux-mcp-server can be used to interact with the local Fedora Linux system that it is running on. It can also be used to interact with remote Fedora Linux systems over SSH.  For example, if you have SSH key authentication setup with the remote systems, you could make a request to your AI agent application such as “Determine the current memory usage on the fedora1.example.com, fedora2.example.com, and fedora3.example.com servers”.  

Prerequisites

The main components needed are an AI agent application, access to LLM model inference, and the linux-mcp-server. 

There are a number of options for the AI agent application, both open source and proprietary.  An example of an open source AI agent is Goose, which provides an RPM that can be installed on Fedora.

There are several LLM model inference options, ranging from locally hosted open source models, to proprietary hosted LLM models.  If hosting a model locally, you generally need to have GPU/accelerator hardware available.  Open source tools that can be used to locally host LLM models include RamaLama, llama.cpp, and Ollama. There are a number of open source LLM models capable of tool calling. These include models such as gpt-oss-20b and Granite 4 small.

Once you’ve installed your preferred AI agent application, the next step is to install the linux-mcp-server and configure your AI agent application to use it. The linux-mcp-server Github page includes installation instructions, and configuration details for Goose and Claude Desktop.

Use cases for linux-mcp-server

⚠ NOTE

The example scenarios below include LLM generated output. The output is presented here as it was generated by the AI systems cited so you can assess the quality of the output they are capable of, particularly in a non-cloud, self-hosted scenario.

The sample LLM output provided here is not intended to be run by readers without the same level of review we recommend anyone perform on AI generated content prior to use on their systems.

Dear Fedora, why are you so slow today?

Has this happened to you? Time to hop on a call and give a demo. You’re pumped. It’s your go-time aaaaand… your system starts lagging. Folks on the call say your video is choppy or they can’t understand you. OH NO.

You’ve got to assess what’s up, quickly. Run `top`, check `dmesg`, check your network connection (read the man page for `netstat` because you can’t remember the flag you want), check `journalctl`, cross-reference what you’re seeing, then start killing processes, restarting services, reloading kernel modules willy-nilly based on hastily-crafted theories, see if it improves… 

This is a case where you could actually ask the system to tell you why it’s slow and give it the ability to do the analysis via linux-mcp-tools. The LLM you connect with won’t just run the commands through the MCP server; it will understand what the numbers it gets means in context and be able to explain in human terms.

So let’s start working with a relatively new laptop. It’s a Thinkpad T14S with the AMD Ryzen™ AI Pro 7  ( Ryzen™ AI 360 chip.) Recently one of the wifi networks it must connect to regularly was upgraded. It now has  issues with the  network connection stability. So let’s talk to Goose + gpt-oss:20b +  linux-mcp-server about it. Here’s the initial prompt I used:

My Wifi doesn't work very well. It cuts out after a few minutes. Help me fix it. Can you find the error messages in the system logs and diagnose the problem?

It responded with the following:

I'll help you diagnose your WiFi connectivity issues by examining the system logs for error messages related to your network interfaces and wireless connectivity. Let me start by gathering information about your system and checking the relevant logs.

🤖 LLM output 🤖

I’ll help you diagnose your WiFi connectivity issues by examining the system logs for error messages related to your network interfaces and wireless connectivity. Let me start by gathering information about your system and checking the relevant logs.

It then made a series of tool calls, including Get System Information, Get Network Interfaces, Get Journal Logs, Get Hardware Information, Get Service Status service_name:NetworkManager, Get Service Status service_name:wpa_supplicant, Read Log File. The result was this analysis, which is the actual problem I was hoping it could find!


🤖 LLM output 🤖

Problem Summary – AT‑H12K PCI Wi‑Fi Issue
.wp-block-group table, .wp-block-group tr, .wp-block-group td, .wp-block-group pre { max-width: 100% !important;
} .wp-block-group td div.text { max-width: 200px !important;
}

⚡ Problem Summary

Your ATH12K PCI (Qualcomm 802.11ax) wireless card repeatedly reports

 
ath12k_pci 0000:c2:00.0: failed to enqueue rx buf: -28

every few minutes, which triggers a drop of the wireless link. The driver is trying to enqueue an RX buffer for the hardware but fails with errno ‑28.

‑28

-ENOMEM

(out‑of‑memory for the driver buffer); the kernel cannot allocate a DMA‑coherent RX descriptor.

✅ Likely Root Causes

Cause Evidence / Typical Scenario Fix / Work‑around
Driver bug or missing patch The kernel’s ath12k driver has had a long‑running issue with RX ring management in older 5.15/5.4 series. Update the kernel or apply the latest patch from the

linux

tree (5.18+ or the

ath12k

backports).

Out‑of‑memory in the driver The error itself is “‑28” – a memory‑allocation failure inside the driver. Reduce the number of RX descriptors, or enable fast‑RX disabled mode (

modprobe ath12k_pci ath12k_pci_disable_fast_rx=1

).

Firmware mismatch / corruption Old firmware (

ath12k_hwgen

files) don’t match the driver version.

Reinstall firmware from your distro (

sudo apt‑install –reinstall linux‑firmware

) or copy the latest from kernel source.

System memory pressure If many big processes run, DMA‑coherent memory pool can be exhausted. Free RAM, close memory‑heavy apps, or add swap.
ACPI/PCIe power‑management quirk Some laptops throttle the Wi‑Fi device after idle, resetting the buffer queue. Add

pci_bus_reset = off

or set

ath12k_pci_disable_ps=1

in a modprobe conf.

Hardware issue (e.g., faulty PCIe slot or NIC) Persistent failure after multiple driver/kernel upgrades. Test on another machine/PCIe slot or replace the card.

🔎 Diagnostic Checklist

  1. Kernel & Driver Version
     
    uname -r
    modinfo ath12k_pci | grep ^version:
  2. Driver Parameters
     
    cat /sys/module/ath12k_pci/parameters/*

    – See if

    ath12k_pci_disable_fast_rx

    or similar is already set.

  3. Firmware Location
     
    ls /lib/firmware/ath12k/ath12k/ar9009/ | grep wlan0 | head

    – If the files are missing or older than the driver, copy newer ones from

    /lib/firmware

    of a newer kernel.

  4. Kernel Log Around the Error
     
    sudo dmesg --ctime | grep -A3 'ath12k_pci 0000:c2:00.0'

    – Observe if there are any other “-ENOMEM” or “resource exhaustion” messages.

  5. Memory Usage Stats
     
    free -h
    vmstat 1 5
  6. PCIe Latency / Link State
     
    sudo lspci -vvv -s c2:00.0 | grep -iE "link|latency"

🚀 Quick‑Fix Path (Try in this order)

Step Command What it does
1
 
sudo apt update && sudo apt upgrade linux-firmware
Refresh firmware to the latest distro version.
2
 
sudo apt upgrade linux-image-$(uname -r)
Apply latest kernel with patched ath12k driver (or switch to 5.18+ if still on 5.15).
3
 
echo "ath12k_pci ath12k_pci_disable_fast_rx=1" | sudo tee /etc/modprobe.d/ath12k.conf
Force the driver to use a more conservative RX scheme.
4 Reboot and monitor:

dmesg -T | grep ath12k_pci
Verify the error disappears.
5 Optional: test on another machine or use a USB‑WiFi dongle (USB 802.11ax / 802.11ac) as a temporary workaround. Ensure the issue is not hardware‑specific.

**Tip:** After reboot, you can also verify driver parameters:

cat /sys/module/ath12k_pci/parameters/ath12k_pci_disable_fast_rx

📺 Advanced Debugging (if basic fixes don’t help)

  1. Enable debug logs
     
    sudo bash -c 'echo 1 > /sys/module/ath12k_pci/parameters/debug'
    sudo dmesg -T | grep ath12k
  2. Check PCIe device state
     
    sudo lspci -vv -s c2:00.0
  3. Use
    ethtool

    on the Wi‑Fi interface

     
    sudo ethtool -S wlp4s0
  4. Look for firmware logs
     
    grep -i 'ath12k' /var/log/syslog

📌 Bottom Line

The “failed to enqueue rx buf: –28” is an internal driver allocation failure that typically follows one of two paths:

  1. The driver or firmware is out of date → upgrade kernel/firmware.
  2. The driver configuration is too aggressive for your system’s memory budget → tweak module parameters or free RAM.

If you're still stuck after following the quick‑fix path, it's worth capturing more detailed logs with the above diagnostic commands and sharing them. We can then cross‑reference the exact kernel version/driver commit to see if a known patch exists.

Feel free to let me know which step you’ve tried or if you encounter any new log messages, and we’ll dig deeper!


Not too bad an analysis and set of debugging steps! I’ll follow up in the comments and let you know if the solution works.

Where’d my disk space go, Fedora?

Trawling through `du` on the command line, converting the numbers in your head, sorting them – it can be tedious. We even have graphical tools like `baobab`, but it takes time to load in the results and explore the data. And sometimes you might have questions it can’t answer in terms of the risk of deleting a specific directory, or the age of a specific file. It’s easier to be sloppy and just let the disk fill up. But there comes a time where that is no longer an option.

You can ask the system using the linux-mcp-server to analyze your disk usage, give you a hitlist of the top space-eating places on the file system, and give you advice with a risk analysis of how to clean it up.

Here’s my prompt:

I need help analyzing disk usage on my system. Can you: 1. Show me the current disk usage across all filesystems using get_disk_usage
2. Use list_directories_by_size to show me the 10 largest directories (this will help identify where disk space is being consumed)
3. Check if there are any large log files consuming space using get_journal_logs or read_log_file
4. Review running processes with list_processes to see if any are consuming excessive resources or creating temporary files After gathering this information, help me identify potential space-saving opportunities and assess the safety of cleaning up specific directories. Please don't only examine top-level directories. I want you to go deep if needed to find out where the largest files are!

I ran this prompt on my Fedora 42 system using linux-mcp-server with Goose connected to locally-served gpt-oss:20b, and here’s the output I got:


🤖 LLM output 🤖

Disk‑space overview (as of Nov 24 2025 15:21)

Filesystem Size Used Avail Use % Mounted on
/dev/mapper/luks‑61cedb0e… 952.3 GB 548.9 GB 399.6 GB 57.9 % /
/dev/mapper/luks‑61cedb0e… 952.3 GB 548.9 GB 399.6 GB 57.9 % /home
/dev/nvme0n1p2 973.4 MB 462.8 MB 443.4 MB 51.1 % /boot
/dev/nvme0n1p1 598.8 MB 19.3 MB 579.6 MB 3.2 % /boot/efi

Overall usage is comfortably below 60 % of a 952 GB volume, so immediate capacity pressure isn’t a concern. The biggest contributors to disk space today are in the ~/. hierarchy.


1. Biggest directories on the system

Path (relative to the mount point) Size (≈) Notes
~/ – User home (2 mounts: /home + /) 1 TB total 57 % used; the bulk of the space is in ~/

| ~/duffy/.local/share | 238 GB | Containers sub-dir, followed by Trash (7GB) – typical podman/docker container images |
| ~/duffy/.local/share/containers | 238 GB | Container layers, images, root filesystems – the prime candidate for cleanup |
| ~/duffy/.local | 266 GB | share (237 GB) dominates it |
| ~/duffy/.local/share/containers (inside share) | 238 GB | Same as above – just a different view |
| ~/duffy/.local/lib | 13 GB | Likely a virtual‑environment library set |
| ~/duffy/.local/bin | 4 GB | Helper binaries |
| ~/duffy/.local/share/Trash | 7 GB | User‑deleted items still resident on disk |
| ~/duffy/.local/share/containers (nested) | 238 GB | Same as above; redundant listings from recursive depth‑1 scans |
| ~/duffy/.local/share (top‑level) | 238 GB | containers is the absolute largest item |

Take‑away – 75 % of the 238 GB live inside three nested directories:

  • ~/duffy/.local/share/containers (238 GB) → Rooted in Podman/Container‑Store
  • ~/duffy/.local/share (238 GB) → Same data exposed at a higher level
  • ~/duffy/.local/share/Trash (7 GB)

2. Possible space savers

Category Recommendation Rationale
Containers podman system prune -a (or docker system prune -a if Docker is in use) Removes unreferenced images, containers, and caches. This can reclaim 200–250 GB if most containers are outdated or no longer referenced.
Trash gio trash –empty The 7 GB in Trash is still taking physical space; simply emptying it will free that amount.
Large libs/binaries Check ~/duffy/.local/lib – 13 GB, and ~/duffy/.local/bin – 4 GB If these are not actively used by a project, consider uninstalling or moving them to a secondary, less‑frequented store.
Ramalama & UV 9 GB (ramalama), 8 GB (uv) Possibly temporary files or caches from development tools. Inspecting the contents of these directories (du -h) can reveal if they are still needed.
Other caches pnpm store prune, virtualenv or pip cache purge Development tool caches often accumulate; they’re usually safe to delete once you’re done with the current development sessions.
Logs The system journal shows normal activity, and syslog access is blocked by policy. Systemd journal stores are rotated automatically; no urgent action required.
Boot partitions Not relevant – they’re low‑usage (boot/efi only 3 % used). No action needed.

3. Disk‑IO perspective

  • Reads: 111.8 GB; Writes: 85.6 GB since boot (≈ 1.2 TB total).
  • If writes are high relative to free space, consider enabling a tmpfs overlay for temporary files or moving large data to a separate, faster SSD. But in this case, writes are not approaching the 399 GB free.

4. Suggested cleanup workflow

# 1. Empty Trash

gio trash --empty

# 2. Prune unused containers/images

podman system prune -a   # or docker system prune -a

# 3. Remove leftover caches

pnpm store prune         # if pnpm is installed
pip cache purge          # for Python
virtualenv --clean       # optional

# 4. Inspect large “RAM” directories manually if you need deeper cleanup

du -h --max-depth=1 ~/duffy/.local/share/containers

Tip: After each step run df -h /home or du -sh ~/duffy/.local/* to see the impact.


5. Safety checklist

Action Why it’s safe (or risk)
Emptying Trash Deletes only user‑deleted files; confirm you don’t need the content.
podman system prune -a Deletes container images, containers, and volumes that are not referenced by any running or stopped container. Verify with podman ps -a before pruning.
Removing lib/bin from .local Only safe if you’re sure those libraries/bin files aren’t part of a running application.
Caution with tmpfs or moving large directories If you move a directory on‑the‑fly, ensure no running application depends on that path.

Bottom line

  • Current free space: ≈ 400 GB on both / and /home.
  • Largest consumptions: User‑space under ~/duffy/.local/share/containers (≈ 238 GB).
  • Actionable clean‑ups: Empty Trash, prune unused container images, and review large libraries/binaries. This should reclaim over 200 GB and bring the usage from 57.9 % down to roughly 40‑45 % – plenty of headroom for the future.

Feel free to ask what next steps you’d like to dig into (e.g., detailed contents of the containers dir, specific application logs, or targeted pruning commands).


Upgrade planning

So you may have noticed a little detail above – the system is a Fedora 42 system… and Fedora 43’s been out a month now! 😅 So, time to upgrade.

This example shows where we have some tools missing from the set provided in the linux-mcp-server. We’re including it for two reasons:

  • So you can see how this works manually
    You can see that even when specific tools you might not need are available in the MCP server, you can have the response give you instructions on commands to run on your own, and copy/paste the command output back into your chat to get analysis alongside the data the system is able to pull via the MCP tool calls;
  • To encourage you to submit additional tools to our project!
    We would love your additions to the project! Here’s where to get started: https://github.com/rhel-lightspeed/linux-mcp-server/blob/main/docs/CONTRIBUTING.md

Here’s the prompt I started with, with the same Goose + gpt-oss:20b + linux-mcp-server combination:

You are a Linux system administrator assistant analyzing a Fedora system for upgrade readiness. TASK: Examine this Fedora 42 system and provide a comprehensive upgrade readiness report for Fedora 43. ANALYSIS CHECKLIST:
1. Check current Fedora version: cat /etc/fedora-release
2. Review system updates status: dnf check-update
3. Identify third-party repositories: dnf repolist
4. List installed packages from non-Fedora repos: dnf list installed | grep -v @fedora
5. Check for broken dependencies: dnf check
6. Review disk space on root partition: df -h /
7. Check for unsupported or deprecated packages
8. Identify custom kernel modules: lsmod | grep -v "^Module"
9. Review SELinux status: sestatus
10. Check for pending system updates: dnf upgrade --refresh --assumeno REPORT FORMAT: # Fedora 43 Upgrade Readiness Report ## Current System Status
- Fedora version: [version]
- Kernel: [kernel version]
- Updates status: [current/outdated] ## Potential Issues
[List blocking issues with HIGH/MEDIUM/LOW severity] ## Third-Party Software
[List non-Fedora packages that may need attention] ## Recommendations
[Specific pre-upgrade steps needed] ## Overall Readiness: [READY/NEEDS ATTENTION/NOT READY]
Run the necessary commands and provide this analysis. Be specific about any issues found and give actionable recommendations.

Now, right away the model came back to me to complain it doesn’t have access to `dnf`, `cat`, etc. And that’s expected here. What it did was give me a list of homework to run for it to complete the analysis… for example, `dnf check-update` and `cat /etc/fedora-release`. I had a little back and forth in Goose with the model where it would ask me to run a command and I’d copy the output into the context. This resulted, finally, in the following report:


🤖 LLM output 🤖

Fedora 43 Upgrade Readiness Report

Analyzed System – Fedora 42 (Kernel 6.17.7‑200.fc42.x86_64)
Date – 2025‑11‑24


1. Current System Status

Item Value
Fedora release 42 (Adams)
Kernel 6.17.7‑200.fc42.x86_64
Root filesystem 953 GB LUKS, 58 % used (411 GB free) – > 15 % free
/var /usr Same as root partition (mounted the same LUKS device)
SELinux enabled (policy targeted), currently permissive
System‑wide packages No held packages (dnf versionlock list empty)
System modules No modules held.

TL;DR – The base system is clean; the kernel is up‑to‑date for 42, there is ample disk space, and there are no version‑locked packages.


2. Third‑Party Repos & Packages

Repository Description Current dnf repolist status
rpm-fusion-free, rpm-fusion-nonfree, rpm-fusion-updates Widely used RPM‑Fusion components Enabled
google-cloud-cli Google Cloud SDK (RPM built for EL 10) Enabled
visual-studio-code Microsoft VS Code RPMs Enabled
command‑line‑assistant, google‑chrome, PyCharm, unsupported‑fedora‑packages, goose, leaktk Various Copr builds (mostly Fedora‑42 based) Enabled

What we need to verify

  1. Is a Fedora 43 build available for each of the non‑Fedora repos above?
  2. Does google-cloud-cli have a Fedora 43‑compatible package? (EL 10 build may not be usable).
  3. Are there any el10‑specific dependencies that could surface during the upgrade?
  4. Any custom kernel modules that will require re‑compilation against the 43 kernel.

3. Potential Issues & Severity

Issue Severity Why it matters Immediate Remedy
Non‑Fedora packages (e.g., google‑cloud‑cli) MEDIUM May contain packages built for EL 10; could conflict with Fedora 43 libs. Verify if a Fedora 43 build exists or plan to remove/re‑build it.
Third‑party repos without 43 builds MEDIUM dnf system-upgrade pulls all enabled repos; lacking 43 packages causes transaction failure. Disable such repos temporarily (dnf config-manager –set-disabled <repo>) or enable the 43 stream when available.
Custom kernel modules LOW Modules compiled against 42 kernel won’t load on 43; services may drop. Re‑compile or patch modules after upgrade.
Broken dependencies reported by dnf check HIGH Would block the upgrade transaction. Run sudo dnf check now; fix any reported issues.
Insufficient disk space HIGH Upgrade scripts need > 15 % free. Not an issue (58 % free).

Current High‑Risk Items – None detected yet.
Next Action – Confirm each third‑party repo has 43‑compatible packages and set SELinux to enforcing.


4. Recommendations (Pre‑Upgrade Checklist)

Step Command Purpose
Confirm 43‑stream packages `dnf list –available * grep <repo-id>`
Verify SELinux enforcement sestatus Should show enforcing.
Check for broken dependencies sudo dnf check No errors should appear.
Refresh all repos sudo dnf upgrade –refresh Pull latest metadata.
Dry‑run upgrade sudo dnf system-upgrade download –releasever=43 –allowerasing Detect any missing packages or conflicts.
Optional: Disable problematic repos sudo dnf config-manager –set-disabled <repo> Prevent upgrade crash if a repo has no 43 build.
Persist SELinux config sudo sed -i ‘s/SELINUX=permissive/SELINUX=enforcing/’ /etc/selinux/config Make enforcement permanent.

5. Post‑Upgrade Actions

  1. Reboot into the new kernel (dnf system-upgrade reboot).
  2. Re‑compile any custom kernel modules against the new kernel (yum install kernel-devel-$(uname -r) then rebuild modules).
  3. Re‑enable any disabled repos once the upgrade completes.
  4. Verify critical services (systemctl status <service>) and check logs.
  5. Run sudo dnf distro-sync to ensure all packages are the latest from Fedora 43.

6. Overall Readiness

Criteria Status Comment
Disk space Ready 58 % free
Package health Ready No held or broken packages
Third‑party repos Conditional Verify 43‑compatibility
Custom modules Pending Need to identify modules and re‑compile
Final verdict READY (after addressing above points)

Next step – Run the three verification commands below and share the output with me:

sudo dnf check
sudo dnf repolist
dnf list installed | grep -v @fedora

With those outputs I can pinpoint any remaining blockers and give you a final, ready‑to‑proceed plan.

Happy upgrading!


Give it a try, let us know what you think!

You can see from these few examples that tool calling with LLMs is a valuable tool for troubleshooting Linux systems. We could use your help building this and making it awesome! How can you help?

  • Give it a try, let us know what you think, file any bugs you find, and let us know what tools are missing that you could use! You can respond in the comments here, file a bug, or chat with us on Fedora matrix.
  • We’re primarily working with Goose as our client, but if you have another preferred client and want to help us support it better, we’d love to work with you!
  • Get involved in the linux-mcp-project generally, we’d love to see your PRs!
  • Let us know what you’d like to see in the future. What workflows would you like to see supported? How do you see this making your Fedora or overall Linux experience better? What larger workflows do you see this plugging into?

Join us upstream at https://github.com/rhel-lightspeed/linux-mcp-server! And come chat with us in the Fedora AI/ML SIG chat room on Matrix!

Posted on Leave a comment

Bedrock: 1.21.130

New Features

Mount improvements

  • Horses, Zombie Horses, Donkeys, Mules, and Camels no longer sink when ridden by players while swimming
  • Added Netherite Horse Armor
    • Can be crafted at a Smithing Table using a Diamond Horse Armor, a Netherite Ingot, and a Netherite Upgrade
    • Provides 19 armor points

Nautilus

  • New neutral aquatic mob
  • Attacks using a Dash attack if provoked
  • Spawns in all ocean biomes
  • Tamed using Pufferfish or a Bucket of Pufferfish
  • Tamed Nautilus can be mounted using a Saddle
  • Has a Dash skill similar to Camels, used by pressing Jump button
  • Occasionally attacks Pufferfish within range using Dash attack
  • Adds “Breath of the Nautilus” effect to mounted player
  • Tamed Nautilus without Saddle has a roaming restriction of 32 blocks
  • Tamed Nautilus with Saddle has a roaming restriction of 16 blocks
  • Nautilus has a charge attack cooldown of 4 seconds
  • Takes suffocation damage on land
  • A Nautilus can spawn between Y-Level 38 and 58

Nautilus Armor

  • Equipable on Nautilus and Zombie Nautilus
  • Comes in Copper, Golden, Iron, Diamond, and Netherite versions
  • Using Shears on a Nautilus will first remove its armor, and then its Saddle

Breath of the Nautilus

  • Effect that affects mounted player
  • Pauses player oxygen consumption (but does not replenish oxygen)

Zombie Nautilus

  • New neutral underwater mob
  • Attacks using a Dash attack
  • Spawns with a Drowned rider wielding a Trident
  • Is hostile if the rider is a hostile mob
  • Neutral without a rider
  • Tamed using Pufferfish or a Bucket of Pufferfish
  • Tamed Zombie Nautilus can be mounted using a Saddle
  • Has a Dash skill similar to Camels, used by pressing Jump button
  • Occasionally attacks Pufferfish within range using Dash attack
  • Adds “Breath of the Nautilus” effect to mounted player
  • Cannot be bred
  • Tamed Zombie Nautilus without Saddle has a roaming restriction of 32 blocks
  • Tamed Zombie Nautilus with Saddle has a roaming restriction of 16 blocks
  • Takes suffocation damage on land

Coral Zombie Nautilus

  • New Zombie Nautilus variant
  • Spawns in Warm Oceans, replacing the normal Zombie Nautilus
  • Visual variant, functions identically to the normal Zombie Nautilus

Spear

  • New weapon that can be crafted in Wood, Stone, Copper, Iron, Gold, Diamond, and Netherite versions
  • Each material has different stats for timing, influencing how fast they are to use
  • Has a minimum reach for damage, being too close to a target will yield no damage
  • Has extended maximum reach compared to other tools and weapons
  • Zombies and Piglins can spawn with the Spear
  • Has two attacks: Jab and Charge
  • Animals defeated in one hit by the charge attack of a Spear with the Fire Aspect enchantment will drop cooked food

Charge Attack

  • Press and hold secondary action button to use
  • Damage based on Spear material, the player’s view angle and velocity of both player and target
  • While holding down button the attack goes through three stages before returning to idle:
    • Engaged: Spear can deal damage, knockback, and dismount mounted enemies if speed is above the required thresholds
    • Tired: Indicated by Spear rotating to a vertical position and shaking Spear can deal damage and knockback (but not dismount) if the speed is above the required thresholds
    • Disengaged: Indicated by Spear being lowered, pointing downwards Spear gives damage but not knockback or dismount if the speed is above the required threshold

Jab Attack

  • Quick press primary action button to use
  • Low damage attack with knockback
  • Cooldown between attacks
  • Wood spears have the fastest cooldown; Netherite the slowest
  • Can hit multiple enemies
  • Does not destroy blocks

Lunge Enchantment

  • Spear exclusive enchantment
  • Only works with the Jab attack
  • When doing a Jab attack with Lunge it propels the player horizontally in the view direction
  • View angle needs to be perfectly leveled horizontally to achieve maximum lunge distance
  • Using the Lunge attack consumes hunger
    • Level 1 Lunge consumes 1 hunger point, level 2 consumes 2 points, and level 3 consumes 3 points
  • Cost of 1 Durability point for using Lunge for all Enchantment levels

Zombie Horse

  • Spawns naturally at night in Plains and Savanna biomes
  • Spawns with a Zombie rider wielding a Spear
  • Is hostile if the rider is a hostile mob
  • Neutral without a rider
  • Tamed like normal Horses
  • Favorite food is Red Mushroom
  • Tamed Zombie Horse can be mounted using a Saddle
  • Cannot be bred
  • Zombie Horses avoid areas with sunlight
  • Zombie Horses can be leashed when they are untamed, but not when mounted by a Zombie

Parched

  • New Skeleton variant
  • Spawns at 0 light level in Deserts, replacing some of the regular Skeletons
  • Does not burn in sunlight
  • Shoots Arrows of Weakness
  • Has a slower rate of fire compared to normal Skeletons, similar to Bogged
  • Does not spawn in caves, following the Husk’s spawning rules
  • Parched have a chance of spawning riding Spiders and Cave Spiders in Deserts, instead of regular Skeletons

Camel Husk

  • New undead Camel variant
  • Spawns at 0 light level in Deserts
  • Does not burn in sunlight
  • Spawns with two riders: A Husk wielding a Spear and a Parched
  • Does not spawn in caves, following the Husk’s spawning rules
  • Is hostile if the rider is a hostile mob
  • Passive without a rider
  • Despawns like other hostile mobs, but becomes persistent when ridden by a player
  • Favorite food is Rabbit Foot
  • Cannot be bred
  • As a mount, they work similar to normal Camels
  • Zombie Husks that spawn riding a Camel Husk have a 50% chance of dropping a Rabbit Foot
  • The Camel Husk can not be leashed while being ridden by a hostile mob

Features and Bug Fixes

Audio

  • The swimming sound no longer plays when flying underwater
  • The critical hit sound now correctly plays when a player lands a critical hit

Blocks

  • Hanging Roots can now be waterlogged (MCPE-128957)
  • Crimson Roots and Crimson Fungus now generate in the Warped Forest biome (MCPE-83616)

Character Creator

  • Players are no longer prevented from loading into a world due to an Invalid Platform Skin error
  • Fixed an issue where remote player skins would sometimes change to a default skin when they moved in and out of render range (MCPE-222444)

Gameplay

  • Hoppers now have a short cooldown after being moved by a Piston that prevents interaction. This fixes a bug with Bundle duplication
  • Fixed a bug preventing players from growing Pink Petals, Wildflowers, or Leaf Litter by targeting the side of a block (MCPE-190684)
  • Added the Damage Tilt slider to Video settings, controlling how much the screen tilts when the player takes damage, in parity with Java
  • Hoppers can no longer stack multiple Bottles in one slot inside a Brewing Stand (MCPE-228374)

General

  • Fixed a bug where pressing ALT + F4 in-game opened the pause menu instead of closing the game (MCPE-228098)
  • Resolved an issue on Windows where shared worlds (those available to all players) did not load resource or behavior packs (MCPE-228607)
  • Reenabled missing music for several biomes
  • Fixed an issue where signing in at the exact wrong time would make many online features unable to load for 5 minutes
  • Added splash text “One does not simply walk to the Far Lands”

    Developer’s Note: This statement was proven false on October 4, 2025.

Graphical

  • The first critical hit particle for Arrows is now slightly delayed
  • The nose of the Copper Golem is now rotated correctly while the Golem is sitting down (MCPE-228256)
  • Fixed large flipbook textures corrupting other textures
  • Fixed a bug where the fade command would fade to black instead of the specified color when Vibrant Visuals is enabled. Also fixed certain effects such as fire and the Spyglass overlay rendering in front of the fade effect (MCPE-223049)
  • Fixed snowflakes flickering during player movement
  • The partial transparency applied to mobs when close to the camera now also applies to players. (MCPE-227786)
  • Fixed Mooshroom’s mushrooms and armor on mobs not being affected by “Enable Dithering” setting (MCPE-228281) (MCPE-228296)
  • Fixed a regression where Torches and Lanterns weren’t emitting point lights in raytracing-enabled worlds

Input

  • Automatically selects the Chat screen text field on opening for Windows when using Keyboard and Mouse, enabling text input as soon as screen opens (MCPE-229046)
  • Fixed a bug on Windows where disabling the system setting “Scroll inactive windows when hovering over them” had no effect (MCPE-229088)
  • On-Screen Keyboard will no longer appear over the chat box when docked; Input screens, such as signs, will no longer close when switching between different input modes (MCPE-228584)
  • Fixed a bug on Windows where the game widgets would interact with the cursor when another window was focused (MCPE-229548)
  • Fixed an issue where Xbox controllers connected to ROG Xbox Ally did not work while built-in controller was active (MCPE-184251) (MCPE-180470)
  • Fixed a bug on Windows where the mouse cursor moved in the background during gameplay (MCPE-230832)

Items

  • Gold Horse Armor has been renamed to Golden Horse Armor (MCPE-101388)

Mobs

  • Fixed bug where Camels could not dash when standing in water
  • Pufferfish can now spawn in the Lukewarm Ocean and Deep Lukewarm Ocean biomes
  • Pufferfish and Tropical Fish can now be caught when fishing in Jungle biomes
  • Drowned attack now knockbacks attacked mob into air when mob is not in water (MCPE-133343)
  • Added chance for Zombie Horse Riders to spawn in Savannas and Plains
  • Camels now take fall damage starting 4 blocks higher when walking or dashing (MCPE-171996)
  • Phantoms can no longer drown (MCPE-101541)
  • Wolf shadow and model are now centered (MCPE-176018)
  • Fixed some Goat sounds not being controlled by the Friendly Mobs slider (MCPE-178232)
  • Piglins will no longer scream with enthusiasm while admiring gold MCPE-229509
    • They will instead do a courteous grunt of acknowledgement
    • Very polite, just like on Java
  • Only Baby Zombie jockeys and Baby Husk jockeys can ride the following mobs:
    • Adult Chickens
    • Untamed Ocelots
    • Untamed Cats
    • Untamed Wolves
    • Adult Zombies
    • Adult Husks
    • Adult Zombified Villagers
    • Adult Zombified Piglins
    • Cows
    • Adult unsaddled Pigs
    • Sheep
    • Adult untamed Horses
    • Adult untamed Donkeys
    • Adult untamed Mules
    • Adult Skeleton Horses
    • Adult Zombie Horses
    • Mooshrooms
    • Spiders that were not spawned as jockey mounts
    • Cave Spiders that were not spawned as jockey mounts
  • Zombies and Husks that have been spawned as their rider configuration can only ride Zombie Horses and Camel Husks, respectively
  • Dolphins no longer spawn in the Cold Ocean or Deep Cold Ocean biomes
  • It is no longer possible for two mobs to mount each other simultaneously

Profile

  • Removed unexpected Sign Out button on user profile on Windows. Players should sign out via the Xbox app (MCPE-228176)

Realms

  • Fixed Realm server selection behaving unpredictably
  • Fixed controller focus being cut off for the top of the Realms Timeline Opted-Out members list
  • Realms Manage Feed is now located within Realms Stories instead of Realms Settings
  • Fixed an issue where players could get temporarily stuck when adding members to a newly purchased Realm
  • Navigate players back to either the start screen or the settings screen when they confirm the message about not being able to connect to a network
  • Present players with the option to play using mobile data or to change their game settings if mobile data is disabled when attempting to join a newly purchased Realm
  • Introducing Realms Saves, a new and improved version of our previous backup system. Keep your Realms worlds safe with a new bank of cloud storage included with your Realms subscription. Realms saves come in two flavors:
    • Automatic saves are functionally the same as our previous “backups” system:
      • They are on by default – no need to enable anything to keep your Realm world safe with automatic saves.
      • They are taken at the end of every Realms play session when the server shuts down, or every 30 minutes during a play session.
      • They are only retained for a limited time, according to our retention policy (which has not changed with this update): How Mojang Saves Backups for Your Minecraft Realm | Minecraft Help
      • They do not count towards your bank of cloud storage.
      • All previous Realms backups will be converted to automatic saves.
    • Manual saves are created by the Realm owner and count towards a bank of storage that comes with your Realms subscription.
      • Manual saves are retained as long as your Realm is. They are not automatically deleted by our retention policy*, but Realm owners can delete manual saves if they want to free up storage space.
      • Realms Plus subscriptions come with 10GB of manual save storage and Realms core subscriptions come with 5GB.
      • Automatic saves can be turned into manual saves by the Realm owner.
    • Realms saves can be found in the Realms settings menu accessed via the “Edit Realm” button rather than the Realms world settings menu that backups used to show up in. While playing on the Realm, saves can also be found in the in-game settings menu for the Realm owner.
    • Realms saves will also now list the world name and the packs that were applied at the time of the save.

Settings

Storage

  • Display “Unlisted Worlds” that cannot be loaded so they can be deleted (MCPE-223708)

Stability and Performance

  • If syncing world from cloud fails on Xbox, automatically attempt to join the local copy
  • Improved loading times when exiting worlds
  • Improved loading times when using the /reload all command
  • Fixed a crash from using a Data Driven Renderer
  • Improved loading times when re-entering similar worlds
  • Improved loading times when transferring between servers

User Interface

  • Touch Controls: The camera Y-sensitivity for D-Pad controls has been decreased, matching the sensitivity for Joystick controls
  • Hotbar hotkeys now also work when hovering over output slots of Grindstone and Anvil (MCPE-228276)
  • Touch Controls: There is now an option to increase the size of the top row of buttons in the HUD
  • New achievements page: Fixed a bug where some achievements could not be manually removed from the In Progress list
  • Touch Controls: Customizable controls are now always on
  • Updated the Add-Ons navigation button to have proper spacing between the icon and the text
  • Fix issue with rendering custom blocks as “flying items” and with quick move animation (MCPE-180489)
  • Text input in certain inputs such as Book and Quill, will now prevent new lines if it will push text out of the input window
  • Fix suggested commands in chat misplaced when resizing window (MCPE-147816)
  • Fixed the social drawer lacking a border when opened in-game (MCPE-227007)
  • Fixed a bug where the text to speech settings incorrectly auto enabled when starting a world
  • Fixed the Social drawer lacking a border when opened within a world (MCPE-227007)
  • Added a new joystick for touch controls when using the control schemes ‘player_relative_strafe’ or ‘camera_relative_strafe’
    • The new joystick is only available with “Joystick & tap to interact” and “Joystick & aim crosshair”
    • Players who are using “D-Pad & tap to interact” when entering into one of the two control schemes will be put into “Joystick & tap to interact” and then returned to “D-Pad & tap to interact” after they stop using one of the two control schemes
  • Added missing options to the new Accessibility settings page (MCPE-228101)
  • Accessibility option “Enable Open Chat Message” has been renamed to “Chat Instructions on Join”
  • Implemented the same HUD icon for ambient mob effects as Java (like the ones applied by Beacons, Conduits, or Breath of the Nautilus)
  • Fixed ambient mob effects constantly flashing like they are timing out
  • All items now show the Hit attack prompt when aiming at a Mob
  • Items with dedicated interaction prompts now show when aiming at a Mob if there is no other special Mob interaction prompt
  • Fixed a bug where holding up on the D-Pad would not continuously scroll in menus (MCPE-226509)
  • Fixed an issue where the paste button on some screens would paste text twice (MCPE-228233)
  • Title bar of game on PC will now respect Windows dark mode (MCPE-227846)
  • Fixed issue where game icon doesn’t show on taskbar and title bar on Windows (MCPE-227849)
  • The mob’s inventory panel is now hidden for all unchested mobs in the default UI
  • Open windows such as inventory, trading, or chat, will now close when you are hurt by a mob
    • Windows will not close repeatedly if you are attacked multiple times in quick succession

Items

  • Spawn Eggs are now sorted thematically in the Creative Inventory, according to the following categories:
    • Overworld
      • Farm Animals
      • Mounts
      • Pets
      • Wild Animals
      • Aquatic
      • Miscellaneous
      • Golems
      • Villagers
      • Undead
      • Spiders
      • Monsters
      • Illagers
    • Nether
    • The End
  • Tools and weapons now lose durability when used to attack Armor Stands, just like they do when damaging other entities such as Minecarts, Paintings, Boats, or Leash Knots

Technical Updates

AI Goals

  • Made schemas for goals minecraft:behavior.explore_outskirts and minecraft:behavior.investigate_suspicious_location stricter when parsing and will fail to load an entity json that has invalid data in versions 1.21.130 and newer
  • Added the “minecraft:behavior.use_kinetic_weapon” AI goal
    • Description:
      • Allows a mob to make use of items with a “minecraft:kinetic_weapon” item component
      • The mob will approach the target before using the weapon and charging with it
      • If the target gets too close, the mob will retreat and reposition before charging again
      • Once all “max_duration”s in the item’s “minecraft:kinetic_weapon” component have elapsed, the mob goes on cooldown and retreats before approaching again
    • Fields:
      • “approach_distance”: The distance to the target within which the mob begins using its kinetic weapon
      • “reposition_distance”: The distance the mob retreats to once the target is closer than the midpoint of the item’s “minecraft:kinetic_weapon” component’s minimum and maximum “reach”
      • “reposition_speed_multiplier”: Multiplier applied to the mob’s movement speed while repositioning
      • “cooldown_distance”: The distance the mob retreats to after all of the item’s “minecraft:kinetic_weapon” component’s “max_duration” values have elapsed
      • “cooldown_speed_multiplier”: Multiplier applied to the mob’s movement speed while on cooldown
      • “weapon_reach_multiplier”: Multiplier applied to the item’s “minecraft:kinetic_weapon” component’s “reach”
      • “weapon_min_speed_multiplier”: Multiplier applied to each “min_speed” and “min_relative_speed” condition in the item’s “minecraft:kinetic_weapon” component
      • “min_path_time”: Minimum base time, in seconds, before recalculating a new attack path to the target (before increases are applied)
      • “max_path_time”: Maximum base time, in seconds, before recalculating a new attack path to the target (before increases are applied)
      • “path_fail_time_increase”: Time, in seconds, added to the attack path recalculation interval when the mob cannot move along the current path
      • “inner_boundary_time_increase”: Time, in seconds, added to the attack path recalculation interval when the target is beyond “path_inner_boundary”
      • “outer_boundary_time_increase”: Time, in seconds, added to the attack path recalculation interval when the target is beyond “path_outer_boundary”
      • “path_inner_boundary”: Distance at which to increase attack path recalculation by “inner_boundary_time_increase”
      • “path_outer_boundary”: Distance at which to increase attack path recalculation by “outer_boundary_time_increase”
      • “speed_multiplier”: Multiplier applied to the mob’s movement speed when moving toward its target
      • “require_complete_path”: Specifies whether a full navigation path from the mob to the target is required
      • “track_target”: Allows the mob to track its target even if it lacks a hard-coded sensing component
      • “cooldown_time”: Cooldown time, in seconds, between consecutive attacks
      • “melee_fov”: Field of view, in degrees, used by the hard-coded sensing component to detect a valid attack target
      • “x_max_rotation”: Maximum rotation, in degrees, on the X-axis while the mob is trying to look at its target
      • “y_max_head_rotation”: Maximum rotation, in degrees, on the Y-axis while the mob is trying to look at its target
      • “random_stop_interval”: Defines a 1-in-N chance for the mob to stop its current attack, where N equals “random_stop_interval”
      • “attack_once”: Allows the mob to perform this melee attack behavior only once during its lifetime
    • Requirements:
      • The mob must have an item with the “minecraft:kinetic_weapon” item component
      • Must otherwise fulfill the same conditions as other melee attack goals
  • “minecraft:behavior.melee_box_attack”, “minecraft:behavior.delayed_attack”, “minecraft:behavior.melee_attack”, and “minecraft:behavior.stomp_attack” now correctly apply their “path_inner_boundary” field
  • Added two new fields to behavior.float to enable more control of floating and how long the vehicle can be underwater before dismounting its passengers
    • chance_per_tick_to_float: The chance per tick to cause an upward impulse
    • time_under_water_to_dismount_passengers: Time in seconds that a floating vehicles head can be underwater before it causes its passengers to dismount
  • Added a new field to behavior.nearest_attackable_target to enable a probability of target being chosen by behavior.nearest_attackable_target goal
    • target_acquisition_probability: Probability (0.0 to 1.0) that a entity will accept a found target
    • The default value unless specified is 1.0
  • Modified behavior.nearest_attackable_target’s attack_interval field to support a range of value instead
    • range_min: Minimum time in seconds before the entity searches for a attack target, can now be set to other values than just 0
    • range_max: Maximum time in seconds before the entity searches for a attack target
  • Added the “hijack_mount_navigation” field to the “minecraft:behavior.use_kinetic_weapon” AI goal
    • Allows a mob to override its mount’s navigation behavior with the one defined by this goal
    • Requires the mount to be running the “minecraft:behavior.mount_pathing” goal, whose default behavior will be ignored

API

  • Fixed an issue where Dimension.getEntitiesFromRay and Entity.getEntitiesFromViewDirection stopped working for some entities such as minecraft:xp_orb, ground items, minecraft:arrow, minecraft:snowball and minecraft:thrown_trident
  • Released AABB from beta to v2.4.0
  • Released Entity.getAABB from beta to v2.4.0
  • Released ControlScheme from beta to v2.4.0
  • Released Player.setControlScheme from beta to v2.4.0
  • Released Player.getControlScheme from beta to v2.4.0
  • Released GetBlocksStandingOnOptions from beta to v2.4.0
  • Released Entity.getBlockStandingOn from beta to v2.4.0
  • Released Entity.getAllBlocksStandingOn from beta to v2.4.0
  • Added new module @minecraft/server-graphics to change graphics and rendering settings. The current set of APIs are associated with Atmospheric Scattering parameters in Vibrant Visuals
  • The /clone command now fires onBreak beta API event for custom blocks overridden at source destination
  • Moved Loot Table Discovery APIs from beta into 2.4.0
  • Released class BlockRedstoneProducerComponent from beta to v2.4.0
  • Released class InvalidBlockComponentError from beta to v2.4.0
  • Released LiquidSettings from beta to v2.4.0
  • JigsawPlaceOptions
    • Moved liquidSettings?: LiquidSettings from beta to v2.4.0
  • JigsawStructurePlaceOptions
    • Moved liquidSettings?: LiquidSettings from beta to v2.4.0
  • Fixing an issue in new worlds where calling world.getDimension, before a player has spawned, could result in a different spawn location than intended (MCPE-228041)
  • Released BlockComponentBlockBreakEvent from beta to v2.4.0
  • /structure and /place commands and StructureManager API Place function now trigger onBreak beta API event for custom blocks when overridden
  • Moved class Potions from beta to V2.4.0
  • Moved component ItemPotionComponent from beta to V2.4.0
  • Moved class PotionDeliveryType from beta to V2.4.0
  • Moved class PotionEffectType from beta to V2.4.0
  • Moved error InvalidPotionDeliveryTypeError from beta to V2.4.0
  • Moved error InvalidPotionEffectTypeError from beta to V2.4.0
  • Player method clearPropertyOverridesForEntity can now take an Entity or Entity ID as valid arguments in v1.19.0

Biomes

  • Fixed an issue where replacement biomes were not read for client-side chunk generation
  • The client side Molang queries query.entity_biome_has_all_tags, query.entity_biome_has_any_tags, and query.entity_biome_has_any_identifier no longer need the Upcoming Creator Features toggle to be used
  • Fixed biome replacement component (MCPE-229476)

Blocks

  • The “fit_to_frame” option in geometry files can no longer be disabled to render block-items larger than its frame from “format_version” 1.21.130 onward
  • Fixed minecraft:redstone_producer component not properly updating redstone signal for custom blocks on block state change (MCPE-229570)
  • Custom blocks will no longer be overly bright when flying between two inventory slots
  • Moved the Block Precipitations Interactions component from experimental to stable
  • Fixed “ambient_occlusion” field in “minecraft:material_instances” block component
  • “minecraft:collision_box” height is extended to 24 when using a format version of 1.21.130 or higher and the Upcoming Creator Features toggle is enabled
  • “minecraft:collision_box” now supports arrays of boxes when using a format version of 1.21.130 or higher and the Upcoming Creator Features toggle is enabled

Block Rendering

  • Fixed custom blocks rendered in Structure Block GUI

Commands

  • The clone command will no longer clone extra blocks sharing a position with a filtered out block (MCPE-179847)

Components

  • Added is_controlling_passenger_family entity filter to check if the passenger controlling a mount is of the specified family
  • Added has_item_with_component entity filter to check if the entity has equipped an item with the designated component name
  • Updates to minecraft:dash_action
    • Added new field “can_dash_underwater” that allows entities with this component to dash underwater
    • Disabled by default

Gameplay

  • Legacy tree features now respect biome borders (MCPE-168996)

General

  • Fixed disabling of building and mining abilities for players with operator permissions while in Creative mode

Editor

  • Added IListPanePropertyItem to pane API to create lists with text, button, checkbox, and image components
  • Added cubemap controls to the Vibrant Visuals Settings Pane
  • Updated Line Tool’s middle selector to now change to Hermite curve automatically when moving the gizmo
  • Updated Jigsaw Tool to automatically import template pools from loaded behavior packs
  • Fixed a bug that caused Editor scaling to be broken
  • Fixed a bug that prevented Summon tool from spawning custom entities
  • Updated Settings data to be saved across sessions, users need to manually save the Settings
  • Fixed a bug which caused detached gizmo to appear during ruler drag while axis locked
  • Fixed a bug that updated the rotation range to (-360~360) for Summon tool and Brush tool
  • Updated the settings for UI Settings, Tutorial, Keyboard and Graphics mode, users need to manually save these settings
  • Added new IModalDialog API to create scripted dialog windows. They can be registered from IModalDialogManager, and then activated like core dialogs
  • Added new selection tool utility “Quick Move” mode that allows you to easily move the contents of a selection in any one direction. Can also specify a specific destination
  • Added cursor setting to Farm Generator tool; player can place the farm at a position with the target mode
  • Adds a new EditorTagContainer UI component with accompanying modal for adding tags. Swapped theme color mapping for SecondaryActive and SecondaryDefault
  • Added support for Jigsaw blocks to Block Inspector tool
  • Editor will attempt to load jigsaw files from Behavior Packs if they do not conflict with an existing Jigsaw collection name
  • Fixed a bug that the previews position of repeater tool were displaced from the intended position
  • Fixed a bug that prevented the action bar selection menu from closing when pressing the Escape key
  • Moved the brush shapes rotation settings into Rotation sub pane
  • Added Tag management section in the Structure details panel, where tags can be added and removed
  • Fixed a bug that caused the default deleted hotbar to be re-added after re-entering a session
  • Fixed a bug that caused some cursor and brush tooltips to show incorrect key bindings
  • Fixed a bug that auto-save the keyboard binding after reset and reset all to the default
  • Fixed a bug that caused mob effects shortcut to not work in crosshair mode
  • Fixed a bug that caused tutorial message window and dimmer overlay to be misaligned
  • Added shrinkToIcon API property for IButtonPropertyItem creation options
  • Added maxVisibleEntries API property for IDropdownPropertyItem to modify menu size
  • Added enabled API property for IToggleGroupPropertyItemEntry
  • Changed ButtonPropertyItemVariant API enum to ButtonVariant
  • Added Generate Manifest button to Selection Tool
    • Added Deselect and Replace operations to Selection Tool block manifest – allows removing or replacing specific block types from the selection
  • Added “Paint” key bind for pencil in keyboard settings
  • Added filtering options in the Structure panel. Filtering can be by structure display name or Structure tags
  • Added Jigsaw block editing to the block inspector
  • Added bypass validation warning screen to generate jigsaw workflow
  • Added localized message and sub message support for logging APIs
  • Added new Raise and Lower Elevation modes for Terrain Tool
    • Ability to adjust brush falloff
    • Ability to specify how many terrain layers to clone or preserve when raising/lowering
    • Ability to adjust the brush radius
    • Added ability to hold the SHIFT key to lock the brush XZ coordinates in place while painting
  • Added Layout Instance baking (bake individual instances and added to export world and playtest) so that layouts are converted from holograms to actual blocks (Only works for Overworld at the moment)
    • Added Mirror/Rotation to layout templates
    • Added Mirror/Rotation to layout instances
    • Added Mirror and Rotation properties to instance Editor
    • Note: Only Overworld is supported for layout baking at the moment. The Nether and End will be supported in a future update
  • Updated the selection limit for Selection, Paste Preview, Line, Pencil, Brush, Smartfill, Terrain, Workbench, Ruler, Block inspector, Scale, Farm generator tools to match the video render distance setting
  • Updated UI and added multiplayer behaviors in Navigation Pane
    • Stored Locations are shared across all creators in the project and synced for new joiners
    • Implemented edit functionality for name, coordinates, and color of Stored Locations
    • Added select/deselect-all and delete option with confirmation modal; deletion affects all users
    • Introduced a new panel listing all creators in the project with color indicators
    • Added teleportation feature to jump to any other creator
  • Updated Quick Move functionality
    • Changed switching to Quick Move mode binding from M to N
    • Changed default keybinding for moving with the arrow keys with Alt+Shift+arrow
    • Both previous changes remove keybinding conflicts with other Selection mode shortcuts
    • Made it so the gizmo arm won’t disappear after you use it
    • Made the preview more transparent
    • You cannot enter quick move now if there is no selection
    • Fixed a bug where if you went from quick move to a selection (creation) mode that wasn’t the last you used the selection state would get messed up. Now it correctly will clear the selection
  • Fixed structure panel UI performance for projects containing a large number of structures
  • Fixed an issue where selecting certain Vibrant Visual settings caused an error
  • Fixed brush applying masked blocks incorrectly after switching dimensions
  • Fixed unhandled extrude tool error when it’s being applied out of world bounds
  • Fixed a critical crash and several logic issues in the Ruler Tool when using axis locks and editing start/end points
  • Fixed an issue where if you tried to move blocks outside of the bounds of the world, it would freeze the Editor.

Entity Components

  • Added the minecraft:body_rotation_locked_to_vehicle component, that causes the entity’s body to automatically rotate to align with its mounted vehicle
  • Added new field protection_slot to minecraft:burns_in_daylight, which allows specifying an equipment slot that should provide protection from burning in daylight. Valid values are “slot.weapon.offhand”, “slot.armor.head”, “slot.armor.chest”, “slot.armor.legs”, “slot.armor.feet”, and “slot.armor.body”. Leaving this field unspecified will default to having the Head armor slot provide protection from burning in daylight
  • In the “minecraft:ageable” and “minecraft:breedable” components, the “transform_to_item” field has been renamed to “result_item”
    • This field is now defined for each item entry in each component’s “items” list, enabling item-specific transformations on use
  • Added “result_item” field to the items in the “minecraft:healable” and “minecraft:tameable” components
    • This field is defined for each item entry in the “items” list
    • On a successful interaction, the consumed item is replaced with this item
  • Upgraded the minecraft:addrider entity component, allowing it to take an array of riders
    • Description:
      • Allows a rideable mob to spawn with one or more riders
    • Fields:
      • “riders”: Array of riders to add to the entity, with the mandatory field entity_type and optional field spawn_event
    • riders Fields:
      • entity_type: The type of mob to spawn
      • spawn_event: An optional event to spawn with the mob
    • Requirements:
      • The mob must have a minecraft:rideable entity component
      • The array of riders must be no longer than minecraft:rideable has seat_count
  • Added new boolean field can_dehydrate to minecraft:breathable. The field defaults to false to preserve previous breathable behaviour. When set to true, entities that only breathe water will take dehydration damage when out of water
  • Renamed the minecraft:body_rotation_locked_to_vehicle component to minecraft:rotation_locked_to_vehicle
    • The component now aligns both the entity’s body rotation and its overall rotation with that of its mounted vehicle
  • Added a lunge field to the minecraft:exhaustion_values component
    • Defines the amount of exhaustion applied when triggering the lunge enchantment, multiplied by the enchantment level
  • Added the ambient field to minecraft:mob_effect component
    • Causes the effect to render with the ambient effect background
    • Causes the effect to not pulse for timing out

Gameplay

  • Custom items tagged with minecraft::is_shovel now build paths on all blocks the Shovel does

General

  • Added file name to the assertion message for “MERS uniforms is being set more than once” to make future debugging easier

Graphical

  • Fix blocks using “render_method”:”blend” always being semi-transparent
  • Fix blocks using “render_method”:”blend” and “render_method”:”alpha_test” not having shaded sides in the inventory
  • Added cubemap controls to the Editor’s Vibrant Visuals Settings Pane
  • Added the ability to data-drive cubemap lighting and effects in Vibrant Visuals. See the updated Creator portal for more information

    • The new cubemap configuration files should be placed in the cubemaps directory of a resource pack.
    • Example of a cubemap configuration file with path cubemaps/mycubemap.json:
     { "format_version": "1.21.130", "minecraft:cubemap_settings": { "description": { "identifier": "mypack:mycubemap" }, "lighting": { "ambient_light_illuminance": { "0.00000": 4.0, "1.000000": 4.0 }, "sky_light_contribution": 1.0, "directional_light_contribution": 1.0, "affected_by_atmospheric_scattering": true, "affected_by_volumetric_scattering": true } } }
    
    • format_version: Required field containing “1.21.130”
    • minecraft:cubemap_settings: Required field
    • minecraft:cubemap_settings/description/identifier: Required field. If the identifier is equal to minecraft:default_cubemap, it will be used by default in all biomes. Otherwise, the cubemap configuration can be applied to a biome by supplying the same identifier in the respective .client_biome.json file for that biome. Example of a biome configuration file with path biomes/river.client_biome.json:
     { "format_version": "1.21.130", "minecraft:client_biome": { "description": { "identifier": "minecraft:river" }, "components": { "minecraft:cubemap_identifier": { "cubemap_identifier": "mypack:mycubemap" } } } }
    
    • minecraft:cubemap_settings/lighting: Required field. Any fields inside lighting are optional
    • minecraft:cubemap_settings/lighting/ambient_light_illuminance: Contains pairs of numbers, where the first number should be between 0.0 and 1.0 (time of day) and the second number should be between 0.0 and 100000.0 (ambient light). Default value is 5.625 for all times of day
    • minecraft:cubemap_settings/lighting/sky_light_contribution: Contribution of the sky light. It should be between 0.0 and 1.0. Default value is 1.0
    • minecraft:cubemap_settings/lighting/directional_light_contribution: Contribution of the directional light. It should be between 0.0 and 1.0. Default value is 0.0
    • minecraft:cubemap_settings/lighting/affected_by_atmospheric_scattering: Value is a boolean and controls the state of the atmospheric scattering effect applied the cubemap. Default value is false
    • minecraft:cubemap_settings/lighting/affected_by_volumetric_scattering: Value is a boolean and controls the state of the volumetric scattering effect applied the cubemap. Default value is true
  • Fixed black bars appears at the bottom of the screen when launching the game in fullscreen mode (MCPE-227955)
  • Fixed an issue where blocks moved by Pistons are too dark
  • Added Kelp Block to the list of blocks affected by dithering when near the player camera
  • Fixed blocks flashing yellow when pushed with a Piston with Vibrant Visuals enabled
  • Reduced flickering and fixed incorrect reflections on low roughness materials with height maps in Vibrant Visuals
  • Fixed damage particles sometimes rendering as black with vanilla renderer
  • Fixed archaeology items sometimes rendering as nearly black
  • Light absorption in water has been changed from 2 to 1 units, to match Java Edition
  • Updated supported devices for Vibrant Visuals on iOS and Android including additional support for the Adreno 700 series (MCPE-229154)
  • Fixed an issue where Improved Input Latency Response toggle would cause a crash at startup (MCPE-231485 )

Items

  • Fix issue with rendering custom blocks as “flying items” (MCPE-180489)

Item Components

  • Added the minecraft:swing_sounds item component
    • Allows overriding the swing sounds emitted by the user
    • Fields:
      • “attack_miss”: sound played when an attack misses or deals no damage due to invulnerability
      • “attack_hit”: sound played when an attack hits
      • “attack_critical_hit”: sound played when an attack hits and deals critical damage
    • At least one field needs to be specified
  • Added the minecraft:kinetic_weapon item component
    • Description:
      • Allows an item to deal damage and other effects every tick while in use, to all unobstructed targets found in a straight line from the user’s view vector
      • Damage is computed based on both the user’s and target’s velocity projected onto the view vector (via dot product)
      • The more the user and target move toward each other and align with the view vector, the higher the damage
      • After applying “damage_multiplier” and “damage_modifier”, the resulting damage is floored to the nearest lower integer
    • Fields:
      • “delay”: Ticks to wait before applying damage and effects
      • “reach”: Range along the view vector where entities can be hit
      • “hitbox_size”: Extra tolerance on the raycast to detect entities
      • “damage_multiplier”: Multiplies the sum of the projected velocities
      • “damage_modifier”: Adds to the multiplied sum of the projected velocities
      • “damage_conditions”: Conditions that need to be satisfied for damage to be applied
      • “knockback_conditions”: Conditions that need to be satisfied for knockback to be applied
      • “dismount_conditions”: Conditions that need to be satisfied for riders to be dismounted
    • “damage_conditions”, “knockback_conditions” and “dismount_conditions” fields:
      • “max_duration”: Time, in ticks, during which the effect can be applied after “delay” elapses
      • “min_speed”: Minimum user’s speed (projected onto the view vector via a dot product) required for the effect to be applied
      • “min_relative_speed”: Minimum relative speed of the user with respect to the target (projected onto the view vector via a dot product) required for the effect to be applied
      • If omitted, the corresponding effect does not apply
    • Requirements:
      • Requires the “minecraft:use_modifiers” item component on the same item
  • Added the “minecraft:piercing_weapon” item component
    • Description:
      • Allows an item to deal damage to all entities detected in a straight line along the user’s view vector
      • Items with this component cannot destroy blocks, as the attack action always takes priority, regardless of what the user is looking at
    • Fields:
      • “reach”: Range along the view vector where entities can be hit
      • “hitbox_size”: Extra tolerance on the raycast to detect entities
    • Requirements:
  • The “minecraft:cooldown” item component now supports a “type” field
    • Defines the action the cooldown applies to, in a mutually exclusive way, so cooldowns for one action type do not affect the other
    • Values:
      • “use”: puts the item on cooldown when used, preventing further use until it expires, but still allowing attacks, mining, and interaction
      • “attack”: puts the item on cooldown when attacking, preventing further attacks until it expires, but still allowing use, mining, and interaction
    • “use” is the default value, preserving the component’s original behavior
  • Added the creative_reach field to minecraft:kinetic_weapon item component
    • Defines the reach used when the user is in Creative Mode
    • Defaults to reach if unspecified
  • Added the creative_reach field to minecraft:piercing_weapon item component
    • Defines the reach used when the user is in Creative Mode
    • Defaults to reach if unspecified
  • Added the start_sound field to the minecraft:use_modifiers item component
    • Defines the sound to play when starting using the item

Mobs

  • Fixed content warning that incorrectly occurred for format_version field in entity json in versions before 1.8.0
  • Lowered the min_engine_version of the latest zombie_pigman.entity.json slice back to 1.8.0, allowing it to be overridden by existing third-party content (MCPE-229868)

Molang

  • Added four new Molang queries pertaining to the minecraft:on_use_kinetic_damage item component:
    • query.get_kinetic_item_delay, Returns the delay value from the main-hand item’s minecraft:on_use_kinetic_damage component, or 0 if the component is not present
    • query.get_kinetic_item_damage_duration, Returns the damage_duration value from the main-hand item’s minecraft:on_use_kinetic_damage component, or 0 if the component is not present
    • query.get_kinetic_item_knockback_duration, Returns the knockback_duration value from the main-hand item’s minecraft:on_use_kinetic_damage component, or 0 if the component is not present
    • query.get_kinetic_item_dismount_duration, Returns the dismount_duration value from the main-hand item’s minecraft:on_use_kinetic_damage component, or 0 if the component is not present
  • Added “query.kinetic_weapon_delay”, which returns the “delay” value from the main-hand item’s “minecraft:kinetic_weapon” component, or 0 if the component is not present
  • Added “query.kinetic_weapon_damage_duration”, which returns the “max_duration” value of “damage_conditions” from the main-hand item’s “minecraft:kinetic_weapon” component, or 0 if the component is not present
  • Added “query.kinetic_weapon_knockback_duration”, which returns the “max_duration” value of “knockback_conditions” from the main-hand item’s “minecraft:kinetic_weapon” component, or 0 if the component is not present
  • Added “query.kinetic_weapon_dismount_duration”, which returns the “max_duration” value of “dismount_conditions” from the main-hand item’s “minecraft:kinetic_weapon” component, or 0 if the component is not present
  • Added “query.ticks_since_last_kinetic_weapon_hit”, which returns the number of ticks elapsed since the user last hit something while using a kinetic weapon
    • Returns -1.0 if no kinetic weapon is being used or if nothing has been hit yet
    • Hits that occur while the user is unloaded are not counted
  • Added Pack Settings Molang queries
  • query.get_pack_setting(‘ns:slider_name’) the value of a slider
  • query.is_pack_setting_enabled(‘ns:toggle_name’) check if toggle is enabled
  • query.is_pack_setting_selected(‘ns:dropdown_name’, ‘dropdown_option_name’) if a dropdown option is selected

Network Protocol

  • Added ActorFlags::BODY_ROTATION_LOCKED_TO_VEHICLE
  • LevelSoundEventPacket modified: added LevelSoundEvent::SpearAttackHit, LevelSoundEvent::SpearAttackMiss, LevelSoundEvent::WoodenSpearAttackHit and LevelSoundEvent::WoodenSpearAttackMiss
  • ActorEventPacket modified: added ActorEvent::KINETIC_DAMAGE_DEALT
  • Added new Level Sound Event imitate.camel_husk
  • Added new Level Sound Event imitate.parched
  • Renamed ActorFlags::BODY_ROTATION_LOCKED_TO_VEHICLE to ActorFlags::ROTATION_LOCKED_TO_VEHICLE
  • Added Ambient bool field to MobEffectPacket, defines if the effect is considered ambient (like the ones applied by Beacons or Conduits)
  • LevelSoundEventPacket modified: added LevelSoundEvent::SpearUse and LevelSoundEvent::WoodenSpearUse

Particles

  • Fixed a bug that caused incorrect validation errors for particle texture path (MCPE-220351)

Scripting

  • Breakpoints that are checked by MC and considered invalid will appear disabled in VSCode
  • Fix bug causing breakpoints to miss under certain conditions

Structures

  • Prevented a crash when trying to export structures in unsupported platforms
  • Fixed rotation and mirroring of Vine blocks during structure placement

User Interface

  • String multiplication in UI expressions is now limited exclusively to %.<number>s
  • Added resolve_ancestor_scope boolean to view bindings as a way to bind to an ancestor that matches the source_control_name

Experimental Technical Updates

API

  • Debug drawing tech in @minecraft/debug-utilities now supports rendering shapes in different dimensions:
    • Added setLocation(location: minecraftserver.DimensionLocation | minecraftserver.Vector3): void method to DebugShape
    • The location property on DebugShape has been changed to read only (use setLocation above to modify the location)
    • Added dimension readonly property to DebugShape
    • Changed the constructors of all the debug shapes to instead take a variant of Vector3 or DimensionLocation
  • Fixed triggering of PlayerSwingStartAfterEvent to only happen on the start of a swing
  • Fixed issue where onBreak beta API event would not fire if a Piston was the breaking cause
  • Released @minecraft/server version 2.4.0
  • Added @minecraft/server version 2.5.0-beta
  • Debug Drawing
    • Fixed a bug where timeLeft would cause the DebugShape to be removed immediately
    • Fixed a bug where the arrow head of the DebugArrow would look incorrect at certain rotations
  • Fixed issue in preview where world.afterEvents.playerBreakBlock was providing an invalid block position (MCPE-229538)
  • Sends global dynamic property values to the Minecraft debugger’s Live Diagnostics when attached
  • Added EntitySwingSource for providing context of player swings to beta
  • Added PlayerSwingStartAfterEvent.swingSource to beta
  • Added PlayerSwingEventOptions.swingSource to beta
  • Fixed an issue where DebugShape objects were not cleaned up properly after running /reload
  • Fixed an issue where DebugText would not be affected by the scale property
  • World
    • Added property readonly tickingAreaManager: TickingAreaManager to beta
  • Added class TickingAreaManager to beta. This manager is used to add, remove or query temporary ticking areas to a dimension
    • These ticking areas are limited by a fixed amount of ticking chunks per pack independent of the command limits
  • Added interface TickingArea to beta. This provides information about a specific ticking area
  • Added interface TickingAreaOptions to beta. Options to create a ticking area using the TickingAreaManager
  • Added class TickingAreaError to beta
  • Added enum TickingAreaErrorReason to beta
    • Enum for the reason that a TickingAreaError was thrown
  • Added BlockComponentRedstoneUpdateEvent, which can be subscribed by custom block components
  • Added onRedstoneUpdate custom component subscription in beta with the following conditions
    • Block has minecraft:redstone_consumer component, otherwise CONTENT_ERROR is thrown
    • Subscription is not queued if the BlockComponentRedstoneUpdateEvent.powerLevel is less than minecraft:redstone_consumer field min_power Here is an example of a custom component json and the subscription script:
{ "format_version": "1.21.130", "minecraft:block": { "description": { "identifier": "test:custom_block" }, "components": { "minecraft:redstone_consumer": { "min_power": 10, "propogates_power": true }, "test:custom_component": {} } }
}
import { system } from '@minecraft/server-wrapper';
system.beforeEvents.startup.subscribe(init => { init.blockComponentRegistry.registerCustomComponent("test:custom_component", { onRedstoneUpdate: _ => { //insert logic here } });
});

API Infra

  • Modernized CommandOutputPacket serialization
    • Max number of “Output Messages” set max to 100
      • Field “Message Id”, set max size to 512 characters
      • Max number of “Parameters” set to 512
  • Modernized CommandRequestPacket serialization
    • Field “Request ID”, set max size to 39 characters
  • Modernized AvailableCommandsPacket serialization. Added these constraints:
    • Chained Subcommand Data / Name max size set to 512 characters
    • Commands / Name max size set to 512 characters
    • Commands / Description max size set to 1000 characters
    • Commands / Chained Subcommand Indexes max size set to 250 elements
    • Commands / Overloads max size set to 250 elements
    • Constraints / Constraint Indices max size set to 250 elements

Blocks

  • Added component minecraft:support behind the Upcoming Creator Features toggle Example:
"minecraft:support": { "shape": "stair" // "fence" is also valid }
  • Created a new block trait, minecraft:connection, to expose behavior like Fences or Glass Panes from Vanilla where blocks connect to other blocks around them. Using this trait with the example below adds the bool states minecraft:connection_north, minecraft:connection_east, minecraft:connection_south, and minecraft:connection_west. This is only available while the “Upcoming Creator Features” toggle is enabled Example:
{ "format_version": "1.21.130", "minecraft:block": { "description": { "identifier": "test:connection_block", "traits": { "minecraft:connection": { "enabled_states": ["minecraft:cardinal_connections"] } } } }
}
  • One known issue with this is that blocks using minecraft:connection don’t properly decide connections to blocks like Fences, Walls, Iron Bars, Fence Gates, and Glass Panes. Addressing this issue is currently in development
  • Added component minecraft:connection_rule behind the Upcoming Creator Features toggle which allows custom blocks to define whether other blocks with connection behavior – such as fences, walls, bars, and glass panes – can try to create a connection.
  • Added VanillaBlockTag minecraft:has_fence_connections that can be used to identify a custom block as a block that creates connections like a fence; this tag is required to create connections between custom and Vanilla fences. The component and tag can be used along with the minecraft:connection block trait to make a custom fence that creates connections like a Vanilla fence. The following is an example of how they fit into the JSON of a custom fence block:
{ "format_version": "1.21.130", "minecraft:block": { "description": { "identifier": "test:my_fence", "traits": { "minecraft:connection": { "enabled_states": ["minecraft:cardinal_connections"] } } }, "components": { "tag:minecraft:has_fence_connections": {}, "minecraft:connection_rule": { "accepts_connections_from": "only_fences" } } }
}
  • Added new state minecraft:corner_and_cardinal_direction to the minecraft:placement_direction block trait which enables the minecraft:corner with values none, inner_left, inner_right, outer_left, and outer_right to provide similar behavior to how stairs in Vanilla work
    • When this is set, you can use the field blocks_to_corner_with to decide the criteria with an array of block descriptors to determine what blocks to form a corner with
    • The default behavior for this field is to corner with the same block name
    • This all requires the Beta APIs toggle to be enabled on a world and the use_beta_features flag on your block
 "format_version": "1.21.130", "use_beta_features": true, "minecraft:block": { "description": { "identifier": "custom:custom_block", "traits": { "minecraft:placement_position": { "enabled_states": ["minecraft:vertical_half"] "minecraft:placement_direction": { "enabled_states": ["minecraft:corner_and_cardinal_direction"], "blocks_to_corner_with": [{"tags": "q.any_tag('minecraft:cornerable_stairs')"}] } }
  • With the Beta APIs toggle on, Vanilla Stairs have the tag minecraft:cornerable_stairs available, and can corner with custom blocks with the same tag if the block also uses minecraft:cardinal_direction block states
  • Blocks using minecraft:placement_direction Block Trait with the minecraft:corner_and_cardinal_direction had the inner_left/outer_left and inner_right/outer_right states backwards when a block was facing south or west
  • Made blocks that use the minecraft:placement_position block trait with the state minecraft:vertical_half and minecraft:placement_direction with the state minecraft:corner_and_cardinal_direction update the corner state immediately instead of happening a tick later
  • We now will mirror the minecraft:corner block state when used within a structure
  • Added minecraft:redstone_consumer component behind the Upcoming Creator Features experiment. A component describing how a block can consume and potentially propogate a redstone signal
    • Contains optional field min_power which defines the minimum value for incoming signal stregth. If signal strength is greater than or equal to this value then the onRedstoneUpdate event is sent to Scripts. Defaults to 0 meaning event is always emitted
    • Contains optional field propogates_power a Boolean to control whether a signal can pass through this block or not, defaults to false
    • This component is currently not available for block permutations
    • Example:

      { "format_version": "1.21.130", "minecraft:block": { "description": { "identifier": "test:custom_consumer_block" }, "components": { "minecraft:redstone_consumer": { "min_power": 5, "propogates_power": true } } }
      }
      
  • Modified minecraft:material_instances block component
    • Removed redundant experimental field shaded formerly named emissive
    • Same effect can be achieved with existing fields, example below
"minecraft:material_instances" : { "*": { "texture": "my_texture", "render_method": "opaque", "face_dimming": false, "ambient_occlusion", false }
}
  • Added minecraft:leashable block component, which allows custom blocks to receive a lead attachment, including an offset field to change the position of the leash knot. Currently only available with “Upcoming Creator Features” enabled

Editor

  • Initial experimental support for “Prefabs” in the Editor
    • This feature is highly experimental, has some issues, is guaranteed to change and is not yet documented
    • Do not use in production projects
  • Added a “Prefab Template Manager” to help create, edit and delete prefab templates
  • Added a “Prefab Instance Editor” to allow placement of prefabs in the scene, and edit the properties of the instance

Graphical

  • Fixed an error where Marketplace content containing local_lighting.json could spam content errors (MCPE-1498487)
Posted on Leave a comment

JAVA Edition: 1.21.11

New Features

  • Added Nautilus and Zombie Nautilus
  • Added Nautilus Armor
  • Added Spear Weapon
  • Updated advancements to include the Nautilus, the Zombie Nautilus, the Zombie Horse, the Camel Husk, and the Parched
  • Added new graphical options “Texture Filtering” and “Anisotropic Filtering”
  • Added Netherite Horse Armor that can be obtained by upgrading Diamond Horse Armor with a Smithing Table

Nautilus

  • Nautilus is a new neutral aquatic mob
  • Spawns in all ocean biomes
  • Attacks using a Dash attack, if provoked
  • Occasionally attacks Pufferfish within range using the Dash attack
  • Has a Dash skill similar to Camels, used by pressing the Jump button
  • Takes suffocation damage on land
  • Adds the “Breath of the Nautilus” effect to mounted players
  • Nautilus can be bred and tamed using Pufferfish or a Bucket of Pufferfish
  • Despawn naturally, however become persistent when interacted with by a player
  • A Tamed Nautilus:
    • Can be mounted using a Saddle
    • With a Saddle has a roaming restriction of 16 blocks
    • Without a Saddle has a roaming restriction of 32 blocks

Zombie Nautilus

  • Zombie Nautilus is a new underwater mob that spawns with a Drowned rider wielding a Trident
  • Zombie Nautilus is only hostile if ridden by a hostile mob
  • Zombie Nautilus behaves similar to the Nautilus except that it cannot be bred
Coral Zombie Nautilus
  • The Zombie Nautilus has a Coral Zombie Nautilus variant that spawns in the Warm Ocean biome

Nautilus Armor

  • Equippable on the Nautilus and Zombie Nautilus
  • Comes in Copper, Golden, Iron, Diamond and Netherite versions

Parched

  • New Skeleton variant
  • Spawns at light level 0 in Deserts replacing some of the regular Skeletons
  • Does not burn in sunlight
  • Shoots Arrows of Weakness
  • Is immune to Weakness effect
  • Has a slower rate of fire compared to normal Skeletons, similar to Bogged
  • Does not spawn in caves, following the Husk’s spawning rules

Camel Husk

  • New undead Camel variant
  • Spawns a 0 light level in Deserts
  • Does not burn in sunlight
  • Spawns with two riders: A Husk wielding a Spear and a Parched
  • Do not spawn in caves, following Husks spawning rules
  • Is hostile if the rider is a hostile mob
  • Passive without a rider
  • Despawns with other hostile mobs, however becomes persistent when interacted with
  • Favorite food is Rabbit Foot
  • Cannot be bred
  • As a mount they work similar to normal Camels
  • Drops 2-3 Rotten Flesh when killed, with extra 0-1 for each level of Looting

Spear Weapon

  • New weapon that can be crafted in Wood, Stone, Copper, Iron, Gold, Diamond and Netherite versions
  • Each material has different stats for timing, influencing how fast they are to use
  • Has a minimum reach for damage, being too close to a target will yield no damage
  • Has extended maximum reach compared to other tools and weapons
  • Bounces back visually on hit
  • Has two attacks. Jab and Charge
  • Does not cause item interact vibrations
  • Zombies, Husks, Zombified Piglins and Piglins can spawn with the Spear
  • Golden Spear is considered a preferred weapon by Piglins

Jab Attack

  • Quick-press primary action button to use
  • Low damage attack with knockback
  • Cooldown between attacks
  • Wooden Spears have the fastest cooldown; Netherite the slowest
  • Can hit multiple enemies
  • Does not destroy blocks

Charge Attack

  • Press and hold the secondary action button to use
  • Damage is based on Spear material, the player’s view angle, and the velocity of both the player and the target
  • While holding down the button, the attack goes through three stages before returning to idle:
    • Engaged: The Spear can deal damage, knockback, and dismount mounted enemies if the speed is above the required thresholds
    • Tired: Indicated by the Spear rotating to a vertical position and shaking. The Spear can deal damage and knockback (but not dismount) if the speed is above the required thresholds
    • Disengaged: Indicated by the Spear being lowered, pointing downwards. The Spear gives damage but not knockback or dismount if the speed is above the required threshold
  • The Spear’s range when used by mobs is half of that when used by players, but they can deal damage, dismount and knockback at lower speeds than the players
  • Zombies, Husks, Zombified Piglins and Piglins know how to charge with a Spear

Lunge Enchantment

  • Spear exclusive enchantment
  • Only works with the Jab attack
  • When doing a Jab attack with Lunge, it propels the player horizontally in the view direction
  • The view angle needs to be perfectly leveled horizontally to achieve maximum lunge distance
  • Using Lunge has a durability cost of 1 for using Lunge across all Enchantment levels
  • Using Lunge consumes hunger points by exhausting the player, similar to sprinting or jumping
    • Level 1 Lunge consumes 1 hunger point, level 2 consumes 2 hunger points, and level 3 consumes 3 hunger points
    • Lunge can only be used if the player has at least 6 hunger points in their hunger bar
  • Does not work when the player is in water or flying with Elytra

Advancements

  • Added the “Mob Kabob” advancement for spearing 5 enemies with a Charge attack
  • Updated the “How did we get here?” advancement to include the Breath of the Nautilus effect
  • Updated the “Best Friends Forever” advancement to include the Nautilus, Zombie Nautilus, and the Zombie Horse
  • Updated the “The Parrots and the Bats” advancement to include the Nautilus
  • Updated the “Two by Two” advancement to include the Nautilus
  • Updated the “Monster Hunter” advancement to include the Zombie Nautilus, the Zombie Horse, the Camel Husk and the Parched
  • Updated the “A Throwaway Joke”, “Take Aim” and “It Spreads” advancements to include the Nautilus, the Zombie Nautilus, the Zombie Horse, the Camel Husk and the Parched
  • Updated the “Oh Shiny” advancement to include the Golden Spear and Golden Nautilus Armor

Texture Filtering

  • New option in Video Settings
  • Controls the method used to sample textures when they are viewed at an angle or from a distance
  • Available values are “None”, “RGSS”, and “Anisotropic”
  • The default depends on your graphics preset and hardware
  • “RGSS” (Rotated Grid Super Sampling) is a shader-based filtering method that improves texture clarity at a moderate performance cost
    • This is available on all hardware
  • “Anisotropic” is a hardware-based filtering method that provides the best texture clarity
    • The maximum anisotropy may be “2x”, “4x”, and “8x”, controllable by a separate slider
    • If your hardware does not support it, Anisotropic Filtering will do nothing
    • This significantly impacts video memory usage (especially combined with a high mipmap count)

Changes

  • Zombies, Husks, Piglins and Zombified Piglins can now hold Spears
  • Piglins now consider Golden Spears as one of the items they like
  • Parrots can now mimic the sounds of Zombie Nautilus, Zombie Horse, Camel Husk and Parched
  • Items will no longer “bob” whenever their durability changes, such as when losing durability from an attack, or repaired by Mending
  • Some changes were made to debug renderers
  • Graphics modes “Fast”, “Fancy”, and “Fabulous!” have been replaced with graphics presets with the same names
  • Cloud movement is now the same for all players on a server
  • Netherite Armor points have been increased for the Body slot from 11 to 19
  • All blocks in the world now have mipmaps applied if enabled in video settings
    • Blocks that did not have mipmaps before, such as different vines, rails, folliage (apart from leaves) and more should look better from higher distances
  • Client FPS is expected to be higher for most players
  • Underwater biome fog color and fog distance is now blended based on the player’s position between biomes, similarly to regular biome fog and sky colors
  • Environmental Fog in the Nether is no longer dependent on the render distance setting, and will consistently be applied from 10 to 96 blocks
  • Horses, Mules, Donkeys, and Camels no longer sink in water while ridden by a player
  • Chunks now fade in instead of appearing out of nowhere, with the fade-in time adjustable through Video Settings
  • Bats no longer spawn more frequently and in higher light levels between October 20 and November 3
  • The color of the sky during sunrises and sunsets is now affected by rain and thunder
  • Horses, Mules, Donkeys, Camels, Zombie Horses and Camel Husks will not panic if controlled by Mobs
  • Spawn Eggs have been reorganized into groups in the Creative Inventory
  • Mobs no longer spawn during chunk generation when the minecraft:spawn_mobs game rule is set to false
  • When the “See-Through Leaves” video setting is disabled, the gaps between leaves are now dark green instead of black
  • Turning the “See-Through Leaves” video setting off now gives a bigger performance boost than before
  • Added splash text “One does not simply walk to the Far Lands”

Developer’s Note: This statement was proven false on October 4, 2025.

  • Tamed horses no longer run into cacti or sweet berry bushes

Zombie Horse

  • Zombie Horses now spawn naturally
  • Zombie Horses spawn in darkness, and burn in sunlight like other undead mobs
  • Zombie Horses count towards the hostile mob cap and spawn with other hostile mobs
  • Zombie Horses do not display any hostile behavior towards players. Their hostility resides solely in their Zombie rider
  • Zombie Horses can be leashed when its mob jockey is removed
  • Zombie Horses despawn like other hostile mobs
    • However, they become persistent when interacted with by a player
  • Zombie Horses can be tamed in the same fashion as regular Horses, and can then be mounted and controlled by a player
  • Zombie Horses can be healed and tempted using Red Mushrooms
  • Tamed Zombie Horses can be equipped with a Saddle and Horse Armor
  • Horse Armor protects Zombie Horses from sunlight damage
  • Zombie Horses have 25 health points (12.5 hearts) of health
  • Zombie Horses have variable movement speed and jump strength, determined when they spawn
  • Zombie Horses drops 2-3 Rotten Flesh when killed, with extra 0-1 for each level of Looting
  • Zombies riding Zombie Horses now have a chance of dropping a Red Mushroom on death

Mob Spawning

  • Zombie Horses now has a chance to spawn in plains and savanna biome types, with a zombie rider holding an iron spear

World Generation

  • Added various spears to various loot chests around the world
    • Iron Spears can be found in Buried Treasure chests
    • Copper and Iron Spears can be found in Weaponsmith chests in villages
    • Stone Spears can be found in Ocean Ruin chests
    • Diamond Spears can be found in Bastion Remnant and End City chests
  • Copper, Iron, Golden, and Diamond Nautilus Armor now have a chance to be found in the Chests for the following Structures:
    • Buried Treasure
    • Ocean Ruins
    • Shipwreck

Status Effects

  • Added Breath of the Nautilus effect
    • Effect that affects mounted players
    • Pauses player oxygen consumption (but does not replenish oxygen)

Minor Tweaks to Blocks, Items and Entities

Items

  • Spawn Eggs are now sorted thematically in the Creative Inventory, according to the following categories:
    • Overworld
      • Farm Animals
      • Mounts
      • Pets
      • Wild Animals
      • Aquatic
      • Miscellaneous
      • Golems
      • Villagers
      • Undead
      • Spiders
      • Monsters
      • Illagers
    • Nether
    • The End

Sounds

  • Anvil destroy, land, place and use sounds now play at a slightly lower volume

Accessibility

  • Keys used to access debug features can now be rebound
    • It is part of a new Debug category in the Key Binds screen
    • The F3 + Q keybind to display a debug help message in chat has been removed
  • The debug modifier key can be bound separately from the debug overlay key
  • The key to toggle GUI can now be rebound
  • The key to toggle spectator shader effects, such as when spectating an enderman, can now be rebound

Input

Several uses of the cmd key on Mac have been rebound to ctrl:

  • The input modfier to drop all items
  • The input modfier to include all the data when picking a block
  • The input modfier to change GUI scale in the Video Settings screen
  • Stopping the recipe book from cycling through variations of items

Performance Improvements

Debug Renderer Changes

  • Same as before, do not treat debug renderers as supported features, they are there only to aid with development
  • More debug renderers are now available through the Debug Settings screen
  • Some existing renderers were improved
  • The performance of debug renderers has been significantly improved

Graphics Presets

  • Settings on the Video Settings screen have been reordered and split into 3 sections: “Display”, “Quality & Performance”, and “Preferences”
  • The following settings that were duplicating accessibility settings have been removed from the Video Settings screen:
    • “View Bobbing”
    • “Glint Speed”
    • “Glint Strength”
    • “FOV Effects”
    • “Distortion Effects”
  • Tweaks that were previously hidden behind the “Graphics” setting have been split out to be configurable independently:
    • “See-Through Leaves”
    • “Show Vignette”
    • “Weather Effect Radius” configures the distance in blocks within which rain and snow are visible
    • “Improved Transparency” resolves some of the transparent geometry rendering issues at a significant GPU cost, previously was hidden behind “Fabulous!”
  • A new “Preset” slider was added to the top of the “Quality & Performance” section
    • Presets, as you would expect based on gaming industry standard, control most of the “Quality & Performance” settings at once, not only the ones that were previously hidden behind the “Graphics” setting
    • Available presets are “Fast”, “Fancy”, “Fabulous!” and “Custom”
    • The default preset is “Fancy” for new players
    • But for players who are upgrading to this version the preset will be set to “Custom” to preserve your current configuration

UI

  • Menu sliders will now “stick” to the closest available value when you release them after dragging with a mouse
  • When using keyboard to change slider values, arrow keys will now move the slider to the next available value, not by one pixel as before
  • The inF3 button in the Debug Option screen has been renamed to inOverlay
  • The Single Biome Customization screen now has a search box
  • The language selection screen now has a search box to filter languages
  • Renamed the “Show Music Toast” option to “Music Toast”
    • Added a third state to the “Music Toast” option, allowing it to only be shown in the pause menu

Technical Changes

  • The Data Pack version is now 94.1
  • The Resource Pack version is now 75.0
  • The Minecraft Server Management Protocol version is now 2.0.0
  • Added ClientFps JFR event
  • Experience packets that do not change the player’s experience progress or level are no longer sent by the server
  • Added support for KQueue on OSX to improve network connection performance

Minecraft Server Management Protocol Version 2.0.0

  • Added a new notification server/activity
    • Indicates that a network connection to the server has been initiated
    • Rate limited to 1 notification per 30 seconds
  • Enable authentication from web browsers
    • Authenticate by passing the token in Sec-WebSocket-Protocol header when opening the WebSocket connection
      • Example: Sec-WebSocket-Protocol: minecraft-v1, <token>
    • Requests authenticating this way are subject to Origin header checks. This requires configuration of allowed origins on the server side using management-server-allowed-origins. The default value is empty, meaning Sec-Websocket-Protocol authentication is effectively disabled
  • In the typed_game_rule and untyped_game_rule schemas, the type of the value field has been changed from string to take either a boolean or an integer
    • Also, it now uses the game rule resource location as the key

Data Pack Versions 89.0 through 94.1

  • Added stopwatch command for keeping track of real time
  • Certain visual and gameplay effects can now be controlled by Environment Attributes
  • World Border interpolation is now dependent on game ticks instead of real time
    • This means the World Border will no longer move when the game is paused
    • It will also respect any changes made by the /tick command
  • Changed loot function filtered to allow running modification when predicate fails
  • Added discard loot function
  • Added new Coral Zombie Nautilus mob variant
    • The Zombie Nautilus variants can be data-driven
  • Item textures were split out of the blocks atlas into a separate new items atlas
    • It means that the commands that were referencing the blocks atlas for item textures now need to reference the items atlas instead

Zombie Nautilus Variants

  • Zombie Nautilus variants can be data-driven by adding entries to data/<namespace>/zombie_nautilus_variant/<id>.json
  • This feature is experimental
  • Fields in file:
    • model – one of: normalwarm
    • asset_id – namespaced id for this variant asset, resolves to assets/<namespace>/textures/<path>.png
    • spawn_conditions – a uniform variant selection rule explained below

Spawn conditions

minecraft:biome
  • Checks if entity is spawning in specific biomes
  • Fields:
    • biomes – single entry, list or a tag describing biomes
minecraft:moon_brightness
  • Checks if current moon brightness is within certain range
  • Fields:
    • range – floating point range (a single number or an object like {“min”: 1, “max”: 2})
minecraft:structures
  • Checks if entity is spawning in specific structures
  • Fields:
    • structures – single entry, list or a tag describing structures

Commands

  • Resource suggestions now show results in any namespace instead of just within minecraft

Added stopwatch

  • New command that allows the creation of a Stopwatch that keeps track of real time
  • Stopwatches do not depend on game ticks
  • They only run when the server/world is running, even when paused

Syntax:

  • stopwatch create <id> – creates a Stopwatch with the given namespaced ID
  • stopwatch query <id> [<scale>] – shows the elapsed time of the given Stopwatch in seconds and returns it scaled by the given value and truncated.
    • Default scale: 1
  • stopwatch restart <id> – restarts the given Stopwatch
  • stopwatch remove <id> – removes the given Stopwatch

Developer’s NoteThis command is added to replace the need of using world borders to keep track of real time. The intent is to change the world border to be dependent on game ticks in a future snapshot. If you’ve relied on this way of measuring the passage of real time before, please switch to using the new command and let us know if anything doesn’t work as intended. Thank you!

Changes to execute

  • Added new syntax /execute if|unless stopwatch <id> <range>
  • Allows to compare the elapsed time of a given Stopwatch with a floating point value range
    • The Stopwatch value is measured in seconds and has an accuracy of at most a millisecond
    • Example: /execute if stopwatch foo:bar ..10 run say Stopwatch foo:bar has not reached 10 seconds yet

Changes to worldborder

  • The time arguments now specify ticks by default, but can also specify seconds or in-game days using an s or d suffix

Game Rules

Game rules have been moved into a registry. With that, all game rules have been renamed from their previous camel case names to resource locations in snake case.

Additionally, the following game rules have been further renamed:

  • announceAdvancements -> minecraft:show_advancement_messages
  • commandBlocksEnabled -> minecraft:command_blocks_work
  • command_modification_block_limit -> minecraft:max_block_modifications
  • disableElytraMovementCheck -> minecraft:elytra_movement_check
    • The value is inverted accordingly in places that use the resource location
  • disablePlayerMovementCheck -> minecraft:player_movement_check
    • The value is inverted accordingly in places that use the resource location
  • disableRaids -> minecraft:raids
    • The value is inverted accordingly in places that use the resource location
  • doDaylightCycle -> minecraft:advance_time
  • doEntityDrops -> minecraft:entity_drops
  • doImmediateRespawn -> minecraft:immediate_respawn
  • doInsomnia -> minecraft:spawn_phantoms
  • doLimitedCrafting -> minecraft:limited_crafting
  • doMobLoot -> minecraft:mob_drops
  • doMobSpawning -> minecraft:spawn_mobs
  • doPatrolSpawning -> minecraft:spawn_patrols
  • doTileDrops -> minecraft:block_drops
  • doTraderSpawning -> minecraft:spawn_wandering_traders
  • doVinesSpread -> minecraft:spread_vines
  • doWardenSpawning -> minecraft:spawn_wardens
  • doWeatherCycle -> minecraft:advance_weather
  • maxCommandChainLength -> minecraft:max_command_sequence_length
  • maxCommandForkCount -> minecraft:max_command_forks
  • naturalRegeneration -> minecraft:natural_health_regeneration
  • snowAccumulationHeight -> minecraft:max_snow_accumulation_height
  • spawnRadius -> minecraft:respawn_radius
  • spawnerBlocksEnabled -> minecraft:spawner_blocks_work

Limits

Some game rules that previously did not have a limited value range now do:

  • minecraft:max_block_modifications: Minimum 1
  • minecraft:max_command_forks: Minimum 1
  • minecraft:max_command_sequence_length: Minimum 0
  • minecraft:max_entity_cramming: Minimum 0
  • minecraft:max_snow_accumulation_height: Minimum 0, maximum: 8
  • minecraft:players_nether_portal_creative_delay: Minimum 0
  • minecraft:players_nether_portal_default_delay: Minimum 0
  • minecraft:players_sleeping_percentage: Minimum 0
  • minecraft:random_tick_speed: Minimum 0
  • minecraft:respawn_radius: Minimum 0

Added minecraft:fire_spread_radius_around_player

  • Controls the maximum distance in blocks that fire can spread around a player
    • This replaces the previous doFireTick and allowFireTicksAwayFromPlayer game rules, which have now been removed
    • Setting it to 0 will disable fire spreading
    • Setting it to -1 will allow fire spreading without players around
    • Limit: Minimum -1

Game Tests

In the game_rules test environment the keys bool_rule and int_rule have been replaced with a single key rules. It is a map from game rules resource locations to the game rules value. The value type is either integer or boolean depending on the game rule.

Timelines

Timelines are a new concept defined in data packs under the timeline registry (i.e. found under data/<namespace>/timeline/<id>.json).

Timelines specify game behavior based on the absolute day time (that which is set by /time set). Timelines optionally can specify a period over which they will be repeated.

Primarily, Timelines are able to modify game behavior or visuals by applying Environment Attribute modifiers.

Format: object with fields

  • period_ticks: optional integer, defines the duration in ticks over which the timeline will repeat
    • If not specified, the timeline will not repeat
  • tracks: optional map between Environment Attribute IDs and a corresponding Environment Attribute Track object
    • See the section on Environment Attributes below for details

Timelines by default have no effect unless they are included by a dimension – see the Dimension Types section below.

Environment Attributes

Environment Attributes provide a data-driven way to control a variety of visual and gameplay systems.

Each Environment Attribute controls a specific visual or gameplay effect: for example, minecraft:visual/sky_color controls the color of the sky, and minecraft:gameplay/water_evaporates controls whether water can be placed at a given location.

Developer’s Note: This system and many of the introduced attributes should be considered very experimental, and may still change significantly in coming snapshots and releases. In the meantime, we would as always love to hear any feedback or suggestions you may have!

Sources

Environment Attribute values can be provided by the following Environment Attribute sources (in order of low to high priority):

  • Dimensions
  • Biomes
  • Timelines
  • Weather (not data-driven)

While Biomes act as a source to modify an attribute by position, Timelines can modify an attribute based on time.

The “effective” value of the Environment Attribute (i.e. what will actually show up in game) will be some combination of the values provided by each source according to their priority.

For example, in the following scenario:

  • The overworld dimension provides sky_color = #00ff00 (green)
  • The plains biome provides sky_color = #ff0000 (red)

When the player is in the plains biome, they will see the red sky_color, while anywhere else in the overworld they will see green.

When an Environment Attribute source provides an Environment Attribute, it can:

  • Override the value, such as the plains biome overriding the overworld‘s sky_color in the above scenario
  • Apply a modifier to a previous value (see section on Modifiers below)

Modifiers

As described in the above example, an Environment Attribute source may simply override the value of a particular attribute. However, it is sometimes also desirable to rather apply a modifier to a value provided by a source with lower priority.

For example, in the following scenario:

  • The overworld dimension provides water_fog_end_distance = 96.0
  • The plains biome modifies water_fog_end_distance with a multiply modifier of 0.85

When in the plains biome, the water_fog_end_distance will be resolved to 96.0*0.85 = 81.6, while in any other Overworld biome, it will resolve to 96.0.

The kinds of modifiers available depends on the type of Environment Attribute. The most basic modifier, supported by every Environment Attribute, is the override modifier. This behaves purely as an override of the preceding value. If not specified by an Environment Attribute source, the modifier will always be assumed to be override.

Full descriptions of the available modifiers and their behaviors can be found in the Common Modifiers section below.

Interpolation

While modifiers describe how a value provided by one source is applied on the value from a preceding source, interpolation describes the combination of values within a source. Only some Environment Attributes support interpolation. This allows for the smooth transition between two or more values, such as when moving between two biomes.

Between multiple Biomes, interpolation is performed on values from a source after modifiers have been applied. Within a Timeline, interpolation is performed on the modifier arguments before they get applied.

Biomes

For example, in the following scenario:

  • The plains biome provides sky_color = #ff0000 (red)
  • The desert biome provides sky_color = #ffff00 (yellow)

sky_color is one such attribute that will transition smoothly based on position: for example, in the above scenario, as a player moves from a plains to a desert biome, the sky color will gradually shift from red to yellow. Other attributes, such as water_evaporates, represent discrete values and will not be smoothly transitioned – only the biome exactly at a subject position will be considered.

Smooth transitions between biomes are based on the biomes within an 8 block radius of the camera. Biomes that occupy a larger portion of that radius and are closer to the camera will have a stronger influence on the final interpolated value.

Timelines

Timelines can define Attribute Tracks – these specify how a modifier for a particular Environment Attribute changes over time by defining keyframes. Depending on the attribute, interpolation may be used between each keyframe. If interpolation is not used, the previous keyframe value will always be selected.

For example, a Timeline with a period of 24000 might be set up as following:

  • At time = 0, the timeline provides sky_color = #ff0000 (red)
  • At time = 1000, the timeline provides sky_color = #ff0000 (red)
  • At time = 6000, the timeline provides sky_color = #ff00ff (magenta)

Between time = 0 and time = 1000, the sky color will be red. Between 1000 and 6000, it will shift from red to magenta. Then, from 6000 all the way until the timeline repeats and reaches time = 0 again, the color will slowly shift back to red.

Note: unlike biomes, if a Timeline uses a modifier instead of an override, interpolation is applied to the modifier arguments rather than the final modified values.

Environment Attribute Map

Dimension Type and Biome definitions contain a new attributes field, enabling them to define Environment Attributes.

This map generally takes the form of an object mapping between Environment Attribute IDs and their corresponding values, for example:

"attributes": { "minecraft:visual/fog_color": "#ffaa00", "minecraft:gameplay/water_evaporates": true
}

Values defined as above will always be assumed to use the override modifier.

The value object can however be expanded in order to express different modifiers, in the format of an object with the following fields:

  • modifier: optional string modifier ID, dependent on the Attribute Type (see the Common Modifiers section below)
    • Default: override
  • argument: the modifier argument (format dependent on the chosen modifier)
    • How the argument is used also depends on the type of modifier

For example, the following definition describes multiplying water_fog_end_distance by 85%:

"attributes": { "minecraft:visual/water_fog_end_distance": { "modifier": "multiply", "argument": 0.85 }
}

Attribute Track

An Attribute Track specified within a Timeline takes the format of an object with the following fields:

  • ease – optional Easing Type (see below), used to ease the interpolaton of the value between keyframes
    • Default: linear
    • If the target attribute does not support interpolation, the easing mode will have no effect
  • keyframes – list of keyframe objects, must be ordered by the ticks field:
    • ticks – integer between 0 and period_ticks (if specified), defines the tick (within the period) at which this keyframe’s value will be active
    • value – the modifier argument (format dependent on the chosen modifier)
      • If no modifier is specified (or override is used), the type of this field is the same as the Environment Attribute itself
      • How this value is used depends on the type of modifier
    • Note: at most two keyframes can be placed on the same tick, creating an immediate transition
  • modifier – optional string modifier ID, dependent on the Attribute Type (see the Common Modifiers section below)
    • Default: override

For example, the following Timeline has a period of 24000, and has an attribute track that modifies only minecraft:gameplay/cat_waking_up_gift_chance. Because the easing is constant, between tick 362 and 23667 the value is 0.0, while between tick 23667 and 362 it is 0.7.

Like other Environment Attribute sources, the specified value is used as the argument to the specified modifier. This is then applied on top of sources with a lower priority. In this case the modifier is maximum, so this timeline will only ever increase the value of cat_waking_up_gift_chance to the value specified in the track.

{ "period_ticks": 24000, "tracks": { "minecraft:gameplay/cat_waking_up_gift_chance": { "ease": "constant", "modifier": "maximum", "keyframes": [ { "ticks": 362, "value": 0.0 }, { "ticks": 23667, "value": 0.7 } ] } }
}
Easing Types

Easing Types control the interpolation between two keyframes by applying a curve. The following built-in Easing Types are provided:

  • constant – always selects the previous keyframe
  • linear
  • in_back
  • in_bounce
  • in_circ
  • in_cubic
  • in_elastic
  • in_expo
  • in_quad
  • in_quart
  • in_quint
  • in_sine
  • in_out_back
  • in_out_bounce
  • in_out_circ
  • in_out_cubic
  • in_out_elastic
  • in_out_expo
  • in_out_quad
  • in_out_quart
  • in_out_quint
  • in_out_sine
  • out_back
  • out_bounce
  • out_circ
  • out_cubic
  • out_elastic
  • out_expo
  • out_quad
  • out_quart
  • out_quint
  • out_sine

An Easing Type may also be specified with a Cubic Bézier in the format: { “cubic_bezier”: [ x1, y1, x2, y2 ] }

  • x1: float between 0 and 1, x-coordinate of the first control point
  • y1: float, y-coordinate of the first control point
  • x2: float between 0 and 1, x-coordinate of the second control point
  • y2: float, y-coordinate of the second control point

Developer’s NoteTo play around with and visualize easings, easings.net and cubic-bezier.com are great references!

Common Data Types

The following data types are reused in various parts of the Environment Attributes system and will be referenced in sections below.

RGB Color

Format can be one of the following:

  • A hex color RGB string, in the form #rrggbb
  • A float array with 3 components, between 0 and 1, in the form [r, g, b]
  • An integer in packed RGB form
ARGB Color

Format can be one of the following:

  • A hex color ARGB string, in the form #aarrggbb
  • A float array with 4 components, between 0 and 1, in the form [a, r, g, b]
  • An integer in packed ARGB form
Particle Options

A full definition of a particle, including any type-specific properties (as in the /particle command).

For example:

{ "type": "minecraft:block_crumble", "block_state": { "Name": "minecraft:dirt" }
}
Mob Activity

A string ID from the minecraft:activity built-in registry. One of:

  • minecraft:core
  • minecraft:idle
  • minecraft:work
  • minecraft:play
  • minecraft:rest
  • minecraft:meet
  • minecraft:panic
  • minecraft:raid
  • minecraft:pre_raid
  • minecraft:hide
  • minecraft:fight
  • minecraft:celebrate
  • minecraft:admire_item
  • minecraft:avoid
  • minecraft:ride
  • minecraft:play_dead
  • minecraft:long_jump
  • minecraft:ram
  • minecraft:tongue
  • minecraft:swim
  • minecraft:lay_spawn
  • minecraft:sniff
  • minecraft:investigate
  • minecraft:roar
  • minecraft:emerge
  • minecraft:dig

Common Modifiers

Every Environment Attribute has a specific value type, which describes how values must be defined as well as what modifiers are available and how they are interpolated. Some are very specific, while others are reused across many attributes.

Although this is not an exhaustive list, the following Attribute Types are used commonly across many Environment Attributes:

Modifiers on Boolean Values

Argument format: boolean

  • override
  • and
  • nand
  • or
  • nor
  • xor
  • xnor
Modifiers on Float Values

Argument format: float

  • override
  • add
  • subtract
  • multiply
  • minimum
  • maximum
  • alpha_blend
    • Modifies subject according to: result = lerp(alpha, subject, value)
    • Argument format: object with fields:
      • value: float to blend towards
      • alpha: float between 0 and 1
Modifiers on RGB Color Values
  • override
    • Argument format: RGB Color
  • add – component-wise additive color blending
    • Argument format: RGB Color
  • subtract – component-wise subtractive color blending
    • Argument format: RGB Color
  • multiply – component-wise multiplicative color blending
    • Argument format: RGB Color
    • If specified, the alpha component is multiplied independently just like the other color channels
  • alpha_blend – traditional alpha blending that might be seen in image editing software
    • Argument format: ARGB Color
    • When the argument alpha is 1, it will behave as an override with no blending
  • blend_to_gray – modifies a color by taking its grayscale form, applying a brightness modifier, and mixing with this using some factor
    • Where gray = brightness * (0.3 * red + 0.59 * green + 0.11 * blue)result = lerp(factor, subject, [gray, gray, gray])
    • Argument format: object with fields:
      • brightness: float between 0 and 1, a multiplier to apply to the grayscale value
      • factor: float between 0 and 1, the factor to mix with
Modifiers on ARGB Color Values
  • override
    • Argument format: ARGB Color
  • add – component-wise additive color blending
    • Argument format: RGB Color
  • subtract – component-wise subtractive color blending
    • Argument format: RGB Color
  • multiply – component-wise multiplicative color blending
    • Argument format: RGB or ARGB Color
    • If specified, the alpha component is multiplied independently just like the other color channels
  • alpha_blend – traditional alpha blending that might be seen in image editing software
    • Argument format: ARGB Color
    • When the argument alpha is 1, it will behave as an override with no blending
  • blend_to_gray – same as for RGB Color

New Environment Attributes

minecraft:visual/fog_color

The color of fog (when the camera is not submerged in another substance).

  • Value type: RGB color
  • Default value: #000000
  • Modifiers: RGB Color Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
  • Replaces Biome effects.fog_color field
minecraft:visual/fog_start_distance

The distance in blocks from the camera at which fog starts to have an effect (when the camera is not submerged in another substance). If negative, the fog will start out with density as if it had started that many blocks behind the camera.

  • Value type: float
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/fog_end_distance

The distance in blocks from the camera at which fog reaches its maximum density (when the camera is not submerged in another substance).

  • Value type: non-negative float
  • Default value: 1024.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/sky_fog_end_distance

The distance in blocks from the camera at which the fog that affects the sky reaches its maximum density (when the camera is not submerged in another substance). Only visible with the overworld skybox type.

Note: this value is restricted by the Render Distance option.

  • Value type: non-negative float
  • Default value: 512.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/cloud_fog_end_distance

The distance in blocks from the camera at which the fog that affects clouds reaches its maximum density (when the camera is not submerged in another substance).

Note: this value is restricted by the Cloud Distance option.

  • Value type: non-negative float
  • Default value: 2048.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/water_fog_color

The color of fog when submerged in water.

  • Value type: RGB color
  • Default value: #050533
  • Modifiers: RGB Color Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
  • Replaces Biome effects.water_fog_color field
minecraft:visual/water_fog_start_distance

The distance in blocks from the camera at which underwater fog starts to have an effect. If negative, the fog will start out with density as if it had started that many blocks behind the camera.

  • Value type: float
  • Default value: -8.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/water_fog_end_distance

The distance in blocks from the camera at which underwater fog reaches its maximum density.

Note: the final value is also modified by how long the player has been underwater.

  • Value type: non-negative float
  • Default value: 96.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
  • Replaces #has_closer_water_fog Biome Tag
minecraft:visual/sky_color

The color of the sky. This color is only visible for the overworld sky. Only visible with the overworld skybox type.

  • Value type: RGB color
  • Default value: #000000
  • Modifiers: RGB Color Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
  • Replaces Biome effects.sky_color field
minecraft:visual/cloud_color

The color of the clouds. If fully transparent, clouds are entirely disabled and Happy Ghasts will not regenerate health faster when at cloud height.

  • Value type: ARGB color
  • Default value: #00000000
  • Modifiers: ARGB Color Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position for rendering, or at the position of a Happy Ghast for regeneration
minecraft:visual/cloud_height

The height at which all clouds appear.

  • Value type: float
  • Default value: 192.33
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position for rendering, or at the position of a Happy Ghast for regeneration
  • Replaces Dimension Type cloud_height field
minecraft:visual/default_dripstone_particle

The default particle to be dripped from Dripstone blocks when no fluid is placed above.

  • Value type: Particle Options
  • Default value: {type:”minecraft:dripping_dripstone_water”}
  • Modifiers: override
  • Interpolated: no
  • Resolved at the position of the Dripstone block
  • Replaces Dimension Type ultrawarm field
minecraft:visual/ambient_particles

Controls ambient particles that randomly spawn around the camera.

  • Value type: list of objects with fields
    • particle: Particle Options to spawn
    • probability: float between 0 and 1, the probability to spawn the particle in an empty space when randomly ticked
  • Default value: []
  • Modifiers: override
  • Interpolated: no
  • Resolved at the camera’s position
  • Replaces Biome effects.particle field
minecraft:visual/sunrise_sunset_color

Controls the color and intensity of the sunrise and sunset effect. If fully transparent, no sunrise or sunset will be rendered. Only visible with the overworld skybox type.

  • Value type: ARGB Color
  • Default value: “#00000000”
  • Modifiers: ARGB Color Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/sun_angle

The angle in degrees of the sun, clockwise from east to west, with 0 being directly up.
Only visible with the overworld skybox type.

  • Value type: float, angle in degrees
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/moon_angle

The angle in degrees of the moon, clockwise from east to west, with 0 being directly up. Only visible with the overworld skybox type.

  • Value type: float, angle in degrees
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/star_angle

The angle in degrees of the stars, clockwise from east to west, with 0 being directly up. Only visible with the overworld skybox type.

  • Value type: float, angle in degrees
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/moon_phase

The phase of the moon. Only visible with the overworld skybox type.

  • Value type: string id, one of:
    • full_moon
    • waning_gibbous
    • third_quarter
    • waning_crescent
    • new_moon
    • waxing_crescent
    • first_quarter
    • waxing_gibbous
  • Default value: “full_moon”
  • Modifiers: override
  • Interpolated: no
  • Resolved at the camera’s position
minecraft:visual/star_brightness

The brightness of the stars in the sky, where 0.5 is the normal brightness during the night and 0 is fully hidden. Only visible with the overworld skybox type.

  • Value type: float between 0 and 1
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/sky_light_color

The visual color of sky light. For blocks with a sky light level of 0 (or minecraft:visual/sky_light_factor is 0), this will have no effect. This is the value passed to the lightmap.fsh shader as SkyLightColor.

  • Value type: RGB Color
  • Default value: “#ffffff”
  • Modifiers: RGB Color Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:visual/sky_light_factor

The visual brightness of sky light. minecraft:visual/sky_light_color is multiplied by this value. This is the value passed to the lightmap.fsh shader as SkyFactor.

The corresponding gameplay effect is controlled entirely by minecraft:gameplay/sky_light_level.

  • Value type: float
  • Default value: 1.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the camera’s position
minecraft:audio/background_music

Controls how and which background music is played.

  • Value type: object with fields
    • default: optional object with fields:
      • sound: Sound Event to play
      • min_delay: int, minimum delay in ticks between tracks
      • max_delay: int, maximum delay in ticks between tracks
      • replace_current_music: optional boolean, whether this track can replace whatever is currently playing
        • Default: false
      • If not defined and not overridden, no music will start playing while this attribute is active
    • underwater: optional object with fields in the same format as default – if present and the player is underwater, will override default
    • creative: optional object with fields in the same format as default – if present and the player is in Creative Mode, will override default
  • Default value: {}
  • Modifiers: override
  • Interpolated: no
  • Resolved at the camera’s position
  • Replaces Biome effects.music field
minecraft:audio/music_volume

The volume at which music should play. Any music playing will fade over time to this value.

  • Value type: float between 0 and 1
  • Default value: 1.0
  • Modifiers: Float Modifiers
  • Interpolated: no
  • Resolved at the camera’s position
  • Replaces Biome effects.music_volume field
minecraft:audio/ambient_sounds

Controls which ambient sounds are played around the camera, and when.

  • Value type: object with fields
    • loop: optional Sound Event, sound to be continually looped
    • mood: object with fields, sounds that will be randomly played based on surrounding darkness
      • sound: Sound Event to play
      • tick_delay: int, the number of ticks between mood sounds, assuming a light level of 0
      • block_search_extent: int, the radius in which light levels are sampled
      • offset: double, an additional distance offset to apply to sounds produced
    • additions: list of objects with fields, sounds that will be randomly played
      • sound: Sound Event to play
      • tick_chance: float between 0 and 1, probability within a tick to play a given sound
  • Default value: {}
  • Modifiers: override
  • Interpolated: no
  • Resolved at the camera’s position
  • Replaces Biome effects.ambient_soundeffects.mood_sound, and effects.additions_sound fields
minecraft:audio/firefly_bush_sounds

If true and not below an opaque block, Firefly Bushes will produce idle sounds.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of a Firefly Bush
minecraft:gameplay/can_start_raid

If false, a Raid cannot be started by a player with Raid Omen.

  • Value type: boolean
  • Default value: true
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position that the Raid would be started
  • Replaces Dimension Type has_raids field
minecraft:gameplay/water_evaporates

If true, Water cannot be placed with a Bucket, melting Ice will not produce water, Wet Sponge will dry out when placed, and Dripstone will not produce water from Mud blocks.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of the interaction
  • Replaces Dimension Type ultrawarm field
minecraft:gameplay/bed_rule

Controls whether a Bed can be used to sleep, and whether it can be used to set a respawn point.

  • Value type: object with fields
    • can_sleep: one of:
      • always – the Bed can always be used to sleep (assuming the Bed is not obstructed and there are no monsters nearby)
      • when_dark – the Bed can only be used to be sleep when the global skylight level is less than or equal 11
      • never – the Bed can never be used to sleep
    • can_set_spawn – same as can_sleep
    • explodes – optional boolean, if true the Bed will explode when interacted with
      • Default: false
    • error_message: optional Text Component, the message to show if the player is unable to sleep or set their spawn
  • Default value: {can_sleep:”when_dark”,can_set_spawn:”always”,error_message:{translate:”block.minecraft.bed.no_sleep”}}
  • Modifiers: override
  • Interpolated: no
  • Resolved at the head position of the Bed block
  • Replaces Dimension Type bed_works field
minecraft:gameplay/respawn_anchor_works

Controls whether Respawn Anchors can be used to set spawn (or respawn). If false, the Respawn Anchor will explode once charged.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of the Respawn Anchor block
  • Replaces Dimension Type respawn_anchor_works field
minecraft:gameplay/nether_portal_spawns_piglin

Controls whether Nether Portal blocks can spawn Piglins.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of a random Nether Portal block
  • Replaces Dimension Type natural field
minecraft:gameplay/fast_lava

Controls whether Lava should spread faster and further, as well as have a stronger pushing force on entities when flowing.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved for a whole dimension (cannot be specified on a Biome)
  • Replaces Dimension Type ultrawarm field
minecraft:gameplay/increased_fire_burnout

Controls whether Fire blocks burn out more rapidly than normal.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of the burning Fire block
  • Replaces #increased_fire_burnout Biome Tag
minecraft:gameplay/piglins_zombify

Controls whether Piglins and Hoglins should zombify.

  • Value type: boolean
  • Default value: true
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of the zombifying entity
  • Replaces Dimension Type piglin_safe field
minecraft:gameplay/snow_golem_melts

Controls whether a Snow Golem should be damaged.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of the Snow Golem
  • Replaces #snow_golem_melts Biome Tag
minecraft:gameplay/sky_light_level

The effective light level of the sky used by mechanics such as mob spawning or Daylight Detectors. For example, a block fully exposed to the sky will be considered to have a light level of exactly this value, while a block deep in a cave will not be affected at all.

The corresponding visual effect is controlled entirely by minecraft:visual/sky_light_factor.

  • Value type: float
  • Default value: 15.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved for a whole dimension (cannot be specified on a Biome)
minecraft:gameplay/eyeblossom_open

If true, Closed Eyeblossoms will eventually open by random block ticks. If false, Open Eyeblossoms will do the opposite. If “default”, Open or Closed Eyeblossoms will remain in their current state.

  • Value type: one of:
    • true
    • false
    • “default”
  • Default value: “default”
  • Modifiers: override
  • Interpolated: no
  • Resolved at the Eyeblossom block’s position
minecraft:gameplay/turtle_egg_hatch_chance

The chance that a Turtle Egg block will switch to its next hatching state when randomly ticked.

  • Value type: float between 0 and 1
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the Turtle Egg block’s position
minecraft:gameplay/creaking_active

While true, Creaking Heart blocks (and their corresponding Creaking) will become active. On the other hand, when false, it will enter its dormant state.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the Creaking Heart block’s position
minecraft:gameplay/surface_slime_spawn_chance

An additional chance rolled when a natural Slime spawn attempt occurs in a biome with the #allows_surface_slime_spawns tag.

  • Value type: float between 0 and 1
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the position of the Slime spawn attempt
minecraft:gameplay/cat_waking_up_gift_chance

The chance that a Cat lying on its owner’s Bed will drop a gift (from the gameplay/cat_morning_gift loot table) when the player wakes up.

  • Value type: float
  • Default value: 0.0
  • Modifiers: Float Modifiers
  • Interpolated: yes
  • Resolved at the Cat’s position
minecraft:gameplay/bees_stay_in_hive

When true, Bees will try to navigate to their Hives and will not exit unless the Hive is broken or next to a Fire.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at a Bee or Bee Hive block’s position
minecraft:gameplay/monsters_burn

When true, monsters will burn while exposed to the sky.

  • Value type: boolean
  • Default value: false
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the monster’s position
minecraft:gameplay/can_pillager_patrol_spawn

When true, Pillager Patrols are able to spawn.

Note: the global skylight level must also be greater than 11.

  • Value type: boolean
  • Default value: true
  • Modifiers: Boolean Modifiers
  • Interpolated: no
  • Resolved at the position of the patrol spawn attempt
  • Replaces the #without_patrol_spawns biome tag
minecraft:gameplay/villager_activity

Controls the default AI activity for adult Villagers.

Not all activities are supported by Villager AI – if an unsupported one is chosen, the Villager will do nothing. The following activities are supported:

  • core

  • hide

  • idle

  • meet

  • panic

  • pre_raid

  • raid

  • rest

  • work

  • Value type: Mob Activity

  • Default value: “minecraft:idle”

  • Modifiers: override

  • Interpolated: no

  • Resolved at the Villager’s position

minecraft:gameplay/baby_villager_activity

Controls the default AI activity for baby Villagers.

Not all activities are supported by Villager AI – if an unsupported one is chosen, the Villager will do nothing. The following activities are supported:

  • core

  • hide

  • idle

  • meet

  • panic

  • play

  • pre_raid

  • raid

  • rest

  • Value type: Mob Activity

  • Default value: “minecraft:idle”

  • Modifiers: override

  • Interpolated: no

  • Resolved at the Villager’s position

Data Components

  • New components:
    • zombie_nautilus/variant – namespaced id from zombie_nautilus_variant registry

Item Components

Added food properties to the following fish bucket items:

  • minecraft:cod_bucket
  • minecraft:salmon_bucket
  • minecraft:pufferfish_bucket
  • minecraft:tropical_fish_bucket

Added minecraft:use_effects

  • Controls how the player behaves when using an item (right mouse click)
  • Format: object with fields
    • can_sprint: boolean, whether the player can sprint while using this item
      • Default value: false
    • interact_vibrations: boolean, whether using this item emits minecraft:item_interact_start and minecraft:item_interact_finish game events
      • Default value: true
      • speed_multiplier: float (0 to 1), the speed multiplier applied to the player while using this item
        • Default value: 0.2
      • e.g. use_effects={can_sprint:true,speed_multiplier:1.0}

Added minecraft:minimum_attack_charge

  • Sets the minimum attack charge on the attack indicator required to attack with this item
  • Format: float (0.0 to 1.0)
    • 0.0: no charge required
    • 1.0: full charge required

Added minecraft:damage_type

  • Specifies the type of damage this item deals
  • Format: string, damage type identifier
    • e.g. damage_type=’minecraft:spear’

Added minecraft:attack_range

  • Enables a custom attack range when using the item.
  • Overrides the normal entity interaction range for Player.
  • Regular melee attack range is computed for Mobs based on the distance of the target hitbox to their hitbox. This component modifies that distance check by adjusting minimum and maximum padding for the attack hitbox.
  • Mobs using minecraft:kinetic_weapon will have their attack range applied in the same way it applies to players
  • Format: object with fields
    • min_reach: float, the minimum distance in blocks from the attacker to the target to be considered valid
      • Default value: 0.0, valid from 0.0 to 64.0
    • max_reach: float, the maximum distance in blocks from the attacker to the target to be considered valid
      • Default value: 3.0, valid from 0.0 to 64.0
    • min_creative_reach: float, the minimum distance in blocks from the Creative Mode attacker to the target to be considered valid
      • Default value: 0.0, valid from 0.0 to 64.0
    • max_creative_reach: float, the maximum distance in blocks from the Creative Mode attacker to the target to be considered valid
      • Default value: 5.0, valid from 0.0 to 64.0
    • hitbox_margin: float, the margin applied to the target bounding box when checking for valid hitbox collision
      • Default value: 0.3, valid from 0.0 to 1.0
    • mob_factor: float, the multiplier applied to the min_range and max_range when checking for valid distance when item is used by a mob
      • Default value: 1.0, valid from 0.0 to 2.0

Added minecraft:kinetic_weapon

  • Enables a charge-type attack when using the item (primarily for Spears), where, while being used, the damage is dealt along a ray every time an entity comes in contact with it, with the damage based on the relative speed of the entities
  • Format: object with fields
    • contact_cooldown_ticks: integer, the cooldown in ticks after hitting, and loosing contact with an entity before being able to hit it again
      • Default value: 10
    • delay_ticks: integer, the time in ticks required before weapon is effective
      • Default value: 0
    • dismount_conditionsknockback_conditionsdamage_conditions: indicating the condition to apply dismount, knockback and damage effects respectively. Objects with fields:
      • max_duration_ticks: integer, the ticks after which the condition is no longer checked. This starts after delay has elapsed
      • min_speed: float, the minimum speed of the attacker, in blocks per second, along the direction that the attacker is looking
        • Optional, default value: 0.0
      • min_relative_speed: float, the minimum relative speed between the attacker and target, in blocks per second, along the direction that the attacker is looking
        • Optional, default value: 0.0
    • forward_movement: float, the distance the item moves out of hand during animation
      • Default value: 0.0
    • damage_multiplier: float, the multiplier for the final damage from the relative speed
      • Default value: 1.0
    • sound: Optional Sound Event to play when the weapon is engaged
    • hit_sound: Optional Sound Event to play when the weapon hits an entity
    • e.g. kinetic_weapon={forward_movement:1.0,delay:20,damage_conditions:{max_duration:60},knockback_conditions:{max_duration:40},dismount_conditions:{max_duration:20}}
  • The damage dealt is calculated as floor(relative_speed * velocity_multiplier) where relative_speed is the difference of speed vectors of the attacker and the target as projected onto the axis of the attacker’s view vector
    • Any additional damage from enchantments or attribute modifiers is added after this calculation

Added minecraft:piercing_weapon

  • Enables a quick attack that damages multiple entities along a ray (primarily for Spears)
  • Format: object with fields
    • deals_knockback: boolean, whether the attack deals knockback
      • Default value: true
    • dismounts: boolean, whether the attack dismounts the target
      • Default value: false
    • sound: Optional Sound Event to play when a player attacks with the weapon
    • hit_sound: Optional Sound Event to play when the weapon hits an entity
    • e.g. piercing_weapon={dismounts:true}

Added minecraft:swing_animation

  • Specifies the swing animation to play when attacking or interacting using this item
  • Format: object with fields
    • type: string, the animation identifier (nonewhackstab)
      • Default value: whack
    • duration: integer, the duration in ticks
      • Default value: 6
    • e.g. swing_animation={type:’stab’,duration:20}

Changed minecraft:consumable

  • The animation field has been updated:
    • Renamed spear to trident
    • Added new spear animation

Changed minecraft:intangible_projectile

  • Items with this component now show information about it in their tooltip

Entity Data

  • The AngryAt field has been renamed to angry_at
  • The AngerTime field has been removed
  • An anger_end_time (long) field has been added, containing the time anger ends in game ticks

Advancements

  • Added new spear_mobs trigger with fields:
    • player: optional entity predicate, the player using the kinetic weapon
    • count: optional integer, the number of mobs hit in a single use of the kinetic weapon

Damage Types

  • Added a new minecraft:spear damage type

Slot Sources

  • Added slot sources to allow the location of any inventory slot to be specified within datapacks
  • Format: object with fields
    • type: the slot source type
    • <type-specific>: additional fields depending on the type

minecraft:empty Type

  • Empty selection containing no slots

minecraft:group Type

  • Merges several slot sources into one, with the resulting selection containing all slots from each slot source provided
    • If a slot is included in more than one slot source, it will be repeated in the resulting slot source
    • e.g. [a, b] + [c, a] -> [a, b, c, a]
  • Format:
    • terms: list of slot sources to join
  • Can alternatively be written inline as a list of slot sources

minecraft:slot_range Type

  • Selects slots within a slot range from the inventory of an entity or block entity
  • Mirrors the behavior of the from argument of the /item command
  • Format:
    • source: an entity or block entity from which the slots will be sourced, from loot context
      • Can be block_entitythisattacking_entitylast_damage_playerdirect_attackertarget_entity, or interacting_entity
    • slots: a slot range in the format of <slot_type> or <slot_type>.<slot_number> (e.g. armor.chest or container.*)

minecraft:contents Type

  • Selects all non-empty slots from the inventory component of one or more items
    • If no item is stored inside that component, the resulting selection will be empty
  • The location of the item(s) whose inventory component to use is specified by another slot source
    • If the slot source includes more than one item with that component, the resulting selections will be merged identically as with the minecraft:group type
    • e.g. Bundle [a, b] + Shulker Box [c, d] -> [a, b, c, d]
  • Format:
    • component: the inventory component to target
      • Allowed values are minecraft:bundle_contentsminecraft:charged_projectiles, and minecraft:container
    • slot_source: a slot source containing slots with item(s) to target

minecraft:filtered Type

  • Applies a filter to the selected slots, excluding any non-matching slots from the resulting selection
  • Format:
    • item_filter: an item predicate to match against the items in each slot
    • slot_source: the slot source to filter

minecraft:limit_slots Type

  • Limits the number of slots provided, with the resulting selection containing at most that number of slots
    • Any slots bringing the number of slots above that limit will be excluded, in order of inclusion
    • e.g. [a, b, c, d] -> [a, b, c] if the limit is set to 3
  • Format:
    • limit: integer, the maximum number of slots to include in the resulting selection
    • slot_source: the slot source to limit

Example slot source selecting every slot with more than 16 items from the hotbar and armor slots of an entity:

{ "type": "minecraft:filtered", "item_filter": { "count": { "min": 16 } }, "slot_source": [ { "type": "minecraft:slot_range", "source": "this", "slots": "hotbar.*" }, { "type": "minecraft:slot_range", "source": "this", "slots": "armor.*" } ]
}

Loot Tables

  • Added new minecraft:slots loot pool entry
    • Provides the items contained within the selected slots to the loot table
    • Format:
      • slot_source: a slot source describing where the items are located
    • Supports all standard loot pool entry fields

Loot Functions

minecraft:filtered

  • Field modifier has been replaced with two fields:
    • on_pass – function or a list of functions to run when item_filter predicate passes
    • on_fail – function or a list of functions to run when item_filter predicate fails

minecraft:discard

  • Replaces any item stack with empty one
  • No fields

Predicates

Component Predicates

  • Component predicates (predicates field in block, item and entity predicates) now include predicates for checking existence of every component type
  • Those predicates are written as {<component_type>: {}}
  • Such predicate check passes as long as component is present, no matter the actual value
  • Existing predicates for specific components remain unchanged
  • Example:
    • {predicates:{written_book_content:{author:”foo”}} – existing format for matching books
    • {predicates:{written_book_content:{}} – special case of above that accepted any value, as long as component existed
    • {predicates:{instrument:{}} – checks if component minecraft:instrument exists (was not allowed before)

Entity Predicates

The flags predicate now supports new values:

  • is_in_water: when an entity is touching water or a bubble column
  • is_fall_flying: when an entity is gliding with an elytra

Item Predicates

  • Item predicate in command form (<item>[predicate~{…},component={…}]) has been extended to accept empty predicates for any component type
  • Similarily to component predicates in data, those empty entries only check for component existence
  • Existing shorter syntax for checking component existence remains unchanged
    • That means *[instrument] and *[instrument~{}] are equivalent

Enchantments

Enchantment Effect Components

  • minecraft:post_piercing_attack: Effects applying after a piercing attack with an item

Enchantment Entity Effects

  • minecraft:apply_impulse: applies an impulse to the targeted entity
    • direction – The first step of determining the impules is applying this vector as local coordinates (the same used by tp @s ^ ^ ^) onto the entity look vector
    • coordinate_scale – The second step is scaling the resulting vector by this vector on each axis in world space, X, Y and Z
    • magnitude – The third step is scaling the resulting vector by this Level-Based Value
  • minecraft:apply_exhaustion: applies exhaustion to the targeted entity
    • amount – Level-Based Value indicating the amount of exhaustion to apply
    • effective only on players
  • minecraft:play_sound: can now support a list of sound event identifiers, one for each level of enchantment. If a level is higher than the number of sounds, the last sound in the list is used

Enchantment Level-Based Values

Added exponent
  • Raises the base to the specified power level.
    • base – Level-Based Value indicating the base of the exponent.
    • power – Level-Based Value indicating the power of the exponent.

World Generation

Dimension Types

  • Added new attributes field for dimensions to specify Environment Attributes
    • Refer to the Environment Attribute Map section for information about the format of this field
  • Added a new optional timelines field that specifies which Timelines are active in this dimension
    • Format: a Timeline ID, a list of Timeline IDs, or a Timeline Tag
  • Many fields have been migrated to Environment Attributes:
    • Note: the form of these attributes may not be identical to the original fields
    • ultrawarm -> minecraft:gameplay/water_evaporatesminecraft:gameplay/fast_lavavisual/default_dripstone_particle
    • bed_works -> minecraft:gameplay/bed_rule
    • respawn_anchor_works -> minecraft:gameplay/respawn_anchor_works
    • cloud_height -> minecraft:visual/cloud_height
    • piglin_safe -> minecraft:gameplay/piglins_zombify
    • has_raids -> minecraft:gameplay/can_start_raid
    • natural -> minecraft:gameplay/nether_portal_spawns_piglinminecraft:gameplay/eyeblossom_openminecraft:gameplay/creaking_active
  • The effects field has been removed and replaced with the following new fields:
    • skybox – the skybox rendering type to use, one of:
      • none (was minecraft:nether effect ID)
      • overworld (was minecraft:overworld effect ID)
        • Following environment attribues are applied only when the skybox is overworld:
          • minecraft:visual/sky_colorminecraft:visual/sun_angle,minecraft:visual/sunrise_sunset_colorminecraft:visual/moon_phaseminecraft:visual/moon_angleminecraft:visual/star_angleminecraft:visual/star_brightness
      • end (was minecraft:end effect ID)
      • Default: overworld
    • cardinal_light – the direction of cardinal lighting that affects blocks, one of:
      • default (was minecraft:overworld and minecraft:end effect ID)
      • nether (was minecraft:nether effect ID)
      • Default: default
  • The fixed_time field has been replaced by a has_fixed_time boolean (default: false)
    • Time-based effects such as the angle of the sun are now specified instead by Environment Attributes
    • However, the remainder of behaviors formerly affected by fixed_time being present will now instead use the has_fixed_time boolean

Biomes

  • Added new attributes field for biomes to specify Environment Attributes
    • Refer to the Environment Attributes section for information about the format of this field
    • Note: certain attributes, such as gameplay/fast_lava are not evaluated positionally and thus cannot be set on a Biome
  • Many subfields under effects have been migrated to Environment Attributes:
    • Note: the form of these attributes may not be identical to the original fields
    • fog_color -> minecraft:visual/fog_color
    • water_fog_color -> minecraft:visual/water_fog_color
    • sky_color -> minecraft:visual/sky_color
    • particle -> minecraft:visual/ambient_particles
    • ambient_soundmood_soundadditions_sound -> minecraft:audio/ambient_sounds
    • music -> minecraft:audio/background_music
    • music_volume -> minecraft:audio/music_volume
  • The following color fields in the effects definition now support colors as a string in the form “#rrggbb”, or a float array in the form [red, green, blue]
    • water_color
    • foliage_color
    • dry_foliage_color
    • grass_color
    • grass_color_modifier

Tags

Block Tags

  • Added #can_glide_through – climbable blocks that can be glided through without stopping

Item Tags

  • Added #nautilus_taming_items – items that can be used to tame a Nautilus and a Zombie Nautilus
  • Added #nautilus_bucket_food – bucketed fish items that can be used to feed a tamed Nautilus and Zombie Nautilus
  • Added #nautilus_food – all items that can be used to feed a tamed Nautilus and Zombie Nautilus
  • Added #camel_husk_food – all items that can be used to feed a Camel Husk
  • Added #spears – all Spear weapons
  • Added #enchantable/lunge – all items that can be enchanted with the lunge enchantment
  • Added #enchantable/melee_weapon – all primary melee weapons including Swords and Spears
  • Renamed #enchantable/sword to #enchantable/sweeping
  • Updated #piglin_loved to include the Golden Nautilus Armor and the Golden Spear
  • Updated #piglin_preferred_weapons to include Golden Spears

Biome Tags

  • Removed #snow_golem_melts and #increased_fire_burnout – replaced by gameplay/snow_golem_melts and gameplay/increased_fire_burnout Environment Attributes
  • Removed #plays_underwater_music – replaced by only_underwater field in the audio/background_music Environment Attribute
  • Removed #has_closer_water_fog – replaced by visual/water_fog_end_distance Environment Attribute
  • Added #spawns_coral_variant_zombie_nautilus – biomes where the Coral Variant of the Zombie Nautilus can spawn
  • Removed #without_patrol_spawns – replaced by gameplay/can_pillager_patrol_spawn Environment Attribute

Entity Tags

  • Added #can_wear_nautilus_armor – entities that can equip Nautilus Armor
  • Added #nautilus_hostiles – entities that the Nautilus will be hostile towards when untamed
  • Changed #not_scary_for_pufferfish to include Nautilus and Zombie Nautilus
  • Added #burn_in_daylight – entities that burn in daylight
  • Added #can_float_while_ridden – entities that can float on water while being ridden
  • Changed #skeletons to include Parched
  • Changed #zombies to include Zombie Nautilus, Zombie Horse and Camel Husk
  • Changed #can_equip_saddle to include Nautilus, Zombie Nautilus, Zombie Horse and Camel Husk

Timeline Tags

  • Added #universal – Timelines that are active in every dimension
  • Added #in_overworld – Timelines that are active in the Overworld
  • Added #in_nether – Timelines that are active in the Nether
  • Added #in_end – Timelines that are active in the End

Resource Pack Versions 70.0 through 75.0

  • Unifont has been updated to 17.0.01
  • block.vsh/fsh copies terrain.vsh/fsh and handles ad-hoc blocks (e.g. held by entities)
  • Added ChunkSection uniform, used by terrain.vsh (which replaces DynamicTransforms)
  • New shaders have been introduced to perform GPU based sprite animations
  • Globals uniform now has camera coordinates
  • Item textures were split out of the blocks atlas into a separate new items atlas that does not have mipmaps
    • All textures used in an item model have to come from the same (items or blocks) atlas
    • All textures used in a block model have to come from the blocks atlas
    • Textures used for still water and lava are now hardcoded to minecraft:block/water_still and minecraft:block/lava_still
  • To prepare for future work, the game will now print a warning if any defined sprites in any atlases share a name
  • Block model and state format has been expanded to allow more rotations
  • Textures for the Leather Horse Armor item and equipment asset have been split into a tinted base layer and an overlay layer

Textures

  • texture section of *.mcmeta files has two new fields: mipmap_strategy and alpha_cutoff_bias
    • mipmap_strategy has the following supported values:
      • mean averages both color and alpha between groups of four pixels for the current mipmap level to generate the next mipmap level pixel. This was and stays the default strategy for most solid or translucent full block textures
      • dark_cutout is similar to mean, but blends colors in a way that makes the pixels bordering cutout pixels darker. This was and stays the strategy for leaves and Mangrove Roots. It simulates dark interior of the blocks
      • cutout is a new strategy that always generates a mipmap based on the original texture instead of the previous mipmap. Used for most cutout blocks that became mipmapped in this version.
      • strict_cutout is a modification of cutout that uses stricter alpha cutoff value leading to the textures using this value disappearing at higher mipmap levels. Is used for flowers and similar blocks to avoid artifacts.
      • auto is the default value and will make the game to pick mean for textures that do not contain fully transparent pixels and cutout for those that do
    • alpha_cutoff_bias is a float field for controling the alpha bias for cutout textures
      • Technically there is no limit for this value, it can be negative as well, but it does not make sense to set this higher than 1.0 or lower than -1.0 since the texture will become either fully opaque or fully transparent
      • Default value for this field is 0.0, and it can be increased for textures that can become too transparent/thin at distance, or decreased if it’s too “opaque”
      • It’s recommended to increment or decrease this value in fine granuality for finding the sweet spot. As an example, 0.1 is used for kelp textures in order to prevent them being fully trasparent at distance
      • Only used for lower mips of cutout textures, does not change the alpha of first mip level, and has no effect on other textures
  • Glass, Glass Pane and Redstone dust now support translucent textures
  • Added gui/container/nautilus used for the Nautilus inventory UI

Item Sprites

  • Added new item sprites:
    • item/nautilus_spawn_egg
    • item/zombie_nautilus_spawn_egg
    • item/camel_husk_spawn_egg
    • item/parched_spawn_egg
    • item/copper_nautilus_armor
    • item/iron_nautilus_armor
    • item/golden_nautilus_armor
    • item/diamond_nautilus_armor
    • item/netherite_nautilus_armor
    • item/netherite_horse_armor
    • item/leather_horse_armor_overlay
  • Added the following item sprites for the Spear weapon:
    • When in inventory: item/wooden_spearitem/stone_spearitem/copper_spearitem/iron_spearitem/golden_spearitem/diamond_spearitem/netherite_spear
    • When in hand: item/wooden_spear_in_handitem/stone_spear_in_handitem/copper_spear_in_handitem/iron_spear_in_handitem/golden_spear_in_handitem/diamond_spear_in_handitem/netherite_spear_in_hand

UI Sprites

  • Added new UI sprite:
    • container/slot/nautilus_armor
    • container/slot/spear – Spear icon used in the Smithing Table screen
    • container/slot/nautilus_armor_inventory – Nautilus icon used in Nautilus inventory UI
  • Added new nine-sliced sprites:
    • container/inventory/effect_background
    • container/inventory/effect_background_ambient
  • Removed the following sprites:
    • container/inventory/effect_background_large
    • container/inventory/effect_background_small

Celestials Atlas

  • A new celestials atlas has been introduced, including sprites for objects rendered in the sky such as the Sun and Moon
  • Includes sprites from <namespace>:textures/environment/celestial/<path>.png
  • The following textures have been moved or split:
    • textures/environment/sun.png -> sun
    • textures/environment/end_flash.png -> end_flash
    • textures/environment/moon_phases -> moon/full_moonmoon/waning_gibbousmoon/third_quartermoon/waning_crescentmoon/new_moonmoon/waxing_crescentmoon/first_quartermoon/waxing_gibbous

Mob Effect Sprites

  • Added new mob effect sprite:
    • breath_of_the_nautilus

Entity Textures

  • Added new entity textures:
    • entity/nautilus/nautilus.png
    • entity/nautilus/nautilus_baby.png
    • entity/nautilus/zombie_nautilus.png
    • entity/equipment/zombie_nautilus_coral.png
    • entity/equipment/nautilus_body/copper.png
    • entity/equipment/nautilus_body/iron.png
    • entity/equipment/nautilus_body/gold.png
    • entity/equipment/nautilus_body/diamond.png
    • entity/equipment/nautilus_body/netherite.png
    • entity/equipment/nautilus_saddle/saddle.png
    • entity/equipment/horse_body/leather_overlay.png
    • entity/camel/camel_husk.png
    • entity/equipment/camel_husk_saddle/saddle.png
    • entity/equipment/horse_body/netherite.png
    • entity/skeleton/parched.png
    • entity/skeleton/parched_overlay.png

Sounds

  • Added new sounds for Spears:
    • item.spear.hit
    • item.spear.use
    • item.spear.attack
  • Added special sounds for the Wooden Spear:
    • item.spear_wood.hit
    • item.spear_wood.use
    • item.spear_wood.attack
  • Added new sound events for the Lunge Enchantment:
    • item.spear.lunge_1
    • item.spear.lunge_2
    • item.spear.lunge_3
  • Added new sound events for the Nautilus:
    • entity.baby_nautilus.ambient
    • entity.baby_nautilus.death
    • entity.baby_nautilus.eat
    • entity.baby_nautilus.hurt
    • entity.baby_nautilus.swim
    • entity.nautilus.ambient
    • entity.nautilus.death
    • entity.nautilus.dash
    • entity.nautilus.dash_ready
    • entity.nautilus.eat
    • entity.nautilus.hurt
    • entity.nautilus.swim
    • entity.zombie_nautilus.ambient
    • entity.zombie_nautilus.death
    • entity.zombie_nautilus.dash
    • entity.zombie_nautilus.dash_ready
    • entity.zombie_nautilus.eat
    • entity.zombie_nautilus.hurt
    • entity.zombie_nautilus.swim
    • item.nautilus_armor.equip
    • item.nautilus_armor.unequip
    • entity.nautilus.riding
    • item.nautilus_saddle_equip
    • item.nautilus_saddle_underwater_equip
    • entity.baby_nautilus.ambient_land
    • entity.baby_nautilus.death_land
    • entity.baby_nautilus.hurt_land
    • entity.nautilus.ambient_land
    • entity.nautilus.dash_land
    • entity.nautilus.dash_ready_land
    • entity.nautilus.death_land
    • entity.nautilus.hurt_land
    • entity.zombie_nautilus.ambient_land
    • entity.zombie_nautilus.dash_land
    • entity.zombie_nautilus.dash_ready_land
    • entity.zombie_nautilus.death_land
    • entity.zombie_nautilus.hurt_land
  • Added new sound event for the Zombie Horse:
    • entity.zombie_horse.angry
    • entity.zombie_horse.eat
  • Added new sound events for the Parched:
    • entity.parched.ambient
    • entity.parched.death
    • entity.parched.hurt
    • entity.parched.step
  • Added new sound events for the Camel Husk:
    • entity.camel_husk.ambient
    • entity.camel_husk.dash
    • entity.camel_husk.dash_ready
    • entity.camel_husk.death
    • entity.camel_husk.eat
    • entity.camel_husk.hurt
    • entity.camel_husk.saddle
    • entity.camel_husk.sit
    • entity.camel_husk.stand
    • entity.camel_husk.step
    • entity.camel_husk.step_sand
  • Added new sound events for the Parrot:
    • entity.parrot.imitate.camel_husk
    • entity.parrot.imitate.parched
    • entity.parrot.imitate.zombie_horse
    • entity.parrot.imitate.zombie_nautilus

Item Models

  • Added new option for all item models: swap_animation_scale
    • Defaults to 1.0
    • Indicates how fast the item moves up and down when swapping items in hotbar
    • Large speeds can allow items that take more of the screen space to fully duck before swapped into the next item

Added new item model:

  • spear_in_hand – model for the Spear when in hand.

Block Models

  • Block model elements can now be rotated around multiple axes
    • Model is first rotated around X, then Y, then Z
    • New fields:
      • x – rotation around axis X in degrees, float, defaults to 0.0
      • y – rotation around axis Y in degrees, float, defaults to 0.0
      • z – rotation around axis Z in degrees, float, defaults to 0.0
    • Existing fields axis and angle can still be used
      • If both field sets are present, older notation takes presence
  • Existing restriction for angle value limiting them to [-45, 45] has been removed
    • Note: Names of faces are not influenced by rotation. Features that depend on them, like culling, will always use original directions

Block State Model Dispatch

  • Variants in block state dispatch files (defined in assets/…/blockstates/ can now be also rotated around Z axis
    • New optional field z has the same format as existing x and y fields: an integer with allowed values of 0 (default), 90180 and 270
    • Rotation around Z axis is applied after X and Y

Shaders & Post-process Effects

  • Added animate_sprite* core shaders, which use a new SpriteAnimationInfo uniform

Sprite Animations

  • Sprites (textures as part of a larger atlas) are now animated on the GPU rather than per-tick on the CPU
  • For regular frame-based animations, animate_sprite.vsh and animate_sprite_blit.fsh are used to perform the draw
  • For interpolated animations, animate_sprite.vsh and animate_sprite_interpolate.fsh are used to perform the draw
  • The UBO SpriteAnimationInfo contains information on where the sprite should be drawn to, within the greater texture atlas

Fixed bugs in 1.21.11

  • MC-2791 – The player model in the inventory screen renders in the wrong orientation when it’s not standing up straight
  • MC-22882 – Ctrl + Q doesn’t work on Mac
  • MC-53491 – The world border can change in size when the game is paused
  • MC-54988 – World border “warning” effect is not shown when graphics setting is set to “Fast”
  • MC-54989 – Sliders can be moved to positions between available values
  • MC-73186 – Gaps between the faces of item models and complex block models
  • MC-80476 – On macOS, the “drop item stack” shortcut conflicts with the “quit Minecraft” shortcut
  • MC-114265 – Mipmaps are too dark around transparent edges in textures (e.g. side of grass)
  • MC-146862 – Long effect names cause text to appear outside the effect box
  • MC-147718 – F1, F3, F3+[char] combos cannot be rebound
  • MC-149630 – Some particles have very thin, vertical lines that flash in and out around the particles
  • MC-154651 – Boats and rafts can break off paintings and item frames
  • MC-159275 – Map player markers on maps of the nether don’t rotate when doDaylightCycle is disabled
  • MC-162573 – A white outline is rendered on composters’ edges when viewed from far away
  • MC-171688 – Invisibility status of LivingEntity is not updated when ActiveEffects are modified directly
  • MC-179383 – Leaves not culled with graphics set to Fast
  • MC-188602 – In non-natural custom dimensions, if “bed_works” is set to true, beds cannot be used to skip the night or set the spawn point
  • MC-189837 – Nether fog is dark after rejoining a world that is thunder storming in the Overworld
  • MC-195505 – Short grass is unaffected by mipmap levels
  • MC-199467 – Certain entity animations stop after they’ve existed in world for too long
  • MC-234358 – Moiré patterns / aliasing on certain objects when viewed from a distance
  • MC-237158 – Magma blocks can generate on the ceilings of caves below aquifers
  • MC-238715 – The “minecraft:block.chest.locked” sound cannot be heard by other players when attempting to open locked blocks
  • MC-241321 – Darkness vignette effect is not shown when graphics setting is set to “Fast”
  • MC-245854 – Fast graphics description is slightly misleading
  • MC-245895 – View Bobbing stops working after long elytra flight
  • MC-248499 – Potion UIs displayed within the inventory don’t have cyan outlines if the effects are granted by beacons or conduits
  • MC-259368 – Z-fighting occurs on trimmed armor items
  • MC-263562 – World types in Realms backup info screen are untranslatable
  • MC-264151 – Glass blocks do not use mipmapping, but glass panes do
  • MC-266425 – Recipes for new waxed copper blocks are not grouped
  • MC-267364 – Teleporting in the air is considered flying by server
  • MC-269295 – Jump bar progress renders unused pixels from dynamic texture atlas
  • MC-271729 – Armadillo scute drops are not affected by the mob_drops game rule
  • MC-271938 – Mace smash attack can push players in creative mode that are flying
  • MC-271941 – Music discs can sometimes spawn inside jukeboxes when ejected from them
  • MC-274828 – Horse armor item and entity model tint affects the entirety of the textures
  • MC-276382 – Leather horse armor leggings & helmet parts are untextured
  • MC-276445 – Highlighted text within the anvil and creative inventory interfaces renders blue making it difficult to read
  • MC-277768 – Mipmapping no longer affects items
  • MC-278742 – Creakings cannot be ridden by any entities using commands
  • MC-279076 – Certain mobs will always retarget the player upon reloading the chunks, regardless of distance or gamemode
  • MC-295949 – Flying through vines with an elytra cancels the flight
  • MC-296952 – F4 key to toggle shaders cannot be rebound
  • MC-297328 – Unloading and reloading an area causes invisible entities to be visible until you get close enough.
  • MC-297367 – Checkbox filled status isn’t narrated
  • MC-298405 – Text components in the “label” of input controls in dialogs don’t support “hover_event”
  • MC-298767 – Piercing arrows phase through mobs that are in the same block
  • MC-298915 – Multishot crossbows loaded in survival or adventure mode show their secondary charged projectiles on a separate line in the tooltip
  • MC-298942 – Character body moves instead of the head when riding a happy ghast
  • MC-299136 – Hyper Potions (Ian Tsuchiura) is not mentioned in the credits and splash texts
  • MC-299196 – Waypoints fade out when an advancement is granted
  • MC-299876 – Labels for booleans within dialogs are rendered in a slightly different shade of white than normal
  • MC-300588 – Waypoint modifications reset upon death
  • MC-300642 – When texture atlases are large, gaps are rendered between blocks that have a low resolution
  • MC-300979 – The movement and duration messages in the demo introduction screen now have a text shadow
  • MC-301127 – Music stops and restarts when trying to connect to a server when the music frequency is set to constant
  • MC-301271 – Object text components do not render in some places unless there are text glyphs on the same line
  • MC-301311 – The “Transfer Now” button no longer renders highlighted when the java realms information box is selected
  • MC-301424 – entity_data item component detection is broken in resource packs
  • MC-301516 – The mouse cursor doesn’t change to the hand shape when hovering over tabs in the “Create New World” menu and similar screens
  • MC-301517 – The mouse cursor doesn’t change to the hand shape when hovering over arrows in the singleplayer, multiplayer, resource packs, and data packs menus
  • MC-301518 – The mouse cursor doesn’t change to the hand shape when hovering over checkboxes
  • MC-301520 – The mouse cursor doesn’t change to the hand shape when hovering over the difficulty lock button
  • MC-301527 – The mouse cursor doesn’t change to the resize shape when scrolling in the advancements menu
  • MC-301557 – The shading direction of the bolts on single and large copper chests does not match
  • MC-301595 – Music toasts briefly appear in the pause menu after a song has finished
  • MC-301632 – Comparators measuring jukeboxes do not update when a music disc is taken out of a jukebox if the music disc has already finished its song
  • MC-301754 – The hand animation plays when right-clicking shelves with nothing in your hand
  • MC-301756 – The “This is a Snapshot Realm…” box outline is rendered above the delete realm interface
  • MC-301763 – The outline of the “Invited” element within the realms “Players” tab renders above other tabs when selected and when a scroll bar is present
  • MC-301805 – Selected item outline on statistics screen renders outside of scissor area
  • MC-301879 – Double weathered and waxed weathered copper chests’ bottom texture looks off compared to the other variants
  • MC-301988 – Buttons in the telemetry screen are not aligned properly in some languages
  • MC-302030 – Setting commandBlocksEnabled to false prevents command blocks from being edited
  • MC-302071 – Single and double copper chests have inconsistent side textures
  • MC-302111 – Elements within the resource pack and data pack menus are not selected in order when using the TAB key
  • MC-302184 – Copper golems in cave/void air never turn into statues
  • MC-302209 – Debug renderers stop working when changing dimensions
  • MC-302246 – Sprite object component does not render in server list depending on component tree
  • MC-302254 – Cursor changes do not work for command suggestions
  • MC-302288 – All shelves have the oak tan map color
  • MC-302325 – When the player toggles a debug renderer using its hotkey (F3+B, F3+G) while in the debug options screen, the corresponding entry is not updated
  • MC-302338 – The narrator button in the Accessibility Settings menu doesn’t update upon pressing Ctrl+B
  • MC-302362 – Clicking on “Singleplayer” or “Multiplayer” in the main menu then immediately clicking on a world or server joins it even when not clicking the play button
  • MC-302409 – Lightning that strikes waxed lightning rods do not deoxidize nearby unwaxed copper blocks
  • MC-302469 – Creepers at the player’s exact position with an explosion radius of 0 set the player’s velocity to NaN
  • MC-302477 – Loot tables stopped supporting SNBT as entity data
  • MC-302482 – Resource and data pack names can overlap selection boxes when the scroll bar is present
  • MC-302493 – The mouse cursor doesn’t change to the hand shape when hovering over the close button in the “Add Realm” screen
  • MC-302516 – Zombie villagers spawn as the variant matching the biome at 0, 0, 0
  • MC-302549 – Server main thread deadlock during respawn position resolution when the entire world spawn radius is filled with fluids
  • MC-302601 – A white outline is rendered on anvils’ top texture when viewed from far away
Posted on Leave a comment

Be a Reply Guy on X: The 80/20 Math of Growing Your Social Media Brand

My very limited time on X has already shown that posts ranked by number of expression is highly non-linear. Maybe Zipf or Pareto distributed?

The first plot shows each post sorted by impressions (rank 1 = most impressions). You’ll see a steep drop from the top few posts, then a long tail of low-impression posts.

The point is:

  • post more stuff
  • most posts will fail or get ~zero impressions
  • some posts make all the difference

~20% of Posts/Replies Generate ~80% of the Impressions

Post ranked by impressions is not quite Pareto distributed (would be a straight line):

The log–log plot shows rank and impressions on logarithmic axes. If the points roughly line up on a straight downward-sloping line, that’s a classic power-law–like pattern.

The distribution looks heavy-tailed – a small number of posts carry a large share of total impressions.

Don’t Post – Be a Reply Guy

Also, replies have a much higher number of average impressions as compared to original posts. Smaller accounts should prioritize replies over posts.

If you want to grow your X account quickly, the best approach seems to be to reply to larger accounts. What to reply? Everything that comes to your mind. Just your authentic quick commentary. Don’t bother using AI – you’ll be too slow. Just use whatever comes to mind and increase your volume.

If you want to learn more on how using AI can improve your life, check out my free newsletter with 130k subscribers! 👍

The post Be a Reply Guy on X: The 80/20 Math of Growing Your Social Media Brand appeared first on Be on the Right Side of Change.

Posted on Leave a comment

Flock 2026 CfP open now until Feb 8nd 2026

Apply now for the Flock to Fedora 2026 Call for Proposals (CfP) at cfp.fedoraproject.org. This year, the submission deadline for the Flock CfP is Monday, February 8nd, 2026.

Flock 2026 registration is open

Last month we announced that we’ll be convening again in Prague for Flock 2026 in June. Everyone interested in attending can head over to the Flock 2026 website and register today! For those of you who want to contribute to Flock by presenting your thoughts and ideas in front of your fellow contributors, we’ve got some inspiration for you in the form of updated proposal themes.

Flock 2026 proposal themes

This year’s proposal themes are inspired by Fedora’s four foundations:

  1. Freedom: The Open Frontier — This theme explores how Fedora pushes the boundaries of technological freedom. We invite proposals on FOSS approaches to Artificial Intelligence, the advancement of open hardware like RISC-V, the development of open standards, and the protection of data privacy. Sessions should focus on how our work in the Fedora Project creates a more free and collaborative technological world for everyone.
  2. Friends: Our Fedora Story — This theme celebrates the people and practices that make our community unique. We seek proposals that share stories of mentorship, successful team collaboration, and effective onboarding within Fedora. Collaboration is key to our success. Sessions about our partnerships with other FOSS communities should center on the mutual benefits and the positive impact these relationships have on the Fedora Project.
  3. Features: Engineering Fedora’s Core — As a contributor conference, this theme dives deep into the craft of building our distribution and other Fedora outputs. We welcome sessions on improvements to our infrastructure, release engineering processes, quality assurance, packaging, and community tooling. This is the place for technical talks that showcase our engineering excellence and the collaborative work that makes Fedora’s deliverables possible, from code to final artifact.
  4. First: Blueprint for the Future: Fedora Linux 45 & 46 — This theme focuses on the near-term innovations that will define the next generation of Linux. With the next few Fedora Linux releases serving as the foundation for RHEL 11 and EPEL 11, this is a critical time. We are looking for forward-looking technical talks on the changes, features, and architectural decisions in F45 and F46 that will shape the future of the operating system, from the community desktop to the core of the enterprise platforms.

These themes are here to help get you thinking about topics you’d like to present. If you have something you want to talk about that doesn’t quite fit neatly into these themes, but you feel it belongs at Flock, go ahead and submit anyways! The reviewers are open to alternative topics. They are on the look out for topics that Fedora contributors are interested in discussing.

Flock financial travel assistance available

Financial travel assistance applications are now open as well. When you go to register to attend on the Flock 2026 website, you should also see links on how to apply for travel assistance if you need it. Financial assistance will be open until March 8th (several weeks after CfP closes on Febuary 8th). This is to give those with accepted talks an opportunity to figure out if they’ll need travel assistance.

Posted on Leave a comment

Flock 2026 CfP open now until Feb 2nd 2026

Apply now for the Flock to Fedora 2026 Call for Proposals (CfP) at cfp.fedoraproject.org. This year, the submission deadline for the Flock CfP is Monday, February 2nd, 2026.

Flock 2026 registration is open

Last month we announced that we’ll be convening again in Prague for Flock 2026 in June. Everyone interested in attending can head over to the Flock 2026 website and register today! For those of you who want to contribute to Flock by presenting your thoughts and ideas in front of your fellow contributors, we’ve got some inspiration for you in the form of updated proposal themes.

Flock 2026 proposal themes

This year’s proposal themes are inspired by Fedora’s four foundations:

  1. Freedom: The Open Frontier — This theme explores how Fedora pushes the boundaries of technological freedom. We invite proposals on FOSS approaches to Artificial Intelligence, the advancement of open hardware like RISC-V, the development of open standards, and the protection of data privacy. Sessions should focus on how our work in the Fedora Project creates a more free and collaborative technological world for everyone.
  2. Friends: Our Fedora Story — This theme celebrates the people and practices that make our community unique. We seek proposals that share stories of mentorship, successful team collaboration, and effective onboarding within Fedora. Collaboration is key to our success. Sessions about our partnerships with other FOSS communities should center on the mutual benefits and the positive impact these relationships have on the Fedora Project.
  3. Features: Engineering Fedora’s Core — As a contributor conference, this theme dives deep into the craft of building our distribution and other Fedora outputs. We welcome sessions on improvements to our infrastructure, release engineering processes, quality assurance, packaging, and community tooling. This is the place for technical talks that showcase our engineering excellence and the collaborative work that makes Fedora’s deliverables possible, from code to final artifact.
  4. First: Blueprint for the Future: Fedora Linux 45 & 46 — This theme focuses on the near-term innovations that will define the next generation of Linux. With the next few Fedora Linux releases serving as the foundation for RHEL 11 and EPEL 11, this is a critical time. We are looking for forward-looking technical talks on the changes, features, and architectural decisions in F45 and F46 that will shape the future of the operating system, from the community desktop to the core of the enterprise platforms.

These themes are here to help get you thinking about topics you’d like to present. If you have something you want to talk about that doesn’t quite fit neatly into these themes, but you feel it belongs at Flock, go ahead and submit anyways! The reviewers are open to alternative topics. They are on the look out for topics that Fedora contributors are interested in discussing.

Flock financial travel assistance available

Financial travel assistance applications are now open as well. When you go to register to attend on the Flock 2026 website, you should also see links on how to apply for travel assistance if you need it. Financial assistance will be open until March 8th (several weeks after CfP closes on Febuary 8th). This is to give those with accepted talks an opportunity to figure out if they’ll need travel assistance.

Posted on Leave a comment

New Requirements for Social Media Apps in Australia

Beginning December 10, 2025, a new Australian law will require certain social media platforms operating in Australia to prevent people under 16 from having a social media account. Impacted developers are responsible for making sure they follow the requirements of the new law, including deactivating any existing accounts for users under 16 and monitoring new signups.

Apple provides several tools to help meet the requirements of this law:

Declared Age Range API

The new Declared Age Range API helps developers provide age-appropriate experiences for their users. Developers can choose to request the age range that is most relevant to their use case, such as an age range of under 16, and modify app behavior based on this information.

App description on the App Store

When making an app available on the App Store, developers must include a description that helps users determine whether the app is appropriate for them. Developers can use this app description field to indicate information that may not be captured in other areas of the product page, such as social media age restrictions for people under a certain age.

In-app controls on the App Store product page

This year, Apple updated the age ratings questionnaire that is required for all apps. The update included adding new questions about in-app controls, such as the presence of age assurance and parental controls. Apps using age assurance methods — such as the Declared Age Range API — to comply with the law and prevent users under 16 from creating accounts can indicate the presence of this capability on their App Store product page.

Higher minimum age rating

With our recent update to age ratings, developers can set a higher age rating than the one generated by their responses to the age ratings questionnaire in App Store Connect. Developers can view the age rating for each of their apps and select a higher rating if they wish, in the App Information section in App Store Connect.

Age Suitability URL

When updating an app’s age rating, developers have the option to include an Age Suitability URL that links to a developer-hosted website with details about the app and its age-related content. When enabled, this URL appears on the App Store product page under the age ratings details section. Developers can use this URL to provide region-specific information and requirements, such as the prohibition in Australia of people under 16 having a social media account.

Learn more about the Declared Age Range API

Learn more about updating your app’s age rating

Learn more about an app’s product page

Posted on Leave a comment

Google’s SynthID is supposed to find fake AI images. But it failed when it mattered most.

📲 Problem Formulation: How can users reliably tell whether an image was created by a human or generated by AI? Specifically, with Gemini Nano Banana Pro and other recent image generation tools, you never know if a screenshot, scientific paper result, chart, or person is real or AI-generated.

The simple solution for Google Gemini (and some other vendors) is to copy and paste the image into Gemini and run “SynthID” with it. This is a complex watermark technique that works for most images. However, it doesn’t work in very important application areas as shown in Example 3.

Here are a few examples:

✅ Example 1: Gemini-Generated Image Detected

I created this thumbnail image for one of my recent YouTube videos and SynthID correctly classifies it as AI-generated.

🟰 Example 2: ChatGPT-Generated Image Not Detected

I created this image with ChatGPT in a recent query about a health question, so it was not generated by Google Gemini Banana Pro. It correctly classified it as not generated by Google but does not rule out that it was generated by AI.

❌ Example 3: Gemini-Generated Image Not Detected

Have a look at these two images – can you spot the difference?

Image 1: Original image from the Google Transformer Paper

Image 2: Fake image generated by Gemini Banana Pro

Unfortunately, SynthID was not able to determine if one was AI-generated. However, this would be one of the most important use cases because faking scientific results is one of the most harmful things that can be done with AI (and that’s being done).

See this chat confirming the inability of Gemini to determine if it was AI generated:

Here’s a video I made about this article:

The post Google’s SynthID is supposed to find fake AI images. But it failed when it mattered most. appeared first on Be on the Right Side of Change.