AutomatedHopperTools

A powerful custom hopper and piping system for Hytale that moves items anywhere you need them — up, down, sideways, across rooms, or across your entire world. Build smarter storage networks, automate logistics, and move resources like never before.

File Details

AutomatedTools-1.5.35.jar

  • R
  • May 13, 2026
  • 2.25 MB
  • 0
  • Early Access

File Name

AutomatedTools-1.5.35.jar

Supported Versions

  • Early Access
## 1.5.33 — 2026-05-12

### Fixed
- **Items resting on a slab on top of a hopper are no longer sucked
  through.** If any block sits directly above a hopper (slab,
  trapdoor, or full block), the item-vacuum is sealed off — items on
  that block stay there. Previously fertilized eggs and other items
  could vanish through a slab into the hopper below.

## 1.5.32 — 2026-05-12

### Fixed
- **Vertical slabs and other partial blocks now hold back fluid
  correctly.** Previously only horizontal half-slabs were recognized.
  Quarter, three-quarter, seven-eighth, flat, and vertically-placed
  variants are now all treated as fluid blockers — water and lava
  cannot fill the empty side of these blocks.
- **Plants no longer break ocean water.** Seaweed, grass, and similar
  plants share a half-block collision shape but should never dam
  fluid. They are now explicitly excluded from the fluid-blocker
  list.

## 1.5.31 — 2026-05-12

### Changed
- **Animals can now stand on hoppers.** Hopper hitbox changed from
  the small chest shape to a full block, so chickens, pigs, and other
  livestock walk on top of hoppers normally.
- **Hopper item-pickup widened.** The vacuum sphere above the hopper
  was enlarged so dropped items (especially eggs that bounce) are
  caught reliably even when they don't land dead-centre on the
  hopper's top face.

## 1.5.30 — 2026-05-12

### Fixed
- **Fluid no longer leaks between fluid-blocker sweeps.** The trapdoor
  and slab fluid-blocker now runs every server tick (~50 ms) and
  immediately after the vanilla fluid system, instead of every 0.4 s.
  This closes the flicker window where flowing water/lava could
  escape past a closed trapdoor or slab between sweeps.

## 1.5.29 — 2026-05-12

### Added
- **Half-blocks now hold back fluid above them**, just like a closed
  trapdoor. Place a slab between a water source and the floor below
  and the floor stays dry.

## 1.5.28 — 2026-05-12

### Fixed
- **Closed trapdoors now actually block water and lava.** The
  fluid-blocker query was looking at the wrong entity type and never
  matched any chunk, so the rule from earlier versions did nothing in
  practice. Trapdoors now correctly dam fluid on every face.

## 1.5.13 – 1.5.27 — 2026-05-11 → 2026-05-12

### Changed
- Incremental iteration on the dispenser, pipe transfer, hopper
  pickup, and trapdoor/fluid systems. Bug fixes and balance tweaks
  superseded by the entries above; install **1.5.33 or newer** to get
  every fix from this range.

## 1.5.12 — 2026-05-11

### Added
- **Hopper spout now visually aims at the connected container.**
  When the hopper detects an adjacent chest / workbench / furnace,
  it swaps to one of three pre-rotated visual variants so the spout
  points at that container:
  - Chest below  → `Automated_Tools_Hopper`      (spout DOWN, default)
  - Chest above  → `Automated_Tools_Hopper_Up`   (spout UP)
  - Chest on a side → `Automated_Tools_Hopper_Side` rotated N / E / S / W
- The base hopper model is now **spout-down** out of the box, matching
  what players expect when stacking a hopper on top of a chest.
- Visual-swap is conservative: it only fires while the hopper is
  empty, so there is zero risk of inventory loss across the engine
  block-state swap.

### Implementation notes
- New BlockyModel files: `Hopper.blockymodel` (rotated -90° around X
  from the original DMC source), `Hopper_Up.blockymodel` (+90°), and
  `Hopper_Side.blockymodel` (the original "north-pointing" geometry,
  used with `VariantRotation: NESW` for sideways facings).
- New item JSONs: `Automated_Tools_Hopper_Up`, `Automated_Tools_Hopper_Side`
  (no recipe, hidden category — only spawned by the runtime swap).
- Plugin uses `WorldChunk.setState(..., holder)` so the existing
  block-component holder (and therefore `ItemContainer`) is preserved
  across the variant swap.
