From 548da26ddc1e38bffbc05c5577fe9a60476f8e71 Mon Sep 17 00:00:00 2001
From: Matthew I <matttpt@gmail.com>
Date: Sat, 28 Jul 2012 15:27:31 -0400
Subject: [PATCH] Extend Lua API in order to implement chat commands

minetest.get_server_status()
minetest.request_shutdown()
EnvRef:clear_objects()
---
 doc/lua_api.txt   |  6 ++++++
 src/scriptapi.cpp | 26 ++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 46ea3a86e..dea472f3f 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -928,6 +928,10 @@ minetest.after(time, func, param)
 ^ Call function after time seconds
 ^ param is optional; to pass multiple parameters, pass a table.
 
+Server:
+minetest.request_shutdown() -> request for server shutdown
+minetest.get_server_status() -> server status string
+
 Random:
 minetest.get_connected_players() -> list of ObjectRefs
 minetest.hash_node_position({x=,y=,z=}) -> 48-bit integer
@@ -1017,6 +1021,8 @@ methods:
   ^ nodenames: eg. {"ignore", "group:tree"} or "default:dirt"
 - get_perlin(seeddiff, octaves, persistence, scale)
   ^ Return world-specific perlin noise (int(worldseed)+seeddiff)
+- clear_objects()
+  ^ clear all objects in the environments 
 Deprecated:
 - add_rat(pos): Add C++ rat object (no-op)
 - add_firefly(pos): Add C++ firefly object (no-op)
diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp
index a1975971f..a6eaabf97 100644
--- a/src/scriptapi.cpp
+++ b/src/scriptapi.cpp
@@ -3810,6 +3810,15 @@ private:
 		return 1;
 	}
 
+	// EnvRef:clear_objects()
+	// clear all objects in the environment
+	static int l_clear_objects(lua_State *L)
+	{
+		EnvRef *o = checkobject(L, 1);
+		o->m_env->clearAllObjects();
+		return 0;
+	}
+
 public:
 	EnvRef(ServerEnvironment *env):
 		m_env(env)
@@ -3891,6 +3900,7 @@ const luaL_reg EnvRef::methods[] = {
 	method(EnvRef, find_node_near),
 	method(EnvRef, find_nodes_in_area),
 	method(EnvRef, get_perlin),
+	method(EnvRef, clear_objects),
 	{0,0}
 };
 
@@ -4170,6 +4180,20 @@ static int l_log(lua_State *L)
 	return 0;
 }
 
+// request_shutdown()
+static int l_request_shutdown(lua_State *L)
+{
+	get_server(L)->requestShutdown();
+	return 0;
+}
+
+// get_server_status()
+static int l_get_server_status(lua_State *L)
+{
+	lua_pushstring(L, wide_to_narrow(get_server(L)->getStatusString()).c_str());
+	return 1;
+}
+
 // register_item_raw({lots of stuff})
 static int l_register_item_raw(lua_State *L)
 {
@@ -4911,6 +4935,8 @@ static int l_rollback_revert_actions_by(lua_State *L)
 static const struct luaL_Reg minetest_f [] = {
 	{"debug", l_debug},
 	{"log", l_log},
+	{"request_shutdown", l_request_shutdown},
+	{"get_server_status", l_get_server_status},
 	{"register_item_raw", l_register_item_raw},
 	{"register_alias_raw", l_register_alias_raw},
 	{"register_craft", l_register_craft},
-- 
2.25.1