From e6b65af3b458dae8bae30642f1a7105a7b9166fc Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 19 May 2022 05:43:37 +0200 Subject: [PATCH] add mobs item pickup --- mods/ENTITIES/mcl_mobs/api.lua | 21 +++++++++++++++++++-- mods/ENTITIES/mobs_mc/villager.lua | 4 ++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index bbcbefb0a..c5d5916ac 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2935,6 +2935,20 @@ function mobs:gopath(self,target,callback_arrived) end end +local function check_item_pickup(self) + if self.pick_up and #self.pick_up > 0 then + for _,o in pairs(minetest.get_objects_inside_radius(self.object:get_pos(),2)) do + local l=o:get_luaentity() + if l and l.name == "__builtin:item" then + for k,v in pairs(self.pick_up) do + if self.on_pick_up and l.itemstring:find(v) then + if self.on_pick_up(self,l) == nil then o:remove() end + end + end + end + end + end +end -- falling and fall damage -- returns true if mob died @@ -3536,7 +3550,7 @@ end -- main mob function local mob_step = function(self, dtime) - + check_item_pickup(self) if not self.fire_resistant then mcl_burning.tick(self.object, dtime, self) end @@ -3964,7 +3978,8 @@ minetest.register_entity(name, { child = def.child or false, texture_mods = {}, shoot_arrow = def.shoot_arrow, - sounds_child = def.sounds_child, + sounds_child = def.sounds_child, + pick_up = def.pick_up, explosion_strength = def.explosion_strength, suffocation_timer = 0, follow_velocity = def.follow_velocity or 2.4, @@ -3988,6 +4003,8 @@ minetest.register_entity(name, { on_grown = def.on_grown, + on_pick_up = def.on_pick_up, + on_detach_child = mob_detach_child, on_activate = function(self, staticdata, dtime) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index e96cd99b4..463a62d80 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1239,6 +1239,10 @@ mobs:register_mob("mobs_mc:villager", { _id = nil, _profession = "unemployed", look_at_player = true, + pick_up = {"mcl_farming:bread"}, + on_pick_up = function(self,itementity) + minetest.log("picked up "..itementity.itemstring) + end, on_rightclick = function(self, clicker) local trg=vector.new(0,9,0) if self._jobsite then