]> git.lizzy.rs Git - worldedit.git/blobdiff - worldedit_commands/init.lua
Many thanks to Smitje for providing a working example of roations.
[worldedit.git] / worldedit_commands / init.lua
index a1ba9aec6e0e96bb5cb496c51c4541312256a6c9..4529470a2120088a266c756bab210ab18d969ffc 100644 (file)
@@ -78,13 +78,19 @@ minetest.register_chatcommand("/pos2", {
 })\r
 \r
 minetest.register_chatcommand("/p", {\r
-       params = "set/get",\r
-       description = "Set WorldEdit region by punching two nodes, or display the current WorldEdit region",\r
+       params = "set/set1/set2/get",\r
+       description = "Set WorldEdit region, WorldEdit position 1, or WorldEdit position 2 by punching nodes, or display the current WorldEdit region",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                if param == "set" then --set both WorldEdit positions\r
-                       worldedit.set_pos[name] = 1\r
+                       worldedit.set_pos[name] = "pos1"\r
                        minetest.chat_send_player(name, "Select positions by punching two nodes")\r
+               elseif param == "set1" then --set WorldEdit position 1\r
+                       worldedit.set_pos[name] = "pos1only"\r
+                       minetest.chat_send_player(name, "Select position 1 by punching a node")\r
+               elseif param == "set2" then --set WorldEdit position 2\r
+                       worldedit.set_pos[name] = "pos2"\r
+                       minetest.chat_send_player(name, "Select position 2 by punching a node")\r
                elseif param == "get" then --display current WorldEdit positions\r
                        if worldedit.pos1[name] ~= nil then\r
                                minetest.chat_send_player(name, "WorldEdit position 1: " .. minetest.pos_to_string(worldedit.pos1[name]))\r
@@ -105,16 +111,21 @@ minetest.register_chatcommand("/p", {
 minetest.register_on_punchnode(function(pos, node, puncher)\r
        local name = puncher:get_player_name()\r
        if name ~= "" and worldedit.set_pos[name] ~= nil then --currently setting position\r
-               if worldedit.set_pos[name] == 1 then --setting position 1\r
-                       worldedit.set_pos[name] = 2 --set position 2 on the next invocation\r
+               if worldedit.set_pos[name] == "pos1" then --setting position 1\r
+                       worldedit.pos1[name] = pos\r
+                       worldedit.mark_pos1(name)\r
+                       worldedit.set_pos[name] = "pos2" --set position 2 on the next invocation\r
+                       minetest.chat_send_player(name, "WorldEdit position 1 set to " .. minetest.pos_to_string(pos))\r
+               elseif worldedit.set_pos[name] == "pos1only" then --setting position 1 only\r
                        worldedit.pos1[name] = pos\r
                        worldedit.mark_pos1(name)\r
-                       minetest.chat_send_player(name, "WorldEdit region position 1 set to " .. minetest.pos_to_string(pos))\r
-               else --setting position 2\r
                        worldedit.set_pos[name] = nil --finished setting positions\r
+                       minetest.chat_send_player(name, "WorldEdit position 1 set to " .. minetest.pos_to_string(pos))\r
+               elseif worldedit.set_pos[name] == "pos2" then --setting position 2\r
                        worldedit.pos2[name] = pos\r
                        worldedit.mark_pos2(name)\r
-                       minetest.chat_send_player(name, "WorldEdit region position 2 set to " .. minetest.pos_to_string(pos))\r
+                       worldedit.set_pos[name] = nil --finished setting positions\r
+                       minetest.chat_send_player(name, "WorldEdit position 2 set to " .. minetest.pos_to_string(pos))\r
                end\r
        end\r
 end)\r
@@ -461,7 +472,14 @@ minetest.register_chatcommand("/transpose", {
                        return\r
                end\r
 \r
-               local count = worldedit.transpose(pos1, pos2, axis1, axis2)\r
+               local count, pos1, pos2 = worldedit.transpose(pos1, pos2, axis1, axis2)\r
+\r
+               --reset markers to transposed positions\r
+               worldedit.pos1[name] = pos1\r
+               worldedit.pos2[name] = pos2\r
+               worldedit.mark_pos1(name)\r
+               worldedit.mark_pos2(name)\r
+\r
                minetest.chat_send_player(name, count .. " nodes transposed")\r
        end,\r
 })\r
@@ -514,7 +532,14 @@ minetest.register_chatcommand("/rotate", {
                        return\r
                end\r
 \r
-               local count = worldedit.rotate(pos1, pos2, axis, angle)\r
+               local count, pos1, pos2 = worldedit.rotate(pos1, pos2, axis, angle)\r
+\r
+               --reset markers to rotated positions\r
+               worldedit.pos1[name] = pos1\r
+               worldedit.pos2[name] = pos2\r
+               worldedit.mark_pos1(name)\r
+               worldedit.mark_pos2(name)\r
+\r
                minetest.chat_send_player(name, count .. " nodes rotated")\r
        end,\r
 })\r
@@ -536,7 +561,7 @@ minetest.register_chatcommand("/dig", {
 })\r
 \r
 minetest.register_chatcommand("/hide", {\r
-       params = "<node>",\r
+       params = "",\r
        description = "Hide all nodes in the current WorldEdit region non-destructively",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
@@ -572,9 +597,9 @@ minetest.register_chatcommand("/suppress", {
        end,\r
 })\r
 \r
-minetest.register_chatcommand("/find", {\r
+minetest.register_chatcommand("/highlight", {\r
        params = "<node>",\r
-       description = "Find <node> in the current WorldEdit region by hiding everything else non-destructively",\r
+       description = "Highlight <node> in the current WorldEdit region by hiding everything else non-destructively",\r
        privs = {worldedit=true},\r
        func = function(name, param)\r
                local pos1, pos2 = worldedit.pos1[name], worldedit.pos2[name]\r
@@ -588,8 +613,8 @@ minetest.register_chatcommand("/find", {
                        return\r
                end\r
 \r
-               local count = worldedit.find(pos1, pos2, param)\r
-               minetest.chat_send_player(name, count .. " nodes found")\r
+               local count = worldedit.highlight(pos1, pos2, param)\r
+               minetest.chat_send_player(name, count .. " nodes highlighted")\r
        end,\r
 })\r
 \r
@@ -643,6 +668,47 @@ minetest.register_chatcommand("/save", {
        end,\r
 })\r
 \r
+minetest.register_chatcommand("/allocate", {\r
+       params = "<file>",\r
+       description = "Set the region defined by nodes from \"(world folder)/schems/<file>.we\" as the current WorldEdit region",\r
+       privs = {worldedit=true},\r
+       func = function(name, param)\r
+               local pos1 = worldedit.pos1[name]\r
+               if pos1 == nil then\r
+                       minetest.chat_send_player(name, "No WorldEdit region selected")\r
+                       return\r
+               end\r
+\r
+               if param == "" then\r
+                       minetest.chat_send_player(name, "Invalid usage: " .. param)\r
+                       return\r
+               end\r
+\r
+               local filename = minetest.get_worldpath() .. "/schems/" .. param .. ".we"\r
+               local file, err = io.open(filename, "rb")\r
+               if err ~= nil then\r
+                       minetest.chat_send_player(name, "Could not open file \"" .. filename .. "\"")\r
+                       return\r
+               end\r
+               local value = file:read("*a")\r
+               file:close()\r
+\r
+               local nodepos1, nodepos2, count\r
+               if value:find("{") then --old WorldEdit format\r
+                       nodepos1, nodepos2, count = worldedit.allocate_old(pos1, value)\r
+               else --new WorldEdit format\r
+                       nodepos1, nodepos2, count = worldedit.allocate(pos1, value)\r
+               end\r
+\r
+               worldedit.pos1[name] = nodepos1\r
+               worldedit.mark_pos1(name)\r
+               worldedit.pos2[name] = nodepos2\r
+               worldedit.mark_pos2(name)\r
+\r
+               minetest.chat_send_player(name, count .. " nodes allocated")\r
+       end,\r
+})\r
+\r
 minetest.register_chatcommand("/load", {\r
        params = "<file>",\r
        description = "Load nodes from \"(world folder)/schems/<file>.we\" with position 1 of the current WorldEdit region as the origin",\r