Interface TextBundle


public interface TextBundle
Every text capability, for one server version, expressed without naming Adventure.

Implementations live in the nested internal-libs/adventure.jar and are loaded through a child classloader, because they are the classes that touch the relocated Adventure. This interface is the boundary: it lives on the plugin classloader, names only VersionedComponent, Bukkit types and String, and is therefore safe for a module's NmsBundleImpl to reference.

Split out of NmsBundleImpl because an adapter is loaded whenever any capability from its module is used. On 26.2 commandMapModifier dispatches to v1_17_R1, so an adapter that referenced the text implementations directly dragged the relocated Adventure onto a server that has Adventure natively and never touches the shaded copy.

fromJson and toJson are how the native tier crosses the boundary. A JSON string carries a component between the server's own Adventure and the relocated one without either side naming the other's types.