z_mirror/EditorExtensions

git clone https://git.raiguard.me/z_mirror/EditorExtensions

Caleb HeuerRemove usage of flib migration modulecabb4ba

trunk
5.4 KiB156 linesraw
1local infinity_accumulator = require("scripts.infinity-accumulator")
2local infinity_loader = require("scripts.infinity-loader")
3local inventory_filters = require("scripts.inventory-filters")
4local inventory_sync = require("scripts.inventory-sync")
5local linked_belt = require("scripts.linked-belt")
6local util = require("scripts.util")
7
8local version_migrations = {
9  ["2.0.0"] = function()
10    -- Preserve testing lab state
11    local testing_lab_state = {}
12    for player_index, player_table in pairs(storage.players) do
13      local player = game.get_player(player_index)
14      if player and player_table.lab_state and player_table.normal_state then
15        testing_lab_state[player_index] = {
16          normal = player_table.normal_state,
17          lab = player_table.lab_state,
18          player = player,
19          refresh = false,
20        }
21      end
22    end
23    -- NUKE EVERYTHING
24    storage = { testing_lab_state = testing_lab_state, wagons = storage.wagons }
25    rendering.clear("EditorExtensions")
26    for _, player in pairs(game.players) do
27      for _, gui in pairs({ player.gui.top, player.gui.left, player.gui.center, player.gui.screen, player.gui.relative }) do
28        for _, child in pairs(gui.children) do
29          if child.get_mod() == "EditorExtensions" then
30            child.destroy()
31          end
32        end
33      end
34    end
35    -- Start over
36    infinity_accumulator.on_init()
37    infinity_loader.on_init()
38    inventory_filters.on_init()
39    inventory_sync.on_init()
40    linked_belt.on_init()
41
42    -- Migrate infinity loaders
43    for _, surface in pairs(game.surfaces) do
44      for _, combinator in pairs(surface.find_entities_filtered({ name = "ee-infinity-loader-dummy-combinator" })) do
45        local cb = combinator.get_control_behavior() --[[@as LuaConstantCombinatorControlBehavior?]]
46        if not cb then
47          goto continue
48        end
49        local section = cb.get_section(1)
50        if not section then
51          goto continue
52        end
53        local filter_1, filter_2 = section.filters[1], section.filters[2]
54        local loader = combinator.surface.create_entity({
55          name = "ee-infinity-loader",
56          direction = combinator.direction,
57          position = combinator.position,
58          force = combinator.force,
59          last_user = combinator.last_user,
60          fast_replace = true,
61          create_build_effect_smoke = false,
62        })
63        if not loader then
64          error("Failed to create infinity loader replacement.")
65        end
66        if filter_1 and filter_1.value then
67          loader.set_filter(1, { name = filter_1.value.name, quality = filter_1.value.quality, amount = filter_1.min })
68        end
69        if filter_2 and filter_2.value then
70          loader.set_filter(2, { name = filter_2.value.name, quality = filter_2.value.quality, amount = filter_2.min })
71        end
72        infinity_loader.snap(loader)
73        combinator.destroy()
74        ::continue::
75      end
76    end
77  end,
78  ["2.3.0"] = function()
79    storage.aggregate_filters = nil
80    storage.infinity_pipe_amount_type = nil
81    for _, gui in pairs(storage.infinity_pipe_gui or {}) do
82      local window = gui.elems.ee_infinity_pipe_window
83      if window and window.valid then
84        window.destroy()
85      end
86    end
87    storage.infinity_pipe_gui = nil
88  end,
89  ["2.3.1"] = function()
90    for surface_name, surface in pairs(game.surfaces) do
91      if string.find(surface_name, "EE_TESTSURFACE_") then
92        for force_name, force in pairs(game.forces) do
93          if not string.find(force_name, "EE_TESTFORCE_") then
94            force.set_surface_hidden(surface, true)
95          end
96        end
97      end
98    end
99  end,
100  --- @param old_version string
101  ["2.4.0"] = function(old_version)
102    if helpers.compare_versions(old_version, "2.0.0") > 0 then
103      return
104    end
105    for _, surface in pairs(game.surfaces) do
106      for _, loader in pairs(surface.find_entities_filtered({ name = "ee-infinity-loader" })) do
107        loader.set_filter(2, loader.get_filter(1))
108      end
109    end
110  end,
111  ["2.5.0"] = function()
112    local to_remove = {}
113    for unit_number, wagon_data in pairs(storage.wagons) do
114      local proxy = wagon_data.proxy
115      if proxy and proxy.valid and proxy.name == "ee-infinity-wagon-chest" then
116        local wagon = proxy.surface.find_entity("ee-infinity-cargo-wagon", proxy.position)
117        if wagon then
118          wagon.infinity_container_filters = proxy.infinity_container_filters
119          wagon.remove_unfiltered_items = proxy.remove_unfiltered_items
120          proxy.destroy()
121        end
122        table.insert(to_remove, unit_number)
123      end
124    end
125    for _, unit_number in pairs(to_remove) do
126      storage.wagons[unit_number] = nil
127    end
128  end,
129  ["2.5.1"] = function()
130    local in_debug_world = util.in_debug_world() or util.in_testing_scenario()
131    for _, surface in pairs(game.surfaces) do
132      if (in_debug_world and surface.name == "nauvis") or string.find(surface.name, "EE_TESTSURFACE") then
133        surface.ignore_surface_conditions = true
134      end
135    end
136  end,
137}
138
139--- @class migrations_handler: event_handler
140local migrations = {}
141
142--- @param e ConfigurationChangedData
143function migrations.on_configuration_changed(e)
144  local old_version = e.mod_changes and e.mod_changes[script.mod_name] and e.mod_changes[script.mod_name].old_version
145  if not old_version then
146    return
147  end
148
149  for version, callback in pairs(version_migrations) do
150    if helpers.compare_versions(version, old_version) > 0 then
151      callback(old_version)
152    end
153  end
154end
155
156return migrations