From b9f8f0a232d9d00a323084e0e4807b3e3469720d Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 4 Oct 2020 10:50:07 +0200 Subject: The Robot Update --- clientmods/chat/init.lua | 49 ----- clientmods/chat/mod.conf | 3 - clientmods/chat/rainbow.lua | 61 ------ clientmods/chat/settingtypes.txt | 4 - clientmods/commands/init.lua | 81 -------- clientmods/commands/mod.conf | 3 - clientmods/dragonfire/autoeat/init.lua | 21 +++ clientmods/dragonfire/autoeat/mod.conf | 3 + clientmods/dragonfire/autoeat/settingtypes.txt | 1 + clientmods/dragonfire/chat/colors.lua | 33 ++++ clientmods/dragonfire/chat/init.lua | 13 ++ clientmods/dragonfire/chat/leak.lua | 10 + clientmods/dragonfire/chat/mod.conf | 3 + clientmods/dragonfire/chat/rainbow.lua | 61 ++++++ clientmods/dragonfire/chat/settingtypes.txt | 6 + clientmods/dragonfire/chat/spam.lua | 12 ++ clientmods/dragonfire/chat/status.lua | 5 + clientmods/dragonfire/commands/init.lua | 88 +++++++++ clientmods/dragonfire/commands/mod.conf | 3 + clientmods/dragonfire/inventory/autotool.lua | 36 ++++ clientmods/dragonfire/inventory/enderchest.lua | 27 +++ clientmods/dragonfire/inventory/hand.lua | 27 +++ clientmods/dragonfire/inventory/init.lua | 8 + clientmods/dragonfire/inventory/invhack.lua | 13 ++ clientmods/dragonfire/inventory/mod.conf | 3 + clientmods/dragonfire/inventory/next_item.lua | 18 ++ clientmods/dragonfire/inventory/settingtypes.txt | 2 + clientmods/dragonfire/modpack.txt | 1 + clientmods/dragonfire/pathfinding/init.lua | 109 +++++++++++ clientmods/dragonfire/pathfinding/mod.conf | 3 + clientmods/dragonfire/pathfinding/settingtypes.txt | 3 + clientmods/dragonfire/perlin/init.lua | 33 ++++ clientmods/dragonfire/perlin/mod.conf | 3 + clientmods/dragonfire/perlin/perlin.lua | 144 +++++++++++++++ clientmods/dragonfire/respawn/init.lua | 47 +++++ clientmods/dragonfire/respawn/mod.conf | 4 + clientmods/dragonfire/respawn/settingtypes.txt | 1 + clientmods/dragonfire/schematicas/init.lua | 204 +++++++++++++++++++++ clientmods/dragonfire/schematicas/mod.conf | 4 + clientmods/dragonfire/warp/init.lua | 94 ++++++++++ clientmods/dragonfire/warp/mod.conf | 3 + clientmods/dragonfire/world/init.lua | 97 ++++++++++ clientmods/dragonfire/world/mod.conf | 3 + clientmods/dragonfire/world/settingtypes.txt | 6 + clientmods/inventory/autotool.lua | 36 ---- clientmods/inventory/enderchest.lua | 27 --- clientmods/inventory/init.lua | 7 - clientmods/inventory/invhack.lua | 13 -- clientmods/inventory/mod.conf | 3 - clientmods/inventory/next_item.lua | 18 -- clientmods/inventory/settingtypes.txt | 2 - clientmods/mods.conf | 3 + clientmods/respawn/init.lua | 47 ----- clientmods/respawn/mod.conf | 4 - clientmods/respawn/settingtypes.txt | 1 - clientmods/schematicas/init.lua | 197 -------------------- clientmods/warp/init.lua | 94 ---------- clientmods/warp/mod.conf | 3 - clientmods/world/init.lua | 97 ---------- clientmods/world/settingtypes.txt | 5 - 60 files changed, 1155 insertions(+), 755 deletions(-) delete mode 100644 clientmods/chat/init.lua delete mode 100644 clientmods/chat/mod.conf delete mode 100644 clientmods/chat/rainbow.lua delete mode 100644 clientmods/chat/settingtypes.txt delete mode 100644 clientmods/commands/init.lua delete mode 100644 clientmods/commands/mod.conf create mode 100644 clientmods/dragonfire/autoeat/init.lua create mode 100644 clientmods/dragonfire/autoeat/mod.conf create mode 100644 clientmods/dragonfire/autoeat/settingtypes.txt create mode 100644 clientmods/dragonfire/chat/colors.lua create mode 100644 clientmods/dragonfire/chat/init.lua create mode 100644 clientmods/dragonfire/chat/leak.lua create mode 100644 clientmods/dragonfire/chat/mod.conf create mode 100644 clientmods/dragonfire/chat/rainbow.lua create mode 100644 clientmods/dragonfire/chat/settingtypes.txt create mode 100644 clientmods/dragonfire/chat/spam.lua create mode 100644 clientmods/dragonfire/chat/status.lua create mode 100644 clientmods/dragonfire/commands/init.lua create mode 100644 clientmods/dragonfire/commands/mod.conf create mode 100644 clientmods/dragonfire/inventory/autotool.lua create mode 100644 clientmods/dragonfire/inventory/enderchest.lua create mode 100644 clientmods/dragonfire/inventory/hand.lua create mode 100644 clientmods/dragonfire/inventory/init.lua create mode 100644 clientmods/dragonfire/inventory/invhack.lua create mode 100644 clientmods/dragonfire/inventory/mod.conf create mode 100644 clientmods/dragonfire/inventory/next_item.lua create mode 100644 clientmods/dragonfire/inventory/settingtypes.txt create mode 100644 clientmods/dragonfire/modpack.txt create mode 100644 clientmods/dragonfire/pathfinding/init.lua create mode 100644 clientmods/dragonfire/pathfinding/mod.conf create mode 100644 clientmods/dragonfire/pathfinding/settingtypes.txt create mode 100644 clientmods/dragonfire/perlin/init.lua create mode 100644 clientmods/dragonfire/perlin/mod.conf create mode 100644 clientmods/dragonfire/perlin/perlin.lua create mode 100644 clientmods/dragonfire/respawn/init.lua create mode 100644 clientmods/dragonfire/respawn/mod.conf create mode 100644 clientmods/dragonfire/respawn/settingtypes.txt create mode 100644 clientmods/dragonfire/schematicas/init.lua create mode 100644 clientmods/dragonfire/schematicas/mod.conf create mode 100644 clientmods/dragonfire/warp/init.lua create mode 100644 clientmods/dragonfire/warp/mod.conf create mode 100644 clientmods/dragonfire/world/init.lua create mode 100644 clientmods/dragonfire/world/mod.conf create mode 100644 clientmods/dragonfire/world/settingtypes.txt delete mode 100644 clientmods/inventory/autotool.lua delete mode 100644 clientmods/inventory/enderchest.lua delete mode 100644 clientmods/inventory/init.lua delete mode 100644 clientmods/inventory/invhack.lua delete mode 100644 clientmods/inventory/mod.conf delete mode 100644 clientmods/inventory/next_item.lua delete mode 100644 clientmods/inventory/settingtypes.txt delete mode 100644 clientmods/respawn/init.lua delete mode 100644 clientmods/respawn/mod.conf delete mode 100644 clientmods/respawn/settingtypes.txt delete mode 100644 clientmods/schematicas/init.lua delete mode 100644 clientmods/warp/init.lua delete mode 100644 clientmods/warp/mod.conf delete mode 100644 clientmods/world/init.lua delete mode 100644 clientmods/world/settingtypes.txt (limited to 'clientmods') diff --git a/clientmods/chat/init.lua b/clientmods/chat/init.lua deleted file mode 100644 index 45d61e06b..000000000 --- a/clientmods/chat/init.lua +++ /dev/null @@ -1,49 +0,0 @@ -chat = {} - -chat.rainbow = dofile(minetest.get_modpath("chat") .. "/rainbow.lua") - -function chat.send(message) - local starts_with = message:sub(1, 1) - - if starts_with == "/" or starts_with == "." then return end - - local reverse = minetest.settings:get_bool("chat_reverse") - - if reverse then - local msg = "" - for i = 1, #message do - msg = message:sub(i, i) .. msg - end - message = msg - end - - local color = minetest.settings:get("chat_color") - - if color then - local msg - if color == "rainbow" then - msg = chat.rainbow(message) - else - msg = minetest.colorize(color, message) - end - message = msg - end - - minetest.send_chat_message(message) - return true -end - -minetest.register_on_sending_chat_message(chat.send) - -local etime = 0 - -minetest.register_globalstep(function(dtime) - etime = etime + dtime - if etime < 10/8 then return end - etime = 0 - local spam = minetest.settings:get("chat_spam") - local enable_spam = minetest.settings:get("chat_enable_spam") - if enable_spam and spam then - local _ = chat.send(spam) or minetest.send_chat_message(spam) - end -end) diff --git a/clientmods/chat/mod.conf b/clientmods/chat/mod.conf deleted file mode 100644 index ce94dc1bc..000000000 --- a/clientmods/chat/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = chat -author = Fleckenstein -description = The chat modifications of Dragonfireclient diff --git a/clientmods/chat/rainbow.lua b/clientmods/chat/rainbow.lua deleted file mode 100644 index 1519619a7..000000000 --- a/clientmods/chat/rainbow.lua +++ /dev/null @@ -1,61 +0,0 @@ -local function rgb_to_hex(rgb) - local hexadecimal = '#' - - for key, value in pairs(rgb) do - local hex = '' - - while(value > 0)do - local index = math.fmod(value, 16) + 1 - value = math.floor(value / 16) - hex = string.sub('0123456789ABCDEF', index, index) .. hex - end - - if(string.len(hex) == 0)then - hex = '00' - - elseif(string.len(hex) == 1)then - hex = '0' .. hex - end - - hexadecimal = hexadecimal .. hex - end - - return hexadecimal -end - -local function color_from_hue(hue) - local h = hue / 60 - local c = 255 - local x = (1 - math.abs(h%2 - 1)) * 255 - - local i = math.floor(h); - if (i == 0) then - return rgb_to_hex({c, x, 0}) - elseif (i == 1) then - return rgb_to_hex({x, c, 0}) - elseif (i == 2) then - return rgb_to_hex({0, c, x}) - elseif (i == 3) then - return rgb_to_hex({0, x, c}); - elseif (i == 4) then - return rgb_to_hex({x, 0, c}); - else - return rgb_to_hex({c, 0, x}); - end -end - -return function(input) - local step = 360 / input:len() - local hue = 0 - local output = "" - for i = 1, input:len() do - local char = input:sub(i,i) - if char:match("%s") then - output = output .. char - else - output = output .. minetest.get_color_escape_sequence(color_from_hue(hue)) .. char - end - hue = hue + step - end - return output -end diff --git a/clientmods/chat/settingtypes.txt b/clientmods/chat/settingtypes.txt deleted file mode 100644 index 5e5aa8a8b..000000000 --- a/clientmods/chat/settingtypes.txt +++ /dev/null @@ -1,4 +0,0 @@ -chat_color (Chat Color) string white -chat_reverse (Reverse Chat messages) bool false -chat_enable_spam (Spam Chat) bool false -chat_spam (Message to spam into Chat) string diff --git a/clientmods/commands/init.lua b/clientmods/commands/init.lua deleted file mode 100644 index e481e6c34..000000000 --- a/clientmods/commands/init.lua +++ /dev/null @@ -1,81 +0,0 @@ -minetest.register_chatcommand("say", { - description = "Send raw text", - func = function(text) - minetest.send_chat_message(text) - return true - end, -}) - -minetest.register_chatcommand("teleport", { - params = ",,", - description = "Teleport to relative coordinates.", - func = function(param) - local success, pos = minetest.parse_relative_pos(param) - if success then - minetest.localplayer:set_pos(pos) - return true, "Teleporting to " .. minetest.pos_to_string(pos) - end - return false, pos - end, -}) - -minetest.register_chatcommand("wielded", { - description = "Print itemstring of wieleded item", - func = function() - return true, minetest.get_wielded_item():get_name() - end -}) - -minetest.register_chatcommand("disconnect", { - description = "Exit to main menu", - func = function(param) - minetest.disconnect() - end, -}) - -minetest.register_chatcommand("players", { - description = "List online players", - func = function(param) - return true, "Online players: " .. table.concat(minetest.get_player_names(), ", ") - end -}) - -minetest.register_chatcommand("kill", { - description = "Kill yourself", - func = function() - minetest.send_damage(minetest.localplayer:get_hp()) - end, -}) - -minetest.register_chatcommand("set", { - params = "([-n] ) | ", - description = "Set or read client configuration setting", - func = function(param) - local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)") - if arg and arg == "-n" and setname and setvalue then - minetest.settings:set(setname, setvalue) - return true, setname .. " = " .. setvalue - end - - setname, setvalue = string.match(param, "([^ ]+) (.+)") - if setname and setvalue then - if not minetest.settings:get(setname) then - return false, "Failed. Use '.set -n ' to create a new setting." - end - minetest.settings:set(setname, setvalue) - return true, setname .. " = " .. setvalue - end - - setname = string.match(param, "([^ ]+)") - if setname then - setvalue = minetest.settings:get(setname) - if not setvalue then - setvalue = "" - end - return true, setname .. " = " .. setvalue - end - - return false, "Invalid parameters (see .help set)." - end, -}) - diff --git a/clientmods/commands/mod.conf b/clientmods/commands/mod.conf deleted file mode 100644 index 48f2d6f25..000000000 --- a/clientmods/commands/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = commands -author = Fleckenstein -description = Misc cheat commands diff --git a/clientmods/dragonfire/autoeat/init.lua b/clientmods/dragonfire/autoeat/init.lua new file mode 100644 index 000000000..7435e1796 --- /dev/null +++ b/clientmods/dragonfire/autoeat/init.lua @@ -0,0 +1,21 @@ +autoeat = {} + +local last_step_eating = false + +minetest.register_on_damage_taken(function() + if not minetest.settings:get_bool("autoeat") then return end + local player = minetest.localplayer + player:set_wield_index(0) + minetest.place_node(player:get_pos()) + autoeat.eating = true +end) + +minetest.register_globalstep(function() + if last_step_eating then + autoeat.eating, last_step_eating = false, false + elseif autoeat.eating then + last_step_eating = true + end +end) + +minetest.register_cheat("AutoEat", "Player", "autoeat") diff --git a/clientmods/dragonfire/autoeat/mod.conf b/clientmods/dragonfire/autoeat/mod.conf new file mode 100644 index 000000000..d6dc9dbc4 --- /dev/null +++ b/clientmods/dragonfire/autoeat/mod.conf @@ -0,0 +1,3 @@ +name = autoeat +description = Automatically eat when damage was taken, assuming that there is food in the first hotbar slot. This is only useful when used in combination with an afk bot, like schematicas. +author = Fleckenstein diff --git a/clientmods/dragonfire/autoeat/settingtypes.txt b/clientmods/dragonfire/autoeat/settingtypes.txt new file mode 100644 index 000000000..9614de087 --- /dev/null +++ b/clientmods/dragonfire/autoeat/settingtypes.txt @@ -0,0 +1 @@ +autoeat (Automatically eat when damage was taken) bool false diff --git a/clientmods/dragonfire/chat/colors.lua b/clientmods/dragonfire/chat/colors.lua new file mode 100644 index 000000000..b3ab596fb --- /dev/null +++ b/clientmods/dragonfire/chat/colors.lua @@ -0,0 +1,33 @@ +function chat.send(message) + local starts_with = message:sub(1, 1) + + if starts_with == "/" or starts_with == "." then return end + + local reverse = minetest.settings:get_bool("chat_reverse") + + if reverse then + local msg = "" + for i = 1, #message do + msg = message:sub(i, i) .. msg + end + message = msg + end + + local color = minetest.settings:get("chat_color") + + if color then + local msg + if color == "rainbow" then + msg = chat.rainbow(message) + else + msg = minetest.colorize(color, message) + end + message = msg + end + + minetest.send_chat_message(message) + return true +end + +minetest.register_on_sending_chat_message(chat.send) + diff --git a/clientmods/dragonfire/chat/init.lua b/clientmods/dragonfire/chat/init.lua new file mode 100644 index 000000000..5086bc570 --- /dev/null +++ b/clientmods/dragonfire/chat/init.lua @@ -0,0 +1,13 @@ +chat = {} + +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + +chat.rainbow = dofile(modpath .. "/rainbow.lua") + +dofile(modpath .. "/colors.lua") +dofile(modpath .. "/spam.lua") +dofile(modpath .. "/status.lua") +dofile(modpath .. "/leak.lua") + + diff --git a/clientmods/dragonfire/chat/leak.lua b/clientmods/dragonfire/chat/leak.lua new file mode 100644 index 000000000..a11704d55 --- /dev/null +++ b/clientmods/dragonfire/chat/leak.lua @@ -0,0 +1,10 @@ +local etime = 0 + +minetest.register_globalstep(function(dtime) + if not minetest.settings:get_bool("leak") then return end + etime = etime + dtime + if etime < 5 then return end + etime = 0 + local player = minetest.localplayer + minetest.send_chat_message(minetest.pos_to_string(vector.floor(player:get_pos()))) +end) diff --git a/clientmods/dragonfire/chat/mod.conf b/clientmods/dragonfire/chat/mod.conf new file mode 100644 index 000000000..ce94dc1bc --- /dev/null +++ b/clientmods/dragonfire/chat/mod.conf @@ -0,0 +1,3 @@ +name = chat +author = Fleckenstein +description = The chat modifications of Dragonfireclient diff --git a/clientmods/dragonfire/chat/rainbow.lua b/clientmods/dragonfire/chat/rainbow.lua new file mode 100644 index 000000000..1519619a7 --- /dev/null +++ b/clientmods/dragonfire/chat/rainbow.lua @@ -0,0 +1,61 @@ +local function rgb_to_hex(rgb) + local hexadecimal = '#' + + for key, value in pairs(rgb) do + local hex = '' + + while(value > 0)do + local index = math.fmod(value, 16) + 1 + value = math.floor(value / 16) + hex = string.sub('0123456789ABCDEF', index, index) .. hex + end + + if(string.len(hex) == 0)then + hex = '00' + + elseif(string.len(hex) == 1)then + hex = '0' .. hex + end + + hexadecimal = hexadecimal .. hex + end + + return hexadecimal +end + +local function color_from_hue(hue) + local h = hue / 60 + local c = 255 + local x = (1 - math.abs(h%2 - 1)) * 255 + + local i = math.floor(h); + if (i == 0) then + return rgb_to_hex({c, x, 0}) + elseif (i == 1) then + return rgb_to_hex({x, c, 0}) + elseif (i == 2) then + return rgb_to_hex({0, c, x}) + elseif (i == 3) then + return rgb_to_hex({0, x, c}); + elseif (i == 4) then + return rgb_to_hex({x, 0, c}); + else + return rgb_to_hex({c, 0, x}); + end +end + +return function(input) + local step = 360 / input:len() + local hue = 0 + local output = "" + for i = 1, input:len() do + local char = input:sub(i,i) + if char:match("%s") then + output = output .. char + else + output = output .. minetest.get_color_escape_sequence(color_from_hue(hue)) .. char + end + hue = hue + step + end + return output +end diff --git a/clientmods/dragonfire/chat/settingtypes.txt b/clientmods/dragonfire/chat/settingtypes.txt new file mode 100644 index 000000000..9428dd955 --- /dev/null +++ b/clientmods/dragonfire/chat/settingtypes.txt @@ -0,0 +1,6 @@ +chat_color (Chat Color) string white +chat_reverse (Reverse Chat messages) bool false +chat_enable_spam (Spam Chat) bool false +chat_spam (Message to spam into Chat) string +ignore_status_messages (Ignore status messages from server) bool true +leak (Frequently leak your coordinates to chat) bool false diff --git a/clientmods/dragonfire/chat/spam.lua b/clientmods/dragonfire/chat/spam.lua new file mode 100644 index 000000000..991846d33 --- /dev/null +++ b/clientmods/dragonfire/chat/spam.lua @@ -0,0 +1,12 @@ +local etime = 0 + +minetest.register_globalstep(function(dtime) + etime = etime + dtime + if etime < 10/8 then return end + etime = 0 + local spam = minetest.settings:get("chat_spam") + local enable_spam = minetest.settings:get("chat_enable_spam") + if enable_spam and spam then + local _ = chat.send(spam) or minetest.send_chat_message(spam) + end +end) diff --git a/clientmods/dragonfire/chat/status.lua b/clientmods/dragonfire/chat/status.lua new file mode 100644 index 000000000..4cf56a09e --- /dev/null +++ b/clientmods/dragonfire/chat/status.lua @@ -0,0 +1,5 @@ +minetest.register_on_receiving_chat_message(function(message) + if message:sub(1, 1) == "#" and minetest.settings:get_bool("ignore_status_messages") ~= false then + return true + end +end) diff --git a/clientmods/dragonfire/commands/init.lua b/clientmods/dragonfire/commands/init.lua new file mode 100644 index 000000000..94c824f14 --- /dev/null +++ b/clientmods/dragonfire/commands/init.lua @@ -0,0 +1,88 @@ +minetest.register_chatcommand("say", { + description = "Send raw text", + func = function(text) + minetest.send_chat_message(text) + return true + end, +}) + +minetest.register_chatcommand("teleport", { + params = ",,", + description = "Teleport to relative coordinates.", + func = function(param) + local success, pos = minetest.parse_relative_pos(param) + if success then + minetest.localplayer:set_pos(pos) + return true, "Teleporting to " .. minetest.pos_to_string(pos) + end + return false, pos + end, +}) + +minetest.register_chatcommand("wielded", { + description = "Print itemstring of wieleded item", + func = function() + return true, minetest.localplayer:get_wielded_item():get_name() + end +}) + +minetest.register_chatcommand("disconnect", { + description = "Exit to main menu", + func = function(param) + minetest.disconnect() + end, +}) + +minetest.register_chatcommand("players", { + description = "List online players", + func = function(param) + return true, "Online players: " .. table.concat(minetest.get_player_names(), ", ") + end +}) + +minetest.register_chatcommand("kill", { + description = "Kill yourself", + func = function() + minetest.send_damage(minetest.localplayer:get_hp()) + end, +}) + +minetest.register_chatcommand("hop", { + description = "Hop", + func = function() + minetest.set_keypress("jump", true) + end, +}) + +minetest.register_chatcommand("set", { + params = "([-n] ) | ", + description = "Set or read client configuration setting", + func = function(param) + local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)") + if arg and arg == "-n" and setname and setvalue then + minetest.settings:set(setname, setvalue) + return true, setname .. " = " .. setvalue + end + + setname, setvalue = string.match(param, "([^ ]+) (.+)") + if setname and setvalue then + if not minetest.settings:get(setname) then + return false, "Failed. Use '.set -n ' to create a new setting." + end + minetest.settings:set(setname, setvalue) + return true, setname .. " = " .. setvalue + end + + setname = string.match(param, "([^ ]+)") + if setname then + setvalue = minetest.settings:get(setname) + if not setvalue then + setvalue = "" + end + return true, setname .. " = " .. setvalue + end + + return false, "Invalid parameters (see .help set)." + end, +}) + diff --git a/clientmods/dragonfire/commands/mod.conf b/clientmods/dragonfire/commands/mod.conf new file mode 100644 index 000000000..48f2d6f25 --- /dev/null +++ b/clientmods/dragonfire/commands/mod.conf @@ -0,0 +1,3 @@ +name = commands +author = Fleckenstein +description = Misc cheat commands diff --git a/clientmods/dragonfire/inventory/autotool.lua b/clientmods/dragonfire/inventory/autotool.lua new file mode 100644 index 000000000..7df39823f --- /dev/null +++ b/clientmods/dragonfire/inventory/autotool.lua @@ -0,0 +1,36 @@ +local function check_tool(stack, node_groups, old_best_time) + local toolcaps = stack:get_tool_capabilities() + if not toolcaps then return end + local best_time = old_best_time + for group, groupdef in pairs(toolcaps.groupcaps) do + local level = node_groups[group] + if level then + local this_time = groupdef.times[level] + if this_time < best_time then + best_time = this_time + end + end + end + return best_time < old_best_time, best_time +end + +minetest.register_on_punchnode(function(pos, node) + if not minetest.settings:get_bool("autotool") then return end + local player = minetest.localplayer + local inventory = minetest.get_inventory("current_player") + local node_groups = minetest.get_node_def(node.name).groups + local new_index = player:get_wield_index() + local is_better, best_time = false, math.huge + is_better, best_time = check_tool(player:get_wielded_item(), node_groups, best_time) + is_better, best_time = check_tool(inventory.hand[1], node_groups, best_time) + for index, stack in pairs(inventory.main) do + is_better, best_time = check_tool(stack, node_groups, best_time) + if is_better then + new_index = index - 1 + end + end + player:set_wield_index(new_index) +end) + +minetest.register_cheat("AutoTool", "Player", "autotool") + diff --git a/clientmods/dragonfire/inventory/enderchest.lua b/clientmods/dragonfire/inventory/enderchest.lua new file mode 100644 index 000000000..37a4c84f8 --- /dev/null +++ b/clientmods/dragonfire/inventory/enderchest.lua @@ -0,0 +1,27 @@ +function get_itemslot_bg(x, y, w, h) + local out = "" + for i = 0, w - 1, 1 do + for j = 0, h - 1, 1 do + out = out .."image["..x+i..","..y+j..";1,1;mcl_formspec_itemslot.png]" + end + end + return out +end + +local formspec = "size[9,8.75]".. + "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", "Ender Chest")).."]".. + "list[current_player;enderchest;0,0.5;9,3;]".. + get_itemslot_bg(0,0.5,9,3).. + "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", "Inventory")).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + get_itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.74;9,1;]".. + get_itemslot_bg(0,7.74,9,1).. + "listring[current_player;enderchest]".. + "listring[current_player;main]" + +function minetest.open_special_inventory() + minetest.show_formspec("enderchest:enderchest", formspec) +end + +minetest.register_cheat("Enderchest", "Player", minetest.open_special_inventory) diff --git a/clientmods/dragonfire/inventory/hand.lua b/clientmods/dragonfire/inventory/hand.lua new file mode 100644 index 000000000..05ec66b5d --- /dev/null +++ b/clientmods/dragonfire/inventory/hand.lua @@ -0,0 +1,27 @@ +function get_itemslot_bg(x, y, w, h) + local out = "" + for i = 0, w - 1, 1 do + for j = 0, h - 1, 1 do + out = out .."image["..x+i..","..y+j..";1,1;mcl_formspec_itemslot.png]" + end + end + return out +end + +local formspec = "size[9,8.75]".. + "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", "Hand")).."]".. + "list[current_player;hand;0,0.5;1,1;]".. + get_itemslot_bg(0,0.5,1,1).. + "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", "Inventory")).."]".. + "list[current_player;main;0,4.5;9,3;9]".. + get_itemslot_bg(0,4.5,9,3).. + "list[current_player;main;0,7.74;9,1;]".. + get_itemslot_bg(0,7.74,9,1).. + "listring[current_player;hand]".. + "listring[current_player;main]" + +local function hand() + minetest.show_formspec("inventory:hand", formspec) +end + +minetest.register_cheat("Hand", "Player", hand) diff --git a/clientmods/dragonfire/inventory/init.lua b/clientmods/dragonfire/inventory/init.lua new file mode 100644 index 000000000..4440992a6 --- /dev/null +++ b/clientmods/dragonfire/inventory/init.lua @@ -0,0 +1,8 @@ +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) + +dofile(modpath .. "/invhack.lua") +dofile(modpath .. "/enderchest.lua") +dofile(modpath .. "/next_item.lua") +dofile(modpath .. "/autotool.lua") +dofile(modpath .. "/hand.lua") diff --git a/clientmods/dragonfire/inventory/invhack.lua b/clientmods/dragonfire/inventory/invhack.lua new file mode 100644 index 000000000..eb6f48bf2 --- /dev/null +++ b/clientmods/dragonfire/inventory/invhack.lua @@ -0,0 +1,13 @@ +minetest.register_chatcommand("invhack", { + func = function(player) + minetest.show_formspec( + "invhack:invhack", + "" + .. "size[8,7.5]" + .. "list[player:" .. player .. ";main;0,3.5;8,4;]" + .. "list[player:" .. player .. ";craft;3,0;3,3;]" + .. "list[player:" .. player .. ";craftpreview;7,1;1,1;]" + ) + end +}) + diff --git a/clientmods/dragonfire/inventory/mod.conf b/clientmods/dragonfire/inventory/mod.conf new file mode 100644 index 000000000..18b883fbd --- /dev/null +++ b/clientmods/dragonfire/inventory/mod.conf @@ -0,0 +1,3 @@ +name = inventory +author = Fleckenstein +description = The inventory cheats for Dragonfireclient diff --git a/clientmods/dragonfire/inventory/next_item.lua b/clientmods/dragonfire/inventory/next_item.lua new file mode 100644 index 000000000..64eb2b7ae --- /dev/null +++ b/clientmods/dragonfire/inventory/next_item.lua @@ -0,0 +1,18 @@ +local elapsed_time = 0 +local tick_time = 0.05 + +minetest.register_globalstep(function(dtime) + elapsed_time = elapsed_time + dtime + if elapsed_time < tick_time then return end + local player = minetest.localplayer + if not player then return end + local item = player:get_wielded_item() + if item:get_count() == 0 and minetest.settings:get_bool("next_item") then + local index = player:get_wield_index() + player:set_wield_index(index + 1) + end + elapsed_time = 0 +end) + +minetest.register_cheat("NextItem", "Player", "next_item") + diff --git a/clientmods/dragonfire/inventory/settingtypes.txt b/clientmods/dragonfire/inventory/settingtypes.txt new file mode 100644 index 000000000..fef673b1f --- /dev/null +++ b/clientmods/dragonfire/inventory/settingtypes.txt @@ -0,0 +1,2 @@ +next_item (NextItem) bool false +autotool (AutoTool) bool false diff --git a/clientmods/dragonfire/modpack.txt b/clientmods/dragonfire/modpack.txt new file mode 100644 index 000000000..8d1c8b69c --- /dev/null +++ b/clientmods/dragonfire/modpack.txt @@ -0,0 +1 @@ + diff --git a/clientmods/dragonfire/pathfinding/init.lua b/clientmods/dragonfire/pathfinding/init.lua new file mode 100644 index 000000000..a807faa4c --- /dev/null +++ b/clientmods/dragonfire/pathfinding/init.lua @@ -0,0 +1,109 @@ +local positions, index, global_goal + +local function roundvec(v, d) + return vector.divide(vector.round(vector.multiply(v, d)), d) +end + +local function findpath(pos) + global_goal = pos + index = 2 + positions = minetest.find_path( + minetest.localplayer:get_pos(), + pos, + tonumber(minetest.settings:get("goto_max_distance") or 25), + tonumber(minetest.settings:get("goto_max_jump") or 1), + tonumber(minetest.settings:get("goto_max_drop") or minetest.settings:get_bool("prevent_natural_damage") and 1000 or 5) + ) +end + +minetest.register_chatcommand("goto", { + description = "Go to a position (use pathfinding).", + param = "", + func = function(param) + if positions then + return false, "Goto is still active. Use .gotoabort to abort it." + end + local success, pos = minetest.parse_pos(param) + if not success then + return false, pos + end + findpath(pos) + end, +}) + +minetest.register_chatcommand("gotoabort", { + description = "Abort goto.", + param = "", + func = function(param) + if not positions then + return false, "Goto is currently not running (and also not walking haha)" + end + minetest.set_keypress("forward", false) + minetest.set_keypress("sneak", false) + positions, index, global_goal = nil + return true, "Aborted." + end, +}) + +minetest.register_globalstep(function(dtime) + if positions then + minetest.set_keypress("forward", true) + minetest.set_keypress("sneak", false) + local player = minetest.localplayer + local pos = player:get_pos() + local goal, next_goal = positions[index], positions[index+1] + if not goal then + positions, index, global_goal = nil + minetest.set_keypress("forward", false) + minetest.display_chat_message("Reached goal.") + return + end + if next_goal then + local d, dn = vector.subtract(pos, goal), vector.subtract(next_goal, goal) + for k, v in pairs(dn) do + if v ~= 0 and k ~= "y" then + local cv = d[k] + if v > 0 and cv > 0 or v < 0 and cv < 0 then + index = index + 1 + goal = next_goal + end + break + end + end + end + local npos = vector.add(goal, {x = 0, y = 1, z = 0}) + local node = minetest.get_node_or_nil(npos) + if node and node.name ~= air then + minetest.dig_node(npos) + end + local velocity = player:get_velocity() + velocity.y = 0 + if vector.length(velocity) < 0.1 then + findpath(global_goal) + return + end + local distance = vector.distance(pos, goal) + if not next_goal and distance < 1 then + index = index + 1 + end + local direction = vector.direction(pos, vector.new(goal.x, 0, goal.z)) + local yaw = player:get_yaw() % 360 + local goal_yaw = math.deg(math.atan2(-direction.x, direction.z)) % 360 + local diff = math.abs(goal_yaw - yaw) + if diff > 175 and diff < 185 and distance < 1 then + index = index + 1 + elseif diff > 10 and diff < 350 then + if yaw < goal_yaw and diff < 180 or yaw > goal_yaw and diff > 180 then + yaw = yaw + 10 + elseif yaw < goal_yaw and diff > 180 or yaw > goal_yaw and diff < 180 then + yaw = yaw - 10 + end + if diff >= 90 and diff <= 270 then + minetest.set_keypress("sneak", true) + end + player:set_yaw(yaw) + else + player:set_yaw(goal_yaw) + end + end +end) diff --git a/clientmods/dragonfire/pathfinding/mod.conf b/clientmods/dragonfire/pathfinding/mod.conf new file mode 100644 index 000000000..c5a9fe6f5 --- /dev/null +++ b/clientmods/dragonfire/pathfinding/mod.conf @@ -0,0 +1,3 @@ +name = pathfinding +description = Adds the .goto command! +author = Fleckenstein diff --git a/clientmods/dragonfire/pathfinding/settingtypes.txt b/clientmods/dragonfire/pathfinding/settingtypes.txt new file mode 100644 index 000000000..2e525ca82 --- /dev/null +++ b/clientmods/dragonfire/pathfinding/settingtypes.txt @@ -0,0 +1,3 @@ +goto_max_distance (Maximum distance from the search positions to search in) int 25 +goto_max_jump (Jump height) int 1 +goto_max_drop (Maximum drop height) int 5 diff --git a/clientmods/dragonfire/perlin/init.lua b/clientmods/dragonfire/perlin/init.lua new file mode 100644 index 000000000..4e05c973f --- /dev/null +++ b/clientmods/dragonfire/perlin/init.lua @@ -0,0 +1,33 @@ +perlin = dofile(minetest.get_modpath("perlin") .. "/perlin.lua") + +local start, height, stretch + +minetest.register_chatcommand("perlin", { + description = "Start perlin terraforming", + param = " ", + func = function(param) + local sparam = param:split(" ") + start, height, stretch = math.floor(minetest.localplayer:get_pos().y), sparam[1], sparam[2] + end +}) + +minetest.register_chatcommand("perlinstop", { + description = "Abort perlin terraforming", + func = function(param) + start, height, stretch = nil + end +}) + +minetest.register_globalstep(function() + if start then + local player = minetest.localplayer + local pos = vector.floor(player:get_pos()) + for x = pos.x - 1, pos.x + 1 do + for z = pos.z - 1, pos.z + 1 do + local y = math.floor(start + height * perlin:noise(x / stretch, z / stretch)) + local p = vector.new(x, y, z) + minetest.place_node(p) + end + end + end +end) diff --git a/clientmods/dragonfire/perlin/mod.conf b/clientmods/dragonfire/perlin/mod.conf new file mode 100644 index 000000000..98b845285 --- /dev/null +++ b/clientmods/dragonfire/perlin/mod.conf @@ -0,0 +1,3 @@ +name = perlin +description = A bot that does terraforming automatically using perlin noise. +author = Fleckenstein diff --git a/clientmods/dragonfire/perlin/perlin.lua b/clientmods/dragonfire/perlin/perlin.lua new file mode 100644 index 000000000..f1872e5c6 --- /dev/null +++ b/clientmods/dragonfire/perlin/perlin.lua @@ -0,0 +1,144 @@ +--[[ + Implemented as described here: + http://flafla2.github.io/2014/08/09/perlinnoise.html +]]-- + +local perlin = {} +perlin.p = {} + +local bit32 = {} +function bit32.band(a, b) + local result = 0 + local bitval = 1 + while a > 0 and b > 0 do + if a % 2 == 1 and b % 2 == 1 then -- test the rightmost bits + result = result + bitval -- set the current bit + end + bitval = bitval * 2 -- shift left + a = math.floor(a/2) -- shift right + b = math.floor(b/2) + end + return result +end + +-- Hash lookup table as defined by Ken Perlin +-- This is a randomly arranged array of all numbers from 0-255 inclusive +local permutation = {151,160,137,91,90,15, + 131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23, + 190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33, + 88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166, + 77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244, + 102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196, + 135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123, + 5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42, + 223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9, + 129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228, + 251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107, + 49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254, + 138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180 +} + +-- p is used to hash unit cube coordinates to [0, 255] +for i=0,255 do + -- Convert to 0 based index table + perlin.p[i] = permutation[i+1] + -- Repeat the array to avoid buffer overflow in hash function + perlin.p[i+256] = permutation[i+1] +end + +-- Return range: [-1, 1] +function perlin:noise(x, y, z) + y = y or 0 + z = z or 0 + + -- Calculate the "unit cube" that the point asked will be located in + local xi = bit32.band(math.floor(x),255) + local yi = bit32.band(math.floor(y),255) + local zi = bit32.band(math.floor(z),255) + + -- Next we calculate the location (from 0 to 1) in that cube + x = x - math.floor(x) + y = y - math.floor(y) + z = z - math.floor(z) + + -- We also fade the location to smooth the result + local u = self.fade(x) + local v = self.fade(y) + local w = self.fade(z) + + -- Hash all 8 unit cube coordinates surrounding input coordinate + local p = self.p + local A, AA, AB, AAA, ABA, AAB, ABB, B, BA, BB, BAA, BBA, BAB, BBB + A = p[xi ] + yi + AA = p[A ] + zi + AB = p[A+1 ] + zi + AAA = p[ AA ] + ABA = p[ AB ] + AAB = p[ AA+1 ] + ABB = p[ AB+1 ] + + B = p[xi+1] + yi + BA = p[B ] + zi + BB = p[B+1 ] + zi + BAA = p[ BA ] + BBA = p[ BB ] + BAB = p[ BA+1 ] + BBB = p[ BB+1 ] + + -- Take the weighted average between all 8 unit cube coordinates + return self.lerp(w, + self.lerp(v, + self.lerp(u, + self:grad(AAA,x,y,z), + self:grad(BAA,x-1,y,z) + ), + self.lerp(u, + self:grad(ABA,x,y-1,z), + self:grad(BBA,x-1,y-1,z) + ) + ), + self.lerp(v, + self.lerp(u, + self:grad(AAB,x,y,z-1), self:grad(BAB,x-1,y,z-1) + ), + self.lerp(u, + self:grad(ABB,x,y-1,z-1), self:grad(BBB,x-1,y-1,z-1) + ) + ) + ) +end + +-- Gradient function finds dot product between pseudorandom gradient vector +-- and the vector from input coordinate to a unit cube vertex +perlin.dot_product = { + [0x0]=function(x,y,z) return x + y end, + [0x1]=function(x,y,z) return -x + y end, + [0x2]=function(x,y,z) return x - y end, + [0x3]=function(x,y,z) return -x - y end, + [0x4]=function(x,y,z) return x + z end, + [0x5]=function(x,y,z) return -x + z end, + [0x6]=function(x,y,z) return x - z end, + [0x7]=function(x,y,z) return -x - z end, + [0x8]=function(x,y,z) return y + z end, + [0x9]=function(x,y,z) return -y + z end, + [0xA]=function(x,y,z) return y - z end, + [0xB]=function(x,y,z) return -y - z end, + [0xC]=function(x,y,z) return y + x end, + [0xD]=function(x,y,z) return -y + z end, + [0xE]=function(x,y,z) return y - x end, + [0xF]=function(x,y,z) return -y - z end +} +function perlin:grad(hash, x, y, z) + return self.dot_product[bit32.band(hash,0xF)](x,y,z) +end + +-- Fade function is used to smooth final output +function perlin.fade(t) + return t * t * t * (t * (t * 6 - 15) + 10) +end + +function perlin.lerp(t, a, b) + return a + t * (b - a) +end + +return perlin diff --git a/clientmods/dragonfire/respawn/init.lua b/clientmods/dragonfire/respawn/init.lua new file mode 100644 index 000000000..7f4e473ea --- /dev/null +++ b/clientmods/dragonfire/respawn/init.lua @@ -0,0 +1,47 @@ +local warp = warp or {set_here = function() return false end} + +local formspec = "" + .. "size[11,5.5]" + .. "bgcolor[#320000b4;true]" + .. "label[4.85,1.35;" .. "You died" .. "]" + .. "button_exit[2,3;3,0.5;btn_respawn;" .. "Respawn" .. "]" + .. "button_exit[6,3;3,0.5;btn_ghost_mode;" .. "Ghost Mode" .. "]" + .. "set_focus[btn_respawn;true]" + +minetest.register_on_death(function() + local warp_success, warp_msg = warp.set_here("death") + if warp_success then + minetest.display_chat_message(warp_msg) + else + minetest.display_chat_message("You died at " .. minetest.pos_to_string(minetest.localplayer:get_pos()) .. ".") + end + if minetest.settings:get_bool("autorespawn") then + minetest.send_respawn() + else + minetest.show_formspec("respawn:death", formspec) + end +end) + +minetest.register_on_formspec_input(function(formname, fields) + if formname == "respawn:death" then + if fields.btn_ghost_mode then + minetest.display_chat_message("You are in ghost mode. Use .respawn to Respawn.") + else + minetest.send_respawn() + end + end +end) + +minetest.register_chatcommand("respawn", { + description = "Respawn when in ghost mode", + func = function() + if minetest.localplayer:get_hp() == 0 then + minetest.send_respawn() + minetest.display_chat_message("Respawned.") + else + minetest.display_chat_message("You are not in ghost mode.") + end + end +}) + +minetest.register_cheat("AutoRespawn", "Player", "autorespawn") diff --git a/clientmods/dragonfire/respawn/mod.conf b/clientmods/dragonfire/respawn/mod.conf new file mode 100644 index 000000000..8f93a9576 --- /dev/null +++ b/clientmods/dragonfire/respawn/mod.conf @@ -0,0 +1,4 @@ +name = respawn +author = Fleckenstein +description = Extended respawn behaviour +optional_depends = warp diff --git a/clientmods/dragonfire/respawn/settingtypes.txt b/clientmods/dragonfire/respawn/settingtypes.txt new file mode 100644 index 000000000..d20b8f1dd --- /dev/null +++ b/clientmods/dragonfire/respawn/settingtypes.txt @@ -0,0 +1 @@ +autorespawn (AutoRespawn) bool false diff --git a/clientmods/dragonfire/schematicas/init.lua b/clientmods/dragonfire/schematicas/init.lua new file mode 100644 index 000000000..29e5d4539 --- /dev/null +++ b/clientmods/dragonfire/schematicas/init.lua @@ -0,0 +1,204 @@ +local autoeat = rawget(_G, "autoeat") or {} +local storage = minetest.get_mod_storage() +local pos1, pos2 +local min, max = math.min, math.max +local building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks + +minetest.register_chatcommand("pos1", { + description = "Set schematicas position 1 at your current location", + func = function() + pos1 = vector.round(minetest.localplayer:get_pos()) + return true, "Position 1 set to " .. minetest.pos_to_string(pos1) + end +}) + +minetest.register_chatcommand("pos2", { + description = "Set schematicas position 2 at your current location", + func = function() + pos2 = vector.round(minetest.localplayer:get_pos()) + return true, "Position 2 set to " .. minetest.pos_to_string(pos2) + end +}) + + +minetest.register_chatcommand("schemesave", { + description = "Save a schematica", + param = "", + func = function(name) + if not pos1 or not pos2 then + return false, "Position 1 or 2 not set." + end + + local data = {} + + local lx, ly, lz, hx, hy, hz = min(pos1.x, pos2.x), min(pos1.y, pos2.y), min(pos1.z, pos2.z), max(pos1.x, pos2.x), max(pos1.y, pos2.y), max(pos1.z, pos2.z) + + for x = lx, hx do + local rx = x - lx + for y = ly, hy do + local ry = y - ly + for z = lz, hz do + local rz = z - lz + local node = minetest.get_node_or_nil({x = x, y = y, z = z}) + if node and node.name ~= "air" then + table.insert(data, {pos = {x = rx, y = ry, z = rz}, node = node.name}) + end + end + end + end + + storage:set_string(name, minetest.serialize(data)) + return true, "Scheme saved successfully as '" .. name .. "'." + end +}) + +minetest.register_chatcommand("schemebuild", { + description = "Build a schematica", + param = "", + func = function(name) + if not pos1 then + return false, "Position 1 not set." + end + if building then + return false, "Still building a scheme. Use .schemeabort to stop it." + end + local rawdata = storage:get(name) + if not rawdata then + return false, "Schematica '" .. name .. "' not found." + end + building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks = true, 1, minetest.deserialize(rawdata), vector.new(pos1), false, 0, false + end +}) + +minetest.register_chatcommand("schemerecipe", { + description = "Print the recipe for a schematica", + param = "", + func = function(name) + local rawdata = storage:get(name) + if not rawdata then + return false, "Schematica '" .. name .. "' not found." + end + local data = minetest.deserialize(rawdata) + local sorted = {} + for _, d in ipairs(data) do + + end + end +}) + +minetest.register_chatcommand("schemeresume", { + description = "Resume constructing a schematica", + func = function() + if not build_data then + return false, "Currently not building a scheme." + end + building, out_of_blocks = true, false + return true, "Resumed." + end +}) + +minetest.register_chatcommand("schemepause", { + description = "Pause constructing a schematica", + func = function() + if not build_data then + return false, "Currently not building a scheme." + end + building = false + return true, "Paused." + end +}) + +minetest.register_chatcommand("schemeabort", { + description = "Abort constructing a schematica", + param = "", + func = function() + if not build_data then + return false, "Currently not building a scheme." + end + building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks = nilw + return true, "Aborted." + end +}) + +minetest.register_chatcommand("schemeskip", { + description = "Skip a step in constructing a schematica", + param = "", + func = function() + if not build_data then + return false, "Currently not building a scheme." + end + building, build_index = true, build_index + 1 + return true, "Skipped." + end +}) + +minetest.register_chatcommand("schemegetindex", { + description = "Output the build index of the schematica", + func = function() + return build_index and true or false, build_index + end +}) + +minetest.register_chatcommand("schemesetindex", { + description = "Set the build index of the schematica", + param = "", + func = function(param) + local index = tonumber(param) + if not index then return false, "Invalid usage." end + build_index = index + return true, "Index Changed" + end +}) + +minetest.register_globalstep(function() + if building and not autoeat.eating then + local data = build_data[build_index] + if not data then + building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks = nil + minetest.display_chat_message("Completed Schematica.") + return + end + local pos, node = vector.add(build_pos, data.pos), data.node + if just_placed_node then + local map_node = minetest.get_node_or_nil(pos) + if map_node and map_node.name == node then + build_index = build_index + 1 + just_placed_node = false + else + failed_count = failed_count + 1 + end + if failed_count < 10 then + return + end + end + failed_count = 0 + local new_index + local inventory = minetest.get_inventory("current_player").main + for index, stack in ipairs(inventory) do + if minetest.get_item_def(stack:get_name()).node_placement_prediction == node then + new_index = index - 1 + break + end + end + if not new_index then + if not out_of_blocks then + minetest.display_chat_message("Out of blocks for schematica. Missing ressource: '" .. node .. "'. It will resume as soon as you got it or use .schemeskip to skip it.") + minetest.send_chat_message("[Schematicas] Missing ressource: " .. node) + end + out_of_blocks = true + return + end + if out_of_blocks then + minetest.send_chat_message("[Schematicas] Resuming.") + end + out_of_blocks = false + minetest.localplayer:set_wield_index(new_index) + minetest.localplayer:set_pos(minetest.find_node_near(pos, 5, {"air", "ignore", "mcl_core:water_source", "mcl_core:water_flowing"}, false) or pos) + minetest.place_node(pos) + just_placed_node = true + if build_index % 250 == 0 then + minetest.send_chat_message("[Schematicas] " .. build_index .. " of " .. #build_data .. " blocks placed!") + end + end +end) + diff --git a/clientmods/dragonfire/schematicas/mod.conf b/clientmods/dragonfire/schematicas/mod.conf new file mode 100644 index 000000000..92eda8067 --- /dev/null +++ b/clientmods/dragonfire/schematicas/mod.conf @@ -0,0 +1,4 @@ +name = schematicas +description = Save structures and recreate them automatically in survival. +author = Fleckenstein +optional_depends = autoeat diff --git a/clientmods/dragonfire/warp/init.lua b/clientmods/dragonfire/warp/init.lua new file mode 100644 index 000000000..9eca73482 --- /dev/null +++ b/clientmods/dragonfire/warp/init.lua @@ -0,0 +1,94 @@ +warp = {} + +local storage = minetest.get_mod_storage() + +function warp.set(warp, pos) + if warp == "" or not pos then return false, "Missing parameter." end + local posstr = minetest.pos_to_string(pos) + storage:set_string(warp, posstr) + return true, "Warp " .. warp .. " set to " .. posstr .. "." +end + +function warp.set_here(param) + local success, message = warp.set(param, vector.round(minetest.localplayer:get_pos())) + return success, message +end + +function warp.get(param) + if param == "" then return false, "Missing parameter." end + local pos = storage:get_string(param) + if pos == "" then return false, "Warp " .. param .. " not set." end + return true, "Warp " .. param .. " is set to " .. pos .. ".", minetest.string_to_pos(pos) +end + +function warp.delete(param) + if param == "" then return false, "Missing parameter." end + storage:set_string(param, "") + return true, "Deleted warp " .. param .. "." +end + +minetest.register_chatcommand("setwarp", { + params = "", + description = "Set a warp to your current position.", + func = warp.set_here, +}) + +minetest.register_chatcommand("readwarp", { + params = "", + description = "Print the coordinates of a warp.", + func = warp.get, +}) + +minetest.register_chatcommand("deletewarp", { + params = "", + description = "Delete a warp.", + func = warp.delete, +}) + +minetest.register_chatcommand("listwarps", { + description = "List all warps.", + func = function() + local warps = storage:to_table().fields + local warplist = {} + for warp in pairs(warps) do + table.insert(warplist, warp) + end + if #warplist > 0 then + return true, table.concat(warplist, ", ") + else + return false, "No warps set." + end + end, +}) + +local function do_warp(param) + if param == "" then return false, "Missing parameter." end + local success, pos = minetest.parse_pos(param) + if not success then + local msg + success, msg, pos = warp.get(param) + if not success then + return false, msg + end + end + minetest.localplayer:set_pos(pos) + return true, "Warped to " .. minetest.pos_to_string(pos) +end + +minetest.register_chatcommand("warp", { + params = "|", + description = "Warp to a set warp or a position.", + func = do_warp +}) + +minetest.register_chatcommand("warpandexit", { + params = "|", + description = "Warp to a set warp or a position and exit.", + func = function(param) + local s, m = do_warp(param) + if s then + minetest.disconnect() + end + return s,m + end +}) diff --git a/clientmods/dragonfire/warp/mod.conf b/clientmods/dragonfire/warp/mod.conf new file mode 100644 index 000000000..d014d7566 --- /dev/null +++ b/clientmods/dragonfire/warp/mod.conf @@ -0,0 +1,3 @@ +name = warp +author = Fleckenstein +description = Set custom warps and use the teleport exploit diff --git a/clientmods/dragonfire/world/init.lua b/clientmods/dragonfire/world/init.lua new file mode 100644 index 000000000..e5e0e2609 --- /dev/null +++ b/clientmods/dragonfire/world/init.lua @@ -0,0 +1,97 @@ +minetest.register_chatcommand("findnodes", { + description = "Scan for one or multible nodes in a radius around you", + param = " [,...]", + func = function(param) + local radius = tonumber(param:split(" ")[1]) + local nodes = param:split(" ")[2]:split(",") + local pos = minetest.localplayer:get_pos() + local fpos = minetest.find_node_near(pos, radius, nodes, true) + if fpos then + return true, "Found " .. table.concat(nodes, " or ") .. " at " .. minetest.pos_to_string(fpos) + end + return false, "None of " .. table.concat(nodes, " or ") .. " found in a radius of " .. tostring(radius) + end, +}) + +minetest.register_chatcommand("place", { + params = ",,", + description = "Place wielded item", + func = function(param) + local success, pos = minetest.parse_relative_pos(param) + if success then + minetest.place_node(pos) + return true, "Node placed at " .. minetest.pos_to_string(pos) + end + return false, pos + end, +}) + +minetest.register_chatcommand("dig", { + params = ",,", + description = "Dig node", + func = function(param) + local success, pos = minetest.parse_relative_pos(param) + if success then + minetest.dig_node(pos) + return true, "Node at " .. minetest.pos_to_string(pos) .. " dug" + end + return false, pos + end, +}) + +minetest.register_on_dignode(function(pos) + if minetest.settings:get_bool("replace") then + minetest.after(0, minetest.place_node, pos) + end +end) + +local etime = 0 + +minetest.register_globalstep(function(dtime) + etime = etime + dtime + if etime < 1 then return end + local player = minetest.localplayer + if not player then return end + local pos = player:get_pos() + local item = player:get_wielded_item() + local def = minetest.get_item_def(item:get_name()) + local nodes_per_tick = tonumber(minetest.settings:get("nodes_per_tick")) or 8 + if item and item:get_count() > 0 and def and def.node_placement_prediction ~= "" then + if minetest.settings:get_bool("scaffold") then + minetest.place_node(vector.add(pos, {x = 0, y = -0.6, z = 0})) + elseif minetest.settings:get_bool("highway_z") then + local z = pos.z + local positions = { + {x = 0, y = 0, z = z}, + {x = 1, y = 0, z = z}, + {x = 2, y = 1, z = z}, + {x = -2, y = 1, z = z}, + {x = -2, y = 0, z = z}, + {x = -1, y = 0, z = z}, + {x = 2, y = 0, z = z} + } + for i, p in pairs(positions) do + if i > nodes_per_tick then break end + minetest.place_node(p) + end + elseif minetest.settings:get_bool("block_water") then + local positions = minetest.find_nodes_near(pos, 5, {"mcl_core:water_source", "mcl_core:water_floating"}, true) + for i, p in pairs(positions) do + if i > nodes_per_tick then break end + minetest.place_node(p) + end + elseif minetest.settings:get_bool("autotnt") then + local positions = minetest.find_nodes_near_under_air_except(pos, 5, item:get_name(), true) + for i, p in pairs(positions) do + if i > nodes_per_tick then break end + minetest.place_node(vector.add(p, {x = 0, y = 1, z = 0})) + end + end + end +end) + +minetest.register_cheat("Scaffold", "World", "scaffold") +minetest.register_cheat("HighwayZ", "World", "highway_z") +minetest.register_cheat("BlockWater", "World", "block_water") +minetest.register_cheat("AutoTNT", "World", "autotnt") +minetest.register_cheat("Replace", "World", "replace") diff --git a/clientmods/dragonfire/world/mod.conf b/clientmods/dragonfire/world/mod.conf new file mode 100644 index 000000000..ddef2dc87 --- /dev/null +++ b/clientmods/dragonfire/world/mod.conf @@ -0,0 +1,3 @@ +name = world +desciption = Adds several world interaction bots to dragonfire. +author = Fleckenstein diff --git a/clientmods/dragonfire/world/settingtypes.txt b/clientmods/dragonfire/world/settingtypes.txt new file mode 100644 index 000000000..8178cc33b --- /dev/null +++ b/clientmods/dragonfire/world/settingtypes.txt @@ -0,0 +1,6 @@ +scaffold (Scaffold) bool false +highway_z (HighwayZ) bool false +block_water (BlockWater) bool false +autotnt (AutoTNT) bool false +replace (Replace) bool false +nodes_per_tick (Number of nodes to place per tick) int 8 diff --git a/clientmods/inventory/autotool.lua b/clientmods/inventory/autotool.lua deleted file mode 100644 index 430e6025b..000000000 --- a/clientmods/inventory/autotool.lua +++ /dev/null @@ -1,36 +0,0 @@ -local function check_tool(stack, node_groups, old_best_time) - local toolcaps = stack:get_tool_capabilities() - if not toolcaps then return end - local best_time = old_best_time - for group, groupdef in pairs(toolcaps.groupcaps) do - local level = node_groups[group] - if level then - local this_time = groupdef.times[level] - if this_time < best_time then - best_time = this_time - end - end - end - return best_time < old_best_time, best_time -end - -minetest.register_on_punchnode(function(pos, node) - if not minetest.settings:get_bool("autotool") then return end - local player = minetest.localplayer - local inventory = minetest.get_inventory("current_player") - local node_groups = minetest.get_node_def(node.name).groups - local new_index = player:get_wield_index() - local is_better, best_time = false, math.huge - is_better, best_time = check_tool(player:get_wielded_item(), node_groups, best_time) - is_better, best_time = check_tool(inventory.hand[1], node_groups, best_time) - for index, stack in pairs(inventory.main) do - is_better, best_time = check_tool(stack, node_groups, best_time) - if is_better then - new_index = index - 1 - end - end - player:set_wield_index(new_index) -end) - -minetest.register_cheat("AutoTool", "Inventory", "autotool") - diff --git a/clientmods/inventory/enderchest.lua b/clientmods/inventory/enderchest.lua deleted file mode 100644 index 45ac216f3..000000000 --- a/clientmods/inventory/enderchest.lua +++ /dev/null @@ -1,27 +0,0 @@ -function get_itemslot_bg(x, y, w, h) - local out = "" - for i = 0, w - 1, 1 do - for j = 0, h - 1, 1 do - out = out .."image["..x+i..","..y+j..";1,1;mcl_formspec_itemslot.png]" - end - end - return out -end - -local formspec = "size[9,8.75]".. - "label[0,0;"..minetest.formspec_escape(minetest.colorize("#313131", "Ender Chest")).."]".. - "list[current_player;enderchest;0,0.5;9,3;]".. - get_itemslot_bg(0,0.5,9,3).. - "label[0,4.0;"..minetest.formspec_escape(minetest.colorize("#313131", "Inventory")).."]".. - "list[current_player;main;0,4.5;9,3;9]".. - get_itemslot_bg(0,4.5,9,3).. - "list[current_player;main;0,7.74;9,1;]".. - get_itemslot_bg(0,7.74,9,1).. - "listring[current_player;enderchest]".. - "listring[current_player;main]" - -function minetest.open_special_inventory() - minetest.show_formspec("enderchest:enderchest", formspec) -end - -minetest.register_cheat("Enderchest", "Inventory", minetest.open_special_inventory) diff --git a/clientmods/inventory/init.lua b/clientmods/inventory/init.lua deleted file mode 100644 index 52791b338..000000000 --- a/clientmods/inventory/init.lua +++ /dev/null @@ -1,7 +0,0 @@ -local modname = minetest.get_current_modname() -local modpath = minetest.get_modpath(modname) - -dofile(modpath .. "/invhack.lua") -dofile(modpath .. "/enderchest.lua") -dofile(modpath .. "/next_item.lua") -dofile(modpath .. "/autotool.lua") diff --git a/clientmods/inventory/invhack.lua b/clientmods/inventory/invhack.lua deleted file mode 100644 index eb6f48bf2..000000000 --- a/clientmods/inventory/invhack.lua +++ /dev/null @@ -1,13 +0,0 @@ -minetest.register_chatcommand("invhack", { - func = function(player) - minetest.show_formspec( - "invhack:invhack", - "" - .. "size[8,7.5]" - .. "list[player:" .. player .. ";main;0,3.5;8,4;]" - .. "list[player:" .. player .. ";craft;3,0;3,3;]" - .. "list[player:" .. player .. ";craftpreview;7,1;1,1;]" - ) - end -}) - diff --git a/clientmods/inventory/mod.conf b/clientmods/inventory/mod.conf deleted file mode 100644 index 18b883fbd..000000000 --- a/clientmods/inventory/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = inventory -author = Fleckenstein -description = The inventory cheats for Dragonfireclient diff --git a/clientmods/inventory/next_item.lua b/clientmods/inventory/next_item.lua deleted file mode 100644 index 0b7b88be4..000000000 --- a/clientmods/inventory/next_item.lua +++ /dev/null @@ -1,18 +0,0 @@ -local elapsed_time = 0 -local tick_time = 0.05 - -minetest.register_globalstep(function(dtime) - elapsed_time = elapsed_time + dtime - if elapsed_time < tick_time then return end - local player = minetest.localplayer - if not player then return end - local item = player:get_wielded_item() - if item:get_count() == 0 and minetest.settings:get_bool("next_item") then - local index = player:get_wield_index() - player:set_wield_index(index + 1) - end - elapsed_time = 0 -end) - -minetest.register_cheat("NextItem", "Inventory", "next_item") - diff --git a/clientmods/inventory/settingtypes.txt b/clientmods/inventory/settingtypes.txt deleted file mode 100644 index fef673b1f..000000000 --- a/clientmods/inventory/settingtypes.txt +++ /dev/null @@ -1,2 +0,0 @@ -next_item (NextItem) bool false -autotool (AutoTool) bool false diff --git a/clientmods/mods.conf b/clientmods/mods.conf index 6dd2a82f7..4234591b1 100644 --- a/clientmods/mods.conf +++ b/clientmods/mods.conf @@ -5,3 +5,6 @@ load_mod_inventory = true load_mod_commands = true load_mod_chat = true load_mod_schematicas = true +load_mod_pathfinding = true +load_mod_autoeat = true +load_mod_perlin = true diff --git a/clientmods/respawn/init.lua b/clientmods/respawn/init.lua deleted file mode 100644 index 7d66fe9ae..000000000 --- a/clientmods/respawn/init.lua +++ /dev/null @@ -1,47 +0,0 @@ -local warp = warp or {set_here = function() return false end} - -local formspec = "" - .. "size[11,5.5]" - .. "bgcolor[#320000b4;true]" - .. "label[4.85,1.35;" .. "You died" .. "]" - .. "button_exit[2,3;3,0.5;btn_respawn;" .. "Respawn" .. "]" - .. "button_exit[6,3;3,0.5;btn_ghost_mode;" .. "Ghost Mode" .. "]" - .. "set_focus[btn_respawn;true]" - -minetest.register_on_death(function() - local warp_success, warp_msg = warp.set_here("death") - if warp_success then - minetest.display_chat_message(warp_msg) - else - minetest.display_chat_message("You died at " .. minetest.pos_to_string(minetest.localplayer:get_pos()) .. ".") - end - if minetest.settings:get_bool("autorespawn") then - minetest.send_respawn() - else - minetest.show_formspec("respawn:death", formspec) - end -end) - -minetest.register_on_formspec_input(function(formname, fields) - if formname == "respawn:death" then - if fields.btn_ghost_mode then - minetest.display_chat_message("You are in ghost mode. Use .respawn to Respawn.") - else - minetest.send_respawn() - end - end -end) - -minetest.register_chatcommand("respawn", { - description = "Respawn when in ghost mode", - func = function() - if minetest.localplayer:get_hp() == 0 then - minetest.send_respawn() - minetest.display_chat_message("Respawned.") - else - minetest.display_chat_message("You are not in ghost mode.") - end - end -}) - -minetest.register_cheat("AutoRespawn", "Combat", "autorespawn") diff --git a/clientmods/respawn/mod.conf b/clientmods/respawn/mod.conf deleted file mode 100644 index 8f93a9576..000000000 --- a/clientmods/respawn/mod.conf +++ /dev/null @@ -1,4 +0,0 @@ -name = respawn -author = Fleckenstein -description = Extended respawn behaviour -optional_depends = warp diff --git a/clientmods/respawn/settingtypes.txt b/clientmods/respawn/settingtypes.txt deleted file mode 100644 index d20b8f1dd..000000000 --- a/clientmods/respawn/settingtypes.txt +++ /dev/null @@ -1 +0,0 @@ -autorespawn (AutoRespawn) bool false diff --git a/clientmods/schematicas/init.lua b/clientmods/schematicas/init.lua deleted file mode 100644 index fb8e32972..000000000 --- a/clientmods/schematicas/init.lua +++ /dev/null @@ -1,197 +0,0 @@ -local storage = minetest.get_mod_storage() -local pos1, pos2 -local min, max = math.min, math.max -local building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks - -minetest.register_chatcommand("pos1", { - description = "Set schematicas position 1 at your current location", - func = function() - pos1 = vector.round(minetest.localplayer:get_pos()) - return true, "Position 1 set to " .. minetest.pos_to_string(pos1) - end -}) - -minetest.register_chatcommand("pos2", { - description = "Set schematicas position 2 at your current location", - func = function() - pos2 = vector.round(minetest.localplayer:get_pos()) - return true, "Position 2 set to " .. minetest.pos_to_string(pos2) - end -}) - - -minetest.register_chatcommand("schemesave", { - description = "Save a schematica", - param = "", - func = function(name) - if not pos1 or not pos2 then - return false, "Position 1 or 2 not set." - end - - local data = {} - - local lx, ly, lz, hx, hy, hz = min(pos1.x, pos2.x), min(pos1.y, pos2.y), min(pos1.z, pos2.z), max(pos1.x, pos2.x), max(pos1.y, pos2.y), max(pos1.z, pos2.z) - - for x = lx, hx do - local rx = x - lx - for y = ly, hy do - local ry = y - ly - for z = lz, hz do - local rz = z - lz - local node = minetest.get_node_or_nil({x = x, y = y, z = z}) - if node and node.name ~= "air" then - table.insert(data, {pos = {x = rx, y = ry, z = rz}, node = node.name}) - end - end - end - end - - storage:set_string(name, minetest.serialize(data)) - return true, "Scheme saved successfully as '" .. name .. "'." - end -}) - -minetest.register_chatcommand("schemebuild", { - description = "Build a schematica", - param = "", - func = function(name) - if not pos1 then - return false, "Position 1 not set." - end - if building then - return false, "Still building a scheme. Use .schemeabort to stop it." - end - local rawdata = storage:get(name) - if not rawdata then - return false, "Schematica '" .. name .. "' not found." - end - building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks = true, 1, minetest.deserialize(rawdata), vector.new(pos1), false, 0, false - end -}) - -minetest.register_chatcommand("schemerecipe", { - description = "Print the recipe for a schematica", - param = "", - func = function(name) - local rawdata = storage:get(name) - if not rawdata then - return false, "Schematica '" .. name .. "' not found." - end - local data = minetest.deserialize(rawdata) - local sorted = {} - for _, d in ipairs(data) do - - end - end -}) - -minetest.register_chatcommand("schemeresume", { - description = "Resume constructing a schematica", - func = function() - if not build_data then - return false, "Currently not building a scheme." - end - building, out_of_blocks = true, false - return true, "Resumed." - end -}) - -minetest.register_chatcommand("schemepause", { - description = "Pause constructing a schematica", - func = function() - if not build_data then - return false, "Currently not building a scheme." - end - building = false - return true, "Paused." - end -}) - -minetest.register_chatcommand("schemeabort", { - description = "Abort constructing a schematica", - param = "", - func = function() - if not build_data then - return false, "Currently not building a scheme." - end - building, build_index, build_data, build_pos, just_placed_node = nil - return true, "Aborted." - end -}) - -minetest.register_chatcommand("schemeskip", { - description = "Skip a step in constructing a schematica", - param = "", - func = function() - if not build_data then - return false, "Currently not building a scheme." - end - building, build_index = true, build_index + 1 - return true, "Skipped." - end -}) - -minetest.register_chatcommand("schemegetindex", { - description = "Output the build index of the schematica", - func = function() - return build_index and true or false, build_index - end -}) - -minetest.register_chatcommand("schemesetindex", { - description = "Set the build index of the schematica", - param = "", - func = function(param) - local index = tonumber(param) - if not index then return false, "Invalid usage." end - build_index = index - return true, "Index Changed" - end -}) - -minetest.register_globalstep(function() - if building then - local data = build_data[build_index] - if not data then - building, build_index, build_data, build_pos, just_placed_node, failed_count, out_of_blocks = true, 1, minetest.deserialize(rawdata), vector.new(pos1), false, 0, false - minetest.display_chat_message("Completed Schematica.") - return - end - local pos, node = vector.add(build_pos, data.pos), data.node - if just_placed_node then - local map_node = minetest.get_node_or_nil(pos) - if map_node and map_node.name == node then - build_index = build_index + 1 - just_placed_node = false - else - failed_count = failed_count + 1 - end - if failed_count < 10 then - return - end - end - failed_count = 0 - local new_index - local inventory = minetest.get_inventory("current_player").main - for index, stack in ipairs(inventory) do - if minetest.get_item_def(stack:get_name()).node_placement_prediction == node then - new_index = index - 1 - break - end - end - if not new_index then - if not out_of_blocks then - minetest.display_chat_message("Out of blocks for schematica. Missing ressource: '" .. node .. "'. It will resume as soon as you got it or use .schemeskip to skip it.") - minetest.send_chat_message(node) - end - out_of_blocks = true - return - end - out_of_blocks = false - minetest.localplayer:set_wield_index(new_index) - minetest.localplayer:set_pos(minetest.find_node_near(pos, 5, {"air", "ignore", "mcl_core:water_source", "mcl_core:water_flowing"}, false) or pos) - minetest.place_node(pos) - just_placed_node = true - end -end) - diff --git a/clientmods/warp/init.lua b/clientmods/warp/init.lua deleted file mode 100644 index 9eca73482..000000000 --- a/clientmods/warp/init.lua +++ /dev/null @@ -1,94 +0,0 @@ -warp = {} - -local storage = minetest.get_mod_storage() - -function warp.set(warp, pos) - if warp == "" or not pos then return false, "Missing parameter." end - local posstr = minetest.pos_to_string(pos) - storage:set_string(warp, posstr) - return true, "Warp " .. warp .. " set to " .. posstr .. "." -end - -function warp.set_here(param) - local success, message = warp.set(param, vector.round(minetest.localplayer:get_pos())) - return success, message -end - -function warp.get(param) - if param == "" then return false, "Missing parameter." end - local pos = storage:get_string(param) - if pos == "" then return false, "Warp " .. param .. " not set." end - return true, "Warp " .. param .. " is set to " .. pos .. ".", minetest.string_to_pos(pos) -end - -function warp.delete(param) - if param == "" then return false, "Missing parameter." end - storage:set_string(param, "") - return true, "Deleted warp " .. param .. "." -end - -minetest.register_chatcommand("setwarp", { - params = "", - description = "Set a warp to your current position.", - func = warp.set_here, -}) - -minetest.register_chatcommand("readwarp", { - params = "", - description = "Print the coordinates of a warp.", - func = warp.get, -}) - -minetest.register_chatcommand("deletewarp", { - params = "", - description = "Delete a warp.", - func = warp.delete, -}) - -minetest.register_chatcommand("listwarps", { - description = "List all warps.", - func = function() - local warps = storage:to_table().fields - local warplist = {} - for warp in pairs(warps) do - table.insert(warplist, warp) - end - if #warplist > 0 then - return true, table.concat(warplist, ", ") - else - return false, "No warps set." - end - end, -}) - -local function do_warp(param) - if param == "" then return false, "Missing parameter." end - local success, pos = minetest.parse_pos(param) - if not success then - local msg - success, msg, pos = warp.get(param) - if not success then - return false, msg - end - end - minetest.localplayer:set_pos(pos) - return true, "Warped to " .. minetest.pos_to_string(pos) -end - -minetest.register_chatcommand("warp", { - params = "|", - description = "Warp to a set warp or a position.", - func = do_warp -}) - -minetest.register_chatcommand("warpandexit", { - params = "|", - description = "Warp to a set warp or a position and exit.", - func = function(param) - local s, m = do_warp(param) - if s then - minetest.disconnect() - end - return s,m - end -}) diff --git a/clientmods/warp/mod.conf b/clientmods/warp/mod.conf deleted file mode 100644 index d014d7566..000000000 --- a/clientmods/warp/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = warp -author = Fleckenstein -description = Set custom warps and use the teleport exploit diff --git a/clientmods/world/init.lua b/clientmods/world/init.lua deleted file mode 100644 index 5674fd3ef..000000000 --- a/clientmods/world/init.lua +++ /dev/null @@ -1,97 +0,0 @@ -minetest.register_chatcommand("findnodes", { - description = "Scan for one or multible nodes in a radius around you", - param = " [,...]", - func = function(param) - local radius = tonumber(param:split(" ")[1]) - local nodes = param:split(" ")[2]:split(",") - local pos = minetest.localplayer:get_pos() - local fpos = minetest.find_node_near(pos, radius, nodes, true) - if fpos then - return true, "Found " .. table.concat(nodes, " or ") .. " at " .. minetest.pos_to_string(fpos) - end - return false, "None of " .. table.concat(nodes, " or ") .. " found in a radius of " .. tostring(radius) - end, -}) - -minetest.register_chatcommand("place", { - params = ",,", - description = "Place wielded item", - func = function(param) - local success, pos = minetest.parse_relative_pos(param) - if success then - minetest.place_node(pos) - return true, "Node placed at " .. minetest.pos_to_string(pos) - end - return false, pos - end, -}) - -minetest.register_chatcommand("dig", { - params = ",,", - description = "Dig node", - func = function(param) - local success, pos = minetest.parse_relative_pos(param) - if success then - minetest.dig_node(pos) - return true, "Node at " .. minetest.pos_to_string(pos) .. " dug" - end - return false, pos - end, -}) - -minetest.register_on_dignode(function(pos) - if minetest.settings:get_bool("replace") then - minetest.after(0, minetest.place_node, pos) - end -end) - -local etime = 0 - -minetest.register_globalstep(function(dtime) - etime = etime + dtime - if etime < 1 then return end - local player = minetest.localplayer - if not player then return end - local pos = player:get_pos() - local item = player:get_wielded_item() - local def = minetest.get_item_def(item:get_name()) - local nodes_per_tick = tonumber(minetest.settings:get("nodes_per_tick")) or 8 - if item:get_count() > 0 and def.node_placement_prediction ~= "" then - if minetest.settings:get_bool("scaffold") then - minetest.place_node(vector.add(pos, {x = 0, y = -0.6, z = 0})) - elseif minetest.settings:get_bool("highway_z") then - local z = pos.z - local positions = { - {x = 0, y = 0, z = z}, - {x = 1, y = 0, z = z}, - {x = 2, y = 1, z = z}, - {x = -2, y = 1, z = z}, - {x = -2, y = 0, z = z}, - {x = -1, y = 0, z = z}, - {x = 2, y = 0, z = z} - } - for i, p in pairs(positions) do - if i > nodes_per_tick then break end - minetest.place_node(p) - end - elseif minetest.settings:get_bool("block_water") then - local positions = minetest.find_nodes_near(pos, 5, {"mcl_core:water_source", "mcl_core:water_floating"}, true) - for i, p in pairs(positions) do - if i > nodes_per_tick then break end - minetest.place_node(p) - end - elseif minetest.settings:get_bool("autotnt") then - local positions = minetest.find_nodes_near_under_air_except(pos, 5, item:get_name(), true) - for i, p in pairs(positions) do - if i > nodes_per_tick then break end - minetest.place_node(vector.add(p, {x = 0, y = 1, z = 0})) - end - end - end -end) - -minetest.register_cheat("Scaffold", "World", "scaffold") -minetest.register_cheat("HighwayZ", "World", "highway_z") -minetest.register_cheat("BlockWater", "World", "block_water") -minetest.register_cheat("AutoTNT", "World", "autotnt") -minetest.register_cheat("Replace", "World", "replace") diff --git a/clientmods/world/settingtypes.txt b/clientmods/world/settingtypes.txt deleted file mode 100644 index c93ce260c..000000000 --- a/clientmods/world/settingtypes.txt +++ /dev/null @@ -1,5 +0,0 @@ -scaffold (Scaffold) bool false -highway_z (HighwayZ) bool false -block_water (BlockWater) bool false -autotnt (AutoTNT) bool false -replace (Replace) bool false -- cgit v1.2.3