Name tags now name all mobs (except ender dragon)

This commit is contained in:
Wuzzy 2018-05-30 11:34:17 +02:00
parent d0cdb0f390
commit 69b3e19c1b
4 changed files with 49 additions and 25 deletions

View File

@ -2958,6 +2958,42 @@ end
mobs.spawning_mobs = {} mobs.spawning_mobs = {}
-- Code to execute before custom on_rightclick handling
local on_rightclick_prefix = function(self, clicker)
local item = clicker:get_wielded_item()
-- Name mob with nametag
if not self.ignores_nametag and item:get_name() == "mobs:nametag" then
local tag = item:get_meta():get_string("name")
if tag ~= "" then
if string.len(tag) > MAX_MOB_NAME_LENGTH then
tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH)
end
self.nametag = tag
update_tag(self)
if not mobs.is_creative(name) then
item:take_item()
player:set_wielded_item(item)
end
return true
end
end
return false
end
local create_mob_on_rightclick = function(on_rightclick)
return function(self, clicker)
local stop = on_rightclick_prefix(self, clicker)
if (not stop) and (on_rightclick) then
on_rightclick(self, clicker)
end
end
end
-- register mob entity -- register mob entity
function mobs:register_mob(name, def) function mobs:register_mob(name, def)
@ -3000,7 +3036,7 @@ minetest.register_entity(name, {
fall_speed = def.fall_speed or -10, -- must be lower than -2 (default: -10) fall_speed = def.fall_speed or -10, -- must be lower than -2 (default: -10)
drops = def.drops or {}, drops = def.drops or {},
armor = def.armor or 100, armor = def.armor or 100,
on_rightclick = def.on_rightclick, on_rightclick = create_mob_on_rightclick(def.on_rightclick),
arrow = def.arrow, arrow = def.arrow,
shoot_interval = def.shoot_interval, shoot_interval = def.shoot_interval,
sounds = def.sounds or {}, sounds = def.sounds or {},
@ -3059,6 +3095,9 @@ minetest.register_entity(name, {
facing_fence = false, facing_fence = false,
_cmi_is_mob = true, _cmi_is_mob = true,
-- MCL2 extensions
ignores_nametag = def.ignores_nametag or false,
on_spawn = def.on_spawn, on_spawn = def.on_spawn,
on_blast = def.on_blast or do_tnt, on_blast = def.on_blast or do_tnt,
@ -3853,28 +3892,6 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
return true return true
end end
local item = clicker:get_wielded_item()
-- Name mob with nametag
if item:get_name() == "mobs:nametag" then
local tag = item:get_meta():get_string("name")
if tag ~= "" then
if string.len(tag) > MAX_MOB_NAME_LENGTH then
tag = string.sub(tag, 1, MAX_MOB_NAME_LENGTH)
end
self.nametag = tag
update_tag(self)
if not mobs.is_creative(name) then
item:take_item()
player:set_wielded_item(item)
end
end
end
return false return false
end end

View File

@ -205,6 +205,11 @@ functions needed for the mob to work properly which contains the following:
older mobs. older mobs.
MineClone 2 extensions:
'ignores_nametag' if true, mob cannot be named by nametag
Node Replacement Node Replacement
---------------- ----------------

View File

@ -4,8 +4,8 @@ local S = mobs.intllib
-- name tag -- name tag
minetest.register_craftitem("mobs:nametag", { minetest.register_craftitem("mobs:nametag", {
description = S("Name Tag"), description = S("Name Tag"),
_doc_items_longdesc = S("A name tag is an item to name an animal."), _doc_items_longdesc = S("A name tag is an item to name a mob."),
_doc_items_usagehelp = S("Before you use the name tag, you need to set a name at an anvil. Now you can use the name tag to name an animal with a rightclick. This uses up the name tag."), _doc_items_usagehelp = S("Before you use the name tag, you need to set a name at an anvil. Now you can use the name tag to name a mob with a rightclick. This uses up the name tag."),
inventory_image = "mobs_nametag.png", inventory_image = "mobs_nametag.png",
wield_image = "mobs_nametag.png", wield_image = "mobs_nametag.png",
stack_max = 64, stack_max = 64,

View File

@ -93,6 +93,8 @@ mobs:register_mob("mobs_mc:enderdragon", {
run_start = 0, run_end = 20, run_start = 0, run_end = 20,
}, },
blood_amount = 0, blood_amount = 0,
ignores_nametag = true,
}) })