1 --License for code WTFPL and otherwise stated in readmes
4 local MP
= minetest
.get_modpath(minetest
.get_current_modname())
5 local S
, NS
= dofile(MP
.."/intllib.lua")
7 mobs
:register_mob("mobs_mc:pig", {
12 collisionbox
= {-0.45, -0.01, -0.45, 0.45, 0.865, 0.45},
14 mesh
= "mobs_mc_pig.b3d",
17 "mobs_mc_pig.png", -- base
18 "blank.png", -- saddle
20 visual_size
= {x
=2.5, y
=2.5},
21 makes_footstep_sound
= true,
25 {name
= mobs_mc
.items
.porkchop_raw
,
36 death
= "mobs_pig_angry",
51 follow
= mobs_mc
.follow
.pig
,
53 do_custom
= function(self
, dtime
)
55 -- set needed values if not already present
58 self
.max_speed_forward
= 4
59 self
.max_speed_reverse
= 2
62 self
.driver_attach_at
= {x
= 0.0, y
= 6.75, z
= -1.5}
63 self
.driver_eye_offset
= {x
= 0, y
= 3, z
= 0}
64 self
.driver_scale
= {x
= 1/self
.visual_size
.x
, y
= 1/self
.visual_size
.y
}
67 -- if driver present allow control of horse
70 mobs
.drive(self
, "walk", "stand", false, dtime
)
72 return false -- skip rest of mob functions
78 on_die
= function(self
, pos
)
80 -- drop saddle when horse is killed while riding
81 -- also detach from horse properly
83 mobs
.detach(self
.driver
, {x
= 1, y
= 0, z
= 1})
88 on_rightclick
= function(self
, clicker
)
89 if not clicker
or not clicker
:is_player() then
93 local wielditem
= clicker
:get_wielded_item()
95 if wielditem
:get_name() ~= mobs_mc
.items
.carrot_on_a_stick
then
96 if mobs
:feed_tame(self
, clicker
, 1, true, true) then return end
98 if mobs
:protect(self
, clicker
) then return end
105 local item
= clicker
:get_wielded_item()
106 if item
:get_name() == mobs_mc
.items
.saddle
and self
.saddle
~= "yes" then
107 self
.base_texture
= {
109 "mobs_mc_pig.png", -- base
110 "mobs_mc_pig_saddle.png", -- saddle
112 self
.object
:set_properties({
113 textures
= self
.base_texture
118 {name
= mobs_mc
.items
.porkchop_raw
,
122 {name
= mobs_mc
.items
.saddle
,
127 if not minetest
.settings
:get_bool("creative_mode") then
128 local inv
= clicker
:get_inventory()
129 local stack
= inv
:get_stack("main", clicker
:get_wield_index())
131 inv
:set_stack("main", clicker
:get_wield_index(), stack
)
136 -- Mount or detach player
137 local name
= clicker
:get_player_name()
138 if self
.driver
and clicker
== self
.driver
then
139 -- Detach if already attached
140 mobs
.detach(clicker
, {x
=1, y
=0, z
=0})
143 elseif not self
.driver
and self
.saddle
== "yes" and wielditem
:get_name() == mobs_mc
.items
.carrot_on_a_stick
then
144 -- Ride pig if it has a saddle and player uses a carrot on a stick
146 mobs
.attach(self
, clicker
)
148 if not minetest
.settings
:get_bool("creative_mode") then
150 local inv
= self
.driver
:get_inventory()
152 if wielditem
:get_wear() > 63000 then
153 -- Break carrot on a stick
154 local def
= wielditem
:get_definition()
155 if def
.sounds
and def
.sounds
.breaks
then
156 minetest
.sound_play(def
.sounds
.breaks
, {pos
= clicker
:get_pos(), max_hear_distance
= 8, gain
= 0.5})
158 wielditem
= {name
= mobs_mc
.items
.fishing_rod
, count
= 1}
160 wielditem
:add_wear(2521)
162 inv
:set_stack("main",self
.driver
:get_wield_index(), wielditem
)
167 elseif not self
.driver
and clicker
:get_wielded_item():get_name() ~= "" then
168 mobs
:capture_mob(self
, clicker
, 0, 5, 60, false, nil)
172 on_breed
= function(parent1
, parent2
)
173 local pos
= parent1
.object
:get_pos()
174 local child
= mobs
:spawn_child(pos
, parent1
.name
)
176 local ent_c
= child
:get_luaentity()
178 ent_c
.owner
= parent1
.owner
184 mobs
:spawn_specific("mobs_mc:pig", mobs_mc
.spawn
.grassland
, {"air"}, 9, minetest
.LIGHT_MAX
+1, 30, 15000, 30, mobs_mc
.spawn_height
.overworld_min
, mobs_mc
.spawn_height
.overworld_max
)
187 mobs
:alias_mob("mobs:pig", "mobs_mc:pig")
190 mobs
:register_egg("mobs_mc:pig", S("Pig"), "mobs_mc_spawn_icon_pig.png", 0)
193 if minetest
.settings
:get_bool("log_mods") then
194 minetest
.log("action", "MC Pig loaded")