70 lines
2.6 KiB
Lua
70 lines
2.6 KiB
Lua
-------------------------------------------------------------------------------
|
|
--[Chest Limiter]--
|
|
-------------------------------------------------------------------------------
|
|
local Event = require('__stdlib__/stdlib/event/event')
|
|
local Player = require('__stdlib__/stdlib/event/player')
|
|
local Pad = require('__PickerAtheneum__/utils/adjustment-pad')
|
|
|
|
local containers = {
|
|
['container'] = true,
|
|
['logistic-container'] = true,
|
|
['infinity-container'] = true,
|
|
['cargo-wagon'] = true
|
|
}
|
|
|
|
local function get_match(stack)
|
|
if stack.valid_for_read and stack.prototype.place_result and containers[stack.prototype.place_result.type or 'nil'] then
|
|
return true
|
|
end
|
|
end
|
|
|
|
local function increase_decrease_reprogrammer(event)
|
|
local player, pdata = Player.get(event.player_index)
|
|
local stack = player.cursor_stack
|
|
if get_match(stack) then
|
|
if not player.mod_settings['picker-use-bar-limit'].value then
|
|
return
|
|
end
|
|
pdata.chests = pdata.chests or {}
|
|
local bar = pdata.chests[stack.name] or 0
|
|
local pad = Pad.get_or_create_adjustment_pad(player, 'chestlimit')
|
|
local text_field = pad['chestlimit_text_box']
|
|
if event.element and event.element.name == 'chestlimit_text_box' then
|
|
if not tonumber(event.element.text) then
|
|
bar = 0
|
|
else
|
|
bar = tonumber(event.element.text)
|
|
end
|
|
elseif event.element and event.element.name == 'chestlimit_btn_reset' then
|
|
bar = 0
|
|
else
|
|
bar = math.max(0, bar + (event.change or 0))
|
|
end
|
|
pdata.chests[stack.name] = (bar > 0 and bar) or nil
|
|
text_field.text = tostring(bar)
|
|
pad['chestlimit_btn_reset'].enabled = bar ~= 0
|
|
else
|
|
Pad.remove_gui(player, 'chestlimit_frame_main')
|
|
end
|
|
end
|
|
local events = {defines.events.on_player_cursor_stack_changed}
|
|
Pad.register_events('chestlimit', increase_decrease_reprogrammer, events)
|
|
|
|
--Set the limit when chests are built and data is saved.
|
|
local function on_chest_built(event)
|
|
if containers[event.created_entity.type] then
|
|
local player, pdata = Player.get(event.player_index)
|
|
if not player.mod_settings['picker-use-bar-limit'].value then
|
|
return
|
|
end
|
|
pdata.chests = pdata.chests or {}
|
|
local entity = event.created_entity
|
|
local bar = pdata.chests[entity.name]
|
|
local inventory = entity.get_inventory(defines.inventory.chest)
|
|
if inventory and inventory.supports_bar() and bar and bar > 0 then
|
|
inventory.set_bar(bar + 1)
|
|
end
|
|
end
|
|
end
|
|
Event.register(defines.events.on_built_entity, on_chest_built)
|