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
PlayerAttackEntityEvent
PlayerHungerChangeEvent
PlayerItemPickupEvent
PlayerPlaceBlockEvent
PlayerSlotClickEvent
(also called when player attempts to drop an item in the inventory)PlayerItemCraftEvent
EntityDamageEvent
Server
PlayerBreakBlockEvent
PlayerDeathEvent
PlayerInteractItemEvent
PlayerInteractBlockEvent
PlayerItemDropEvent
: 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 messagePlayerSwapHandItemsEvent
PlayerTickEvent
PlayerSetSettingsEvent
: called e.g. when player changes client languageEntitySpawnEvent
ProjectileHitEvent
: called when a projectile hits another entity
Client
EntityOnTrackedDataSetEvent
EntityInitDataTrackerEvent
MouseButtonEvent
MouseScrollEvent
MouseCursorEvent
KeyPressedOnceEvent
PumpkinOverlayRenderEvent
ClientStopEvent
PreTickEvent
PostTickEvent
GameDisconnectEvent
GameJoinEvent
PlayerEntityRendererScaleEvent
: 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"
.