Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
A tiny Java signal/event library with optional Bukkit/Spigot integration, backed by GEB
Changelog
0.1.1-SNAPSHOT
Changed
- License changed from MIT to WTFPL v2.
- POM license metadata and
PLUGIN.mdupdated to match.
Changed (build hardening)
- Repositories moved to
settings.gradlewithFAIL_ON_PROJECT_REPOS; Spigot and Paper repositories are restricted to the groups they serve. - Reproducible archives: fixed timestamps, stable file order, fixed permissions.
- JAR manifests no longer record the build user, OS, architecture, or JDK vendor.
- LICENSE.md is now actually bundled into
META-INF(the build previously looked for a non-existentLICENSE); the build fails if it or README.md is missing. - Tests use the JUnit BOM and an explicit
junit-platform-launcher. -Xlint:allenabled, Javadoc encoding set to UTF-8 with missing-comment warnings silenced, failed tests print full stack traces.signals-bukkit:org.jetbrains:annotationsadded ascompileOnlyto remove Spigot API classfile warnings.- The build uses the JDK Gradle runs on and fails early if it is older than
javaVersion; JDK auto-download is disabled. - Signing supports in-memory keys via
signingKey/signingPasswordorSIGNING_KEY/SIGNING_PASSWORD, falling back togpg. signals-bukkit:plugin.ymlexpansion now tracks the version as a task input; signature files are excluded from the shaded jar.gradlewconverted to LF line endings;.gitattributesadded to keep it that way.- CI: read-only permissions, job timeout, Gradle wrapper validation, no persisted checkout credentials.
.gitignoreextended with key and secret file patterns.
Added (compatibility)
- Declared support for Minecraft 1.16.5 through 26.x on Spigot and Paper.
- CI compiles against Spigot 1.16.5 and 26.2 and Paper 1.17.1, 1.18.2, 1.19.4, 1.20.1, 1.21.1 and 1.21.4.
- Optional
-PjavaRelease=<8..toolchain>lowers the bytecode level independently of the build JDK.
Added
META-INF/third-party/geb-LICENSE.txt: GEB's MIT license, bundled in the jar.
Fixed (hardening, signals-core)
SignalRouter: a throwing listener no longer stops the remaining listeners; the first exception is rethrown afterwards, others are added as suppressed.SignalRouter.once: listener can no longer run twice under concurrent fires, and no longer breaks if fired beforeconnectreturns.ConnectionGroup.add: connection is no longer leaked when the group is disconnected concurrently.ConnectionGroup.disconnect: one failing connection no longer prevents the rest from disconnecting.Signal: null checks forpredicate,listener,mapper;upstreamis nowvolatile.SignalRouter.clear(): listeners connected during a clear are no longer dropped from the router while still reporting as connected.SignalRouter: connect and disconnect are atomic per key, so a listener can no longer be added to a listener list that was just removed.SignalRouter.once: the self-reference is now safely published across threads.SignalKey: derived keys are unique by id, so a named key such asderived-1can no longer collide with an internal one.ConnectionGroup: disconnected connections are pruned as the group grows;ConnectionGroup.of(null)is rejected with a clear message.SignalandSignalBus: a null group is rejected before any listener is registered, so nothing is leaked;SignalBus.signal(null)is rejected.- Six new tests cover the above.
Fixed (hardening, signals-bukkit)
BukkitSignals: every priority / ignoreCancelled combination shared one signal channel, so each listener ran once per registered combination and priority order was ignored. Each combination now has its own channel; the default (NORMAL, not ignoring cancelled) keepsSignalKey.of(eventType).BukkitSignals,BukkitEventSignal: null event types and priorities are rejected up front.
Platforms
Paper
1.16–26.2