2 dofile(minetest
.get_modpath("throwing").."/arrow.lua")
5 {"throwing:arrow", "throwing:arrow_entity"},
8 local throwing_shoot_arrow
= function(itemstack
, player
)
9 for _
,arrow
in ipairs(arrows
) do
10 if player
:get_inventory():get_stack("main", player
:get_wield_index()+1):get_name() == arrow
[1] then
11 player
:get_inventory():remove_item("main", arrow
[1])
12 local playerpos
= player
:getpos()
13 local obj
= minetest
.env
:add_entity({x
=playerpos
.x
,y
=playerpos
.y
+1.5,z
=playerpos
.z
}, arrow
[2])
14 local dir
= player
:get_look_dir()
15 obj
:setvelocity({x
=dir
.x
*19, y
=dir
.y
*19, z
=dir
.z
*19})
16 obj
:setacceleration({x
=dir
.x
*-3, y
=-10, z
=dir
.z
*-3})
17 obj
:setyaw(player
:get_look_yaw()+math
.pi
)
18 minetest
.sound_play("throwing_sound", {pos
=playerpos
})
19 if obj
:get_luaentity().player
== "" then
20 obj
:get_luaentity().player
= player
22 obj
:get_luaentity().node
= player
:get_inventory():get_stack("main", 1):get_name()
29 minetest
.register_tool("throwing:bow", {
31 inventory_image
= "throwing_bow.png",
33 on_place
= function(itemstack
, placer
, pointed_thing
)
34 wear
= itemstack
:get_wear()
35 itemstack
:replace("throwing:bow_0")
36 itemstack
:add_wear(wear
)
39 on_use
= function(itemstack
, user
, pointed_thing
)
40 wear
= itemstack
:get_wear()
41 itemstack
:add_wear(wear
)
42 if throwing_shoot_arrow(itemstack
, user
, pointed_thing
) then
43 if not minetest
.setting_getbool("creative_mode") then
44 itemstack
:add_wear(65535/385)
51 minetest
.register_tool("throwing:bow_0", {
53 inventory_image
= "throwing_bow_0.png",
55 groups
= {not_in_creative_inventory
=1},
56 on_place
= function(itemstack
, placer
, pointed_thing
)
57 wear
= itemstack
:get_wear()
58 itemstack
:replace("throwing:bow_1")
59 itemstack
:add_wear(wear
)
62 on_use
= function(itemstack
, user
, pointed_thing
)
63 wear
= itemstack
:get_wear()
64 itemstack
:add_wear(wear
)
65 if throwing_shoot_arrow(itemstack
, user
, pointed_thing
) then
66 if not minetest
.setting_getbool("creative_mode") then
67 itemstack
:add_wear(65535/385)
74 minetest
.register_tool("throwing:bow_1", {
76 inventory_image
= "throwing_bow_1.png",
78 groups
= {not_in_creative_inventory
=1},
79 on_place
= function(itemstack
, placer
, pointed_thing
)
80 wear
= itemstack
:get_wear()
81 itemstack
:replace("throwing:bow_2")
82 itemstack
:add_wear(wear
)
85 on_use
= function(itemstack
, user
, pointed_thing
)
86 wear
= itemstack
:get_wear()
87 itemstack
:add_wear(wear
)
88 if throwing_shoot_arrow(itemstack
, user
, pointed_thing
) then
89 if not minetest
.setting_getbool("creative_mode") then
90 itemstack
:add_wear(65535/385)
97 minetest
.register_tool("throwing:bow_2", {
99 inventory_image
= "throwing_bow_2.png",
101 groups
= {not_in_creative_inventory
=1},
102 on_use
= function(itemstack
, user
, pointed_thing
)
103 wear
= itemstack
:get_wear()
104 itemstack
:replace("throwing:bow")
105 itemstack
:add_wear(wear
)
106 if throwing_shoot_arrow(itemstack
, user
, pointed_thing
) then
107 if not minetest
.setting_getbool("creative_mode") then
108 itemstack
:add_wear(65535/385)
115 minetest
.register_craft({
116 output
= 'throwing:bow',
118 {'', 'group:wood', 'default:string'},
119 {'group:wood', '', 'default:string'},
120 {'', 'group:wood', 'default:string'},