forked from VoxeLibre/VoxeLibre
make loading crossbow work like MC
This commit is contained in:
parent
04804bdff6
commit
2faa311546
|
@ -136,7 +136,7 @@ S("The speed and damage of the arrow increases the longer you charge. The regula
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_tool("mcl_bows:loaded_crossbow", {
|
minetest.register_tool("mcl_bows:loaded_crossbow", {
|
||||||
description = S("Crossbow (loaded)"),
|
description = S("Crossbow"),
|
||||||
_tt_help = S("Launches arrows"),
|
_tt_help = S("Launches arrows"),
|
||||||
_doc_items_durability = BOW_DURABILITY,
|
_doc_items_durability = BOW_DURABILITY,
|
||||||
inventory_image = "mcl_bows_crossbow_3.png",
|
inventory_image = "mcl_bows_crossbow_3.png",
|
||||||
|
@ -144,7 +144,7 @@ minetest.register_tool("mcl_bows:loaded_crossbow", {
|
||||||
stack_max = 1,
|
stack_max = 1,
|
||||||
range = 4,
|
range = 4,
|
||||||
-- Trick to disable digging as well
|
-- Trick to disable digging as well
|
||||||
on_use = function() return end,
|
--on_use = function() return end,
|
||||||
on_place = function(itemstack, player, pointed_thing)
|
on_place = function(itemstack, player, pointed_thing)
|
||||||
if pointed_thing and pointed_thing.type == "node" then
|
if pointed_thing and pointed_thing.type == "node" then
|
||||||
-- Call on_rightclick if the pointed node defines it
|
-- Call on_rightclick if the pointed node defines it
|
||||||
|
@ -230,7 +230,41 @@ end
|
||||||
|
|
||||||
controls.register_on_release(function(player, key)
|
controls.register_on_release(function(player, key)
|
||||||
if key~="RMB" then return end
|
if key~="RMB" then return end
|
||||||
|
if player:get_wielded_item():get_name() == "mcl_bows:crossbow_2" then
|
||||||
|
local wielditem = player:get_wielded_item()
|
||||||
|
minetest.sound_play("mcl_bows_crossbow_load", {pos=playerpos, max_hear_distance=16}, true)
|
||||||
|
wielditem:set_name("mcl_bows:loaded_crossbow")
|
||||||
|
local arrow_stack, arrow_stack_id = get_arrow(player)
|
||||||
|
local arrow_itemstring
|
||||||
|
local has_infinity_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "infinity")
|
||||||
|
local infinity_used = false
|
||||||
|
|
||||||
|
if minetest.is_creative_enabled(player:get_player_name()) then
|
||||||
|
if arrow_stack then
|
||||||
|
arrow_itemstring = arrow_stack:get_name()
|
||||||
|
else
|
||||||
|
arrow_itemstring = "mcl_bows:arrow"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if not arrow_stack then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
arrow_itemstring = arrow_stack:get_name()
|
||||||
|
if has_infinity_enchantment and minetest.get_item_group(arrow_itemstring, "ammo_bow_regular") > 0 then
|
||||||
|
infinity_used = true
|
||||||
|
else
|
||||||
|
arrow_stack:take_item()
|
||||||
|
end
|
||||||
|
local inv = player:get_inventory()
|
||||||
|
inv:set_stack("main", arrow_stack_id, arrow_stack)
|
||||||
|
end
|
||||||
|
player:set_wielded_item(wielditem)
|
||||||
|
if not arrow_itemstring then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
else
|
||||||
reset_bows(player)
|
reset_bows(player)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
controls.register_on_press(function(player, key)
|
controls.register_on_press(function(player, key)
|
||||||
|
@ -333,37 +367,6 @@ controls.register_on_hold(function(player, key, time)
|
||||||
elseif wielditem:get_name() == "mcl_bows:crossbow_1" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then
|
elseif wielditem:get_name() == "mcl_bows:crossbow_1" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then
|
||||||
minetest.sound_play("mcl_bows_crossbow_drawback_2", {pos=playerpos, max_hear_distance=16}, true)
|
minetest.sound_play("mcl_bows_crossbow_drawback_2", {pos=playerpos, max_hear_distance=16}, true)
|
||||||
wielditem:set_name("mcl_bows:crossbow_2")
|
wielditem:set_name("mcl_bows:crossbow_2")
|
||||||
if minetest.get_us_time() - bow_load[name] >= 1000000 then
|
|
||||||
minetest.sound_play("mcl_bows_crossbow_load", {pos=playerpos, max_hear_distance=16}, true)
|
|
||||||
wielditem:set_name("mcl_bows:loaded_crossbow")
|
|
||||||
local arrow_stack, arrow_stack_id = get_arrow(player)
|
|
||||||
local arrow_itemstring
|
|
||||||
local has_infinity_enchantment = mcl_enchanting.has_enchantment(player:get_wielded_item(), "infinity")
|
|
||||||
local infinity_used = false
|
|
||||||
|
|
||||||
if minetest.is_creative_enabled(player:get_player_name()) then
|
|
||||||
if arrow_stack then
|
|
||||||
arrow_itemstring = arrow_stack:get_name()
|
|
||||||
else
|
|
||||||
arrow_itemstring = "mcl_bows:arrow"
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if not arrow_stack then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
arrow_itemstring = arrow_stack:get_name()
|
|
||||||
if has_infinity_enchantment and minetest.get_item_group(arrow_itemstring, "ammo_bow_regular") > 0 then
|
|
||||||
infinity_used = true
|
|
||||||
else
|
|
||||||
arrow_stack:take_item()
|
|
||||||
end
|
|
||||||
local inv = player:get_inventory()
|
|
||||||
inv:set_stack("main", arrow_stack_id, arrow_stack)
|
|
||||||
end
|
|
||||||
if not arrow_itemstring then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif wielditem:get_name() == "mcl_bows:crossbow_1_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then
|
elseif wielditem:get_name() == "mcl_bows:crossbow_1_enchanted" and minetest.get_us_time() - bow_load[name] >= BOW_CHARGE_TIME_FULL then
|
||||||
minetest.sound_play("mcl_bows_crossbow_drawback_2", {pos=playerpos, max_hear_distance=16}, true)
|
minetest.sound_play("mcl_bows_crossbow_drawback_2", {pos=playerpos, max_hear_distance=16}, true)
|
||||||
wielditem:set_name("mcl_bows:crossbow_2_enchanted")
|
wielditem:set_name("mcl_bows:crossbow_2_enchanted")
|
||||||
|
|
Loading…
Reference in New Issue