Fix buggy sheep grass eating microtask

This commit is contained in:
Wuzzy 2023-11-06 23:23:31 +01:00
parent bef513bedd
commit 19e7d45c8a

View File

@ -15,40 +15,40 @@ local dirt_cover = {
["rp_default:dirt_with_grass"] = "rp_default:dirt", ["rp_default:dirt_with_grass"] = "rp_default:dirt",
} }
microtask_eat_grass = function(replace_rate, replace_what, replace_with) microtask_eat_grass = function()
return rp_mobs.create_microtask({ return rp_mobs.create_microtask({
label = "Eat blocks", label = "Eat blocks",
singlestep = true, singlestep = true,
on_step = function(self, mob, dtime) on_step = function(self, mob, dtime)
local mobpos = mob.object:get_pos() local mobpos = mob.object:get_pos()
local nr = minetest.get_node(pos) local plantpos = {x=mobpos.x, y=mobpos.y-1, z=mobpos.z}
-- Check node above local groundpos = {x=mobpos.x, y=mobpos.y-2, z=mobpos.z}
local above = {x=pos.x,y=pos.y+1,z=pos.z} local np = minetest.get_node(plantpos)
local na = minetest.get_node(above) local ng = minetest.get_node(groundpos)
-- Eat grass -- Eat grass
if na.name == "air" then if np.name == "air" then
-- Eat grass from dirt node -- Eat grass from dirt node
if dirt_cover[nr.name] then if dirt_cover[ng.name] then
minetest.set_node(pos, {name = dirt_cover[nr.name]}) minetest.set_node(groundpos, {name = dirt_cover[ng.name]})
else
return
end end
elseif top_grass[na.name] then elseif top_grass[np.name] then
-- If grass plant on top, eat it first -- If grass plant on top, eat it first
minetest.set_node(above, {name = top_grass[na.name]}) minetest.set_node(plantpos, {name = top_grass[np.name]})
else else
return return
end end
-- Regrow wool -- Regrow wool
if rp_mobs.feed_tame_breed(mob, "rp_farming:wheat", 8, false, false) then if mob._custom_state.shorn then
if self._custom_state.shorn then mob.object:set_properties(
self.object:set_properties(
{ {
textures = {"mobs_sheep.png"}, textures = {"mobs_sheep.png"},
}) })
self._custom_state.shorn = false mob._custom_state.shorn = false
end
end end
end, end,
}) })
@ -60,8 +60,10 @@ rp_mobs.register_mob("rp_mobs_mobs:sheep", {
drops = {"rp_mobs_mobs:meat_raw", "rp_mobs_mobs:wool"}, drops = {"rp_mobs_mobs:meat_raw", "rp_mobs_mobs:wool"},
decider = function(self) decider = function(self)
local task = rp_mobs.create_task({label="eat grass"}) local task = rp_mobs.create_task({label="eat grass"})
local mtask = microtask_eat_grass rp_mobs.add_microtask_to_task(self, rp_mobs.microtasks.sleep(3.0), task)
local mtask = microtask_eat_grass()
rp_mobs.add_microtask_to_task(self, mtask, task) rp_mobs.add_microtask_to_task(self, mtask, task)
rp_mobs.add_task(self, task)
end, end,
default_sounds = { default_sounds = {
death = "mobs_sheep", death = "mobs_sheep",