A common source of crashes on modded Minecraft servers comes from modders accidently calling client only code from the client, this PR is another large step towards elimitating that.
This PR has been months in the making and years in the planning, requiring major changes to Loom & Loader. In recent Minecraft versions Mojang has made it easier than ever to cleanly split the jar, going against the status-quo of merging the client and server into one jar.
From the start we have designed Fabric to have a very clear split between client and common (client & server) code. Fabric has always encoraged keeping client only code seprate from the server, this can be seen at a fundamental level with the entrypoints in Loader. Fabric API's have all been designed with this mind.
This PR provides a compile safety net around Fabric API using client only code on the server. Even though there are almost 400 changed files, minimal changes beyond moving the files were required to achieve this in Fabric API, thanks to the effort of all contributors in the past.
These changes should not affect modders or players in anyway, a single "universal" jar is still produced. Im happy to awnswer any questions.
* Update command registration API to reflect vanilla changes
* Allow module versions in impl+mixin packages
* Use v2 module, keeping v1 for server commands at least
* update, address review
Co-authored-by: modmuss50 <modmuss50@gmail.com>
Use explicit casts instead of .class.cast in mixins
Reorganize API class, and make it work for any living entity
add LivingEntityFeatureRenderEvents to disable cape rendering
Reorganize/rename hook, and add ALLOW event
Fix missing mixin return & cosmetic adjustements
* Add event for setting bed occupation state
* Add wake up pos event and update tests
* Bump version
Just in case. I have a bad feeling that
this could become a patch version otherwise.
* Add code tags for true/false/null in EntitySleepEvents jd
* Add Dynamic annotations for lambda body mixins
* Update class javadoc to contain the new events
* Un-hardcode FACING property checks from only BedBlocks
* Use a better injection point for EntitySleepEvents.ALLOW_BED
* Fix#1680
* Bump entity events version
* Clarify javadoc
* Let's not forget license headers
* Add a note about the vanilla bug
* Update BedBlockMixin.java
* Add sleeping events
* Fix wake up event triggering on every wakeUp() call
* Make direction modifications stackable
* Simplify by not using Optional in MODIFY_SLEEPING_DIRECTION
* Add two new events
* Let's call it VERIFY_BED
* And it's ALLOW_BED now
* Add the rest of the events
* Clarify docs
* Expand docs, add missing vanillaResult
* WAKE_UP -> STOP_SLEEPING, javadoc
* Make sleepingPos checks more consistent in LivingEntityMixin
* Entity Events v1.
First up is an event fired after a living entity is damaged. All vanilla living entities except armor stands work with this event.
* Events related to killing of entities, changing world, player respawn/copyFrom
Death related:
an entity killing something and an entity being killed by an adversary
Player related:
After respawn, copy to
* Adversary stuff isn't needed
* checkstyle again
* Call AFTER_KILLED_OTHER on a ServerPlayerEntity upon death.
* Add event which is fired when a player first joined a server and add functional interface annotations
* Update build.gradle
* mispelled
* Some renames, test events, drop damage event
Damage events need further consideration in future
* Comments and null check
* Update for mappings
* Warning comment
* Remove first join event and teleport helper
First join does not work atm and teleport is in dimensions pr
* Module dependencies
* Javadoc tweaks
* The serverening
(cherry picked from commit 79b23bee5b)