mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-11 23:04:52 +09:00
Add mod and command for exporting the Factorio locale including mods, and item icons assemled into a sprite sheet including mods.
102 lines
2.2 KiB
Lua
102 lines
2.2 KiB
Lua
local item_types = {
|
|
-- Item categories
|
|
"item",
|
|
"ammo",
|
|
"capsule",
|
|
"gun",
|
|
"item-with-entity-data",
|
|
"item-with-label",
|
|
"item-with-inventory",
|
|
"blueprint-book",
|
|
"item-with-tags",
|
|
"selection-tool",
|
|
"blueprint",
|
|
"deconstruction-item",
|
|
"copy-paste-tool",
|
|
"upgrade-item",
|
|
"module",
|
|
"rail-planner",
|
|
"tool",
|
|
"armor",
|
|
"mining-tool",
|
|
"repair-tool",
|
|
|
|
-- Fluids
|
|
"fluid",
|
|
}
|
|
|
|
local function is_array(t)
|
|
local count = 0
|
|
for k in pairs(t) do
|
|
if type(k) ~= "number" then
|
|
return false
|
|
end
|
|
count = count + 1
|
|
end
|
|
|
|
for i = 1, count do
|
|
if not t[i] then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return count ~= 0
|
|
end
|
|
|
|
-- no game.table_to_json here :(
|
|
local function table_to_json(data)
|
|
if type(data) == "number" then
|
|
return string.format("%.17g", data)
|
|
|
|
elseif type(data) == "string" then
|
|
data = data:gsub('([\x00-\x1f\\"])', function(match)
|
|
return "\\x" .. string.format("%02x", match:byte())
|
|
end)
|
|
return '"' .. data .. '"'
|
|
|
|
elseif data == nil then
|
|
return "null"
|
|
|
|
elseif data == true then
|
|
return "true"
|
|
elseif data == false then
|
|
return "false"
|
|
|
|
elseif type(data) == "table" then
|
|
local r
|
|
if is_array(data) then
|
|
r = {"["}
|
|
for i=1, #data do
|
|
r[#r+1] = table_to_json(data[i])
|
|
r[#r+1] = ","
|
|
end
|
|
|
|
-- overwrite last comma, empty table is an object
|
|
r[#r] = "]"
|
|
|
|
else
|
|
r = {"{"}
|
|
for k, v in pairs(data) do
|
|
r[#r+1] = table_to_json(tostring(k))
|
|
r[#r+1] = ":"
|
|
r[#r+1] = table_to_json(v)
|
|
r[#r+1] = ","
|
|
end
|
|
r[#r + (r[#r] == "," and 0 or 1)] = "}"
|
|
end
|
|
|
|
return table.concat(r)
|
|
end
|
|
end
|
|
|
|
local function send_json(channel, data)
|
|
data = table_to_json(data)
|
|
print("\f$ipc:" .. channel .. "?j" .. data)
|
|
end
|
|
|
|
for _, group in ipairs(item_types) do
|
|
for _, item in pairs(data.raw[group]) do
|
|
send_json("item_export", item)
|
|
end
|
|
end
|