We don't want to create mixins for each project over and over again for the same events we could just use in the good old paper days. This is why we created this spectacular library/mod, where we just have to add the events once and can use them in every other project!
For this we use alert, a blazing fast event listening utility. See alert's documentation on how to listen to events.
Add the following to your mod's build.gradle.kts file:
repositories {
mavenCentral()
}
dependencies {
// ...
modImplementation("de.hglabor:notify:1.1.3")
}Then put the built jar file of notify into your mods folder. You should be able to subscribe to the events like this:
// (On the server)
subscribeToEvent<PlayerJoinEvent> {
logger.info("Player ${it.player.name.string} joined")
}Client-sided events are unstable! (server/common events should work on the server)
Common
PlayerAttackEntityEventPlayerHungerChangeEventPlayerItemPickupEventPlayerPlaceBlockEventPlayerSlotClickEvent(also called when player attempts to drop an item in the inventory)PlayerItemCraftEventEntityDamageEvent
Server
PlayerBreakBlockEventPlayerDeathEventPlayerInteractItemEventPlayerInteractBlockEventPlayerItemDropEvent: called when a player attempts to drop an itemPlayerItemDroppedEvent: called after an item was droppedPrePlayerJoinEvent: called before a player joins the serverPlayerJoinEvent: called when a player joins the server. Allows modification of the join messagePostPlayerJoinEvent: called after a player joins the serverPlayerRemoveEvent: called after a player got removed from the player listPlayerQuitEvent: called when a player quits the server. Allows modification of the quit messagePlayerSwapHandItemsEventPlayerTickEventPlayerSetSettingsEvent: called e.g. when player changes client languageEntitySpawnEventProjectileHitEvent: called when a projectile hits another entity
Client
EntityOnTrackedDataSetEventEntityInitDataTrackerEventMouseButtonEventMouseScrollEventMouseCursorEventKeyPressedOnceEventPumpkinOverlayRenderEventClientStopEventPreTickEventPostTickEventGameDisconnectEventGameJoinEventPlayerEntityRendererScaleEvent: adds a scale factor to the player entity renderer
Every entity (and player) event implements the EntityEvent interface and additionally every player event
implements the PlayerEvent interface. That way we can easily add custom event listeners, e.g. like this:
inline fun <reified T : Event> customSubscribeToEvent(
noinline isActiveCallback: () -> Boolean = { true },
priority: Int = -1,
noinline handleCallback: (T) -> Unit,
) = subscribeToEvent<T>(isActiveCallback, priority) {
if (it is EntityEvent && it.entity is PlayerEntity && it.entity.customProperty == "foo") {
handleCallback(it)
}
}In this example, when we e.g. use customSubscribeToEvent<PlayerDeathEvent> {...} we only listen to player death events
where the player has the customProperty set to "foo".