From 21d5ab88a56bdb78dbafa9ba5bcf22a50c501489 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 21:50:54 +0200 Subject: [PATCH 1/4] comment out natural villager spawning --- mods/ENTITIES/mobs_mc/villager.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 429d7c743..6502e3a73 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -1391,7 +1391,8 @@ mcl_mobs:register_mob("mobs_mc:villager", { }) - +--[[ +Villager spawning in mcl_villages mcl_mobs:spawn_specific( "mobs_mc:villager", "overworld", @@ -1421,6 +1422,6 @@ minetest.LIGHT_MAX+1, 4, mobs_mc.water_level+1, mcl_vars.mg_overworld_max) - +--]] -- spawn eggs mcl_mobs:register_egg("mobs_mc:villager", S("Villager"), "mobs_mc_spawn_icon_villager.png", 0) From dd5e9afbd930f76354077703fdf29afd10daccda Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 21:51:42 +0200 Subject: [PATCH 2/4] villagers only get a job when they touch jobsite --- mods/ENTITIES/mobs_mc/villager.lua | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 6502e3a73..86d84044a 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -631,10 +631,8 @@ end local function get_a_job(self) local p = self.object:get_pos() - local nn = minetest.find_nodes_in_area(vector.offset(p,-8,-8,-8),vector.offset(p,8,8,8),jobsites) - for _,n in pairs(nn) do - if n and employ(self,n) then return true end - end + local n = minetest.find_node_near(p,1,jobsites) + if n and employ(self,n) then return true end if self.state ~= "gowp" then look_for_job(self) end end From 672b9dbedf4066fca531ba1730b0ef288a2dbee7 Mon Sep 17 00:00:00 2001 From: cora Date: Sun, 3 Jul 2022 21:52:15 +0200 Subject: [PATCH 3/4] make pathfinding to jobsite more smooth --- mods/ENTITIES/mcl_mobs/api.lua | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index 8c9d8216e..77f4193dd 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -2283,6 +2283,9 @@ end local function go_to_pos(entity,b) if not entity then return end local s=entity.object:get_pos() + if not b then + --self.state = "stand" + return end if vector.distance(b,s) < 1 then --set_velocity(entity,0) return true @@ -2318,21 +2321,23 @@ local gowp_etime = 0 local function check_gowp(self,dtime) gowp_etime = gowp_etime + dtime - if gowp_etime < 1 then return end + if gowp_etime < 0.2 then return end gowp_etime = 0 local p = self.object:get_pos() if not p or not self._target then return end - if vector.distance(p,self._target) < 2 or ( self.waypoints and #self.waypoints == 0 ) then + if vector.distance(p,self._target) < 1 then self.waypoints = nil self._target = nil self.current_target = nil - self.state = "walk" + self.state = "stand" if self.callback_arrived then return self.callback_arrived(self) end return true end - if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 1.5 ) then + if self.waypoints and ( not self.current_target or vector.distance(p,self.current_target) < 2 ) then self.current_target = table.remove(self.waypoints, 1) --minetest.log("nextwp:".. tostring(self.current_target) ) + go_to_pos(self,self.current_target) + return elseif self.current_target then go_to_pos(self,self.current_target) end @@ -2922,6 +2927,7 @@ local gopath_last = os.time() function mcl_mobs:gopath(self,target,callback_arrived) if os.time() - gopath_last < 15 then return end gopath_last = os.time() + --minetest.log("gowp") local p = self.object:get_pos() local t = vector.offset(target,0,1,0) local wp = minetest.find_path(p,t,150,1,4) @@ -2941,6 +2947,7 @@ function mcl_mobs:gopath(self,target,callback_arrived) if wp and #wp > 0 then self._target = t self.callback_arrived = callback_arrived + table.remove(wp,1) self.waypoints = wp self.state = "gowp" return true @@ -2948,7 +2955,7 @@ function mcl_mobs:gopath(self,target,callback_arrived) self.state = "walk" self.waypoints = nil self.current_target = nil - --minetest.log("no path found") + -- minetest.log("no path found") end end From 31289f5686262d29606c9867e3c4ea1f8e886993 Mon Sep 17 00:00:00 2001 From: cora Date: Mon, 4 Jul 2022 00:15:50 +0200 Subject: [PATCH 4/4] villagers that haven't traded loose job on js gone --- mods/ENTITIES/mobs_mc/villager.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 86d84044a..e447192c3 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -636,6 +636,16 @@ local function get_a_job(self) if self.state ~= "gowp" then look_for_job(self) end end +local function check_jobsite(self) + if self._traded or not self._jobsite then return end + local n = mcl_vars.get_node(self._jobsite) + local m = minetest.get_meta(self._jobsite) + if m:get_string("villager") ~= self._id then + self._profession = "unemployed" + set_textures(self) + end +end + local function update_max_tradenum(self) if not self._trades then return @@ -654,6 +664,7 @@ end local function init_trades(self, inv) local profession = professions[self._profession] local trade_tiers = profession.trades + self._traded = true if trade_tiers == nil then -- Empty trades self._trades = false @@ -1355,6 +1366,8 @@ mcl_mobs:register_mob("mobs_mc:villager", { end if self._profession == "unemployed" then get_a_job(self) + else + check_jobsite(self) end end end,