UNPKG

@clusterio/plugin-inventory_sync

Version:

Clusterio plugin forwarding between Factorio servers

190 lines (162 loc) 4.79 kB
import { Type, Static } from "@sinclair/typebox"; import { StringEnum } from "@clusterio/lib"; // .\module\serialize.lua:serialize.serialize_player() export type IpcPlayerData = { generation: number, controller: string, name: string, color: number[], chat_color: number[], tag: string, force: string, cheat_mode: boolean, flashlight: boolean, ticks_to_respawn?: number, character?: any, inventories?: any, hotbar?: string[], personal_logistic_slots?: {name:string, min:number, max:number}[], crafting_queue?: any, } const jsonPlayerData = Type.Object({ generation: Type.Number(), name: Type.String(), }); export class AcquireResponse { constructor( public status: string, public generation?: number, public hasData?: boolean, public message?: string, ) { } static jsonSchema = Type.Object({ "status": StringEnum(["acquired", "error", "busy"]), "generation": Type.Optional(Type.Integer()), "hasData": Type.Optional(Type.Boolean()), "message": Type.Optional(Type.String()), }); static fromJSON(json: Static<typeof AcquireResponse.jsonSchema>): AcquireResponse { return new this(json.status, json.generation, json.hasData, json.message); } }; export class AcquireRequest { declare ["constructor"]: typeof AcquireRequest; static type = "request" as const; static src = "instance" as const; static dst = "controller" as const; static plugin = "inventory_sync" as const; static Response = AcquireResponse; constructor( public instanceId: number, public playerName: string, ) { } static jsonSchema = Type.Object({ "instanceId": Type.Number(), "playerName": Type.String(), }); static fromJSON(json: Static<typeof AcquireRequest.jsonSchema>): AcquireRequest { return new this(json.instanceId, json.playerName); } } export class ReleaseRequest { declare ["constructor"]: typeof ReleaseRequest; static type = "request" as const; static src = "instance" as const; static dst = "controller" as const; static plugin = "inventory_sync" as const; constructor( public instanceId: number, public playerName: string ) { } static jsonSchema = Type.Object({ "instanceId": Type.Integer(), "playerName": Type.String(), }); static fromJSON(json: Static<typeof ReleaseRequest.jsonSchema>) { return new this(json.instanceId, json.playerName); } } export class UploadRequest { declare ["constructor"]: typeof UploadRequest; static type = "request" as const; static src = "instance" as const; static dst = "controller" as const; static plugin = "inventory_sync" as const; constructor( public instanceId: number, public playerName: string, public playerData: IpcPlayerData, ) { } static jsonSchema = Type.Object({ "instanceId": Type.Integer(), "playerName": Type.String(), "playerData": jsonPlayerData, }); static fromJSON(json: Static<typeof UploadRequest.jsonSchema>) { return new this(json.instanceId, json.playerName, json.playerData as IpcPlayerData); } } export class DownloadResponse { constructor( public playerData: IpcPlayerData | null ) { } static jsonSchema = Type.Object({ "playerData": Type.Optional(jsonPlayerData), }); static fromJSON(json: Static<typeof DownloadResponse.jsonSchema>): DownloadResponse { return new this(json.playerData as IpcPlayerData); } } export class DownloadRequest { declare ["constructor"]: typeof DownloadRequest; static type = "request" as const; static src = "instance" as const; static dst = "controller" as const; static plugin = "inventory_sync" as const; static Response = DownloadResponse; constructor( public instanceId: number, public playerName: string, ) { } static jsonSchema = Type.Object({ "instanceId": Type.Integer(), "playerName": Type.String(), }); static fromJSON(json: Static<typeof DownloadRequest.jsonSchema>) { return new this(json.instanceId, json.playerName); } } export class DatabaseStatsResponse { constructor( public databaseSize: number, public databaseEntries: number, public largestEntry: { name: string, size: number }, ) { } static jsonSchema = Type.Object({ "databaseSize": Type.Integer(), "databaseEntries": Type.Integer(), "largestEntry": Type.Object({ "name": Type.String(), "size": Type.Number(), }), }); static fromJSON(json: Static<typeof DatabaseStatsResponse.jsonSchema>): DatabaseStatsResponse { return new this(json.databaseSize, json.databaseEntries, json.largestEntry); } } export class DatabaseStatsRequest { declare ["constructor"]: typeof DatabaseStatsRequest; static type = "request" as const; static src = "control" as const; static dst = "controller" as const; static plugin = "inventory_sync" as const; static permission = "inventory_sync.inventory.view" as const; static Response = DatabaseStatsResponse; }