mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-21 03:29:22 +01:00
117 lines
2.8 KiB
Lua
117 lines
2.8 KiB
Lua
|
|
local component = require("component")
|
|
local debugCard = component.debug
|
|
local serialization = require("serialization")
|
|
local fs = require("filesystem")
|
|
local ecs = require("ECSAPI")
|
|
local world = debugCard.getWorld()
|
|
|
|
local worldEdit = {}
|
|
|
|
-------------------------------------------------------------------------------------------------
|
|
|
|
function worldEdit.getComputerWorldCoordinates()
|
|
return debugCard.getX(), debugCard.getY(), debugCard.getZ()
|
|
end
|
|
|
|
function worldEdit.set(x1, y1, z1, x2, y2, z2, id, data)
|
|
world.setBlocks(x1, y1, z1, x2, y2, z2, id, data)
|
|
end
|
|
|
|
function worldEdit.loadSchematic(path)
|
|
local array = {}
|
|
if not fs.exists(path) then error("File " .. path .. " doesn't exists!") end
|
|
local file = io.open(path, "r")
|
|
array = serialization.unserialize(file:read("*a"))
|
|
file:close()
|
|
return array
|
|
end
|
|
|
|
function worldEdit.saveSchematic(path, buffer)
|
|
fs.makeDirectory(fs.path(path))
|
|
local file = io.open(path, "w")
|
|
file:write(serialization.serialize(buffer))
|
|
file:close()
|
|
end
|
|
|
|
function worldEdit.paste(buffer, x, y, z)
|
|
local computerX, computerY, computerZ = worldEdit.getComputerWorldCoordinates()
|
|
local pasteX, pasteY, pasteZ
|
|
for i = 1, #buffer do
|
|
-- ecs.error(buffer[i].x, buffer[i].y, buffer[i].z, buffer[i].id, buffer[i].data )
|
|
pasteX, pasteY, pasteZ = computerX + x + buffer[i].x - 1, computerY + y + buffer[i].y - 1, computerZ + z + buffer[i].z - 1
|
|
if not ((pasteX == computerX) and (pasteY == computerY) and (pasteZ == computerZ)) then
|
|
world.setBlock(pasteX, pasteY, pasteZ, buffer[i].id, buffer[i].data)
|
|
end
|
|
end
|
|
end
|
|
|
|
function worldEdit.copy(x1, y1, z1, x2, y2, z2)
|
|
local array = {}
|
|
local temp, id, data
|
|
|
|
if x1 > x2 then
|
|
temp = x1
|
|
x1 = x2
|
|
x2 = temp
|
|
end
|
|
|
|
if y1 > y2 then
|
|
temp = y1
|
|
y1 = y2
|
|
y2 = temp
|
|
end
|
|
|
|
if z1 > z2 then
|
|
temp = z1
|
|
z1 = z2
|
|
z2 = temp
|
|
end
|
|
|
|
local xCount, yCount, zCount = 0, 0, 0
|
|
|
|
for x = x1, x2 do
|
|
for y = y1, y2 do
|
|
for z = z1, z2 do
|
|
id = world.getBlockId(x, y, z) or "minecraft:air"
|
|
data = world.getMetadata(x, y, z) or 0
|
|
table.insert(array,
|
|
{
|
|
["x"] = xCount,
|
|
["y"] = yCount,
|
|
["z"] = zCount,
|
|
["id"] = id,
|
|
["data"] = data
|
|
}
|
|
)
|
|
-- print("Копирую блок: x = " .. x .. ", y = " .. y .. ", z = " .. z)
|
|
zCount = zCount + 1
|
|
end
|
|
zCount = 0
|
|
yCount = yCount + 1
|
|
end
|
|
yCount = 0
|
|
xCount = xCount + 1
|
|
end
|
|
|
|
return array
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------
|
|
|
|
-- local cyka = worldEdit.copy(1214, 72, 84, 1205, 75, 87)
|
|
-- worldEdit.paste(cyka, 0, 20, 0)
|
|
-- worldEdit.saveSchematic("testSchematic2.lua", cyka)
|
|
|
|
-------------------------------------------------------------------------------------------------
|
|
|
|
return worldEdit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|