Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for TamKungZ_

A tiny Java signal/event library with optional Bukkit/Spigot integration, backed by GEB

Report SignalsLib?

R

0.2.0-SNAPSHOT

0.2.0-SNAPSHOT

This release reorganizes packages and renames parts of the API. Behavior is unchanged, but source compatibility with 0.1.x is not kept; see the migration table below.

Changed (packages)

  • signals-core is split into me.tamkungz.signals (SignalBus, Signal, SignalKey), me.tamkungz.signals.connection (Connection, ConnectionGroup), me.tamkungz.signals.geb (GebBridge) and me.tamkungz.signals.internal (not API).
  • signals-bukkit is split into me.tamkungz.signals.bukkit (BukkitSignals, SignalsPlugin), me.tamkungz.signals.bukkit.event (fluent builder and per-domain shortcuts) and me.tamkungz.signals.bukkit.internal (not API).
  • package-info.java added to every package.

Changed (split and renamed)

  • SignalBus: the GEB passthrough (custom events, @Listen listeners, sub-buses) moved to the new GebBridge, reached with SignalBus.geb(). SignalBus now only deals with typed signals.
  • BukkitSignals: the 15 per-event shortcuts moved to PlayerSignals, BlockSignals, EntitySignals and InventorySignals; the listener registration and its cache moved to EventSignalRegistry.
  • SignalRouter no longer contains its subscription type; it is now the package-private Subscription.
  • SignalEvent is now SignalEnvelope, and SignalRouter is public so the dispatcher GEB generates for the envelope can reach it. Both live in me.tamkungz.signals.internal and are not API.
  • SignalKey.cast is now public (the router needs it from another package).
  • SignalTest is split by feature into SignalTest, SignalKeyTest, SignalConcurrencyTest and ConnectionGroupTest.

Changed (build)

  • dist and the dist Maven repository no longer delete older versions; each build adds its own version and only files of the same version are overwritten.
  • Removed Task.project calls at execution time (deprecated in Gradle 8, an error in Gradle 10).

Removed

  • Unused Class-based overloads in SignalRouter.

Added

  • GebBridgeTest: listener and sub-bus connections, groups, post, and null checks.
  • EventSignalSource: what BukkitSignals implements and what the builder and shortcuts depend on, so bukkit.event does not depend on BukkitSignals.

Migration from 0.1.x

0.1.x 0.2.0
me.tamkungz.signals.Connection me.tamkungz.signals.connection.Connection
me.tamkungz.signals.ConnectionGroup me.tamkungz.signals.connection.ConnectionGroup
bus.geb() (raw IBus) bus.geb().bus()
bus.post(event) bus.geb().post(event)
bus.listen(listener) bus.geb().listen(listener)
bus.registerListener(l), unregisterListener(l), isRegistered(l) same methods on bus.geb()
bus.subBus(subBus, priority), registerSubBus, unregisterSubBus same methods on bus.geb()
me.tamkungz.signals.bukkit.BukkitEventSignal me.tamkungz.signals.bukkit.event.EventSignalBuilder
signals.event(type, priority, ignoreCancelled) signals.signal(type, priority, ignoreCancelled)
signals.event(type) signals.signal(type)
BukkitSignals.from(plugin, type, ...) BukkitSignals.standaloneSignal(plugin, type, ...)
signals.playerJoin() signals.players().join()
signals.playerQuit() signals.players().quit()
signals.playerKick() signals.players().kick()
signals.playerMove() signals.players().move()
signals.playerTeleport() signals.players().teleport()
signals.playerInteract() signals.players().interact()
signals.playerDeath() signals.players().death()
signals.playerRespawn() signals.players().respawn()
signals.playerCommand() signals.players().command()
signals.blockBreak() signals.blocks().breakBlock()
signals.blockPlace() signals.blocks().placeBlock()
signals.entityDamage() signals.entities().damage()
signals.entityDeath() signals.entities().death()
signals.inventoryClick() signals.inventories().click()
signals.inventoryClose() signals.inventories().close()

Information

Published
October 18, 2026
Author
0Downloads

Platforms

Paper
Paper
1.16–26.2