- Helper `tools/rotate_hopper_models.py` re-generates all three model
  files from the source if you need to tweak the geometry.

## 1.5.11 — 2026-05-11

### Added
- **Hopper now feeds into a chest from any face — front, back, side,
  top, or bottom.** Previously plain hoppers only pushed downward (so
  you had to put the hopper on top of the chest). Now if the down
  face has no container, the hopper scans the other five faces and
  pushes into the first real container it finds. PULL automatically
  comes from the opposite face. So you can sit a hopper next to a
  chest, behind a workbench, beside a furnace, etc., and it will
  feed in.
- The input/output pairing rule (1.5.9) was updated to use the same
  adaptive direction. Examples that now work:
  - Hopper on the back of a Salvager Workbench (input) + pipe on the
    bottom (output).
  - Hopper on the side of a chest (input) + pipe on the opposite side
    (output).
  - Hopper above a chest (input, classic) + pipe on the bottom
    (output) — unchanged.

## 1.5.10 — 2026-05-11

### Changed
- Hopper visual now uses the BlockyModel, texture and spout geometry
  from the `ForgeDMC-Blocks` mod's hopper. Replaced
  `Common/Blocks/Hoppers/Hopper.blockymodel`,
  `Common/Blocks/Hoppers/Hopper_Texture.png`, and the generated icon
  `Icons/ItemsGenerated/Automated_Tools_Hopper.png` (and its
  `Common/Icons/...` duplicate). Function/behavior unchanged — only
  the visual model + texture + icon are swapped. Previous assets
  preserved as `Hopper.blockymodel.pre_blocksmod` / `*.bak` files in
  the source tree.

## 1.5.9 — 2026-05-11

### Added
- **Pipes can now drain processing benches and chests when paired with
  an input hopper.** Attach a hopper to any face of a workbench /
  furnace / cooking station / chest so the hopper's front points into
  it (this is the INPUT). Then attach a pipe to any *other* face — the
  pipe automatically becomes the OUTPUT and pulls items out of that
  container into the pipe network. Works on all six faces (top,
  bottom, north, south, east, west).
- Salvager Workbench example: hopper feeding raw scrap into the back,
  pipe at the bottom feeding salvaged parts away into a sorting
  network. Also lets you auto-extract smelted bars from furnaces and
  cooked food from cooking stations.
- Single-attachment behavior is unchanged: a chest with only a hopper
  on top still just receives items; nothing is auto-pulled until you
  attach a pipe (or another mover) to a different face.

### Implementation notes
- Detection rule: a facing-less pipe checks each non-pipe container
  neighbor and asks "does any other face of this container have a
  hopper whose front points back at it?" If yes, the pipe is allowed
  to pull from it. Only hopper-with-explicit-facing counts as an
  input marker; adjacent pipes do not (would create ambiguous
  bidirectional pulls).

## 1.5.8 — 2026-05-11

### Performance
- **Massive pipe-network CPU reduction.** Three changes in
  `PipeTransferSystem`:
  1. Empty facing-less pipe blocks now early-out before doing any
     work. Previously every pipe ran up to **18 full BFS traversals**
     of the connected network *every 0.4s* (3 push passes × 6
     directions), even if it had nothing to push.
  2. `PIPE_TRACE_LIMIT` lowered from `Integer.MAX_VALUE` → `512`,
     putting a hard ceiling on a single BFS visit count.
  3. Removed the `nonPipeNeighbors` diagnostic list that was being
     allocated and string-formatted on every failed BFS — its only
     consumer was the silenced `BFS-EXHAUSTED` log line.

## 1.5.7 — 2026-05-11

### Fixed
- **Eliminated severe in-game lag caused by per-tick log spam.** The
  `PipeTransferSystem` BFS diagnostic was writing dozens of `INFO`
  lines per pipe network every tick (BFS-EXHAUSTED, nonPipe-adj,
  PUSH/PULL, etc.) — disk I/O on the server log was tanking
  framerate. Logger level is now set to `WARNING` in a static
  initializer, silencing all routine pipe diagnostics. Set back to
  `Level.INFO` if you need to debug pipe routing.

## 1.5.6 — 2026-05-11

### Changed
- **Hopper height stretched further (Y × 10/9).** Container is now
  ~10 voxels tall and the model tops out at y≈40, giving it the
  vertical presence of a normal block in-world. Width is unchanged.

