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 --dofile(minetest.get_modpath("mobs").."/api.lua")
11 --################### CREEPER
17 mobs
:register_mob("mobs_mc:creeper", {
21 collisionbox
= {-0.3, -0.01, -0.3, 0.3, 1.69, 0.3},
24 mesh
= "mobs_mc_creeper.b3d",
26 {"mobs_mc_creeper.png"},
28 visual_size
= {x
=3, y
=3},
30 attack
= "tnt_ignite",
31 death
= "mobs_mc_creeper_death",
32 damage
= "mobs_mc_creeper_hurt",
34 explode
= "tnt_explode",
37 makes_footstep_sound
= true,
40 runaway_from
= { "mobs_mc:ocelot", "mobs_mc:cat" },
41 attack_type
= "explode",
45 explosion_damage_radius
= 7,
46 explosion_timer
= 1.5,
47 allow_fuse_reset
= true,
48 stop_to_explode
= true,
50 -- Force-ignite creeper with flint and steel and explode after 1.5 seconds.
51 -- TODO: Make creeper flash after doing this as well.
52 -- TODO: Test and debug this code.
53 on_rightclick
= function(self
, clicker
)
54 if self
._forced_explosion_countdown_timer
~= nil then
57 local item
= clicker
:get_wielded_item()
58 if item
:get_name() == mobs_mc
.items
.flint_and_steel
then
59 if not minetest
.settings
:get_bool("creative_mode") then
61 local wdef
= item
:get_definition()
64 if item
:get_count() == 0 and wdef
.sound
and wdef
.sound
.breaks
then
65 minetest
.sound_play(wdef
.sound
.breaks
, {pos
= clicker
:get_pos(), gain
= 0.5})
67 clicker
:set_wielded_item(item
)
69 self
._forced_explosion_countdown_timer
= self
.explosion_timer
70 minetest
.sound_play(self
.sounds
.attack
, {pos
= self
.object
:get_pos(), gain
= 1, max_hear_distance
= 16})
73 do_custom
= function(self
, dtime
)
74 if self
._forced_explosion_countdown_timer
~= nil then
75 self
._forced_explosion_countdown_timer
= self
._forced_explosion_countdown_timer
- dtime
76 if self
._forced_explosion_countdown_timer
<= 0 then
77 mobs
:explosion(self
.object
:get_pos(), self
.explosion_radius
, 0, 1, self
.sounds
.explode
)
82 on_die
= function(self
, pos
)
83 -- Drop a random music disc
84 -- TODO: Only do this if killed by skeleton
85 if math
.random(1, 200) == 1 then
86 local r
= math
.random(1, #mobs_mc
.items
.music_discs
)
87 minetest
.add_item({x
=pos
.x
, y
=pos
.y
+1, z
=pos
.z
}, mobs_mc
.items
.music_discs
[r
])
92 {name
= mobs_mc
.items
.gunpowder
,
98 -- TODO: Only drop if killed by charged creeper
99 {name
= mobs_mc
.items
.head_creeper
,
100 chance
= 200, -- 0.5%
129 mobs
:spawn_specific("mobs_mc:creeper", mobs_mc
.spawn
.solid
, {"air"}, 0, 7, 20, 16500, 2, mobs_mc
.spawn_height
.overworld_min
, mobs_mc
.spawn_height
.overworld_max
)
132 mobs
:alias_mob("mobs:creeper", "mobs_mc:creeper")
135 mobs
:register_egg("mobs_mc:creeper", S("Creeper"), "mobs_mc_spawn_icon_creeper.png", 0)
137 if minetest
.settings
:get_bool("log_mods") then
138 minetest
.log("action", "MC Creeper loaded")