package io.github.skippyall.minions.registration; import io.github.skippyall.minions.Minions; import io.github.skippyall.minions.minion.MinionRuntime; import io.github.skippyall.minions.minion.fakeplayer.EntityPlayerActionPack; import io.github.skippyall.minions.minion.program.instruction.ActionExecution; import io.github.skippyall.minions.minion.program.instruction.MineBlockExecution; import io.github.skippyall.minions.minion.program.instruction.inventory.SwapItemExecution; import io.github.skippyall.minions.minion.program.instruction.move.ContinuousWalkExecution; import io.github.skippyall.minions.minion.program.instruction.move.TurnExecution; import io.github.skippyall.minions.minion.program.instruction.move.TurnVectorExecution; import io.github.skippyall.minions.minion.program.instruction.move.WalkExecution; import io.github.skippyall.minions.program.instruction.InstructionExecution; import io.github.skippyall.minions.program.instruction.InstructionType; import io.github.skippyall.minions.program.supplier.Parameter; import net.minecraft.core.Registry; import net.minecraft.resources.Identifier; import java.util.Collection; import java.util.List; import java.util.function.Supplier; public class Instructions { public static final InstructionType WALK = register( "walk", WalkExecution::new, List.of(WalkExecution.blocksToMoveParam) ); public static final InstructionType WALK_CONTINUOUS = register( "walk_continuous", ContinuousWalkExecution::new ); public static final InstructionType TURN = register( "turn", TurnExecution::new, List.of(TurnExecution.ANGLE, TurnExecution.DIRECTION) ); public static final InstructionType TURN_VECTOR = register( "turn_vector", TurnVectorExecution::new, List.of(TurnVectorExecution.X, TurnVectorExecution.Y, TurnVectorExecution.Z) ); public static final InstructionType ATTACK = register( "attack", () -> new ActionExecution(EntityPlayerActionPack.ActionType.ATTACK) ); public static final InstructionType MINE_BLOCK = register( "mine_block", MineBlockExecution::new ); public static final InstructionType USE = register( "use", () -> new ActionExecution(EntityPlayerActionPack.ActionType.USE) ); public static final InstructionType SWAP_ITEM = register( "swap_item", SwapItemExecution::new, List.of(SwapItemExecution.FROM_SLOT, SwapItemExecution.FROM_SCREEN, SwapItemExecution.TO_SLOT, SwapItemExecution.TO_SCREEN) ); private static InstructionType register(String id, Supplier> factory, Collection> parameters, Collection> returnParameters) { Identifier identifier = Identifier.fromNamespaceAndPath(Minions.MOD_ID, id); return Registry.register(MinionRegistries.INSTRUCTION_TYPES, identifier, new InstructionType<>(factory, parameters, returnParameters)); } private static InstructionType register(String id, Supplier> factory, Collection> parameters) { return register(id, factory, parameters, List.of()); } private static InstructionType register(String id, Supplier> factory) { return register(id, factory, List.of(), List.of()); } public static void register() { } }