## 1.5.5 — 2026-05-11

### Changed
- **Hopper stretched vertically to fill the full block height (32).**
  Width (XZ) is unchanged from 1.5.3. Y position, Y offset, and Y size
  of every funnel part scaled by 32/17 so the top container now caps
  exactly at y=32 while the spout still sits on the floor.

## 1.5.4 — 2026-05-11

### Changed
- **Hopper recolored to match the pipe slate-blue tone.** Sampled the
  average color of `LargePipe_Texture.png` (89,94,99) vs the original
  hopper texture (63,63,65), and applied a constant +26R/+31G/+34B
  shift to the hopper's block texture and the three generated icons.
  Original textures preserved as `*.png.bak`.

## 1.5.3 — 2026-05-11

### Changed
- **Hopper scaled uniformly to 50%** of the 1.1.0 size. All XYZ
  dimensions, offsets, and Y positions of every funnel part halved.
  The silhouette and proportions are identical to 1.5.2 — it just
  occupies half the block height/width.

## 1.5.2 — 2026-05-11

### Reverted
- Reverted the 1.5.1 top-container resize. Hopper geometry is back to
  the original 1.1.0 model exactly as restored in 1.5.0.

## 1.5.1 — 2026-05-11

### Changed
- **Hopper top container widened to 32×32** (full block width). All
  other parts (`upper_base`, `middle`, `chute_upper`, `chute_lower`,
  `spout`) keep their original 1.1.0 sizes and Y positions, so the
  funnel taper and overall scale are unchanged — only the topmost
  ring is now flush with the block boundary.

## 1.5.0 — 2026-05-11

### Changed
- **Restored original 1.1.0 hopper model and textures.** The funnel
  geometry experiments in 1.4.7–1.4.9 are reverted in favor of the
  proven 1.1.0 hopper. All 8 hopper-related assets (blockymodel,
  block texture, item icons, server item JSON) are sourced from the
  preserved `AutomatedTools-1.1.0.jar` backup.

## 1.4.9 — 2026-05-11

### Changed
- **Hopper top now reads as a full 1×1 block-sized cap.** The previous
  rim was 32×32 but only 4 voxels tall, so it looked like a thin lip.
  The container ring is now a proper 32×32×8 slab spanning the upper
  third of the block (Y 24..32). The funnel taper (26→22→16→12→8) and
  the square nozzle below it are unchanged in shape.

## 1.4.8 — 2026-05-11

### Changed
- **Hopper redesigned as a stepped funnel** (Minecraft-style): wide
  flat rim filling the full block width on top, three inward-stepping
  rings forming the funnel walls, and a square nozzle pillar poking
  out the bottom center. Per-ring X/Z sizes:
  - rim 32×32, top step 28×28, mid step 22×22, lower step 16×16,
    neck 12×12, nozzle 8×8.
  - heights: rim 4, top 4, mid 6, lower 4, neck 4, nozzle 10.
  Total Y range 0..32 (nozzle 0..10 sits at the bottom of the block,
  rest stacks up to fill the full block).

## 1.4.7 — 2026-05-11

### Fixed
- **Critical: Hopper rendering as a plain block.** Versions 1.4.2–1.4.6
  shipped `Hopper.blockymodel` with a UTF-8 BOM at the start of the
  file (introduced by PowerShell's `Set-Content -Encoding UTF8` during
  the geometry-edit passes). Hytale's blockymodel parser failed
  silently on the BOM and fell back to the default cube shape, so the
  hopper visually appeared as a solid block regardless of which
  geometry version was deployed. The file is now written as bare UTF-8
  (no BOM) and the original tapered funnel renders correctly again.

## 1.4.6 — 2026-05-11

### Reverted
- Reverted all hopper-model geometry changes from 1.4.2, 1.4.4 and
  1.4.5 (Y-shift, X/Z resize, spout bend). Hopper.blockymodel is now
  byte-identical to the original: container 24×10×24, upper_base
  28×4×28, middle 22×8×22, chute_upper 16×8×16, chute_lower 12×4×12,
  spout 8×2×8, all centered on (0, 0..30, 0). Pipe-network behavior
  (1.4.0 ProcessingBench integration, 1.4.1 fuel-aware push) and 1.3.0
  recipes are unaffected.

## 1.4.5 — 2026-05-11

