1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-30 23:17:53 +02:00
ComfyFactorio/modules/autohotbar.lua
2021-03-24 20:14:55 +01:00

83 lines
2.2 KiB
Lua

--luacheck: ignore
local event = require 'utils.event'
local function get_empty_hotbar_slot(player)
for i = 1, 20, 1 do
local item = player.get_quick_bar_slot(i)
if not item then
return i
end
end
return false
end
local function is_item_already_present_in_hotbar(player, item)
for i = 1, 20, 1 do
local prototype = player.get_quick_bar_slot(i)
if prototype then
if item == prototype.name then
return true
end
end
end
return false
end
local function set_hotbar(player, item)
if not game.entity_prototypes[item] then
return
end
if not game.recipe_prototypes[item] then
return
end
local slot_index = get_empty_hotbar_slot(player)
if not slot_index then
return
end
if is_item_already_present_in_hotbar(player, item) then
return
end
player.set_quick_bar_slot(slot_index, item)
end
local function on_player_fast_transferred(event)
if not global.auto_hotbar_enabled[event.player_index] then
return
end
local player = game.players[event.player_index]
for name, count in pairs(player.get_main_inventory().get_contents()) do
set_hotbar(player, name)
end
end
local function on_player_crafted_item(event)
if not global.auto_hotbar_enabled[event.player_index] then
return
end
set_hotbar(game.players[event.player_index], event.item_stack.name)
end
local function on_picked_up_item(event)
if not global.auto_hotbar_enabled[event.player_index] then
return
end
set_hotbar(game.players[event.player_index], event.item_stack.name)
end
local function on_player_mined_entity(event)
if not global.auto_hotbar_enabled[event.player_index] then
return
end
set_hotbar(game.players[event.player_index], event.entity.name)
end
local function on_init()
global.auto_hotbar_enabled = {}
end
event.on_init(on_init)
event.add(defines.events.on_player_fast_transferred, on_player_fast_transferred)
event.add(defines.events.on_player_crafted_item, on_player_crafted_item)
event.add(defines.events.on_picked_up_item, on_picked_up_item)
event.add(defines.events.on_player_mined_entity, on_player_mined_entity)