promotional bannermobile promotional banner

Whispering Currents

Autonomous logistics node for NeoForge: place a Link Attachment, it senses nearby containers, feeds furnaces, pulls outputs, and routes items via configurable flying delivery — no pairing or channels.item
Back to Files

Whispering Currents v1.1.0.14

File namewhisperingcurrents-1.1.0.14.jar
Uploader
EirvargrEirvargr
Uploaded
Jul 23, 2026
Downloads
13
Size
61.0 KB
Mod Loaders
NeoForge
File ID
8494792
Type
R
Release
Supported game versions
  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:whispering-currents-1621502:8494792"

Learn more about Curse Maven

What's new

Changelog

1.1.0.14

Fixed

  • pathIndex off-by-one (FlyingItemData.java): pathIndex started at 0, targeting the item's own source position. For 2-node paths, this caused instant teleport on the next tick. Changed to pathIndex = 1.
  • Last-node position snap removed (advanceFlight): item now flies the final approach instead of teleporting.
  • Food priority removed (serveNextFurnace): ores and food treated equally — first smeltable item in any chest goes in. Fuel no longer blocks input dispatch.
  • trySendInput cleaned up: removed dead foodOnly parameter.

Added

  • Flight mode config (ModConfig.java): flightMode option with four modes — TELEPORT, DIRECT_LINEAR, MAGNET, PATHFINDING (default). Full descriptions in config comments.

Changed

  • spawnFlight: only computes A*/ceiling path in PATHFINDING mode. Other modes use a direct 2-node path.
  • tick/syncClients: skipped entirely in TELEPORT mode (age-only wait, then deposit).
  • advanceFlight: handles null/empty path with direct lerp from source to target.

1.1.0.13

Fixed

  • Waypoints bypassing LOS and ceiling-routing: stale waypoints in WaypointSavedData (placed by PathWhistleItem) caused every flight to route source → waypoint → target via plain A*, ignoring LOS fast-path and ceiling-routing. All items converged on the same fixed coordinate. Removed !waypoints.isEmpty() early return.

1.1.0.12

Fixed

  • hasLineOfSight3D block pass-through: two math errors caused items to clip through walls:
    • steps = ceil(distance) → steps = ceil(max(|dx|,|dy|,|dz|)) — guaranteed at least one sample per block on the longest axis.
    • (int) Math.round(...) → BlockPos.containing(...) — floors correctly instead of rounding past block boundaries.

1.1.0.11

Added

  • Direct 3D line-of-sight fast-path in findPath: before ceiling-rise or A*, checks if the direct 3D line from source to target is clear. When clear, items fly directly in a single diagonal segment.
  • hasLineOfSight3D(Vec3, Vec3, Level) — DDA raycast in 3D at 1-block resolution.
  • hasLineOfSight(BlockPos, BlockPos, Level) — 2D ceiling-level LOS for A* skip in findCeilingPath.

Changed

  • findPath now attempts direct 3D LOS before ceiling-rise + A* fallback.

1.1.0.10

Changed

  • Client-side spring smooth — replaced linear lerp with spring-damper follower.
  • Client-side parametric drift — Lissajous-style sine offset at 60fps instead of server-side every 3 ticks.
  • Reduced particles — random.nextInt(20) → frame % 20 == 0 (1 particle/sec/flight max).

Removed

  • applyDrift from server sync, prevPosition from FlightBuffer, unused Shapes import.

1.1.0.9

Changed

  • Sequential furnace dispatch: one furnace per 20 ticks (1s), round-robin via furnaceIndex. Fuel → food → other smeltable. No burst spawning.
  • SCAN_INTERVAL: 40 → 20 ticks.
  • Removed lastDispatchTick per-target cooldown (replaced by sequential dispatch).

Added

  • furnaceIndex field in LinkAttachmentBlockEntity with NBT persistence.

1.1.0.8

Removed

  • addChaos() from FlyingItemPathfinder — was offsetting path nodes by ±1.5 blocks, causing whip/snap oscillation.

Changed

  • Last path segment (ceiling descent) is now instant — item teleports into machine on arrival.

1.1.0.7

Added

  • lastDispatchTick per-target cooldown (100 ticks max 1 dispatch per target).
  • countActiveFlightsTo(BlockPos, int slot) — slot-aware tracking.

Fixed

  • Furnace starvation: tracked fuel/input independently per slot instead of a global cap.
  • Fuel hoarding: max 2 coal waiting in fuel slot (was getMaxStackSize()).
  • Non-fuel in wrong slots: depositItem returns early on slot mismatch.
  • Input priority: two-pass dispatch — smeltable food first, then other items.

1.1.0.6

Fixed

  • chestToFurnaceInput / chestToFurnaceFuel used return instead of break — skipped all other furnaces after serving the first.

Performance

  • Container scan halved: getContainerPositionsInRange() computed once per tick, passed to both refuel and routing.
  • A* iterations: 2000 → 400.
  • Sync interval: 1 → 3 ticks.

1.1.0.5

Added

  • countActiveFlightsTo(BlockPos) — counts in-flight items heading to a target.
  • Max 4 simultaneous inbound flights per furnace (input + fuel combined).

