2024-05-22 22:47:25 +02:00
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 " ,
2024-09-24 02:40:11 +02:00
stack_max = 64 ,
2024-05-22 22:47:25 +02:00
on_use = mcl_throwing.get_player_throw_function ( " mcl_throwing:egg_entity " ) ,
_on_dispense = mcl_throwing.dispense_function ,
groups = { craftitem = 1 } ,
} )
2024-09-22 14:04:20 +02:00
local function egg_spawn_chicks ( pos )
-- 1/8 chance to spawn a chick
if math.random ( 1 , 8 ) ~= 1 then return end
pos.y = math.ceil ( pos.y )
if not mcl_mobs.spawn_child ( pos , " mobs_mc:chicken " ) then
minetest.log ( " unable to spawn chick at " .. vector.to_string ( pos ) )
end
-- 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
2024-09-24 04:36:50 +02:00
vl_projectile.register ( " mcl_throwing:egg_entity " , {
2024-05-22 22:47:25 +02:00
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 ,
2024-09-22 14:04:20 +02:00
vl_projectile.collides_with_entities ,
2024-05-22 22:47:25 +02:00
} ,
2024-09-22 14:04:20 +02:00
allow_punching = function ( self , _ , _ , object )
if self._owner == object : get_player_name ( ) then
return self.timer > 1
end
end ,
2024-05-22 22:47:25 +02:00
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
2024-09-22 14:04:20 +02:00
egg_spawn_chicks ( pos )
end ,
on_collide_with_entity = function ( self , pos , obj )
egg_spawn_chicks ( pos )
2024-05-22 22:47:25 +02:00
end ,
sounds = {
on_collision = { " mcl_throwing_egg_impact " , { max_hear_distance = 10 , gain = 0.5 } , true }
} ,
} ,
} )
2024-09-16 02:12:21 +02:00
mcl_throwing.register_throwable_object ( " mcl_throwing:egg " , " mcl_throwing:egg_entity " , 22 )
2024-05-22 22:47:25 +02:00