Releases: bsommerfeld/pathetic
Releases · bsommerfeld/pathetic
Release list
Release 5.5.2
Changelog
Added
PathfinderHook.onPathfindingStartdefault hook, called once before the search loop beginsPathfindingContext.target()andPathfindingContext.environmentContext()accessors- Package-level JavaDoc for every
apiandenginepackage
Changed
PathfinderConfiguration.build()now fails when no provider is set instead of silently defaulting to an always-traversable one; the deprecated no-argcreatePathfinder()keeps its documented default- Fewer allocations on the per-search pathfinding hot path
- A* per-search state moved off the pathfinder's
ThreadLocalinto a stack-localSearchStatepassed through the loop; concurrent searches stay isolated by the call stack
Fixed
Removed
Release 5.5.1
Changelog
Added
Changed
- Searches complete 2.5-3x faster end-to-end than 5.5.0 and short searches start about 7x faster (measured with the bundled benchmarks)
- Pack node keys relative to the search start, lifting all absolute coordinate limits (formerly X/Z in [-33554432, 33554431], Y in [-2048, 2047])
- A single search explores at most +-2097151 blocks (X/Z) and +-524287 blocks (Y) around its start; positions beyond this radius are treated as non-navigable
- Switch the engine's open set to the quaternary min-heap, keyed by dense per-search node ids
AbstractPathfinder.initializeSearchnow receives the start position and expected node count; subclasses must key the open set by dense non-negative ids- Open-set, closed-set, and reopen G-cost lookups are id-indexed array accesses behind a single hash map per neighbor
- Deprecate the
gridCellSize/bloomFilterSize/bloomFilterFppoptions (marked for removal); the closed set no longer uses bloom-filtered grid regions - Defer neighbor node construction until after the closed-set check, skipping allocation and heuristic work for closed neighbors
- Size per-search session structures from the same node estimate as the open-set heap; short searches set up in a fraction of the time
Fixed
- Reuse the reopen-decision G-cost when reopening a closed node instead of recomputing it
- A reopen attempt vetoed by a validator no longer lowers the recorded closed-set G-cost
- Runtime exceptions from custom extensions during a search now produce a
FAILEDresult instead of escaping through the future - A non-finite heuristic or cost now fails the search with a descriptive error instead of corrupting the open-set ordering
QuaternaryPrimitiveMinHeap.extractMinnow throwsNoSuchElementExceptionon an empty heap instead of corrupting internal stateQuaternaryPrimitiveMinHeaprejects ids outside the non-negative int range instead of truncating and aliasing them
Removed
- Remove
SpatialData; the engine's closed set is id-indexed and no longer bloom-filtered - Remove the shaded Guava dependency and the checkerframework/javax.annotation relocations from the engine artifact
Release 5.5.0
Changelog
Added
Changed
- Cache neighbor offset lists in
NeighborStrategiesto avoid per-iteration allocations - Tighten
PathImplconstructor parameter fromIterable<PathPosition>toCollection<PathPosition> - Reject all
nullarguments inValidatorsfactories (allOf,anyOf,noneOf,not) withNullPointerException - Size the open-set heap per search from
manhattanDistance * branchingFactor, capped bymaxIterations - Snapshot pathfinder hooks at search start; mid-search registrations now apply only to future searches
- Deprecate
PathfinderFactory.createPathfinder()no-arg overload (always-traversable provider routes through walls) PathPosition.distancenow uses exactMath.sqrtinstead of an approximation; deprecateNumberUtils.sqrtRegionKey.packnow validates coordinate ranges (X/Z in [-33554432, 33554431], Y in [-2048, 2047]) and throws instead of silently aliasing out-of-range values
Fixed
- Add input validation for numeric values in PathfinderConfiguration
- Guard
PathVector.computeDistanceagainst null arguments and degenerateB == Cinput - Correct
PathfinderResult.hasFailed()JavaDoc -FALLBACKis not treated as a failure - Print full stack trace (not just message) when a processor's
finalizeSearchthrows PathfinderConfiguration.deepCopynow defensively clones processor and hook lists so the copy is independent of later source mutations- Document the single-threaded contract of
SearchContext.getSharedData()in JavaDoc Cost.ofnow rejects+Infinity,-Infinity, andNaN(previously onlyNaNand negative values)PathfindingSearch.resultBlockingnow propagates the JDKCompletionExceptiondirectly instead of re-wrapping it in a genericRuntimeException- Clarify in JavaDoc that
PathfindingSearch.exceptionallyis a side-effect callback and does not recover the search - Default shared executor is lazily allocated and only when an async configuration is built; sync-only configurations never spawn the thread pool
apiclasses are no longer shaded into theengineartifact;enginenow pullsapias a clean transitive dependency- Reject
NaNheap costs ininsertOrUpdate; aNaNheuristic now fails fast instead of silently corrupting the open-set ordering - Correct heuristic JavaDoc: with default weights LINEAR is only bounded-suboptimal (Weighted-A*-like) and SQUARED is not admissible, not "consistent/admissible" as claimed
Removed
- Remove unused
Patheticengine-version utility and itspathetic.propertiesresource - Remove
Depth.increment()and makeDepthimmutable - Remove
Cloneableandclone()fromPathPositionandPathVector; coordinate fields are nowfinal - Remove
ComparablefromNode; its cost-based ordering was inconsistent with position-basedequals
Release 5.4.6
Release 5.4.5
Changelog
Added
Changed
- PathfindingSearch#exceptionally now accepts a Consumer instead of a Function
- aborting the current pathfinding operation now triggers #orElse instead of #exceptionally and returns an ABORTED PathfindingResult
- #abort now returns void
Fixed
- added defensive cleanup for PathfindingSession
- fixed issue with algorithm cleanup not being performed consistently
- fixed abort behavior to ensure cooperative cancellation
Removed
Release 5.4.4
Changelog
Added
- add JetBrains annotations dependency
- add pathfindingHooks to PathfinderConfiguration
- introduced PathfindingSearch which represents a single search operation
- introduced validationProcessors in PathfinderConfigurationBuilder
- introduced costProcessors in PathfinderConfigurationBuilder
Changed
- marked getEnvironmentContext Nullable in SearchContext
- replaced CompletionStage return from Pathfinder with PathfindingSearch
- simplified exception handling in AbstractPathfinder
- aborting the pathfinding operation is now per-search
Fixed
Removed
- deprecated nodeValidationProcessors in PathfinderConfigurationBuilder
- deprecated nodeCostProcessors in PathfinderConfigurationBuilder
- deprecated Pathfinder#registerPathfindingHooks
Release 5.4.3
Changelog
5.4.3 is a cleanup release, focusing on code organization and deprecating outdated features.
Added
- introduced
.of(double, double, double)factory methods for PathVector and PathPosition - introduced
Depth#value() - introduced
Cost#value()
Changed
- introduced
MinHeap,Resizable,Siftableinterfaces to abstract the heap implementations - extracted release workflow into own repository
Fixed
Removed
- deprecated
Depth#getValue() - deprecated
Pathfinder#abort() - deprecated
Cost#getValue() - ErrorLogger has been removed
- tinylog dependencies have been removed
- deprecated PathUtils
- removed outdated jitpack.yml
Release 5.4.2
Changelog
Added
- .integration-tests module with pathfinding workflow tests
- added JMH benchmarks for internal heaps
Changed
- GridRegionData is now SpatialData
- AStarPathfinder.PathfindingSession has been extracted
Fixed
- ${revision} placeholder
- prevent duplicate exception logging in async mode
- added missing fastutil dependency classes
Removed
Release 5.4.1
Changelog
Added
- Update Dependencies Maven Configuration
- Run Tests Maven Configuration
- Build Jar Maven Configuration
- A specialized, array-backed binary heap tailored for A*
- Introduced overloaded getOffset(PathPosition) method in INeighborStrategy
- Implemented support for reopening Closed Set nodes to handle inconsistent heuristics (configurable via
reopenClosedNodes).
Changed
- Revamp README for better engagement – add humor, benchmarks, and real-world demos to combat stagnation
- optimized core data structures for reduced GC pressure and cleaned up legacy code
- Switched internal Open Set implementation from Fibonacci to
PrimitiveMinHeap. - ~3x to 4.5x faster pathfinding in benchmarks due to improved CPU cache locality.
- Achieved true zero-allocation operations within the Open Set (eliminated millions of
Nodewrapper andDoubleboxing objects). - Renamed NodeCostProcessor -> CostProcessor
- Renamed NodeValidationProcessor -> ValidationProcessor
- Renamed NodeEvaluationContext -> EvaluationContext
Fixed
- removed legacy lazy computing of hcost
- Fixed subtle yet crucial a control flow bug where updates to nodes in the Open Set were ignored, ensuring the optimal path is always prioritized.
Removed
- Several before deprecated Methods (see 5.4.0)
- Tuple3 + Tests
- ComputingCache + Tests
org.jheapsdependency- Experimental annotation
Release 5.4.0
Changelog
Pathetic 5.4.0 is now available on Maven Central.
Added
- Path has a new
collect()method. - Added more tests to AStarPathfinderTest
- Introduced PathUtils class
- Introduced DistanceCalculator interface
- Introduced PathfindingProgress class
Changed
- Optimized tie-breaker calculations
- Cost now only can be positive
- PathImpl now delegates several functions to PathUtils class
- Refactored heuristic implementations with DistanceCalculators
Fixed
- Fixed SquaredHeuristicStrategy with now a matching squared manhattan, octile and heightDiff calculation which improved performance
Removed
- Deprecated negativeCost configuration
- Deprecated several specific distance calculations inside PathPosition
- Several Path post-processing methods are now Deprecated and PathUtils should be used
- Deprecated PathPosition#isInSameBlock