fixup survival-mode item quantity checks
parent
64d992eec1
commit
7ef6bd4b9a
111
functions.lua
111
functions.lua
|
@ -52,8 +52,6 @@ function streetlights.check_and_place(itemstack, placer, pointed_thing, def)
|
||||||
|
|
||||||
local controls = placer:get_player_control()
|
local controls = placer:get_player_control()
|
||||||
if not placer then return end
|
if not placer then return end
|
||||||
local playername = placer:get_player_name()
|
|
||||||
|
|
||||||
local player_name = placer:get_player_name()
|
local player_name = placer:get_player_name()
|
||||||
|
|
||||||
local placer_pos = placer:get_pos() -- this bit borrowed from builtin/game/item.lua
|
local placer_pos = placer:get_pos() -- this bit borrowed from builtin/game/item.lua
|
||||||
|
@ -73,7 +71,7 @@ function streetlights.check_and_place(itemstack, placer, pointed_thing, def)
|
||||||
if rc then return rc end
|
if rc then return rc end
|
||||||
|
|
||||||
if not minetest.check_player_privs(placer, "streetlight") then
|
if not minetest.check_player_privs(placer, "streetlight") then
|
||||||
minetest.chat_send_player(playername, "*** You don't have permission to use a streetlight spawner.")
|
minetest.chat_send_player(player_name, "*** You don't have permission to use a streetlight spawner.")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -110,48 +108,115 @@ function streetlights.check_and_place(itemstack, placer, pointed_thing, def)
|
||||||
|
|
||||||
if not creative.is_enabled_for(player_name) then
|
if not creative.is_enabled_for(player_name) then
|
||||||
local inv = placer:get_inventory()
|
local inv = placer:get_inventory()
|
||||||
if not inv:contains_item("main", pole.." 6") then
|
|
||||||
minetest.chat_send_player(playername, "*** You don't have enough "..pole.." in your inventory!")
|
-- first, make sure the player has items in the inventory to build with
|
||||||
return
|
|
||||||
|
-- if main_extends_base, then the base node is one of two pieces
|
||||||
|
-- and the upper piece is not usually directly available to the player,
|
||||||
|
-- as with streets:pole_[top|bottom] (the thin one)
|
||||||
|
--
|
||||||
|
-- if it's that sort of thing, there could be some waste here when the player digs a pole,
|
||||||
|
-- if you use an odd number for the pole height along with main_extends_base
|
||||||
|
|
||||||
|
local num_main = height + 1
|
||||||
|
|
||||||
|
if poletop ~= pole and not def.main_extends_base then
|
||||||
|
num_main = num_main - 1
|
||||||
|
if not inv:contains_item("main", poletop) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have any "..poletop.." in your inventory!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if overhang ~= pole and not def.main_extends_base then
|
||||||
|
num_main = num_main - 1
|
||||||
|
if not inv:contains_item("main", overhang) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have any "..overhang.." in your inventory!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if base ~= pole then
|
||||||
|
num_main = num_main - 1
|
||||||
|
if def.main_extends_base then
|
||||||
|
if not inv:contains_item("main", base.." "..math.floor(num_main/2)) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have enough "..base.." in your inventory!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if not inv:contains_item("main", base) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have any "..base.." in your inventory!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if not inv:contains_item("main", pole.." "..num_main) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have enough "..pole.." in your inventory!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if not inv:contains_item("main", pole.." "..num_main) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have enough "..pole.." in your inventory!")
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if not inv:contains_item("main", light) then
|
if not inv:contains_item("main", light) then
|
||||||
minetest.chat_send_player(playername, "*** You don't have any "..light.." in your inventory!")
|
minetest.chat_send_player(player_name, "*** You don't have any "..light.." in your inventory!")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if needs_digiline_wire and not inv:contains_item("main", digiline_wire_node.." 6") then
|
if needs_digiline_wire and not inv:contains_item("main", digiline_wire_node.." "..height + (has_top and 1 or 0)) then
|
||||||
minetest.chat_send_player(playername, "*** You don't have enough Digiline wires in your inventory!")
|
minetest.chat_send_player(player_name, "*** You don't have enough Digiline wires in your inventory!")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if controls.sneak then
|
|
||||||
if not inv:contains_item("main", streetlights.concrete) then
|
|
||||||
minetest.chat_send_player(playername, "*** You don't have any concrete in your inventory!")
|
|
||||||
return
|
|
||||||
else
|
|
||||||
inv:remove_item("main", streetlights.concrete)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if distributor_node and needs_digiline_wire then
|
if distributor_node and needs_digiline_wire then
|
||||||
if not inv:contains_item("main", distributor_node) then
|
if not inv:contains_item("main", distributor_node) then
|
||||||
minetest.chat_send_player(playername, "*** You don't have any "..distributor_node.." in your inventory!")
|
minetest.chat_send_player(player_name, "*** You don't have any "..distributor_node.." in your inventory!")
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
inv:remove_item("main", distributor_node)
|
inv:remove_item("main", distributor_node)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
inv:remove_item("main", pole.." 6")
|
if controls.sneak then
|
||||||
|
if not inv:contains_item("main", streetlights.concrete) then
|
||||||
|
minetest.chat_send_player(player_name, "*** You don't have any concrete in your inventory!")
|
||||||
|
return
|
||||||
|
else
|
||||||
|
inv:remove_item("main", streetlights.concrete)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- If we got this far, the player has everything, so now deduct items
|
||||||
|
|
||||||
|
if poletop ~= pole and not def.main_extends_base then
|
||||||
|
inv:remove_item("main", poletop)
|
||||||
|
end
|
||||||
|
|
||||||
|
if overhang ~= pole and not def.main_extends_base then
|
||||||
|
inv:remove_item("main", overhang)
|
||||||
|
end
|
||||||
|
|
||||||
|
if base ~= pole then
|
||||||
|
if def.main_extends_base then
|
||||||
|
inv:remove_item("main", base.." "..math.floor(num_main/2))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
inv:remove_item("main", pole.." "..num_main)
|
||||||
|
end
|
||||||
|
|
||||||
inv:remove_item("main", light)
|
inv:remove_item("main", light)
|
||||||
|
|
||||||
if needs_digiline_wire then
|
if needs_digiline_wire then
|
||||||
inv:remove_item("main", digiline_wire_node.." 6")
|
inv:remove_item("main", digiline_wire_node.." "..num_main)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- and place them in the world
|
||||||
|
|
||||||
if controls.sneak then
|
if controls.sneak then
|
||||||
minetest.set_node(pos1, { name = streetlights.concrete })
|
minetest.set_node(pos1, { name = streetlights.concrete })
|
||||||
end
|
end
|
||||||
|
@ -197,8 +262,8 @@ function streetlights.check_and_place(itemstack, placer, pointed_thing, def)
|
||||||
minetest.set_node(pos3, { name = light, param2 = light_fdir })
|
minetest.set_node(pos3, { name = light, param2 = light_fdir })
|
||||||
end
|
end
|
||||||
|
|
||||||
if needs_digiline_wire and ilights.player_channels[playername] then
|
if needs_digiline_wire and ilights.player_channels[player_name] then
|
||||||
minetest.get_meta(pos4):set_string("channel", ilights.player_channels[playername])
|
minetest.get_meta(pos4):set_string("channel", ilights.player_channels[player_name])
|
||||||
end
|
end
|
||||||
|
|
||||||
if distributor_node and needs_digiline_wire then
|
if distributor_node and needs_digiline_wire then
|
||||||
|
|
|
@ -15,6 +15,7 @@ minetest.register_tool("simple_streetlights:spawner_modern_walllamp", {
|
||||||
copy_pole_fdir = true,
|
copy_pole_fdir = true,
|
||||||
node_rotation = math.pi/2, -- 90° CCW
|
node_rotation = math.pi/2, -- 90° CCW
|
||||||
light_fdir = "auto",
|
light_fdir = "auto",
|
||||||
|
main_extends_base = true
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
|
@ -33,7 +33,7 @@ local poles_tab = {
|
||||||
-- material name, mod name, node name, optional base, optional height, top section
|
-- material name, mod name, node name, optional base, optional height, top section
|
||||||
{ "wood", "default", "default:fence_wood" },
|
{ "wood", "default", "default:fence_wood" },
|
||||||
{ "junglewood", "default", "default:fence_junglewood" },
|
{ "junglewood", "default", "default:fence_junglewood" },
|
||||||
{ "brass", "homedecor_fences", "homedecor:fence_brass"},
|
{ "brass", "homedecor_fences", "homedecor:fence_brass", "basic_materials:brass_block", nil, {poletop="default:cobble", overhang="default:dirt"} },
|
||||||
{ "wrought_iron", "homedecor_fences", "homedecor:fence_wrought_iron" },
|
{ "wrought_iron", "homedecor_fences", "homedecor:fence_wrought_iron" },
|
||||||
{ "steel", "gloopblocks", "gloopblocks:fence_steel"}
|
{ "steel", "gloopblocks", "gloopblocks:fence_steel"}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue