Merge pull request 'Add a command to safely remove all mob objects' (#2098) from add_clearmombs_command into master

Reviewed-on: MineClone2/MineClone2#2098
Reviewed-by: MysticTempest <mystictempest@noreply.git.minetest.land>
This commit is contained in:
cora 2022-05-15 20:07:41 +00:00
commit 3a9812a2d7
1 changed files with 23 additions and 0 deletions

View File

@ -101,6 +101,29 @@ local mod_worlds = minetest.get_modpath("mcl_worlds") ~= nil
local mod_armor = minetest.get_modpath("mcl_armor") ~= nil local mod_armor = minetest.get_modpath("mcl_armor") ~= nil
local mod_experience = minetest.get_modpath("mcl_experience") ~= nil local mod_experience = minetest.get_modpath("mcl_experience") ~= nil
--Helper function to clear all mobs because /clearobjects removes too much
local function is_mob(o)
return o.type == "ambient" or o.type == "animal" or o.type == "monster" or o.type == "npc"
end
minetest.register_chatcommand("clearmobs",{
privs={maphack=true},
params = "<all>|<nametagged>|<range>",
description=S("Removes all spawned mobs except nametagged and tamed ones. all removes all mobs, nametagged only nametagged ones and with the range paramter all mobs in a distance of the current player are removed."),
func=function(n,param)
local p = minetest.get_player_by_name(n)
local num=tonumber(param)
for _,o in pairs(minetest.luaentities) do
if is_mob(o) then
if param == "all" or
( param == "nametagged" and o.nametag ) or
( param == "" and not o.nametag and not o.tamed ) or
( num and num > 0 and vector.distance(p:get_pos(),o.object:get_pos()) <= num ) then
o.object:remove()
end
end
end
end})
----For Water Flowing: ----For Water Flowing:
local enable_physics = function(object, luaentity, ignore_check) local enable_physics = function(object, luaentity, ignore_check)
if luaentity.physical_state == false or ignore_check == true then if luaentity.physical_state == false or ignore_check == true then