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.
};