Skip to content

Commit 49b428d

Browse files
committed
Fixed large cubeset files not loading correctly
1 parent dd99ca6 commit 49b428d

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

Classes/ClipboardStorage.lua

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -370,22 +370,33 @@ function cClipboardStorage:SaveCubesetV1(a_FileName, a_StructureName, a_Options)
370370
-- Recursive function to dump the Lua table to the output file.
371371
local function write(a_Tabs, a_Obj)
372372
local prefix = string.rep("\t", a_Tabs)
373+
-- Prioritize the metadata table.
374+
-- Cuberite checks the first 8KiB for the Cubeset version when loading prefabs.
375+
-- If the file is too large and the metadata is at the end Cuberite won't be able to find it.
376+
if (a_Obj["Metadata"]) then
377+
file:write(prefix, '["Metadata"] =')
378+
file:write("\n", prefix, "{\n")
379+
write(a_Tabs + 1, a_Obj["Metadata"])
380+
file:write("\n", prefix, "},\n")
381+
end
373382
for k, v in pairs(a_Obj) do
374-
if (k == "CubesetFormatVersion") then
375-
file:write(prefix, k, ' =')
376-
elseif (type(k) == "string") then
377-
file:write(prefix, '["', k, '"] =')
378-
elseif (type(k) == "number") then
379-
file:write(prefix, '[', k, '] =')
380-
end
381-
if (type(v) == "table") then
382-
file:write("\n", prefix, "{\n")
383+
if (k ~= "Metadata") then
384+
if (k == "CubesetFormatVersion") then
385+
file:write(prefix, k, ' =')
386+
elseif (type(k) == "string") then
387+
file:write(prefix, '["', k, '"] =')
388+
elseif (type(k) == "number") then
389+
file:write(prefix, '[', k, '] =')
390+
end
391+
if (type(v) == "table") then
392+
file:write("\n", prefix, "{\n")
383393
write(a_Tabs + 1, v)
384-
file:write("\n", prefix, "},\n")
385-
elseif (type(v) == "string") then
386-
file:write(' "', v, '",\n')
387-
elseif (type(v) == "number") then
388-
file:write(" ", v, ",\n")
394+
file:write("\n", prefix, "},\n")
395+
elseif (type(v) == "string") then
396+
file:write(' "', v, '",\n')
397+
elseif (type(v) == "number") then
398+
file:write(" ", v, ",\n")
399+
end
389400
end
390401
end
391402
end

0 commit comments

Comments
 (0)