This data pack provides #minecraft:init
function tag, called on the initial #minecraft:load
after server process startup.
Caution
This data pack strongly depends on the internal implementation details of Minecraft and may not work in future versions!
Warning
An error message about UTFDataFormatException
is printed every time a world is saved.
You can safely ignore this message.
A string tag larger than 65535 bytes can exist in memory with no problem.
However, when it is tried to be saved to a command storage file, a UTFDataFormatException
occurs and an empty string is saved instead by StringFallbackDataOutput
.
Once this happens, the string tag becomes out of sync between in-memory (too long) and on-file (empty).
Since the same command storage file is never loaded more than once during the lifetime of the server process, this out of sync will continue until the server is stopped.
When the server process is started again, an empty string tag is loaded from the command storage file.
In light of the above, #minecraft:init
can be implemented as follows:
---
title: The lifecycle of a server process
---
flowchart TD
Start --> Load
Load --> C1{{Does the string tag exist?}}
C1 -- Yes --> C2{{Is the string tag empty?}}
C1 -- No --> C3
C2 -- Yes --> C3
C3[Create a too long string tag] --> Init
Init --> Tick
C2 -- No --> Tick
Tick --> Tick
Tick -- Reload --> Load
Tick --> Stop
Stop -- Restart --> Start