### Changed
- **Hopper spout now bends toward its connection point.** Each of the
  four orientation variants (sw / nw / ne / se) shifts the spout
  6 voxels and the lower chute 3 voxels in the variant's world-front
  direction:
  - `sw` (0° rotation): bends toward -Z
  - `nw` (-90° Y): bends toward -X
  - `ne` (180° Y): bends toward +Z
  - `se` (+90° Y): bends toward +X
  Result: the spout visibly leans toward the block the hopper outputs
  into. Upper container/rim geometry is unchanged so the funnel still
  reads as a normal hopper from above. **If the bend points away from
  the connection in-game, signs only need flipping in one place** —
  the per-variant direction table in `Hopper.blockymodel`.

## 1.4.4 — 2026-05-11

### Changed
- **Hopper resized so the top rim fills a full 1×1 block (32×32),
  tapering down to the funnel spout.** Heights and Y-positions are
  unchanged — pure X/Z scaling per node, so the funnel silhouette is
  preserved and the spout still hangs slightly below the block. New
  X/Z sizes per ring: rim 32, container 28, middle 26, chute upper 18,
  chute lower 14, spout 10.

## 1.4.3 — 2026-05-11

### Reverted
- Reverted the 1.4.2 hopper-model Y-shift. The simple +2 translation
  fixed the "sunken" look but changed the funnel's visual relationship
  with the block below it. Hopper geometry is back to the original
  -2..30 Y range pending a proper resize that preserves the funnel
  silhouette.

## 1.4.2 — 2026-05-11

### Changed
- **Hopper model now occupies a normal 1×1×1 block volume.** The mesh's
  spout previously poked 2 voxels below the block boundary (Y range
  -2..30), which made the hopper look half-sunken when placed on top of
  another block and could clip into the floor. All nodes have been
  shifted up by +2 (new Y range 0..32) so the model fits exactly inside
  one block. No node sizes, widths, depths, textures, or functionality
  changed — purely a translation, the hopper looks identical.

## 1.4.1 — 2026-05-11

### Added
- **Fuel-aware push for processing benches.** When pushing into a Furnace,
  Salvage Bench, or any other `ProcessingBenchBlock`, the hopper/pipe
  network now tries the bench's **fuel** slot first. The fuel slot's own
  validator (`canAddItemStack`) accepts only genuine fuel items (coal,
  wood, etc.); everything else falls through to the input slot.
- The fuel push bypasses the local `TransferRules` furnace filter (which
  restricts the input slot to ore/log) so coal can actually reach the fuel
  slot. Slot-level validation still gates acceptance, so non-fuel items
  cannot accidentally end up there.
- `NeighborInfo` extended with a `fuelContainer` field; non-bench blocks
  leave it `null` and behavior is unchanged.

## 1.4.0 — 2026-05-10

### Added
- **Processing-bench integration with the pipe network.** Furnaces, Salvage
  Benches, and any other block that uses Hytale's `ProcessingBenchBlock`
  component (cooking stations, tannery, lumbermill, etc.) are now valid
  endpoints on a hopper/pipe network.
  - **Push (hopper or pipe → bench):** items routed into a processing bench
    are deposited into its **input** container — exactly the slot the bench
    smelts/processes from.
  - **Pull (hopper → bench):** items extracted from a processing bench are
    pulled out of its **output** container — finished products only, raw
    inputs and fuel are left untouched.
  - Works through arbitrarily long pipe networks via the existing BFS
    pipe-trace, so a chain of pipes can feed iron ore into a furnace from
    one side and ship smelted bars to a chest from another.
- Implementation: `lookupContainerAt` now detects `ProcessingBenchBlock`
  in addition to `ItemContainerBlock`. `NeighborInfo` carries separate
  `pushContainer` (input) and `pullContainer` (output) refs; for vanilla
  single-container blocks (chests, dispensers, etc.) both fields point at
  the same container, so behavior is unchanged for non-bench blocks.

## 1.3.0 — 2026-05-10

