Skip to content

A collection of fabric mixins for paper events (and some more?)

License

Notifications You must be signed in to change notification settings

HGLabor/notify

Repository files navigation

🔔notify

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.

How to use

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")
}

Events currently implemented

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 item
  • PlayerItemDroppedEvent: called after an item was dropped
  • PrePlayerJoinEvent: called before a player joins the server
  • PlayerJoinEvent: called when a player joins the server. Allows modification of the join message
  • PostPlayerJoinEvent: called after a player joins the server
  • PlayerRemoveEvent: called after a player got removed from the player list
  • PlayerQuitEvent: called when a player quits the server. Allows modification of the quit message
  • PlayerSwapHandItemsEvent
  • PlayerTickEvent
  • PlayerSetSettingsEvent: called e.g. when player changes client language
  • EntitySpawnEvent
  • 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".

About

A collection of fabric mixins for paper events (and some more?)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published