Skip to main content

Production Workflow Builder

ProductionWorkflowBuilder assembles StepHandler chains for Make-X skilling: production open, option selection, banking, and restocking.

Example

ProductionWorkflowBuilder builder = new ProductionWorkflowBuilder(services);
StepHandler handler = builder
.waitForProductionOpen()
.selectOption("Bow")
.selectQuantity(ProductionQuantity.ALL)
.waitForProductionComplete()
.bankAndRestock(loadout)
.build();

Standard checks (isInventoryFull(), isProductionStopped()) delegate to the injected Services instance.

Tick Usage

Build the workflow once for a production run, then advance it on each game tick. When it completes, decide whether to rebuild for the next cycle or stop.

private StepHandler production;

@Subscribe
public void onGameTick(GameTick event) {
if (production == null) {
production = createBowWorkflow();
}

if (!production.isCompleted()) {
production.step();
}
}

private StepHandler createBowWorkflow() {
return new ProductionWorkflowBuilder(services)
.waitForProductionOpen()
.selectOption("Bow")
.selectQuantity(ProductionQuantity.ALL)
.waitForProductionComplete()
.bankAndRestock(logsAndKnife)
.build();
}

Custom Quantity

Use enterCustomQuantity(...) when the UI flow requires a typed amount instead of a standard Make-X quantity button.

StepHandler handler = new ProductionWorkflowBuilder(services)
.waitForProductionOpen()
.selectOption(1)
.enterCustomQuantity(14)
.waitForProductionComplete()
.build();

Services Contract

The builder does not know which widgets or bank setup your plugin uses. Put that knowledge in Services and keep the workflow focused on sequencing.

ProductionWorkflowBuilder.Services services = new ProductionWorkflowBuilder.Services() {
public boolean isProductionOpen() {
return ProductionActions.isOpen();
}

public void selectOption(String name) {
ProductionActions.chooseOption(name);
}

public void selectQuantity(ProductionQuantity quantity) {
ProductionActions.selectQuantity(quantity);
}

public boolean isInventoryFull() {
return Inventory.search().count() >= 28;
}

// Implement index selection, custom quantity entry, stopped checks, and
// bank restocking for the production flow you are automating.
};