91 lines
2.3 KiB
Lua
91 lines
2.3 KiB
Lua
local util = scripts.util
|
|
local config = require("config")
|
|
local entity = scripts.helpers
|
|
local _ = scripts.helpers.on
|
|
|
|
-- Helper functions for LuaEntity --
|
|
|
|
function entity:entityrequests() -- fetch all requests as table
|
|
local requests = {}
|
|
|
|
if self.request_slot_count > 0 then
|
|
for i = 1, self.request_slot_count do
|
|
local request = self.get_request_slot(i)
|
|
if request then
|
|
local item, amount = request.name, request.count
|
|
if amount > 0 then
|
|
requests[item] = math.max(requests[item] or 0, amount)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return requests
|
|
end
|
|
|
|
function entity:entityrequest(item) -- fetch specific item request
|
|
local count = 0
|
|
|
|
if self.request_slot_count > 0 then
|
|
for i = 1, self.request_slot_count do
|
|
local request = self.get_request_slot(i)
|
|
if request and request.name == item and request.count > count then
|
|
count = math.max(count, request.count)
|
|
end
|
|
end
|
|
end
|
|
|
|
return count
|
|
end
|
|
|
|
function entity:logisticSlots() -- fetch all requests as table
|
|
local logisticSlots = {}
|
|
|
|
if self.request_slot_count > 0 then
|
|
for i = 1, self.request_slot_count do
|
|
local slot = self.get_personal_logistic_slot(i)
|
|
if slot and slot.name then
|
|
logisticSlots[slot.name] = slot
|
|
end
|
|
end
|
|
end
|
|
|
|
return logisticSlots
|
|
end
|
|
|
|
function entity:isIgnored(player)
|
|
return not global.allowedEntities[self.name] or
|
|
global.settings[player.index].ignoredEntities[self.name] or
|
|
global.remoteIgnoredEntities[self.name]
|
|
end
|
|
|
|
function entity:recipe()
|
|
return _(self.get_recipe() or (self.type == "furnace" and self.previous_recipe))
|
|
end
|
|
|
|
-- for turrets
|
|
function entity:supportsAmmo(item)
|
|
local ammoType = item.get_ammo_type("turret") or item.get_ammo_type()
|
|
|
|
if ammoType then
|
|
local attackParameters = self.prototype.attack_parameters
|
|
|
|
if attackParameters then
|
|
return _(attackParameters.ammo_categories):contains(ammoType.category)
|
|
elseif self.type == "artillery-turret" or self.type == "artillery-wagon" then
|
|
return ammoType.category == "artillery-shell"
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
-- for furnace
|
|
function entity:canSmelt(item)
|
|
return #game.get_filtered_recipe_prototypes({
|
|
unpack(_(self.prototype.crafting_categories):map(function(category)
|
|
return nil, {filter = "category", category = category, mode = "or"}
|
|
end):toPlain()),
|
|
{filter = "has-ingredient-item", elem_filters = {{filter = "name", name = item}}, mode = "and"},
|
|
}) > 0
|
|
end |