From 072d1a2845c21cf80fa7941fae29c11b2f9c37db Mon Sep 17 00:00:00 2001 From: Lazzexus Date: Mon, 12 Oct 2026 15:06:30 +0200 Subject: [PATCH] Port events-mod to Factorio 2.0.77, declare SE/Krastorio 2 compatibility Bumps the Factorio engine pin and typed-factorio (1.11.0 -> 3.36.0, targeting 2.0.75) and fixes the resulting breaking API changes: global -> storage, game.*_prototypes -> prototypes.*, game.table_to_json/ encode_string -> helpers.*, OnBuiltEntityEvent.created_entity -> .entity, removed TileRead/ColorTable/MapPositionTable-style write-form aliases, new CollisionMask shape, restructured settings-stage type imports, and new defines.entity_status values (added to the Status enum, generated schema, and EntityStatusRecord mapping). Also declares optional mod dependencies on space-exploration and Krastorio2. Co-Authored-By: Claude Sonnet 5 --- gradle/libs.versions.toml | 4 +- .../kafkatorio/schema/common/entities.kt | 51 +++++++++++++++++++ modules/events-mod/build.gradle.kts | 4 ++ modules/events-mod/package.json | 2 +- .../src/main/resources/changelog.txt | 5 ++ .../typescript/generated/kafkatorio-schema.ts | 24 +++++++++ .../main/emitting/EventDataCache.ts | 20 ++++---- .../main/emitting/EventDataQueue.ts | 50 +++++++++--------- .../typescript/main/emitting/PacketEmitter.ts | 8 +-- .../main/typescript/main/events/converters.ts | 46 +++++++++++++---- .../events/handlers/EntityUpdateHandler.ts | 4 +- .../events/handlers/MapChunkUpdateHandler.ts | 10 ++-- .../main/events/prototypeUpdates.ts | 4 +- .../typescript/main/events/settingsUpdate.ts | 2 +- .../src/main/typescript/main/global-init.ts | 4 +- .../src/main/typescript/main/global.d.ts | 2 +- .../main/settings/KafkatorioSettings.ts | 5 +- .../src/main/typescript/settings.ts | 6 +-- modules/events-mod/tsconfig.json | 3 +- .../factorioEvents.Dockerfile | 2 +- 20 files changed, 183 insertions(+), 73 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e54ae4..8e24165 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -53,7 +53,7 @@ nimbusJoseJwt = "9.25.6" # https://search.maven.org/artifact/com. npm-luaTypes = "2.13.1" # https://www.npmjs.com/package/lua-types npm-typescriptToLua = "1.11.1" # https://www.npmjs.com/package/typescript-to-lua -npm-typedFactorio = "1.11.0" # https://github.com/GlassBricks/typed-factorio/blob/main/Changelog.md https://www.npmjs.com/package/typed-factorio +npm-typedFactorio = "3.36.0" # targets Factorio 2.0.75 ("factorio-2.0" dist-tag); https://github.com/GlassBricks/typed-factorio/blob/main/Changelog.md https://www.npmjs.com/package/typed-factorio npm-typescript = "4.9" # https://github.com/microsoft/TypeScript/releases npm-bootswatch = "5.2.2" # https://www.jsdelivr.com/package/npm/bootswatch @@ -65,7 +65,7 @@ mockk = "1.13.3" # https://github.com/mockk/mockk/releases/ ## infra ## -factorio = "1.1.72" # https://www.factorio.com/download +factorio = "2.0.77" # https://www.factorio.com/download confluent-kafkaConnect = "7.0.1" grafana = "8.5.0" prometheus = "v2.34.0" diff --git a/modules/events-library/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/entities.kt b/modules/events-library/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/entities.kt index d203ad8..3b85517 100644 --- a/modules/events-library/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/entities.kt +++ b/modules/events-library/src/commonMain/kotlin/dev/adamko/kafkatorio/schema/common/entities.kt @@ -158,6 +158,57 @@ sealed interface FactorioEntityData { NOT_CONNECTED_TO_RAIL, /** Used by rail signals. */ CANT_DIVIDE_SEGMENTS, + + // Factorio 2.0 additions (Space Age / space platforms, agricultural towers, etc.) + + /** Used by ghosts. */ + GHOST, + /** Only used if set through `ContainerPrototype::default_status`. */ + BROKEN, + /** Used by entities affected by freezing. */ + FROZEN, + /** Used by space platform hubs. */ + PAUSED, + /** Used by cargo bays. */ + NOT_CONNECTED_TO_HUB_OR_PAD, + /** Used by agricultural towers. */ + NOT_ENOUGH_SPACE_IN_OUTPUT, + /** Used by burner energy sources. */ + FULL_BURNT_RESULT_OUTPUT, + /** Used by inserters when wait_for_full_hand is set. */ + WAITING_FOR_MORE_ITEMS, + /** Used by the rocket silo. */ + WAITING_FOR_SPACE_IN_PLATFORM_HUB, + /** Used by thrusters. */ + THRUST_NOT_REQUIRED, + /** Used by space platform hubs. */ + ON_THE_WAY, + /** Used by space platform hubs. */ + WAITING_IN_ORBIT, + /** Used by trains. */ + WAITING_AT_STOP, + /** Used by space platform hubs. */ + WAITING_FOR_ROCKETS_TO_ARRIVE, + /** Used by space platform hubs. */ + NOT_ENOUGH_THRUST, + /** Used by trains. */ + DESTINATION_STOP_FULL, + /** Used by trains and space platform hubs. */ + NO_PATH, + /** Used by filter inserters. */ + NO_FILTER, + /** Used by agricultural towers. */ + NO_SPOT_SEEDABLE_BY_INPUTS, + /** Used by agricultural towers. */ + WAITING_FOR_PLANTS_TO_GROW, + /** Used by asteroid collectors. */ + COMPUTING_NAVIGATION, + /** Used by pipes, pipes to ground, and storage tanks. */ + PIPELINE_OVEREXTENDED, + /** Used by assembling machines. */ + RECIPE_NOT_RESEARCHED, + /** Used by assembling machines. */ + RECIPE_IS_PARAMETER, } } diff --git a/modules/events-mod/build.gradle.kts b/modules/events-mod/build.gradle.kts index 82de877..cc01a35 100644 --- a/modules/events-mod/build.gradle.kts +++ b/modules/events-mod/build.gradle.kts @@ -19,6 +19,10 @@ factorioMod { modTitle.set("Kafkatorio Events") modAuthor.set("adam@adamko.dev") factorioCompatibility.set(libs.versions.factorio.map { it.substringBeforeLast(".") }) + modDependencies.set(listOf( + "? space-exploration >= 0.7.0", + "? Krastorio2", + )) } val licenseFile: RegularFile by rootProject.extra diff --git a/modules/events-mod/package.json b/modules/events-mod/package.json index 302c099..60847bd 100644 --- a/modules/events-mod/package.json +++ b/modules/events-mod/package.json @@ -13,7 +13,7 @@ "dependencies": { "lua-types": "2.13.1", "typescript-to-lua": "1.11.1", - "typed-factorio": "1.11.0", + "typed-factorio": "3.36.0", "typescript": "4.9" }, "license": "GPL-3.0-only", diff --git a/modules/events-mod/src/main/resources/changelog.txt b/modules/events-mod/src/main/resources/changelog.txt index ae5a975..0a99f91 100644 --- a/modules/events-mod/src/main/resources/changelog.txt +++ b/modules/events-mod/src/main/resources/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 0.1.0 + Changes: + - Updated for Factorio 2.0.77 (storage API, prototypes.entity/prototypes.tile, new entity statuses) + - Declared optional compatibility with Space Exploration and Krastorio 2 +--------------------------------------------------------------------------------------------------- Version: 0.0.1 Features: - Kafkatorio diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts index 3a612cb..9004e1f 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts @@ -373,4 +373,28 @@ export enum FactorioEntityStatus { TURNED_OFF_DURING_DAYTIME = "TURNED_OFF_DURING_DAYTIME", NOT_CONNECTED_TO_RAIL = "NOT_CONNECTED_TO_RAIL", CANT_DIVIDE_SEGMENTS = "CANT_DIVIDE_SEGMENTS", + GHOST = "GHOST", + BROKEN = "BROKEN", + FROZEN = "FROZEN", + PAUSED = "PAUSED", + NOT_CONNECTED_TO_HUB_OR_PAD = "NOT_CONNECTED_TO_HUB_OR_PAD", + NOT_ENOUGH_SPACE_IN_OUTPUT = "NOT_ENOUGH_SPACE_IN_OUTPUT", + FULL_BURNT_RESULT_OUTPUT = "FULL_BURNT_RESULT_OUTPUT", + WAITING_FOR_MORE_ITEMS = "WAITING_FOR_MORE_ITEMS", + WAITING_FOR_SPACE_IN_PLATFORM_HUB = "WAITING_FOR_SPACE_IN_PLATFORM_HUB", + THRUST_NOT_REQUIRED = "THRUST_NOT_REQUIRED", + ON_THE_WAY = "ON_THE_WAY", + WAITING_IN_ORBIT = "WAITING_IN_ORBIT", + WAITING_AT_STOP = "WAITING_AT_STOP", + WAITING_FOR_ROCKETS_TO_ARRIVE = "WAITING_FOR_ROCKETS_TO_ARRIVE", + NOT_ENOUGH_THRUST = "NOT_ENOUGH_THRUST", + DESTINATION_STOP_FULL = "DESTINATION_STOP_FULL", + NO_PATH = "NO_PATH", + NO_FILTER = "NO_FILTER", + NO_SPOT_SEEDABLE_BY_INPUTS = "NO_SPOT_SEEDABLE_BY_INPUTS", + WAITING_FOR_PLANTS_TO_GROW = "WAITING_FOR_PLANTS_TO_GROW", + COMPUTING_NAVIGATION = "COMPUTING_NAVIGATION", + PIPELINE_OVEREXTENDED = "PIPELINE_OVEREXTENDED", + RECIPE_NOT_RESEARCHED = "RECIPE_NOT_RESEARCHED", + RECIPE_IS_PARAMETER = "RECIPE_IS_PARAMETER", } \ No newline at end of file diff --git a/modules/events-mod/src/main/typescript/main/emitting/EventDataCache.ts b/modules/events-mod/src/main/typescript/main/emitting/EventDataCache.ts index 2547dab..3060224 100644 --- a/modules/events-mod/src/main/typescript/main/emitting/EventDataCache.ts +++ b/modules/events-mod/src/main/typescript/main/emitting/EventDataCache.ts @@ -3,7 +3,7 @@ import {KafkatorioKeyedPacketData} from "../types"; import PacketEmitter from "./PacketEmitter"; -declare const global: { +declare const storage: { /** Map the hash of the key, as a string, a cache entry */ eventUpdatesManagerCache: LuaTable>, } @@ -18,13 +18,13 @@ export class EventUpdatesManager { init(force?: boolean) { - const isAnythingUndefined = global.eventUpdatesManagerCache == undefined + const isAnythingUndefined = storage.eventUpdatesManagerCache == undefined log(`Initialising EventDataCache (force=${force}, isAnythingUndefined=${isAnythingUndefined})...`) if (force == true || isAnythingUndefined) { - log("Initialising global.cache") - global.eventUpdatesManagerCache = new LuaTable>() + log("Initialising storage.cache") + storage.eventUpdatesManagerCache = new LuaTable>() } log(`Finished initialising EventDataCache`) } @@ -103,12 +103,12 @@ export class EventUpdatesManager { let countExpired = 0 let countTotal = 0 const expiredData: Array = [] - for (const [key, entry] of global.eventUpdatesManagerCache) { + for (const [key, entry] of storage.eventUpdatesManagerCache) { countTotal++ if (this.isExpired(entry)) { countExpired++ expiredData.push(entry.packet) - global.eventUpdatesManagerCache.delete(key) + storage.eventUpdatesManagerCache.delete(key) } } @@ -146,10 +146,10 @@ export class EventUpdatesManager { type: PacketType, ): CacheEntry | undefined { const hash = EventUpdatesManager.hashKey(key) - if (!global.eventUpdatesManagerCache.has(hash)) { + if (!storage.eventUpdatesManagerCache.has(hash)) { return undefined } - const value: CacheEntry = global.eventUpdatesManagerCache.get(hash) + const value: CacheEntry = storage.eventUpdatesManagerCache.get(hash) if (this.isEntryInstanceOf(value, type)) { return value } else { @@ -169,7 +169,7 @@ export class EventUpdatesManager { } const entry: CacheEntry = new CacheEntry(data) const hash = EventUpdatesManager.hashKey(key) - global.eventUpdatesManagerCache.set(hash, entry) + storage.eventUpdatesManagerCache.set(hash, entry) return entry } @@ -206,7 +206,7 @@ export class EventUpdatesManager { private static hashKey( key: PacketKey, ): string { - return game.encode_string(game.table_to_json(key))!! + return helpers.encode_string(helpers.table_to_json(key))!! } } diff --git a/modules/events-mod/src/main/typescript/main/emitting/EventDataQueue.ts b/modules/events-mod/src/main/typescript/main/emitting/EventDataQueue.ts index 725ae75..6071c60 100644 --- a/modules/events-mod/src/main/typescript/main/emitting/EventDataQueue.ts +++ b/modules/events-mod/src/main/typescript/main/emitting/EventDataQueue.ts @@ -2,18 +2,18 @@ export class EventDataQueueManager { static init(force?: boolean) { - const isAnythingUndefined = global.store == undefined || - global.size == undefined || - global.head == undefined || - global.tail == undefined + const isAnythingUndefined = storage.store == undefined || + storage.size == undefined || + storage.head == undefined || + storage.tail == undefined log(`Initialising EventDataQueueManager globals (force=${force}, isAnythingUndefined=${isAnythingUndefined})`) if (force == true || isAnythingUndefined) { - global.store = {} - global.head = null - global.tail = null - global.size = 0 + storage.store = {} + storage.head = null + storage.tail = null + storage.size = 0 } log(`Finished initialising EventDataQueueManager`) @@ -21,38 +21,38 @@ export class EventDataQueueManager { size(): uint | undefined { - return global.size + return storage.size } enqueue(key: string, event: EventData, weight: int = 1) { - if (key ! in global.store) { + if (key ! in storage.store) { let node = new Node(key, weight) - if (global.head == null) { - global.head = node + if (storage.head == null) { + storage.head = node } - if (global.tail != null) { - global.tail.next = node + if (storage.tail != null) { + storage.tail.next = node } - global.tail = node - global.size++ + storage.tail = node + storage.size++ } - global.store[key] = event + storage.store[key] = event } dequeue(): WeightedPacket | null { - if (global.head == null) { + if (storage.head == null) { return null } else { - let weight = global.head.weight - let storeKey = global.head.storeKey - global.head = global.head.next - global.size-- + let weight = storage.head.weight + let storeKey = storage.head.storeKey + storage.head = storage.head.next + storage.size-- - let storedPacket = global.store[storeKey] - global.store[storeKey] = null + let storedPacket = storage.store[storeKey] + storage.store[storeKey] = null if (storedPacket == null) { return null @@ -93,7 +93,7 @@ const EventDataQueue = new EventDataQueueManager() export default EventDataQueue -declare const global: { +declare const storage: { store: EventQueueStore head: Node | null diff --git a/modules/events-mod/src/main/typescript/main/emitting/PacketEmitter.ts b/modules/events-mod/src/main/typescript/main/emitting/PacketEmitter.ts index 69e36a9..f10273c 100644 --- a/modules/events-mod/src/main/typescript/main/emitting/PacketEmitter.ts +++ b/modules/events-mod/src/main/typescript/main/emitting/PacketEmitter.ts @@ -9,7 +9,7 @@ export class KafkatorioPacketEmitter { ) { KafkatorioPacketEmitter.emitPacket({ data: data, - modVersion: global.MOD_VERSION, + modVersion: storage.MOD_VERSION, tick: game.tick, }) } @@ -19,21 +19,21 @@ export class KafkatorioPacketEmitter { ) { KafkatorioPacketEmitter.emitPacket({ data: data, - modVersion: global.MOD_VERSION, + modVersion: storage.MOD_VERSION, tick: game.tick, }) } /** Emit a serialised KafkatorioPacket */ private static emitPacket(packet: T) { - const data = game.table_to_json(packet) + const data = helpers.table_to_json(packet) if (data.trim().length <= 0) { print(`[error] table_to_json returned empty string for packet:${packet}`) return } - const encodedData = game.encode_string(data) + const encodedData = helpers.encode_string(data) if (encodedData == null || encodedData.trim().length <= 0) { print(`[error] could not encode packet`) diff --git a/modules/events-mod/src/main/typescript/main/events/converters.ts b/modules/events-mod/src/main/typescript/main/events/converters.ts index 3abccbc..a132ff8 100644 --- a/modules/events-mod/src/main/typescript/main/events/converters.ts +++ b/modules/events-mod/src/main/typescript/main/events/converters.ts @@ -29,7 +29,7 @@ export namespace Converters { } - export function mapColour(color: ColorTable): Colour { + export function mapColour(color: Color): Colour { return [ color.r ?? 0, color.g ?? 0, @@ -42,8 +42,8 @@ export namespace Converters { export function convertPlacedTiles( placedTile: LuaTilePrototype, oldTiles: OldTileAndPosition[], - ): TileRead[] { - const converted: TileRead[] = [] + ): Tile[] { + const converted: Tile[] = [] for (const [, tile] of ipairs(oldTiles)) { converted[converted.length] = { position: {x: tile.position.x, y: tile.position.y}, @@ -57,8 +57,8 @@ export namespace Converters { export function convertRemovedTiles( surface: LuaSurface, oldTiles: OldTileAndPosition[], - ): TileRead[] { - const converted: TileRead[] = [] + ): Tile[] { + const converted: Tile[] = [] for (const [, tile] of ipairs(oldTiles)) { converted[converted.length] = surface.get_tile(tile.position.x, tile.position.y) } @@ -68,7 +68,7 @@ export namespace Converters { export function convertCollisionMaskToNames(cm: CollisionMask): string[] { let masks: string[] = [] - for (const [name] of pairs(cm)) { + for (const [name] of pairs(cm.layers)) { masks.push(name) } return masks @@ -96,22 +96,22 @@ export namespace Converters { } - export function tilePositionToChunkPosition(mapPosition: TilePositionTable): MapChunkPosition { + export function tilePositionToChunkPosition(mapPosition: TilePosition): MapChunkPosition { return [floor(mapPosition.x / 32), floor(mapPosition.y / 32), ChunkSize.CHUNK_032] } - export function mapPositionToChunkPosition(mapPosition: MapPositionTable): MapChunkPosition { + export function mapPositionToChunkPosition(mapPosition: MapPosition): MapChunkPosition { return [floor(mapPosition.x / 32), floor(mapPosition.y / 32), ChunkSize.CHUNK_032] } - export function entityPosition(position: MapPositionTable): MapEntityPosition { + export function entityPosition(position: MapPosition): MapEntityPosition { return [position.x, position.y]; } - export function chunkPosition(position: ChunkPositionTable): MapChunkPosition { + export function chunkPosition(position: ChunkPosition): MapChunkPosition { return [position.x, position.y, ChunkSize.CHUNK_032] } @@ -218,6 +218,32 @@ export namespace Converters { [ defines.entity_status.waiting_for_train ]: FactorioEntityStatus.WAITING_FOR_TRAIN, [ defines.entity_status.waiting_to_launch_rocket ]: FactorioEntityStatus.WAITING_TO_LAUNCH_ROCKET, [ defines.entity_status.working ]: FactorioEntityStatus.WORKING, + + // Factorio 2.0 additions (Space Age / space platforms, agricultural towers, etc.) + [ defines.entity_status.ghost ]: FactorioEntityStatus.GHOST, + [ defines.entity_status.broken ]: FactorioEntityStatus.BROKEN, + [ defines.entity_status.frozen ]: FactorioEntityStatus.FROZEN, + [ defines.entity_status.paused ]: FactorioEntityStatus.PAUSED, + [ defines.entity_status.not_connected_to_hub_or_pad ]: FactorioEntityStatus.NOT_CONNECTED_TO_HUB_OR_PAD, + [ defines.entity_status.not_enough_space_in_output ]: FactorioEntityStatus.NOT_ENOUGH_SPACE_IN_OUTPUT, + [ defines.entity_status.full_burnt_result_output ]: FactorioEntityStatus.FULL_BURNT_RESULT_OUTPUT, + [ defines.entity_status.waiting_for_more_items ]: FactorioEntityStatus.WAITING_FOR_MORE_ITEMS, + [ defines.entity_status.waiting_for_space_in_platform_hub ]: FactorioEntityStatus.WAITING_FOR_SPACE_IN_PLATFORM_HUB, + [ defines.entity_status.thrust_not_required ]: FactorioEntityStatus.THRUST_NOT_REQUIRED, + [ defines.entity_status.on_the_way ]: FactorioEntityStatus.ON_THE_WAY, + [ defines.entity_status.waiting_in_orbit ]: FactorioEntityStatus.WAITING_IN_ORBIT, + [ defines.entity_status.waiting_at_stop ]: FactorioEntityStatus.WAITING_AT_STOP, + [ defines.entity_status.waiting_for_rockets_to_arrive ]: FactorioEntityStatus.WAITING_FOR_ROCKETS_TO_ARRIVE, + [ defines.entity_status.not_enough_thrust ]: FactorioEntityStatus.NOT_ENOUGH_THRUST, + [ defines.entity_status.destination_stop_full ]: FactorioEntityStatus.DESTINATION_STOP_FULL, + [ defines.entity_status.no_path ]: FactorioEntityStatus.NO_PATH, + [ defines.entity_status.no_filter ]: FactorioEntityStatus.NO_FILTER, + [ defines.entity_status.no_spot_seedable_by_inputs ]: FactorioEntityStatus.NO_SPOT_SEEDABLE_BY_INPUTS, + [ defines.entity_status.waiting_for_plants_to_grow ]: FactorioEntityStatus.WAITING_FOR_PLANTS_TO_GROW, + [ defines.entity_status.computing_navigation ]: FactorioEntityStatus.COMPUTING_NAVIGATION, + [ defines.entity_status.pipeline_overextended ]: FactorioEntityStatus.PIPELINE_OVEREXTENDED, + [ defines.entity_status.recipe_not_researched ]: FactorioEntityStatus.RECIPE_NOT_RESEARCHED, + [ defines.entity_status.recipe_is_parameter ]: FactorioEntityStatus.RECIPE_IS_PARAMETER, //@formatter:on } } diff --git a/modules/events-mod/src/main/typescript/main/events/handlers/EntityUpdateHandler.ts b/modules/events-mod/src/main/typescript/main/events/handlers/EntityUpdateHandler.ts index b575d0d..804ee3c 100644 --- a/modules/events-mod/src/main/typescript/main/events/handlers/EntityUpdateHandler.ts +++ b/modules/events-mod/src/main/typescript/main/events/handlers/EntityUpdateHandler.ts @@ -64,7 +64,7 @@ export class EntityUpdatesHandler { handleBuiltEntityEvent( event: OnBuiltEntityEvent | OnRobotBuiltEntityEvent, ) { - EntityUpdatesHandler.throttleEntityUpdate(event, event.created_entity) + EntityUpdatesHandler.throttleEntityUpdate(event, event.entity) } @@ -191,7 +191,7 @@ export class EntityUpdatesHandler { /** Get all resources within a map-area */ private static getAreaResourceEntities( surface: LuaSurface, - area: BoundingBoxTable, + area: BoundingBox, ): LuaEntity[] { return surface.find_entities_filtered({ area: area, diff --git a/modules/events-mod/src/main/typescript/main/events/handlers/MapChunkUpdateHandler.ts b/modules/events-mod/src/main/typescript/main/events/handlers/MapChunkUpdateHandler.ts index 5ab13ec..5768d74 100644 --- a/modules/events-mod/src/main/typescript/main/events/handlers/MapChunkUpdateHandler.ts +++ b/modules/events-mod/src/main/typescript/main/events/handlers/MapChunkUpdateHandler.ts @@ -40,7 +40,7 @@ class MapChunkUpdateHandler { return } - const tiles: TileRead[] = Converters.convertPlacedTiles(event.tile, event.tiles) + const tiles: Tile[] = Converters.convertPlacedTiles(event.tile, event.tiles) const groupedTiles = MapChunkUpdateHandler.groupTiles(tiles) for (const [chunkPos, tiles] of groupedTiles) { @@ -79,7 +79,7 @@ class MapChunkUpdateHandler { return } - const tiles: TileRead[] = Converters.convertRemovedTiles(surface, event.tiles) + const tiles: Tile[] = Converters.convertRemovedTiles(surface, event.tiles) const groupedTiles = MapChunkUpdateHandler.groupTiles(tiles) for (const [chunkPos, tiles] of groupedTiles) { @@ -152,7 +152,7 @@ class MapChunkUpdateHandler { private static mapTilesUpdateDebounce( surface: LuaSurface | undefined, chunkPosition: MapChunkPosition, - tiles: TileRead[], + tiles: Tile[], event: MapChunkUpdateEvent | MapTileChangeEvent, updater?: MapChunkTileUpdater, expirationDurationTicks?: uint, @@ -215,9 +215,9 @@ class MapChunkUpdateHandler { } - private static groupTiles(tiles: TileRead[]): Map { + private static groupTiles(tiles: Tile[]): Map { - const mapChunkPositionToTiles = new Map() + const mapChunkPositionToTiles = new Map() for (const tile of tiles) { const chunkPosition = Converters.tilePositionToChunkPosition(tile.position) if (!mapChunkPositionToTiles.has(chunkPosition)) { diff --git a/modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts b/modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts index b5f785d..33d5739 100644 --- a/modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts +++ b/modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts @@ -33,7 +33,7 @@ function emit(protosByType: PrototypesByType) { function getMapTilePrototypes(): PrototypesByType { const tiles: FactorioPrototype.MapTile[] = [] - for (const [, tile] of game.tile_prototypes) { + for (const [, tile] of prototypes.tile) { tiles[tiles.length] = { type: FactorioPrototype.Type.MapTile, @@ -55,7 +55,7 @@ function getMapTilePrototypes(): PrototypesByType { function getEntityPrototypes(): PrototypesByType { const protos: PrototypesByType = {} - for (const [, entity] of game.entity_prototypes) { + for (const [, entity] of prototypes.entity) { const key: string = `${entity.group.name}/${entity.subgroup.name}/${entity.type}` protos[key] ??= [] diff --git a/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts b/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts index e22b244..bbbffa6 100644 --- a/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts +++ b/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts @@ -1,4 +1,4 @@ script.on_event(defines.events.on_runtime_mod_setting_changed, (e: OnRuntimeModSettingChangedEvent) => { - print(`Settings changed ${e.setting_type}, ${e.player_index}, ${e.setting}, ${e.mod_name}`) + print(`Settings changed ${e.setting_type}, ${e.player_index}, ${e.setting}`) // KafkatorioSettings.loadSettings() }) diff --git a/modules/events-mod/src/main/typescript/main/global-init.ts b/modules/events-mod/src/main/typescript/main/global-init.ts index 3e63718..7a696b7 100644 --- a/modules/events-mod/src/main/typescript/main/global-init.ts +++ b/modules/events-mod/src/main/typescript/main/global-init.ts @@ -5,8 +5,8 @@ import {EventDataQueueManager} from "./emitting/EventDataQueue"; export function initGlobal(force: boolean = false) { log(`Initialising Kafkatorio Global variables (force=${force})...`) - global.MOD_VERSION = script.active_mods[script.mod_name] - global.FACTORIO_VERSION = script.active_mods["base"] + storage.MOD_VERSION = script.active_mods[script.mod_name] + storage.FACTORIO_VERSION = script.active_mods["base"] EventDataQueueManager.init(true) EventUpdates.init(true) diff --git a/modules/events-mod/src/main/typescript/main/global.d.ts b/modules/events-mod/src/main/typescript/main/global.d.ts index 7a73643..c5f3513 100644 --- a/modules/events-mod/src/main/typescript/main/global.d.ts +++ b/modules/events-mod/src/main/typescript/main/global.d.ts @@ -1,4 +1,4 @@ -declare const global: { +declare const storage: { MOD_VERSION: string FACTORIO_VERSION: string } diff --git a/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts b/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts index 3f53bcd..1197b1a 100644 --- a/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts +++ b/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts @@ -1,4 +1,5 @@ -import {Data, DoubleSettingDefinition} from "typed-factorio/settings/types" +import {SettingsData} from "factorio:common" +import {DoubleSettingDefinition} from "factorio:settings" import {KafkatorioKeyedPacketData, KafkatorioKeyedPacketTypes} from "../types"; export class KafkatorioSettingsConfig { @@ -20,7 +21,7 @@ export class KafkatorioSettingsConfig { } - public initialiseSettings(data: Data): void { + public initialiseSettings(data: SettingsData): void { for (const [type,] of pairs(KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds)) { data.extend( [KafkatorioSettingsConfig.createDefaultCacheDuration(type)] diff --git a/modules/events-mod/src/main/typescript/settings.ts b/modules/events-mod/src/main/typescript/settings.ts index 5a65e74..176aafa 100644 --- a/modules/events-mod/src/main/typescript/settings.ts +++ b/modules/events-mod/src/main/typescript/settings.ts @@ -1,7 +1,7 @@ -import {Data, Mods} from "typed-factorio/settings/types" +import {SettingsData, ActiveMods} from "factorio:common" import KafkatorioSettings from "./main/settings/KafkatorioSettings"; -declare const data: Data -declare const mods: Mods +declare const data: SettingsData +declare const mods: ActiveMods KafkatorioSettings.initialiseSettings(data) diff --git a/modules/events-mod/tsconfig.json b/modules/events-mod/tsconfig.json index f230f54..12aebe0 100644 --- a/modules/events-mod/tsconfig.json +++ b/modules/events-mod/tsconfig.json @@ -10,8 +10,7 @@ "types": [ "@typescript-to-lua/language-extensions", "lua-types/5.2", - "typed-factorio/runtime", - "typed-factorio/strict-index-types" + "typed-factorio/runtime" ], "plugins": [ { diff --git a/modules/infra-factorio-server/factorio-and-kpipe-server/factorioEvents.Dockerfile b/modules/infra-factorio-server/factorio-and-kpipe-server/factorioEvents.Dockerfile index 4e639bd..df0b0ec 100644 --- a/modules/infra-factorio-server/factorio-and-kpipe-server/factorioEvents.Dockerfile +++ b/modules/infra-factorio-server/factorio-and-kpipe-server/factorioEvents.Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:1 -ARG factorioVersion=1.1.42 +ARG factorioVersion=2.0.77 FROM factoriotools/factorio:$factorioVersion