Repository navigation
Releases: Hydr46605/Lattice
Releases · Hydr46605/Lattice
Release list
Lattice 0.8.9
Lattice 0.8.9 - Testability, Diagnostic Clarity, and Release Docs
Added
PaperDiagnosticContributorsnapshot detail keys are now documented in Javadoc:plugin,version,dataFolder,enabled,currentThread. Plugin authors reading the contributor class directly can see the snapshot shape without consulting the source.PaperIntegrationBootstrap.failureMessage(Throwable)andfailureDetails(Throwable)are nowstaticpackage-private so the formatting contract can be locked by a unit test without going through the reflective bridges.PaperDiagnosticContributor.detailsFor(Path, String, String, boolean)is now a package-private helper, parameter-validated, so the snapshot detail-map shape is unit-testable without instantiatingJavaPlugin(whose constructor is unsupported outside the Bukkit loader).PaperIntegrationBootstrapFailureLoggingTestlocks the failure-logging contract for the 7 reflective integration bootstrap paths.PaperDiagnosticContributorTestlocks thecurrentThreadsnapshot detail so it cannot accidentally drift to a hardcoded value.
Changed
PaperDiagnosticContributor.detailsFor(...)parameter order is now(Path dataFolder, String pluginName, String pluginVersion, boolean enabled). ThePathis first to visually break up two adjacentStringparameters of different meaning and remove a call-site transposition footgun. The sole caller (snapshot()) was updated to match. Observable output (the snapshot detail map keys and values) is unchanged.docs/api-guide.md#diagnosticsnow spells out the snapshot detail keys for thepapercontributor plus the integrationdetailsmap shape (reason/messagefor failures,apiClass/versionfor anAVAILABLEPacketEventsbinding).docs/build-and-release.mdclarifies that bothGitHub ReleaseandModrinth Releaseworkflows auto-trigger on push events matchingv*tag patterns. A normalgit push origin v<version>therefore publishes to Maven Central, the GitHub Packages mirror, GitHub Release, and Modrinth in parallel. Manualgh workflow run "Modrinth Release"is reserved for recovery; the workflow already performs its own idempotency check against the Modrinth API before publishing.PaperIntegrationBootstrapFailureLoggingTest.failureDetailsMapIsImmutablenow usesassertThrows(UnsupportedOperationException.class, ...)to actually verify theMap.ofimmutability claim (replaced a previouscontainsKeytautology).
Fixed
- A transposition footgun in
PaperDiagnosticContributor.detailsFor(...): the previous(String, String, Path, boolean)parameter list placed two strings of different meaning adjacent to each other. Reorder eliminates this hazard without changing observable behavior.
Compatibility
- No plugin authoring API changes.
- No stable
@StableApitypes were modified. - No new transitive dependencies.
- Tests are new additions only; no existing tests were changed or removed.
failureDetailsandfailureMessagewere previouslyprivate staticand remain@InternalApi; they are nowstaticpackage-private to satisfy the same internal-only contract.
Still Experimental (no change in status)
dev.beryl.lattice.updatedev.beryl.lattice.hookdev.beryl.lattice.templateand annotation processors
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.9 - Maven Central:
io.github.hydr46605:lattice-core:0.8.9 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.9 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.9,dev.beryl:lattice-core:0.8.9,dev.beryl:lattice-paper:0.8.9 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.8
Lattice 0.8.8 - Integration Failure Surfacing And Diagnostics Cleanup
Added
PaperDiagnosticContributor.snapshot()now includes the current JVM thread name as acurrentThreaddiagnostic detail. This makes it easier to verify Folia scheduler context when inspecting a runtime snapshot through diagnostics.- Reflective integration bootstrap failures now consistently surface the offending exception class and message through
SimpleIntegration.failed(...)details. Diagnostics commands can read the samereasonandmessagekeys for every optional integration (previously onlyPacketEventsexposed them).
Changed
PaperIntegrationBootstrapfailure logging is now a concise single-line warning per integration instead of a full reflective stack trace. The exception class and message are still preserved in thedetailsmap on the returnedSimpleIntegrationso diagnostics remain rich.PaperDiagnosticContributor.snapshot()entries are still keyed by their original ordering;currentThreadis appended afterenabled.
Fixed
- Inconsistent diagnostic detail population for failed reflective integrations:
Junction,PlaceholderAPI,Nexo,Oraxen,ItemsAdder, andCraftEnginebootstrap failures now reportreasonandmessageconsistently withPacketEvents.
Compatibility
- No plugin authoring API changes.
- No stable
@StableApitypes were modified. - No new transitive dependencies.
- Server owners who relied on full reflective stack traces in plugin logs see a single-line summary instead; the underlying exception class and message are still available through the diagnostic snapshot for any
IntegrationwithFAILEDstatus.
Still Experimental (no change in status)
dev.beryl.lattice.updatedev.beryl.lattice.hookdev.beryl.lattice.templateand annotation processors
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.8 - Maven Central:
io.github.hydr46605:lattice-core:0.8.8 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.8 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.8,dev.beryl:lattice-core:0.8.8,dev.beryl:lattice-paper:0.8.8 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.7
Lattice 0.8.7 - Folia Thread-Safety Hardening
Fixed
Critical (AsyncCatcher Errors)
-
[CRITICAL] Fixed
PaperTaskService.scheduleEntity()thread validation- Added thread ownership validation before entity access
- Prevents unsafe entity lookups from async contexts
- Uses
ReentrantLockfor better granularity
-
[CRITICAL] Fixed race conditions in UI event handlers
- Synchronized
onInventoryClick()withReentrantLock - Synchronized
onPrepareAnvil()withReentrantLock - Added
closed()checks to prevent operations on closed sessions
- Synchronized
-
[CRITICAL] Fixed block/player access in text input renderers
- Protected
getBlock()calls inPaperVirtualSignTextInputRenderer.restore() - Protected
getLocation()calls in both virtual sign and anvil renderers - Prevents AsyncCatcher errors during text input UI operations
- Protected
-
[CRITICAL] Fixed PacketEvents callback thread safety
- Wrapped
PacketEventslisteners to execute in global region scheduler - Prevents unsafe operations from packet thread
- Wrapped
Important (Race Conditions)
-
[IMPORTANT] Added volatile modifiers to
PaperTextInputUiSessioncompleted,anvilView,signPosition,signLocationare now volatile- Ensures visibility across event handler and scheduler threads
-
[IMPORTANT] Synchronized
handleVirtualSignChange()withReentrantLock- Prevents race condition with concurrent session removal
-
[IMPORTANT] Synchronized
PaperInventorySurfaceRenderer.render()page access- Copies button list atomically to avoid concurrent modification
- Prevents
IndexOutOfBoundsException
-
[IMPORTANT] Synchronized
runOnPlayer()ownership check- Prevents race condition between region ownership check and schedule
-
[IMPORTANT] Added thread-safety documentation to PlaceholderAPI integrations
- Documents that handlers are called from arbitrary threads
- Lists unsafe and safe operations
Minor (Edge Cases)
- Improved lock granularity in
session(Inventory)lookup - Prevented double registration in
registerRefreshEvent()
Artifacts
- Maven Central: publishing is still finalizing;
io.github.hydr466050.8.7 coordinates may not resolve immediately - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.7,dev.beryl:lattice-core:0.8.7,dev.beryl:lattice-paper:0.8.7 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.6
Added
- Added direct standalone host contract coverage for managed plugin registration, duplicate registration protection, handle detach, host diagnostics, reverse-order shutdown, and shared storage cleanup.
- Added an experimental
UpdateServicefor GitHub release checks, typed update results, release assets, and explicit jar install requests. - Added
PaperUpdateInstallerso Paper plugins can implement confirmed update commands that back up the old jar intoLattice/Old, replace the plugin jar, and prompt for a server restart.
Changed
- Standalone host shutdown now disables all managed plugin runtimes in reverse registration order even when one dependent plugin fails during disable.
- Standalone host close now continues through managed plugin disable, shared storage pool close, and handle cleanup before rethrowing a collected shutdown failure.
- The standalone Lattice plugin shutdown path now continues through managed plugin disable, host runtime disable, Bukkit service unregister, and host close before rethrowing a collected shutdown failure.
LatticeRuntime#disable()now closes registered services and cancels tasks even when called before the runtime has loaded.- The standalone Lattice plugin now performs a best-effort startup check for newer Lattice GitHub releases and stays silent when it is already current.
- Public docs now describe the shared runtime host lifecycle, dependent plugin detach behavior, and the
disable()beforeload()cleanup guarantee. - Public docs now include update-check and confirmed-install examples for plugin-owned admin commands.
Fixed
- A failed dependent plugin disable no longer prevents later managed plugins from being disabled during standalone host shutdown.
- Shared JDBC pools are now closed during standalone host close even if a managed plugin fails while disabling.
- Hosted plugin handles are now detached when a newly created runtime is disabled before it has loaded.
- The runtime lifecycle docs no longer duplicate the
enable()lifecycle step.
Compatibility
- Existing
LatticeHost,LatticePluginHandle, andLatticeRuntimemethod signatures are unchanged. - Dependent plugins using
LatticePaperPluginorLatticePaper.bootstrap(...)do not need code changes. - Shutdown failures are still surfaced to the caller, but cleanup now continues before the failure is rethrown.
- Update installs are opt-in and must be triggered by plugin code; no dependent plugin jar is replaced automatically.
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.6 - Maven Central:
io.github.hydr46605:lattice-core:0.8.6 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.6 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.6,dev.beryl:lattice-core:0.8.6,dev.beryl:lattice-paper:0.8.6 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.5
Added
- Added optional lifecycle failure context on
LifecycleException, including runtime id, phase, failed operation, and module id when available. - Added structured startup report entries while keeping the existing string-based startup event list.
- Added optional config failure context on
ConfigException, including config path and operation when Lattice can identify them. - Added lifecycle diagnostics details for failed runtime operations, including event count, failed operation, module id, and failure message.
Changed
- Module lifecycle callback failures now preserve module id and operation context across load, enable, ready, and disable paths.
- YAML config load, parse, render, defaults, deserialize, validate, migrate, serialize, save, and update validation failures now use context-aware
ConfigExceptionreporting. - Public diagnostics and getting-started docs now describe how plugin-owned logging and diagnostics commands can surface lifecycle and config context.
Fixed
- Lifecycle diagnostics no longer report a failure finding for a fresh runtime that has not started.
- Lifecycle diagnostics now keep an error status when a failed lifecycle entry remains after a later phase transition.
- Disable failures now use lifecycle-neutral diagnostic wording instead of startup-specific wording.
Compatibility
- Existing
LifecycleExceptionandConfigExceptionconstructors remain supported. - Existing
StartupReport#events()callers continue to receive the legacy string event list. - Structured startup report write helpers remain runtime-owned and are not exposed as stable plugin authoring API.
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.5 - Maven Central:
io.github.hydr46605:lattice-core:0.8.5 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.5 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.5,dev.beryl:lattice-core:0.8.5,dev.beryl:lattice-paper:0.8.5 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.4
Added
- Added
ConfiguredUiExceptionfor configured inventory authoring failures, including a stablepath()accessor and contextual messages. - Added configured inventory authoring documentation with a YAML-style menu example, fallback icons, configured actions, and resolver ownership guidance.
Changed
ConfiguredInventoryUiCompilernow reports invalid configured UI input with screen, page, button, icon, fallback, and action context.- Configured UI resolver and text rendering failures are wrapped with configured UI paths so plugin authors can report actionable admin-facing errors.
Lattice.VERSIONis generated from the GradlelatticeVersionused by the build instead of being maintained as a separate Java literal.- The GitHub Release workflow now supports stable
0.8.xreleases as latest releases, recovery switches for publication steps, and tag-pinned reruns for existing release updates.
Fixed
- Maven Central
PUBLISHINGvalidation timeouts no longer prevent the workflow from continuing to mirror publication and GitHub Release creation. - GitHub Release notes now only claim GitHub Packages mirror publication when the mirror publish step succeeds.
- Existing GitHub Release refreshes now refuse to upload assets built from a commit that does not match the release tag.
- Generated version sources are now wired into source jar task dependencies.
Compatibility
ConfiguredUiExceptionextendsIllegalArgumentException, so existing callers that catch authoring failures through the previous exception type continue to work.- Existing configured inventory defaults are preserved, including default rows for non-positive row counts and default icon amount for non-positive amounts.
ConfiguredUiActionremains a lightweighttype + datadeclaration. Plugins still own action resolution throughConfiguredUiActionResolver.
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.4 - Maven Central:
io.github.hydr46605:lattice-core:0.8.4 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.4 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.4,dev.beryl:lattice-core:0.8.4,dev.beryl:lattice-paper:0.8.4 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.3
Added
- Added
CommandExceptionMappersas the reusable default command failure mapper for plugins that build command registration manually. - Added
LatticeRuntime.COMMAND_EXCEPTION_MAPPERso Paper plugins can customize command failure wording through the runtime service model. - Added explicit
LatticeBuilderhelpers for default service registration, intentional service replacement, and service lookup during bootstrap. - Added standalone descriptor coverage to keep the Paper release jar dependency list intentional.
Changed
- Typed
LatticeBuilderservice helpers now provide defaults only when a service has not already been supplied. - Paper bootstrap now creates the default command registrar after plugin customization and passes the configured command exception mapper into it.
- The standalone Paper descriptor no longer declares Junction as an optional dependency; Junction remains available through reflective integration detection when present.
- Public authoring docs now spell out service customization, command feedback ownership, command help ownership, and optional integration checks.
Fixed
- Supplying a custom
COMMAND_SERVICEno longer constructs the default Paper command registrar or registers its lifecycle handler as a side effect. - The standalone descriptor test now fails on accidental optional dependency additions, not just missing expected dependencies.
Compatibility
- Existing strict
LatticeBuilder#service(key, service)behavior is unchanged. - Plugin code that intentionally replaces a service should use
replaceService(key, service). - Plugin code that only needs custom command failure text should prefer
commandExceptionMapper(...)instead of replacing the full command service. - Plugins using Junction integration should check
PaperIntegrations.JUNCTION_VARIABLES; declare a plugin dependency only when their own load order requires Junction.
Lattice 0.8.2
Added
- Added typed PacketEvents listener registration with Lattice-owned unregister handles, listener priority, packet event wrappers, and a safe API handle for version-specific access.
- Added command argument builders for custom parsers, completions, and greedy final string arguments.
- Added command help entries for flattened command-tree diagnostics and plugin-owned help commands.
- Added integration detail metadata, hook diagnostics, command-tree diagnostics, and isolated-mode active JDBC health reporting.
- Added README examples of public plugins built on Lattice: Tabular, Junction, and Onboard.
Changed
- PacketEvents binding now reports API class/version details when available.
- Runtime diagnostics now include hooks and richer integration, command, and storage details.
DefaultIntegrationManagerclosesAutoCloseableintegration services during runtime shutdown.
Fixed
- PacketEvents bootstrap now catches linkage failures in the same defensive style as PlaceholderAPI.
- Isolated storage diagnostics now report active JDBC connection health instead of only registered providers.
Compatibility
- Existing
new CommandArgument<>(name, type, required)calls continue to work. - Existing
new CommandDiagnostics(name, aliases, description, permission)calls continue to work. - Existing
PacketEventsService#api()callers continue to work; new code should preferapiHandle()and typed listener registration.
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.2 - Maven Central:
io.github.hydr46605:lattice-core:0.8.2 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.2 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.2,dev.beryl:lattice-core:0.8.2,dev.beryl:lattice-paper:0.8.2 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.1
Changed
- Added Maven Central publishing for
lattice-api,lattice-core, andlattice-paper. - Kept GitHub Packages as a permanent Maven mirror for the same artifacts.
- Updated developer documentation to use Maven Central as the default dependency source.
- Added Apache-2.0 project licensing metadata for Maven Central publication.
Compatibility
- Maven Central coordinates are now
io.github.hydr46605:lattice-api,io.github.hydr46605:lattice-core, andio.github.hydr46605:lattice-paper. - GitHub Packages keeps the original
dev.berylcoordinates as an authenticated mirror. - Existing GitHub Packages consumers can keep using the authenticated GitHub Packages repository.
Artifacts
- Maven Central:
io.github.hydr46605:lattice-api:0.8.1 - Maven Central:
io.github.hydr46605:lattice-core:0.8.1 - Maven Central:
io.github.hydr46605:lattice-paper:0.8.1 - GitHub Packages mirror:
dev.beryl:lattice-api:0.8.1,dev.beryl:lattice-core:0.8.1,dev.beryl:lattice-paper:0.8.1 - Standalone Paper/Folia jar attached to this release
Lattice 0.8.0
Added
- Added the
lattice-apiartifact as the first small shared API boundary for the 1.0 runtime split. - Added a standalone Lattice host service that dependent plugins can discover through Paper services.
- Added shared JDBC pool management for the standalone runtime, with ref-counted HikariCP pools and storage diagnostics.
Changed
- Prefer the standalone shared-runtime deployment model for new Paper/Folia plugins.
- Keep legacy shaded library usage available as isolated mode for self-contained plugin jars.
- Updated GitHub release automation to attach
lattice-apiartifacts. - Added explicit Modrinth workflow checks for the project id and token.
Compatibility
- Existing shaded plugins can keep using
LatticePaperPluginin isolated mode. - Shared-runtime plugins should install the standalone
Latticeplugin, compile against Lattice without relocation, and declare a hard Paper dependency withjoin-classpath: true.
Artifacts
- GitHub Packages:
dev.beryl:lattice-api:0.8.0 - GitHub Packages:
dev.beryl:lattice-core:0.8.0 - GitHub Packages:
dev.beryl:lattice-paper:0.8.0 - Standalone Paper/Folia jar attached to this release