Links
Tags
Creators
Details
All versions
Fixed (hardening,
Fixed (hardening,
0.1.1-SNAPSHOT
Release
SignalsLib 0.1.1-SNAPSHOTlast week 4
Compatibility
Minecraft: Java Edition
26.2
26.1.x
1.21.x
1.20.x
1.19.x
1.18.x
1.17.x
1.16.x
Platforms
Bukkit
Paper
Purpur
Spigot
Changes
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.
Supplementary resources
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:UxiIddjL:ObdgT8aN"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:UxiIddjL:ObdgT8aN"
}

