local data_types = { -- Achievements ["achievement"] = "achievement", ["build-entity-achievement"] = "achievement", ["construct-with-robots-achievement"] = "achievement", ["deconstruct-with-robots-achievement"] = "achievement", ["deliver-by-robots-achievement"] = "achievement", ["dont-build-entity-achievement"] = "achievement", ["dont-craft-manually-achievement"] = "achievement", ["dont-use-entity-in-energy-production-achievement"] = "achievement", ["finish-the-game-achievement"] = "achievement", ["group-attack-achievement"] = "achievement", ["kill-achievement"] = "achievement", ["player-damaged-achievement"] = "achievement", ["produce-achievement"] = "achievement", ["produce-per-hour-achievement"] = "achievement", ["research-achievement"] = "achievement", ["train-path-achievement"] = "achievement", -- Items ["ammo"] = "item", ["armor"] = "item", ["blueprint"] = "item", ["blueprint-book"] = "item", ["capsule"] = "item", ["copy-paste-tool"] = "item", ["deconstruction-item"] = "item", ["gun"] = "item", ["item"] = "item", ["item-with-entity-data"] = "item", ["item-with-inventory"] = "item", ["item-with-label"] = "item", ["item-with-tags"] = "item", ["mining-tool"] = "item", ["module"] = "item", ["rail-planner"] = "item", ["repair-tool"] = "item", ["selection-tool"] = "item", ["spidertron-remote"] = "item", ["tool"] = "item", ["upgrade-item"] = "item", -- Hard referenced prototypes ["autoplace-control"] = "autoplace-control", ["custom-input"] = "custom-input", ["damage-type"] = "damage-type", ["equipment-grid"] = "equipment-grid", ["fluid"] = "fluid", ["font"] = "font", ["recipe"] = "recipe", ["shortcut"] = "shortcut", ["technology"] = "technology", ["tile"] = "tile", ["virtual-signal"] = "virtual-signal", -- Entities ["accumulator"] = "entity", ["ammo-turret"] = "entity", ["arithmetic-combinator"] = "entity", ["arrow"] = "entity", ["artillery-flare"] = "entity", ["artillery-projectile"] = "entity", ["artillery-turret"] = "entity", ["artillery-wagon"] = "entity", ["assembling-machine"] = "entity", ["beacon"] = "entity", ["beam"] = "entity", ["boiler"] = "entity", ["burner-generator"] = "entity", ["car"] = "entity", ["cargo-wagon"] = "entity", ["character"] = "entity", ["character-corpse"] = "entity", ["cliff"] = "entity", ["combat-robot"] = "entity", ["constant-combinator"] = "entity", ["construction-robot"] = "entity", ["container"] = "entity", ["corpse"] = "entity", ["curved-rail"] = "entity", ["decider-combinator"] = "entity", ["deconstructible-tile-proxy"] = "entity", ["electric-energy-interface"] = "entity", ["electric-pole"] = "entity", ["electric-turret"] = "entity", ["entity-ghost"] = "entity", ["explosion"] = "entity", ["fire"] = "entity", ["fish"] = "entity", ["flame-thrower-explosion"] = "entity", ["fluid-turret"] = "entity", ["fluid-wagon"] = "entity", ["flying-text"] = "entity", ["furnace"] = "entity", ["gate"] = "entity", ["generator"] = "entity", ["heat-interface"] = "entity", ["heat-pipe"] = "entity", ["highlight-box"] = "entity", ["infinity-container"] = "entity", ["infinity-pipe"] = "entity", ["inserter"] = "entity", ["item-entity"] = "entity", ["item-request-proxy"] = "entity", ["lab"] = "entity", ["lamp"] = "entity", ["land-mine"] = "entity", ["leaf-particle"] = "entity", ["linked-belt"] = "entity", ["linked-container"] = "entity", ["loader"] = "entity", ["loader-1x1"] = "entity", ["locomotive"] = "entity", ["logistic-container"] = "entity", ["logistic-robot"] = "entity", ["market"] = "entity", ["mining-drill"] = "entity", ["offshore-pump"] = "entity", ["particle"] = "entity", ["particle-source"] = "entity", ["pipe"] = "entity", ["pipe-to-ground"] = "entity", ["player-port"] = "entity", ["power-switch"] = "entity", ["programmable-speaker"] = "entity", ["projectile"] = "entity", ["pump"] = "entity", ["radar"] = "entity", ["rail-chain-signal"] = "entity", ["rail-remnants"] = "entity", ["rail-signal"] = "entity", ["reactor"] = "entity", ["resource"] = "entity", ["roboport"] = "entity", ["rocket-silo"] = "entity", ["rocket-silo-rocket"] = "entity", ["rocket-silo-rocket-shadow"] = "entity", ["simple-entity"] = "entity", ["simple-entity-with-force"] = "entity", ["simple-entity-with-owner"] = "entity", ["smoke"] = "entity", ["smoke-with-trigger"] = "entity", ["solar-panel"] = "entity", ["speech-bubble"] = "entity", ["spider-leg"] = "entity", ["spider-vehicle"] = "entity", ["splitter"] = "entity", ["sticker"] = "entity", ["storage-tank"] = "entity", ["straight-rail"] = "entity", ["stream"] = "entity", ["tile-ghost"] = "entity", ["train-stop"] = "entity", ["transport-belt"] = "entity", ["tree"] = "entity", ["turret"] = "entity", ["underground-belt"] = "entity", ["unit"] = "entity", ["unit-spawner"] = "entity", ["wall"] = "entity", -- Categories ["ammo-category"] = "category", ["equipment-category"] = "category", ["fuel-category"] = "category", ["module-category"] = "category", ["recipe-category"] = "category", ["resource-category"] = "category", -- Miscellaneous ["ambient-sound"] = "misc", ["animation"] = "misc", -- Space exploration ["combat-robot-count"] = "misc", ["editor-controller"] = "misc", ["function-application"] = "misc", ["god-controller"] = "misc", ["gui-style"] = "misc", ["literal-number"] = "misc", ["map-gen-presets"] = "misc", ["map-settings"] = "misc", ["mouse-cursor"] = "misc", ["noise-expression"] = "misc", ["noise-layer"] = "misc", ["optimized-decorative"] = "misc", ["optimized-particle"] = "misc", ["sound"] = "misc", -- Space exploration ["spectator-controller"] = "misc", ["sprite"] = "misc", ["tile-effect"] = "misc", ["tips-and-tricks-item"] = "misc", ["tips-and-tricks-item-category"] = "misc", ["trigger-target-type"] = "misc", ["trivial-smoke"] = "misc", ["tutorial"] = "misc", ["utility-constants"] = "misc", ["utility-sounds"] = "misc", ["utility-sprites"] = "misc", ["variable"] = "misc", ["wind-sound"] = "misc", -- Equipments ["active-defense-equipment"] = "equipment", ["battery-equipment"] = "equipment", ["belt-immunity-equipment"] = "equipment", ["energy-shield-equipment"] = "equipment", ["generator-equipment"] = "equipment", ["movement-bonus-equipment"] = "equipment", ["night-vision-equipment"] = "equipment", ["roboport-equipment"] = "equipment", ["solar-panel-equipment"] = "equipment", -- Grouping ["item-group"] = "item-group", ["item-subgroup"] = "item-subgroup", } -- Make sure prototype exist in data.raw if OSM.data_stage then for data_type, _ in pairs(data_types) do if not data.raw[data_type] then data_types[data_type] = nil end end end -- Make dictionary tree OSM.data = {} OSM.data.item = {} OSM.data.entity = {} OSM.data.misc = {} OSM.data.raw = data_types for data_type, sub_type in pairs(OSM.data.raw) do if sub_type == "item" then OSM.data.item[data_type] = sub_type elseif sub_type == "entity" then OSM.data.entity[data_type] = sub_type elseif sub_type == "misc" then OSM.data.misc[data_type] = sub_type end end