--- /dev/null
+local function tp_func(y, goal)
+ return function()
+ local player = minetest.localplayer
+ local pos = player:get_pos()
+
+ if pos.y < y then
+ return false, "Can't teleport to " .. goal .. " from this location."
+ end
+
+ pos.y = y
+ player:set_pos(pos)
+ return true
+ end
+end
+
+local function disconnect_wrapper(func)
+ return function()
+ local success, msg = func()
+ if success then
+ minetest.after(0, minetest.disconnect)
+ end
+ return success, msg
+ end
+end
+
+local function menu_wrapper(func)
+ return function()
+ local _, msg = func()
+ if msg then
+ minetest.display_chat_message(msg)
+ end
+ end
+end
+
+local end_func = tp_func(-27000, "End")
+local nether_func = tp_func(-29000, "Nether")
+local spawn_func = disconnect_wrapper(tp_func(-32000, "Spawn"))
+
+minetest.register_chatcommand("end", {
+ description = "Teleport to the end (works in the overworld only). This may drop you above the void, so make sure you have Fly or Jetpack enabled.",
+ func = end_func,
+})
+
+minetest.register_chatcommand("nether", {
+ description = "Teleport to the nether (works in the overworld or the end). This may move you into solid blocks, so make sure you have a pickaxe ready or Noclip enabled.",
+ func = nether_func,
+})
+
+minetest.register_chatcommand("spawn", {
+ description = "Teleport to your spawn location. This will disconnect you, you have to reconnect afterwards.",
+ func = spawn_func,
+})
+
+minetest.register_cheat("End", "Exploit", menu_wrapper(end_func))
+minetest.register_cheat("Nether", "Exploit", menu_wrapper(nether_func))
+minetest.register_cheat("Spawn", "Exploit", menu_wrapper(spawn_func))