Replace getpos() with get_pos()
[MineClone/MineClone2.git] / mods / ENTITIES / mobs_mc / pig.lua
blobcb6bf6a1d4ad8b4b1f74460924afb24f452111a9
1 --License for code WTFPL and otherwise stated in readmes
3 -- intllib
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", {
8 type = "animal",
9 runaway = true,
10 hp_min = 10,
11 hp_max = 10,
12 collisionbox = {-0.45, -0.01, -0.45, 0.45, 0.865, 0.45},
13 visual = "mesh",
14 mesh = "mobs_mc_pig.b3d",
15 textures = {{
16 "blank.png", -- baby
17 "mobs_mc_pig.png", -- base
18 "blank.png", -- saddle
19 }},
20 visual_size = {x=2.5, y=2.5},
21 makes_footstep_sound = true,
22 walk_velocity = 1,
23 run_velocity = 3,
24 drops = {
25 {name = mobs_mc.items.porkchop_raw,
26 chance = 1,
27 min = 1,
28 max = 3,},
30 water_damage = 1,
31 lava_damage = 4,
32 light_damage = 0,
33 fear_height = 4,
34 sounds = {
35 random = "mobs_pig",
36 death = "mobs_pig_angry",
37 damage = "mobs_pig",
38 distance = 16,
40 animation = {
41 stand_speed = 40,
42 walk_speed = 40,
43 run_speed = 50,
44 stand_start = 0,
45 stand_end = 0,
46 walk_start = 0,
47 walk_end = 40,
48 run_start = 0,
49 run_end = 40,
51 follow = mobs_mc.follow.pig,
52 view_range = 5,
53 do_custom = function(self, dtime)
55 -- set needed values if not already present
56 if not self.v2 then
57 self.v2 = 0
58 self.max_speed_forward = 4
59 self.max_speed_reverse = 2
60 self.accel = 4
61 self.terrain_type = 3
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}
65 end
67 -- if driver present allow control of horse
68 if self.driver then
70 mobs.drive(self, "walk", "stand", false, dtime)
72 return false -- skip rest of mob functions
73 end
75 return true
76 end,
78 on_die = function(self, pos)
80 -- drop saddle when horse is killed while riding
81 -- also detach from horse properly
82 if self.driver then
83 mobs.detach(self.driver, {x = 1, y = 0, z = 1})
84 end
86 end,
88 on_rightclick = function(self, clicker)
89 if not clicker or not clicker:is_player() then
90 return
91 end
93 local wielditem = clicker:get_wielded_item()
94 -- Feed pig
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
97 end
98 if mobs:protect(self, clicker) then return end
100 if self.child then
101 return
104 -- Put saddle on pig
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 = {
108 "blank.png", -- baby
109 "mobs_mc_pig.png", -- base
110 "mobs_mc_pig_saddle.png", -- saddle
112 self.object:set_properties({
113 textures = self.base_texture
115 self.saddle = "yes"
116 self.tamed = true
117 self.drops = {
118 {name = mobs_mc.items.porkchop_raw,
119 chance = 1,
120 min = 1,
121 max = 3,},
122 {name = mobs_mc.items.saddle,
123 chance = 1,
124 min = 1,
125 max = 1,},
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())
130 stack:take_item()
131 inv:set_stack("main", clicker:get_wield_index(), stack)
133 return
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})
141 return
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()
151 -- 26 uses
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}
159 else
160 wielditem:add_wear(2521)
162 inv:set_stack("main",self.driver:get_wield_index(), wielditem)
164 return
166 -- Capture pig
167 elseif not self.driver and clicker:get_wielded_item():get_name() ~= "" then
168 mobs:capture_mob(self, clicker, 0, 5, 60, false, nil)
170 end,
172 on_breed = function(parent1, parent2)
173 local pos = parent1.object:get_pos()
174 local child = mobs:spawn_child(pos, parent1.name)
175 if child then
176 local ent_c = child:get_luaentity()
177 ent_c.tamed = true
178 ent_c.owner = parent1.owner
179 return false
181 end,
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)
186 -- compatibility
187 mobs:alias_mob("mobs:pig", "mobs_mc:pig")
189 -- spawn eggs
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")