Fixed

  • Items cycling between unsorted chests — only move to labeled chests.
  • FlightBuffer atomic reference swap — stops render flicker from racing.

1.1.0.4

Fixed

  • Items cycling between unsorted chests — only move to labeled chests.
  • FlightBuffer atomic reference swap — stops render flicker from racing.

1.1.0.3

Changed

  • Flight path: rises to ceiling → A* across → drops to destination.
  • Arch-aware collision: only full cubes block items (open doors, slabs, stairs passable).
  • Each flight gets a unique slightly-offset path (chaos).
  • Sinusoidal drift — items weave subtly during flight.
  • Smooth glide interpolation — 60fps lerp between server ticks.

1.1.0.2

Fixed

  • Startup fuel starvation — refuel before fuel check.
  • hasActiveFlight using wrong position comparison.
  • findBestChest now prefers sign-labeled chests first.
  • Block model changed to full cube, blockstate no longer references removed FACING property.

Added

  • Fuel-warning log message when out of coal.

1.1.0.1

Added

  • Link Attachment is now a standalone logistics node (full block, no wall-facing).
  • Auto-senses all containers within range (configurable 4–16 blocks).
  • Furnace I/O — takes output to chests, feeds input/fuel from chests.
  • Chest sorting by sign labels (Wood, Stone, Ore, Metal, Food, Misc).
  • Auto-writes blank signs with matching category.
  • Fuel system — consumes coal/charcoal from nearby chests.

Changed

  • LinkNeedle is now an info/config tool (right-click = info, shift-right-click = cycle range).

Removed

  • Old manual linking/target system.

1.0.4.6

Changed

  • ConcurrentHashMap for thread safety.
  • canAttackBlock returns false to prevent creative breakage.
  • Debug info in "No output target stored" message.

1.0.4.5

Removed

  • Entire GUI, menu, and packet code.
  • Frequency, mode, filter system.
  • Old two-click LinkNeedle pairing (LinkSavedData / OutputLinkSavedData).

Added

  • LinkNeedle wand — right-click container sets output, right-click attachment links.
  • LinkAttachment stores direct BlockPos target — no freq/mode/filter.
  • Recipe: redstone + stone pressure plate.

Changed

  • ServerTickHandler uses direct source→target item pushing.

1.0.4.4

Changed

  • New GUI with ◄/► arrow frequency selector.
  • Freq at top, mode/filter below, slots at bottom.
  • Placement now faces toward container.

Fixed

  • Filter buttons no longer overflow GUI bounds.
  • Slot positions aligned with background blit.

1.0.4.3

Fixed

  • GUI crash (renderBg infinite recursion with renderBackground).
  • Placement direction.

1.0.4.2

Fixed

  • Placement direction 180° off (restored player-facing).

1.0.4.1

Fixed

  • GUI crash on menu open (null buffer).
  • Hitbox 180° off from model.
  • Block placement direction inverted.
  • Missing texture warnings (wrong namespace).

Added

  • Item model for inventory/hand icon.

1.0.4.0

Added

  • Link Attachment block with GUI (frequency, mode, filter).
  • Auto-pairing by frequency, whitelist/blacklist filtering.
  • Attachment processing in scanner (every 40 ticks).
  • Coexists with LinkNeedle direct links.

1.0.3.3

Added

  • Output links: furnace → chest for smelted items.
  • Output link processing in scanner.
  • Bidirectional unlink: sneak-click either endpoint.

Changed

  • LinkNeedle flow: clicking a furnace first marks it for output linking.
  • depositItem handles both furnace deposits (slot 0/1) and chest deposits.

1.0.3.2

Fixed

  • Flight tick was locked behind 40-tick scan interval — items now tick every game tick.
  • Multiple items could fly simultaneously for the same link — hasActiveFlight() guard added.
  • Particle frequency reduced: nextInt(3) → nextInt(20) (~5%/tick).
  • Sync interval: 2 → 1 tick.

1.0.3.1

Fixed

  • Crash: aStar() returned List.of() (immutable) — caller tried add(), causing UnsupportedOperationException when A* failed.

Changed

  • LinkNeedle: normal click = link, sneak + click = unlink.

1.0.3

Fixed

  • LinkNeedle double-processing on client+server in single player — client consumed pending chest before server could use it. All pendingChests operations guarded with level.isClientSide.

1.0.2

Fixed

  • @EventBusSubscriber missing modid — furnace scanner never registered, no items ever flew.
  • Added debug logging and LOG field to main mod class.

1.0.1

Changed

  • Entity-based flight removed — deleted FlyingItemEntity, ModEntities, entity renderer.
  • New data-driven flight — FlyingItemManager ticks flight state server-side, no entities.
  • Furnace scanner — ServerTickHandler checks linked furnaces every 40 ticks.
  • Persistent links — LinkSavedData, WaypointSavedData per dimension.
  • Client sync — FlyingItemPacket custom payload.
  • Client renderer — ClientFlyingItemRenderer via RenderLevelStageEvent.
  • Link Needle — redesigned to two-click workflow (chest → furnace).

Fixed

  • getBurnTime, SavedData, @EventBusSubscriber APIs for NeoForge 1.21.1.

This mod has no related projects