1 minetest.register_chatcommand("hotbar", {
3 description = "Set hotbar size",
4 func = function(name, param)
5 local player = minetest.get_player_by_name(name)
7 return false, "No player."
9 local size = tonumber(param)
11 return false, "Missing or incorrect size parameter!"
13 local ok = player:hud_set_hotbar_itemcount(size)
17 return false, "Invalid item count!"
22 minetest.register_chatcommand("hp", {
24 description = "Set your health",
25 func = function(name, param)
26 local player = minetest.get_player_by_name(name)
28 return false, "No player."
30 local hp = tonumber(param)
32 return false, "Missing or incorrect hp parameter!"
39 minetest.register_on_joinplayer(function(player)
40 player:set_properties({zoom_fov = 15})
43 minetest.register_chatcommand("zoomfov", {
45 description = "Set or display your zoom_fov",
46 func = function(name, param)
47 local player = minetest.get_player_by_name(name)
49 return false, "No player."
52 local fov = player:get_properties().zoom_fov
53 return true, "zoom_fov = "..tostring(fov)
55 local fov = tonumber(param)
57 return false, "Missing or incorrect zoom_fov parameter!"
59 player:set_properties({zoom_fov = fov})
60 fov = player:get_properties().zoom_fov
61 return true, "zoom_fov = "..tostring(fov)
65 local s_infplace = minetest.settings:get("devtest_infplace")
66 if s_infplace == "true" then
68 elseif s_infplace == "false" then
71 infplace = minetest.is_creative_enabled("")
74 minetest.register_chatcommand("infplace", {
76 description = "Toggle infinite node placement",
77 func = function(name, param)
78 infplace = not infplace
80 minetest.chat_send_all("Infinite node placement enabled!")
81 minetest.log("action", "Infinite node placement enabled")
83 minetest.chat_send_all("Infinite node placement disabled!")
84 minetest.log("action", "Infinite node placement disabled")
90 minetest.register_chatcommand("detach", {
91 params = "[<radius>]",
92 description = "Detach all objects nearby",
93 func = function(name, param)
94 local radius = tonumber(param)
95 if type(radius) ~= "number" then
101 local player = minetest.get_player_by_name(name)
103 return false, "No player."
105 local objs = minetest.get_objects_inside_radius(player:get_pos(), radius)
108 if objs[o]:get_attach() then
113 return true, string.format("%d object(s) detached.", num)
117 minetest.register_chatcommand("use_tool", {
118 params = "(dig <group> <leveldiff>) | (hit <damage_group> <time_from_last_punch>) [<uses>]",
119 description = "Apply tool wear a number of times, as if it were used for digging",
120 func = function(name, param)
121 local player = minetest.get_player_by_name(name)
123 return false, "No player."
125 local mode, group, level, uses = string.match(param, "([a-z]+) ([a-z0-9]+) (-?%d+) (%d+)")
127 mode, group, level = string.match(param, "([a-z]+) ([a-z0-9]+) (-?%d+)")
130 if not mode or not group or not level then
133 if mode ~= "dig" and mode ~= "hit" then
136 local tool = player:get_wielded_item()
137 local caps = tool:get_tool_capabilities()
138 if not caps or tool:get_count() == 0 then
139 return false, "No tool in hand."
141 local actual_uses = 0
143 local wear = tool:get_wear()
145 if mode == "dig" then
146 dp = minetest.get_dig_params({[group]=3, level=level}, caps, wear)
148 dp = minetest.get_hit_params({[group]=100}, caps, level, wear)
150 tool:add_wear(dp.wear)
151 actual_uses = actual_uses + 1
152 if tool:get_count() == 0 then
156 player:set_wielded_item(tool)
157 if tool:get_count() == 0 then
158 return true, string.format("Tool used %d time(s). "..
159 "The tool broke after %d use(s).", uses, actual_uses)
161 local wear = tool:get_wear()
162 return true, string.format("Tool used %d time(s). "..
163 "Final wear=%d", uses, wear)
170 -- Use this to test waypoint capabilities
171 minetest.register_chatcommand("test_waypoints", {
172 params = "[change_immediate]",
173 description = "tests waypoint capabilities",
174 func = function(name, params)
175 local player = minetest.get_player_by_name(name)
176 local regular = player:hud_add {
177 hud_elem_type = "waypoint",
178 name = "regular waypoint",
181 world_pos = vector.add(player:get_pos(), {x = 0, y = 1.5, z = 0})
183 local reduced_precision = player:hud_add {
184 hud_elem_type = "waypoint",
185 name = "better waypoint",
186 text = "m (0.5 steps, precision = 2)",
189 world_pos = vector.add(player:get_pos(), {x = 0, y = 1, z = 0})
191 local function change()
193 player:hud_change(regular, "world_pos", vector.add(player:get_pos(), {x = 0, y = 3, z = 0}))
195 if reduced_precision then
196 player:hud_change(reduced_precision, "precision", 2)
203 minetest.after(0.5, change)
205 regular = regular or "error"
206 reduced_precision = reduced_precision or "error"
207 local hidden_distance = player:hud_add {
208 hud_elem_type = "waypoint",
209 name = "waypoint with hidden distance",
210 text = "this text is hidden as well (precision = 0)",
213 world_pos = vector.add(player:get_pos(), {x = 0, y = 0.5, z = 0})
215 local image_waypoint = player:hud_add {
216 hud_elem_type = "image_waypoint",
217 text = "wieldhand.png",
218 world_pos = player:get_pos(),
219 scale = {x = 10, y = 10},
220 offset = {x = 0, y = -32}
222 minetest.chat_send_player(name, "Waypoint IDs: regular: " .. regular .. ", reduced precision: " .. reduced_precision ..
223 ", hidden distance: " .. hidden_distance .. ", image waypoint: " .. image_waypoint)
227 -- Unlimited node placement
228 minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
229 if placer and placer:is_player() then
234 -- Don't pick up if the item is already in the inventory
235 local old_handle_node_drops = minetest.handle_node_drops
236 function minetest.handle_node_drops(pos, drops, digger)
237 if not digger or not digger:is_player() or not infplace then
238 return old_handle_node_drops(pos, drops, digger)
240 local inv = digger:get_inventory()
242 for _, item in ipairs(drops) do
243 if not inv:contains_item("main", item, true) then
244 inv:add_item("main", item)
250 minetest.register_chatcommand("set_displayed_itemcount", {
251 params = "(-s \"<string>\" [-c <color>]) | -a <alignment_num>",
252 description = "Set the displayed itemcount of the wielded item",
253 func = function(name, param)
254 local player = minetest.get_player_by_name(name)
255 local item = player:get_wielded_item()
256 local meta = item:get_meta()
257 local flag1 = param:sub(1, 2)
258 if flag1 == "-s" then
259 if param:sub(3, 4) ~= " \"" then
260 return false, "Error: Space and string with \"s expected after -s."
262 local se = param:find("\"", 5, true)
264 return false, "Error: String with two \"s expected after -s."
266 local s = param:sub(5, se - 1)
267 if param:sub(se + 1, se + 4) == " -c " then
268 s = minetest.colorize(param:sub(se + 5), s)
270 meta:set_string("count_meta", s)
271 elseif flag1 == "-a" then
272 local num = tonumber(param:sub(4))
274 return false, "Error: Invalid number: "..param:sub(4)
276 meta:set_int("count_alignment", num)
280 player:set_wielded_item(item)
281 return true, "Displayed itemcount set."
285 minetest.register_chatcommand("dump_item", {
287 description = "Prints a dump of the wielded item in table form",
288 func = function(name, param)
289 local player = minetest.get_player_by_name(name)
290 local item = player:get_wielded_item()
291 local str = dump(item:to_table())
298 minetest.register_on_joinplayer(function (player)
299 player:set_lighting({shadows={intensity = 0.33}})
302 core.register_chatcommand("set_shadow", {
303 params = "<shadow_intensity>",
304 description = "Set shadow parameters of current player.",
305 func = function(player_name, param)
306 local shadow_intensity = tonumber(param)
307 minetest.get_player_by_name(player_name):set_lighting({shadows = { intensity = shadow_intensity} })