### Added
- **Crafting recipes for all four mod items.** Items can now be crafted at
  the standard vanilla benches instead of only being available via creative.
  - `Automated_Tools_Hopper` — **Furniture Bench** (`Furniture_Storage`):
    5× `Ingredient_Bar_Iron` + 2× `Wood_Trunk` → 1 hopper. `TimeSeconds: 3`.
  - `Automated_Tools_Large_Pipe` — **Workbench** (`Workbench_Crafting`):
    3× `Ingredient_Bar_Iron` → 4 pipes. `TimeSeconds: 2`.
  - `Automated_Tools_Large_Pipe_Corner` — **Workbench**
    (`Workbench_Crafting`): 4× `Ingredient_Bar_Iron` → 2 corners.
    `TimeSeconds: 2`.
  - `Automated_Tools_Large_Pipe_Mouthpiece` — **Workbench**
    (`Workbench_Crafting`): 4× `Ingredient_Bar_Iron` → 2 mouthpieces.
    `TimeSeconds: 2`.

### Fixed
- Hopper recipe previously referenced a non-existent `chest` ItemId — the
  recipe was effectively uncraftable. Replaced with a valid resource-type
  ingredient (`Wood_Trunk`).
- All pipe-family items were missing `BenchRequirement` and so didn't
  surface at any crafting station; now properly registered to the
  Workbench under the `Workbench_Crafting` category.

---

## 1.2.0 — 2026-05-10

### Added
- **Hopper item-entity vacuum.** Plain hoppers now suck up dropped item
  entities lying within ~1.5 blocks of the block directly above them.
  Walk up to a hopper, drop items from your inventory, and the hopper
  collects them and feeds them into the connected pipe network.
  - Pickup sphere is centred 1.0 block above the hopper top, radius 1.5,
    so items dropped on the hopper itself or on any of the 8 neighbour
    block tops are absorbed.
  - Respects Hytale's built-in pickup-delay so a player can't immediately
    re-grab an item they just dropped.
  - Partial absorbs (hopper fills before the stack is exhausted) leave
    the leftover stack on the ground.
  - Pipes do **not** vacuum — they remain pure conduits. Only blocks
    identified as plain hoppers via `isPlainHopper` participate.
  - Throttled diagnostic log line:
    `[ATPipes] @(x,y,z) VACUUM hits=N absorbed=A partial=P skipped=S`.

### Internal
- New helper `PipeTransferSystem.tryPickupItemEntities(World, gx, gy, gz, dest)`
  using `EntityModule.getItemSpatialResourceType()` →
  `SpatialResource.getSpatialStructure().collect(centre, radius, hits)` and
  `ItemComponent.addToItemContainer(store, ref, dest)` for absorption.
- All Hytale API calls in the new path are wrapped in defensive try/catch
  so a single bad entity ref cannot crash the tick loop.

---

## 1.1.0 — 2026-05-10

### Added
- **Transparent-pipe BFS routing.** Hoppers pushing into a pipe network
  perform a breadth-first search through chained
  `Automated_Tools_Large_Pipe`, `Automated_Tools_Large_Pipe_Corner`, and
  `Automated_Tools_Large_Pipe_Mouthpiece` segments to find the first
  reachable container (chest, hopper, etc.) and deposit there directly.
- Diagnostic logging for routing decisions, including
  `BFS-EXHAUSTED from src @(x,y,z) entry @(x,y,z)=<pipeId> pipesVisited=N budgetLeft=M`
  to debug dead-end networks.
- `PUSH <DIR> -> neighbor @(x,y,z) id=<blockId> container=ok|null`
  per-tick traces for each hopper face.

### Fixed
- Item leak when a hopper pushed into a mouthpiece whose downstream pipe
  led nowhere — items are now retained in the source until a valid sink
  is reachable.
- Routing across mouthpieces of different orientations now correctly
  resumes BFS in the downstream pipe direction instead of stopping at
  the first non-container neighbour.

---

## 1.0.0 — initial release

### Added
- Custom `Automated_Tools_Hopper` block (5-slot container, configurable
  front face DOWN/EAST/WEST/NORTH/SOUTH/UP plus opposite back face).
- Per-tick neighbour-to-neighbour transfer:
  - Pull one item per tick from the back-side container.
  - Push one item per tick into the front-side container.
- Pipe block family: `Automated_Tools_Large_Pipe`,
  `Automated_Tools_Large_Pipe_Corner`,
  `Automated_Tools_Large_Pipe_Mouthpiece`.
- Bundled asset pack (icons, models, recipes) registered as
  `ForgeDMC:AutomatedTools`.
- `AutomatedToolsBundlePlugin` single-`Main` entrypoint wrapping both
  the asset/hopper plugin and the pipe transfer system.