mirror of
https://github.com/ElCeejo/creatura.git
synced 2025-04-30 13:51:41 -04:00
Open modification of spawn item def, Add anti-spam
This commit is contained in:
parent
fe30cf39e1
commit
4df1cfe618
1 changed files with 31 additions and 17 deletions
26
spawning.lua
26
spawning.lua
|
@ -26,6 +26,10 @@ local function vec_raise(v, n)
|
||||||
return {x = v.x, y = v.y + n, z = v.z}
|
return {x = v.x, y = v.y + n, z = v.z}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local vec_sub = vector.subtract
|
||||||
|
local vec_add = vector.add
|
||||||
|
|
||||||
|
|
||||||
-- Registration --
|
-- Registration --
|
||||||
|
|
||||||
local creative = minetest.settings:get_bool("creative_mode")
|
local creative = minetest.settings:get_bool("creative_mode")
|
||||||
|
@ -77,25 +81,35 @@ function creatura.register_spawn_item(name, def)
|
||||||
end
|
end
|
||||||
local mod_name = name:split(":")[1]
|
local mod_name = name:split(":")[1]
|
||||||
local mob_name = name:split(":")[2]
|
local mob_name = name:split(":")[2]
|
||||||
minetest.register_craftitem(mod_name .. ":spawn_" .. mob_name, {
|
def.description = def.description or "Spawn " .. format_name(name)
|
||||||
description = def.description or "Spawn " .. format_name(name),
|
def.inventory_image = def.inventory_image or inventory_image
|
||||||
inventory_image = def.inventory_image or inventory_image,
|
def.on_place = function(itemstack, player, pointed_thing)
|
||||||
on_place = function(itemstack, player, pointed_thing)
|
|
||||||
local mobdef = minetest.registered_entities[name]
|
local mobdef = minetest.registered_entities[name]
|
||||||
local spawn_offset = abs(mobdef.collisionbox[2])
|
local spawn_offset = abs(mobdef.collisionbox[2])
|
||||||
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
|
local pos = minetest.get_pointed_thing_position(pointed_thing, true)
|
||||||
pos.y = (pos.y - 0.49) + spawn_offset
|
pos.y = (pos.y - 0.49) + spawn_offset
|
||||||
|
if def.antispam then
|
||||||
|
local objs = minetest.get_objects_in_area(vec_sub(pos, 0.51), vec_add(pos, 0.51))
|
||||||
|
for _, obj in ipairs(objs) do
|
||||||
|
if obj
|
||||||
|
and obj:get_luaentity()
|
||||||
|
and obj:get_luaentity().name == name then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
local object = minetest.add_entity(pos, name)
|
local object = minetest.add_entity(pos, name)
|
||||||
if object then
|
if object then
|
||||||
object:set_yaw(random(0, pi * 2))
|
object:set_yaw(random(0, pi * 2))
|
||||||
object:get_luaentity().last_yaw = object:get_yaw()
|
object:get_luaentity().last_yaw = object:get_yaw()
|
||||||
end
|
end
|
||||||
if not minetest.is_creative_enabled(player:get_player_name()) then
|
if not minetest.is_creative_enabled(player:get_player_name())
|
||||||
|
or def.consume_in_creative then
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
minetest.register_craftitem(mod_name .. ":spawn_" .. mob_name, def)
|
||||||
end
|
end
|
||||||
|
|
||||||
function creatura.register_mob_spawn(name, def)
|
function creatura.register_mob_spawn(name, def)
|
||||||
|
|
Loading…
Add table
Reference in a new issue