diff options
Diffstat (limited to 'castle/crossbow.lua')
-rw-r--r-- | castle/crossbow.lua | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/castle/crossbow.lua b/castle/crossbow.lua new file mode 100644 index 0000000..f0ecda4 --- /dev/null +++ b/castle/crossbow.lua @@ -0,0 +1,48 @@ +arrows = { + {"castle:arrow", "castle:arrow_entity"}, +} + +local castle_shoot_arrow = function(itemstack, player) + for _,arrow in ipairs(arrows) do + if player:get_inventory():get_stack("main", player:get_wield_index()+1):get_name() == arrow[1] then + if not minetest.setting_getbool("creative_mode") then + player:get_inventory():remove_item("main", arrow[1]) + end + local playerpos = player:getpos() + local obj = minetest.add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, arrow[2]) + local dir = player:get_look_dir() + obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19}) + obj:setacceleration({x=dir.x*-3, y=-10, z=dir.z*-3}) + obj:setyaw(player:get_look_yaw()+math.pi) + minetest.sound_play("castle_sound", {pos=playerpos}) + if obj:get_luaentity().player == "" then + obj:get_luaentity().player = player + end + obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name() + return true + end + end + return false +end +minetest.register_tool("castle:crossbow", { + description = "Crossbow", + inventory_image = "castle_crossbow.png", + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + if castle_shoot_arrow(item, user, pointed_thing) then + if not minetest.setting_getbool("creative_mode") then + itemstack:add_wear(65535/200) + end + end + return itemstack + end, +}) + +minetest.register_craft({ + output = 'castle:crossbow', + recipe = { + {'default:steel_ingot', 'default:stick', 'default:steel_ingot'}, + {'farming:string', 'farming:string', 'farming:string'}, + {'', 'default:stick', ''}, + } +}) |