QuiltMC / quilted-fabric-api

Re-implementation of the Fabric API using QSL as implementation instead.
Apache License 2.0
87 stars 32 forks source link

Registry Desync when connecting to server #115

Open Noaaan opened 1 year ago

Noaaan commented 1 year ago

There is some weird behaviour in Quilt environments where registering blocks in a certain way causes a registry desync. This has not been reported in any capacity in a Fabric environment, and has happened a couple of times during the Blanketcon pack development.

This only manifests sometimes when launching and connecting to a server. It is somewhat hard to reproduce, which points to it being some sort of race condition. Only log entry which seems out-of-place is the following line:

[Render thread/WARN] (Quilted Fabric Content Registries) An unregistered entry on the Registry[ResourceKey[minecraft:root / minecraft:block] (Stable)] registry was attempted to be registered in a content registry through the Quilted Fabric API bridge! Its instability will be circumvented through the activation of the registry's deferring queue, which may affect performance!

When the bridge is triggered the desync seems to happen every time. I am having a very hard time reproducing the issue, but I have had it happen once myself.

For some context; Alloy Forgery has an unique registry system where data is read before registration, and a RegistryEntryAddedCallback event is registered for specified blocks in order to register Forge Controllers once the game launches. This essentially allows you to create custom Alloy Forges using data.

Code for context: Alloy Forgery - ForgeDefinition class, creates the event owo-lib - ComplexRegistryAction, schedules the event

Mods in question: Mythic Metals 0.18.2+1.20 Alloy Forgery 2.0.22+1.20 owo-lib 0.11.1+1.20

Logs from the event (provided by jamalam): Client: https://mclo.gs/h1aqcjO Server: https://mclo.gs/NY2QLro