Recycle
Requires the player to recycle items, counting either the items fed into the recycler or the items it returns.
{ "type": "Recycle", "title": "Scrap run", "description": "", "amountRequired": 5, "conditions": {}, "direction": "Input", "items": ["pipes"]}Fields
Section titled “Fields”| Field | Type | Description |
|---|---|---|
type | string | Exactly 'Recycle' |
title | string | Short, human-readable name. Must not be empty. |
description | string | A blurb of 1 to 3 sentences. May be empty if the title is self-explanatory. |
amountRequired | integer (≥ 1) | How many items must pass through the recycler on the side named by 'direction'. |
cooldown | object | null | Optional pacing limit on how fast progress adds up: at most maxAmount units of progress count in any sliding window of windowSeconds. Absent means progress adds up freely. While the window's budget is used up, further progress is ignored and the player sees a countdown to the next available moment. |
burst | object | null | Optional clustering requirement: actions only count when they arrive clustered, at least amount units within one trailing window of windowSeconds forming one burst. When present, amountRequired counts completed bursts instead of raw actions. Actions that age out of the window without completing a burst never count. Absent means no clustering. |
conditions | map | Optional conditions that restrict when progress counts. Progress is recorded only when the objective's main requirement and all of these conditions are met. Use an empty map for none. |
hideDetails | boolean | When true, hides this objective's in-game condition strip and details popup, so the description is the only explanation players get. Title, description and progress still show. Absent means false. |
direction | enum: Input | Output | Which side of the recycler counts. 'Input' counts the units fed in, and the items list holds what to feed in. 'Output' counts the units that come out, and the items list holds what must come out. |
items | string[] | Item shortNames on the side named by 'direction', lowercase dotted. With 'Input', these are items to recycle (e.g. pipes, techparts, roadsigns). With 'Output', these are items the recycler must return, scrap included (e.g. metal.fragments, scrap). Empty = any item on that side. |
Who gets the credit
Section titled “Who gets the credit”Progress goes to the player who loaded the items into the recycler, not to
whoever switched it on or emptied the output tray. That holds for both
directions: with "Output", the items produced from your pipes are yours even
if somebody else is standing there when they appear.
- Shared recyclers work the way you’d hope. Everyone gets credit for what they put in themselves.
- Progress keeps adding up while the depositor is offline. Load a recycler, log off, and the objective advances as it runs.
- Conditions are checked once, against the depositor at the instant of deposit, exactly like Cook. A Monument condition therefore pins where the recycler must be, and a TimeOfDay condition means “load the recycler at night” (not “the items must come out at night”).
Surviving server & plugin restarts
Section titled “Surviving server & plugin restarts”The Recycle objective persists in-memory cache data across server restarts and plugin reloads. When either happens, the plugin will save the state of recycler progress inside the cache_data.json file, and restore it when the server is back online or the plugin is reloaded.
This mechanic aims at preserving who gets the credit for items deposited into a recycler between server/plugin restarts.
- Every recycler counts, at a monument, in a safe zone or in a monument. There is no filter for which one, only for the items.
- The editor only warns that an item shortname exists, never that a recycler accepts it or can produce it. A valid but unrecyclable item simply never progresses.
- When the output tray fills up, the recycler drops the rest at its feet and stops. Those dropped items still count as output.
