worldedit = worldedit or {}
worldedit.queue = {}
+worldedit.lower = 1
+worldedit.higher = 0
worldedit.ENABLE_QUEUE = true --enable the WorldEdit block queue
worldedit.MAXIMUM_TIME = 0.08 --maximum time each step alloted for WorldEdit operations
minetest.register_globalstep(function(dtime)
- local i = 1
local elapsed = 0
local env = minetest.env
- while i <= #worldedit.queue and elapsed <= worldedit.MAXIMUM_TIME do
- local idx = (#worldedit.queue + 1) - i
- local entry = worldedit.queue[idx] --we use the last entry, so we don't spend days moving stuff in the table because we removed the first entry
+ while worldedit.lower <= worldedit.higher and elapsed <= worldedit.MAXIMUM_TIME do
+ local entry = worldedit.queue[worldedit.lower]
if entry.t == "set_node" then
env:set_node(entry.pos, entry.node)
elapsed = elapsed + 0.0002
else
print("Unknown queue event type: " .. entry.t)
end
- table.remove(worldedit.queue, idx)
- i = i + 1
+ worldedit.queue[worldedit.lower] = nil
+ worldedit.lower = worldedit.lower + 1
end
end)
+do
+ worldedit.enqueue = function(value)
+ worldedit.higher = worldedit.higher + 1
+ worldedit.queue[worldedit.higher] = value
+ end
+end
+
function table.copy(t, seen)
seen = seen or {}
if t == nil then return nil end
return nt
end
-local quene_setnode = function(self, pos_, node_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), node=table.copy(node_), t="set_node"})
+local queue_setnode = function(self, pos_, node_)
+ worldedit.enqueue({pos=table.copy(pos_), node=table.copy(node_), t="set_node"})
end
-local quene_removenode = function(self, pos_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), t="remove_node"})
+local queue_removenode = function(self, pos_)
+ worldedit.enqueue({pos=table.copy(pos_), t="remove_node"})
end
-local quene_placenode = function(self, pos_, node_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), node=table.copy(node_), t="place_node"})
+local queue_placenode = function(self, pos_, node_)
+ worldedit.enqueue({pos=table.copy(pos_), node=table.copy(node_), t="place_node"})
end
-local quene_dignode = function(self, pos_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), t="dig_node"})
+local queue_dignode = function(self, pos_)
+ worldedit.enqueue({pos=table.copy(pos_), t="dig_node"})
end
-local quene_addentity = function(self, pos_, name_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), name=name_.."", t="add_entity"})
+local queue_addentity = function(self, pos_, name_)
+ worldedit.enqueue({pos=table.copy(pos_), name=name_.."", t="add_entity"})
end
-local quene_additem = function(self, pos_, item_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), item=item_.."", t="add_item"})
+local queue_additem = function(self, pos_, item_)
+ worldedit.enqueue({pos=table.copy(pos_), item=item_.."", t="add_item"})
end
-local quene_setmeta = function(self, pos_, table_)
- table.insert(worldedit.queue, {pos=table.copy(pos_), table=table.copy(table_), t="meta_from_table"})
+local queue_setmeta = function(self, pos_, table_)
+ worldedit.enqueue({pos=table.copy(pos_), table=table.copy(table_), t="meta_from_table"})
end
local aliasmeta = {
-- the other functions are left out because they are not used in worldedit
to_table = function(self) return minetest.env:get_meta(self._pos):to_table() end,
set_string = function(self, name_, value_) minetest.env:get_meta(self._pos):set_string(name_, value_) end,
- from_table = function(self, tbl) quene_setmeta(nil, self._pos, tbl) end,
+ from_table = function(self, tbl) queue_setmeta(nil, self._pos, tbl) end,
}
local get_meta_alias = function(self, pos)
return am
end
-worldedit.quene_aliasenv = {
+worldedit.queue_aliasenv = {
-- ALL functions that are not just piped to the real minetest.env function must copy the arguments, not just reference them
- set_node = quene_setnode,
- add_node = quene_setnode,
- remove_node = quene_removenode,
+ set_node = queue_setnode,
+ add_node = queue_setnode,
+ remove_node = queue_removenode,
get_node = function(self, pos) return minetest.env:get_node(pos) end,
get_node_or_nil = function(self, pos) return minetest.env:get_node_or_nil(pos) end,
get_node_light = function(self, pos, timeofday) return minetest.env:get_node_light(pos, timeofday) end,
- place_node = quene_placenode,
- dig_node = quene_dignode,
+ place_node = queue_placenode,
+ dig_node = queue_dignode,
punch_node = function(self, pos) return minetest.env:punch_node(pos) end,
get_meta = get_meta_alias,
get_node_timer = function(self, pos) return minetest.env:get_node_timer(pos) end,
- add_entity = quene_addentity,
- add_item = quene_additem,
+ add_entity = queue_addentity,
+ add_item = queue_additem,
}
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
\r
local count = worldedit.set(pos1, pos2, param, tenv)\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.replace(pos1, pos2, searchnode, replacenode, tenv)\r
worldedit.player_notify(name, count .. " nodes replaced")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.replaceinverse(pos1, pos2, searchnode, replacenode, tenv)\r
worldedit.player_notify(name, count .. " nodes replaced")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.hollow_sphere(pos, tonumber(radius), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.sphere(pos, tonumber(radius), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.hollow_dome(pos, tonumber(radius), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.dome(pos, tonumber(radius), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.hollow_cylinder(pos, axis, tonumber(length), tonumber(radius), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.cylinder(pos, axis, tonumber(length), tonumber(radius), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.pyramid(pos, tonumber(size), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.spiral(pos, tonumber(width), tonumber(height), tonumber(space), nodename, tenv)\r
worldedit.player_notify(name, count .. " nodes added")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.copy(pos1, pos2, axis, tonumber(amount), tenv)\r
worldedit.player_notify(name, count .. " nodes copied")\r
amount = amount * sign\r
end\r
\r
- --Do NOT use the queue here, it'll mess it up\r
- local count = worldedit.move(pos1, pos2, axis, tonumber(amount))\r
+ local tenv = minetest.env\r
+ if worldedit.ENABLE_QUEUE then\r
+ tenv = worldedit.queue_aliasenv\r
+ end\r
+ local count = worldedit.move(pos1, pos2, axis, tonumber(amount), tenv)\r
\r
pos1[axis] = pos1[axis] + amount\r
pos2[axis] = pos2[axis] + amount\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.stack(pos1, pos2, axis, tonumber(count), tenv)\r
worldedit.player_notify(name, count .. " nodes stacked")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count, pos1, pos2 = worldedit.transpose(pos1, pos2, axis1, axis2, tenv)\r
\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.flip(pos1, pos2, param, tenv)\r
worldedit.player_notify(name, count .. " nodes flipped")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count, pos1, pos2 = worldedit.rotate(pos1, pos2, axis, angle, tenv)\r
\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.orient(pos1, pos2, angle, tenv)\r
\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.fixlight(pos1, pos2, tenv)\r
worldedit.player_notify(name, count .. " nodes updated")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.hide(pos1, pos2, tenv)\r
worldedit.player_notify(name, count .. " nodes hidden")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.suppress(pos1, pos2, param, tenv)\r
worldedit.player_notify(name, count .. " nodes suppressed")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.highlight(pos1, pos2, param, tenv)\r
worldedit.player_notify(name, count .. " nodes highlighted")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.restore(pos1, pos2, tenv)\r
worldedit.player_notify(name, count .. " nodes restored")\r
\r
local tenv = minetest.env\r
if worldedit.ENABLE_QUEUE then\r
- tenv = worldedit.quene_aliasenv\r
+ tenv = worldedit.queue_aliasenv\r
end\r
local count = worldedit.deserialize(pos1, value, tenv)\r
\r