84 lines
2.7 KiB
Lua
84 lines
2.7 KiB
Lua
local modname = minetest.get_current_modname()
|
|
local S = minetest.get_translator(modname)
|
|
|
|
local mod_target = minetest.get_modpath("mcl_target")
|
|
local how_to_throw = S("Use the punch key to throw.")
|
|
|
|
-- Egg
|
|
minetest.register_craftitem("mcl_throwing:egg", {
|
|
description = S("Egg"),
|
|
_tt_help = S("Throwable").."\n"..S("Chance to hatch chicks when broken"),
|
|
_doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."),
|
|
_doc_items_usagehelp = how_to_throw,
|
|
inventory_image = "mcl_throwing_egg.png",
|
|
stack_max = 64,
|
|
on_use = mcl_throwing.get_player_throw_function("mcl_throwing:egg_entity"),
|
|
_on_dispense = mcl_throwing.dispense_function,
|
|
groups = { craftitem = 1 },
|
|
})
|
|
|
|
local function egg_spawn_chicks(pos)
|
|
-- 1/8 chance to spawn a chick
|
|
if math.random(1,8) ~= 1 then return end
|
|
|
|
mcl_mobs.spawn_child(pos, "mobs_mc:chicken")
|
|
|
|
-- BONUS ROUND: 1/32 chance to spawn 3 additional chicks
|
|
if math.random(1,32) ~= 1 then return end
|
|
|
|
mcl_mobs.spawn_child(vector.offset(pos, 0.7, 0, 0 ), "mobs_mc:chicken")
|
|
mcl_mobs.spawn_child(vector.offset(pos, -0.7, 0, -0.7), "mobs_mc:chicken")
|
|
mcl_mobs.spawn_child(vector.offset(pos, -0.7, 0, 0.7), "mobs_mc:chicken")
|
|
end
|
|
|
|
vl_projectile.register("mcl_throwing:egg_entity",{
|
|
physical = false,
|
|
timer=0,
|
|
textures = {"mcl_throwing_egg.png"},
|
|
visual_size = {x=0.45, y=0.45},
|
|
collisionbox = {0,0,0,0,0,0},
|
|
pointable = false,
|
|
|
|
get_staticdata = mcl_throwing.get_staticdata,
|
|
on_activate = mcl_throwing.on_activate,
|
|
|
|
on_step = vl_projectile.update_projectile,
|
|
_lastpos={},
|
|
_thrower = nil,
|
|
_vl_projectile = {
|
|
behaviors = {
|
|
vl_projectile.collides_with_solids,
|
|
vl_projectile.collides_with_entities,
|
|
},
|
|
allow_punching = function(self, _, _, object)
|
|
if self._owner == mcl_util.get_entity_id(object) then
|
|
return self.timer > 1
|
|
end
|
|
|
|
local le = object:get_luaentity()
|
|
return le and (le.is_mob or le._hittable_by_projectile) or object:is_player()
|
|
end,
|
|
on_collide_with_solid = function(self, pos, node)
|
|
if mod_target and node.name == "mcl_target:target_off" then
|
|
mcl_target.hit(vector.round(pos), 0.4) --4 redstone ticks
|
|
end
|
|
|
|
local vel = self.object:get_velocity()
|
|
pos = vector.round(pos + vector.normalize(vel) * -0.35)
|
|
|
|
egg_spawn_chicks(pos)
|
|
end,
|
|
on_collide_with_entity = function(self, pos, obj)
|
|
local vel = self.object:get_velocity()
|
|
pos = vector.round(pos + vector.normalize(vel) * -0.35)
|
|
|
|
egg_spawn_chicks(pos)
|
|
end,
|
|
sounds = {
|
|
on_collision = {"mcl_throwing_egg_impact", {max_hear_distance=10, gain=0.5}, true}
|
|
},
|
|
},
|
|
})
|
|
mcl_throwing.register_throwable_object("mcl_throwing:egg", "mcl_throwing:egg_entity", 22)
|
|
|