summaryrefslogtreecommitdiff
path: root/castle/crossbow.lua
blob: 43f033d1466d69114965df5f1f7e2685a1937c4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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', ''},
	}
})