
New types of carts that can automate digging, laying rails, laying bridges, coupling carts together, train signals, and hopper filters. All so you can automate sending your booty back from your strip mine to your base.
Build rail networks that build themselves. AutoCartSystem turns minecarts into a self-laying, self-mining, self-bridging, driveable train system — so reaching distant places by rail is finally faster than walking there.
Lay track, bore tunnels, span chasms, haul resources, and signal stations, all from carts on the rails. Then couple them into trains and drive them with a real engine.
Requires Minecraft 26.x or newer (Paper)
The idea of mining with a minecart to send resources back to your base is enticing, but ultimately impractical. The effort required to build the rail network is many times harder than just mining out a mineshaft on foot and walking back.
The preparation needed to bore holes, make bridges, lay the track, and add powered rails is high. Then you start to strip mine near your cart and before you know it you're 1000s of blocks away from your cart in far less time than it took to just get the cart there. This plugin seeks to address those problems and more.
[ACS:HOPPER] item filters, [ACS:TRASH] voiding chests, and [ACS:SIGNAL] train signals that slow and stop auto-driven trains until conditions (chest empty/full, timers, clear-track) are met.Drop the AutoCartSystem .jar into your server's plugins/ folder.
Start (or restart) your Paper 26.x+ server. A default config.yml is generated on first run.
Give yourself some carts and place them on rails:
/acs give engine
/acs give track_layer 64
/acs give drill true
Couple them up, fuel the engine, hop in the cart behind it, and drive forward.
ACS carts are not creative-menu items — there is nothing new to find in the creative inventory. Get them by crafting (see Crafting recipes) or with
/acs give <type>(op by default).
The functional carts (engine, drill, track layer, bridge layer) each carry their own storage. Sneak + right-click a placed cart to open its storage GUI:
Each storage only accepts items it can use. Breaking a cart drops whatever it was holding.
Need to tweak a setting? Edit plugins/AutoCartSystem/config.yml, then run /acs reload — no restart required.
/acs give./acs give.recipes.enabled: false (see Configuration); carts then remain available via /acs give only./acs give.| Cart | Ingredients |
|---|---|
| Minecart | Minecart + Iron Chain |
| Driver Cart | Minecart + Lever + Iron Chain |
| Chest Minecart | Chest Minecart + Iron Chain |
| Hopper Minecart | Hopper Minecart + Iron Chain |
| Furnace Minecart | Furnace Minecart + Iron Chain |
| TNT Minecart | TNT Minecart + Iron Chain |
| Auto Track Layer | Minecart + Dispenser + Rail + Iron Chain |
| Auto Bridge Layer | Minecart + Dispenser + Cobblestone + Iron Chain |
| Drill Cart | Minecart + Diamond Pickaxe + Piston + Iron Chain |
| Engine Cart | Furnace Minecart + Block of Redstone + Iron Chain |
| Long Hopper | Hopper + Iron Chain |
/acs give driver)/acs give long_hopper — it is a hopper block item, not a cartacs.place permission) creates a long hopper; breaking it returns the long hopper item so the upgrade is not lostlongHopper.enabled makes placement fail with a message; existing long hoppers stop their long-range push[ACS:<TYPE>] on the first line of the sign then followed by the specific command parameters[ACS:HOPPER] tag). The chest then accepts any of the listed items[ACS:HOPPER]
<ITEM_ID>
<ITEM_ID>
<ITEM_ID>
[ACS:HOPPER]
diamond
[ACS:HOPPER]
coal
charcoal
coal_block
[ACS:TRASH]
ALL_EMPTY - All regular chests on carts (not track layer, bridger layer, drill cart, engine cart) are emptyALL_FULL - All regular chests on carts (not track layer, bridger layer, drill cart, engine cart) are fullALL_FULL_P - All carts that can carry passengers (rideable minecarts) have a player aboard — i.e. there are no empty passenger seats left. Green only when the train has at least one passenger cart and every one is occupied (useful to hold a train at a station until everyone has boarded)WAIT <SECONDS> - Specified amount of seconds has passed, (maximum 600s)NO_TRAIN <TRACKS_FROM_HERE> - If there is no train on the tracks in the specified amount of tracks beyond this sign (checks all connected branches and crossing tracks) (maximum 20 tracks)(<CONDITION 1> <OPERATOR> <CONDITION 2>) <OPERATOR> <CONDITION 3>
AND <CONDITION> - This condition AND the combined result of the conditions before must be trueOR <CONDITION> - This condition OR the combined result of the conditions before must be true[ACS:SIGNAL]
<CONDITION 1>
<OPERATOR> <CONDITION 2>
<OPERATOR> <CONDITION 3>
[ACS:SIGNAL]
ALL_EMPTY
OR WAIT 30
OR NO_TRAIN 10
[ACS:SIGNAL]
ALL_FULL
AND WAIT 80
Loading and unloading cart systems have always been possible, but now you can keep multiple trains running reliably and use signals to prevent them from crashing into each other. The examples below combine the carts above, the [ACS:SIGNAL] signs, and the long hopper into complete, working setups.
Signals only affect engine-driven trains (not trains a player is driving), so every loop below relies on at least one engine cart per train. See Train signal signs for the full condition/operator reference.
The headline setup: a self-digging strip mine that lays its own track, plus a pair of hauler trains that shuttle the ore back to base — all without crashing.
Couple a drill cart to the front, an engine cart behind it, and one or more track layer carts loaded with rail. (Add a bridge layer with cobblestone if you expect to cross gaps.) Because a drill is present, the drill is cart #1 and the engine is #2 — it pulls the whole train forward into the rock.
THREE_BY_THREE) and lays track behind itself, extending the mine automatically.Lay a second, parallel track alongside the freshly-dug main line and join the ends so it forms a loop: trains run out to the mine face on one rail and back to base on the other. Run two hauler trains on the loop, each an engine cart + chest carts, spaced apart so one is loading at the mine while the other is unloading at base.
Place signal signs beside the track (on the ground or a block beside it), facing the direction trains approach from.
At the mine face — hold the front train for 5 minutes so you can load it by hand:
[ACS:SIGNAL]
WAIT 300
While it sits there, dump everything you strip-mined — diamonds, coal, emeralds, ores — into its chest carts. When the 5 minutes elapse the signal goes green and it heads home.
Just behind it — keep the second train from rear-ending the first:
[ACS:SIGNAL]
NO_TRAIN 10
This signal stays red while the first train is still within 10 tracks ahead, then goes green once that train has pulled away — so the trailing train only advances into the loading zone after the leader leaves.
At the base drop-off — hold each train until its chests are empty:
[ACS:SIGNAL]
ALL_EMPTY
The train parks over the unload point and won't leave until every regular chest cart has been drained (by hoppers underneath — see the next example), then rolls back out to the mine. Combined, the three signs give you a continuous out-and-back loop where loaded and empty trains never meet.
The drop-off chest from Example 1 fills with a jumble of materials. Use the long hopper to fan it out into a sorting wall.
longHopper.range) instead of only the adjacent block.[ACS:HOPPER]
diamond
[ACS:HOPPER]
coal
[ACS:HOPPER]
emerald
[ACS:HOPPER]
coal
charcoal
coal_block
Engines burn fuel, and the coal you just sorted in Example 2 can refuel them for free.
[ACS:SIGNAL]
WAIT 5
engine.fuelBurnRateMultiplier: 0.5), so a short top-up each lap keeps them running indefinitely.The same signals make a passenger line that waits for riders and pauses at each station.
[ACS:SIGNAL]
WAIT 10
ALL_FULL_P — it stays red until every rideable cart has a player aboard, then goes green. Pair it with a WAIT so a partly-full train still leaves eventually instead of stranding riders:[ACS:SIGNAL]
ALL_FULL_P
OR WAIT 60
NO_TRAIN signals (as in Example 1) so they never bunch up or collide.Tip: because a driver cart overrides signals (and stops the engine from auto-driving), coupling a driver cart to a train and riding it lets you take manual control and drive it off the automated loop. Leave the driver cart off any train you want to keep running the loop on its own.
These build on each other: the strip-mine loop (1) feeds the long-hopper sorter (2), the sorted coal refuels the engines (3), and the same signal patterns drive a passenger network (4). Tune every limit — train length, hopper range, signal distances, wait times — in Configuration, and apply changes live with /acs reload.
AutoCartSystem provides a single base command.
/acs <subcommand> [args...]
/autocart, /autocartsystemacs.command (default: all players)Running /acs with no arguments (or /acs help) shows the in-game command list. See Permissions for the permission nodes.
/acs reloadReloads the plugin: re-reads config.yml from disk and re-applies every setting at runtime. No server restart is needed for config changes to take effect.
| Syntax | /acs reload |
| Permission | acs.command.reload (default: op) |
| Example | /acs reload |
/acs giveGives an ACS item (a cart, or the long hopper block) to a player.
| Syntax | /acs give <type> [amount] [player] |
| Permission | acs.command.give (default: op) |
Arguments
| Arg | Required | Description |
|---|---|---|
type |
yes | The item type (see table below). |
amount |
no | How many items to give (minimum 1). Defaults to 1. |
player |
no | Target player. Defaults to the sender; required when run from console. |
The optional arguments are positional but each is detected by its shape (integer, then a name), so they must appear in the order shown above. Every ACS cart can couple — there is no longer a coupling/non-coupling variant to choose.
Types (case-insensitive)
| Type | Item given |
|---|---|
rideable |
Minecart |
driver |
Driver Cart |
chest |
Chest Minecart |
hopper |
Hopper Minecart |
furnace |
Furnace Minecart |
tnt |
TNT Minecart |
track_layer |
Auto Track Layer |
bridge_layer |
Auto Bridge Layer |
drill |
Drill Cart |
engine |
Engine Cart |
long_hopper |
Long Hopper (a hopper block item, not a cart) |
Examples
/acs give engine # 1 engine cart to yourself
/acs give drill # 1 drill cart to yourself
/acs give track_layer 16 # 16 track layers
/acs give chest 4 Steve # 4 chest minecarts to Steve
/acs give long_hopper 2 # 2 long hoppers to yourself
/acs infoShows AutoCartSystem details for the cart you are riding, or — if you are not riding one — the cart you are looking at (within 6 blocks). Player-only.
Reported details include cart type, how many carts it is coupled to, drill pattern (drill carts only), and, when the cart belongs to a tracked train: train size, position in train, heading, whether the train has an engine or drill, regular chest count, functional cart count, and the current driver.
| Syntax | /acs info |
| Permission | acs.command.info (default: all players) |
| Example | /acs info |
/acs helpLists the subcommands above with their usage. Requires only the base acs.command permission.
| Syntax | /acs help |
| Permission | acs.command |
| Example | /acs help |
All numbers and most features can be enabled or disabled in the config file (plugins/AutoCartSystem/config.yml).
Most features have a enabled master toggle. Numeric limits are tunable. After editing the file, apply changes at runtime with /acs reload — no server restart required.
coupling)Controls placement-time coupling (and its placement highlight) that joins carts into a recognised "train".
| Key | Purpose | Type | Default |
|---|---|---|---|
coupling.enabled |
Master toggle for coupling. When off, placed carts never couple, the placement highlight is hidden, and coupled trains lose their collision immunity. | boolean | true |
coupling.maxTrainLength |
Maximum number of carts in a single coupled train. No new carts couple once this length is reached. | integer | 20 |
trackLayer)The track layer cart lays rail at the front of the train.
| Key | Purpose | Type | Default |
|---|---|---|---|
trackLayer.enabled |
Master toggle for the track layer cart. | boolean | true |
trackLayer.lookAhead |
How many blocks ahead of the train front the layer looks to place rail. | integer | 1 |
bridgeLayer)The bridge layer cart lays bridging blocks ahead of the train when crossing a gap.
| Key | Purpose | Type | Default |
|---|---|---|---|
bridgeLayer.enabled |
Master toggle for the bridge layer cart. | boolean | true |
bridgeLayer.lookAhead |
How many blocks ahead of the train front the bridger looks to place a block. | integer | 1 |
drill)The drill cart mines blocks directly ahead of the train in a configurable pattern.
| Key | Purpose | Type | Default |
|---|---|---|---|
drill.enabled |
Master toggle for the drill cart. | boolean | true |
drill.defaultPattern |
Default mining pattern for newly created drill carts. One of: ONE_BY_TWO, TWO_BY_ONE, TWO_BY_TWO_RIGHT, TWO_BY_TWO_LEFT, THREE_BY_TWO, THREE_BY_THREE. |
string (enum) | ONE_BY_TWO |
drill.pickaxeConsumptionMultiplier |
Pickaxes are consumed this many times faster than normal durability loss. | decimal | 2.0 |
engine)The engine cart powers the train and can be driven by a player.
| Key | Purpose | Type | Default |
|---|---|---|---|
engine.enabled |
Master toggle for the engine cart. | boolean | true |
engine.fuelBurnRateMultiplier |
Fuel burns at this fraction of the furnace rate (0.5 => fuel lasts twice as long). |
decimal | 0.5 |
engine.maxSpeed |
Maximum engine speed in blocks/tick. Vanilla minecart max speed is 0.4. |
decimal | 0.4 |
longHopper)The long hopper pushes items into chests far beyond the block directly adjacent to it.
| Key | Purpose | Type | Default |
|---|---|---|---|
longHopper.enabled |
Master toggle for the long hopper. | boolean | true |
longHopper.range |
Maximum distance (in blocks) from the hopper output end to a target chest. | integer | 20 |
longHopper.reach |
How far the long hopper reaches per tick when searching for a target. | integer | 20 |
recipes)Controls the crafting recipes that produce ACS cart items (see Crafting recipes).
| Key | Purpose | Type | Default |
|---|---|---|---|
recipes.enabled |
Master toggle for ACS cart crafting recipes. When false, carts are only obtainable via /acs give. |
boolean | true |
signs)Controls all ACS sign command handling.
| Key | Purpose | Type | Default |
|---|---|---|---|
signs.enabled |
Master toggle for all ACS sign command handling (HOPPER, TRASH, SIGNAL). |
boolean | true |
signals)Controls engine train signal signs ([ACS:SIGNAL]).
| Key | Purpose | Type | Default |
|---|---|---|---|
signals.enabled |
Master toggle for engine train signal signs. | boolean | true |
signals.noTrainMaxTracks |
Maximum tracks a NO_TRAIN condition may scan ahead. |
integer | 20 |
signals.waitMaxSeconds |
Maximum seconds a WAIT condition may specify. |
integer | 600 |
signals.scanAhead |
How many rail blocks ahead of the train front to scan for signal signs each tick. | integer | 8 |
signals.stopDistance |
Distance (in blocks) over which an auto-driven train ramps down to a stop as it approaches a red signal. | decimal | 6.0 |
debug)| Key | Purpose | Type | Default |
|---|---|---|---|
debug |
Enables verbose console logging (e.g. train front/heading changes) for troubleshooting. | boolean | false |
AutoCartSystem declares the permission nodes below in plugin.yml. The default column shows who has the node out of the box:
true — granted to all players by default.op — granted only to server operators by default.Any node can be overridden per-group or per-player with your permissions plugin.
These control who can place ACS items to create the special carts (and the long hopper block).
| Node | Grants | Default |
|---|---|---|
acs.place |
Placing ACS items: cart items to create special carts, and the long hopper item to create a long hopper. | true |
These control which ACS sign types a player may create.
| Node | Grants | Default |
|---|---|---|
acs.sign.hopper |
Creating [ACS:HOPPER] item-filter signs. |
true |
acs.sign.trash |
Creating [ACS:TRASH] signs. |
true |
acs.sign.signal |
Creating [ACS:SIGNAL] train signal signs. |
true |
These control access to the /acs command and its subcommands.
| Node | Grants | Default |
|---|---|---|
acs.command |
Base access to the /acs command. |
true |
acs.command.info |
Using /acs info. |
true |
acs.command.reload |
Using /acs reload to reload configuration. |
op |
acs.command.give |
Using /acs give to spawn ACS cart items. |
op |