z_mirror/Krastorio2

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

Caleb HeuerChange to four-space indentation07409ca6

four-space-indentation
2.0 KiB64 linesraw
1local util = require("scripts.util")
2
3--- @param e EventData.on_player_placed_equipment
4local function on_player_placed_equipment(e)
5    local equipment = e.equipment
6    if not equipment.valid or equipment.name ~= "kr-energy-absorber-equipment" then
7        return
8    end
9    local grid = e.grid
10    if not grid.valid then
11        return
12    end
13
14    local player = game.get_player(e.player_index)
15    if not player then
16        return
17    end
18
19    local found = 0
20    for _, equipment_spec in pairs(grid.get_contents()) do
21        if equipment_spec.name == "kr-energy-absorber-equipment" then
22            found = equipment_spec.count
23            break
24        end
25    end
26    if found <= 1 then
27        return
28    end
29
30    -- Retrieve the equipment
31    local equipment_quality = equipment.quality
32    grid.take({ equipment = equipment, by_player = player })
33
34    -- Return the item
35    local cursor_stack = player.cursor_stack
36    -- If we're holding another absorber
37    if cursor_stack and cursor_stack.valid_for_read and cursor_stack.name == "kr-energy-absorber-equipment" then
38        cursor_stack.count = cursor_stack.count + 1 --[[@as uint]]
39    -- If we're holding something else or the stack is empty
40    elseif cursor_stack and player.clear_cursor() then
41        cursor_stack.set_stack({ name = "kr-energy-absorber-equipment", count = 1, quality = equipment_quality })
42    end
43
44    -- Show the error
45    if (storage.error_message_tick[e.player_index] or 0) + 30 < game.ticks_played then
46        util.flying_text_with_sound(player, { "message.kr-already-one-energy-absorber-equipment" })
47    end
48    storage.error_message_tick[e.player_index] = game.ticks_played
49end
50
51--- @class EnergyAbsorberHandler : event_handler
52local energy_absorber = {}
53
54function energy_absorber.on_init()
55    --- Holds the last tick that an energy absorber error message was displayed for each player
56    --- @type table<number, number>
57    storage.error_message_tick = {}
58end
59
60energy_absorber.events = {
61    [defines.events.on_player_placed_equipment] = on_player_placed_equipment,
62}
63
64return energy_absorber