1.0.0-RC1
Pre-releaseThe attached assests have the builds. Fabric is labeled fabric, forge is labeled forge, and the jar for 1.17 snapshots is labeled according to the version the jar was built against (i.e 21w11a). Snapshot builds are only available for fabric, since forge does not do snapshots.
Completely rewrite how lighting is loaded in for clients
Attempts to fix #25 and #40
The old hook was vulnerable to mods doing unexpected things, especially
serverside. The old method also relied on unreliable ordering of events
inside packet handling. New method just hooks directly into the
packet handling methods to avoid conflicting behavior with mods and
to create more reliable hooks.
Completely rewrites internal scheduling of light tasks
This is the fix for chunk loading breaking while under
high block update stress. I know there was an earlier commit,
but hindsight is telling me that commit really didn't do anything.
However the complete rewrite of the internal scheduling will
fix the problem.
Old scheduling was very vulnerable to block updates completely
overloading everything. The old scheduling was also incapable of
indicating to the chunk system whether block updates or other
light modifying tasks were pending for a chunk. The new
scheduling now groups tasks by chunk (light update, needs lighting,
edge checks) and simply drains tasks by chunks. In the event
that there are a lot of block updates, they no longer pile up
in a queue since they are just grouped onto their chunk, which
will eliminate duplicate updates. And since it's a FIFO by chunk,
the maximum latency for a light update to happen is simply the
number of chunks queued. The new queue also tells the chunk
system to not unload chunks until any lighting task is fully complete
for that chunk and its 1 radius neighbours. This will eliminate
problems where the light engine was never able to complete tasks
before server shutdown. This also officially kills light suppression.
Before you ask, no I'm not going to re-add lighting bugs to my light
engine. I want lighting to work, which means I need to fix it when
it clearly doesn't work.
Mark the vanilla light engine fields in LevelLightEngine as null
This will break any mod expecting them to be non-null. But since
we replace the light engine, it's better this way since it forces
an explicit break rather than a silent break.
Initialise block nibbles in 1 radius of non-empty chunks
While vanilla is perfectly capable of handling null nibbles
in these cases, some protocol hacks might not expect this behavior.
I've taken an approach to mod conflicts that there's really nothing
I can do about it since I rewrite the light engine. Reporting them is still
useful for other people to track what is and isn't working however. Sometimes
I can do things about them, but I wont lose sleep if I can't.
Most of the remaining problems I see are with mod conflicts. Can't really do anything about them,
so they're not going to block full release.
There do appear to be some problems with how the client is receiving light data, and hopefully
the fixes in 1.0.0-RC1 fix those issues.