RustSetonixPlugin.build constructor

RustSetonixPlugin.build(
  1. RustPlugin builder(
    1. PluginCallback
    ),
  2. PluginServerInterface server, {
  3. void onPrint(
    1. String
    )?,
})

Implementation

factory RustSetonixPlugin.build(
  RustPlugin Function(PluginCallback) builder,
  PluginServerInterface server, {
  void Function(String)? onPrint,
}) {
  final callback = PluginCallback.default_();
  final plugin = builder(callback);
  final instance = RustSetonixPlugin._(server, plugin);
  if (onPrint != null) {
    callback.changeOnPrint(onPrint: onPrint);
  }
  callback.changeProcessEvent(
    processEvent: (eventSerizalized, force) {
      final event = WorldEventMapper.fromJson(eventSerizalized);
      server.process(event, force: force ?? false);
    },
  );
  callback.changeSendEvent(
    sendEvent: (eventSerizalized, target) {
      final event = PlayableWorldEventMapper.fromJson(eventSerizalized);
      server.sendEvent(event, target: target ?? kAnyChannel);
    },
  );
  callback.changeStateFieldAccess(
    stateFieldAccess: (field) {
      final state = server.state;
      return switch (field) {
        StateFieldAccess.info => state.info.toJson(),
        StateFieldAccess.table => state.table.toJson(),
        StateFieldAccess.tableName => jsonEncode(state.tableName),
        StateFieldAccess.players => jsonEncode(server.players),
        StateFieldAccess.teamMembers => jsonEncode(state.teamMembers),
      };
    },
  );
  instance.eventSystem.on<WorldEvent>((e) {
    instance.plugin.runEvent(
      eventType: e.clientEvent.runtimeType.toString(),
      event: e.clientEvent.toJson(),
      serverEvent: e.serverEvent.toJson(),
      target: e.target,
      source: e.source,
    );
  });
  return instance;
}