mods that hopefully work for a TechAge-based pack
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
local utility = {}
|
||||
|
||||
function utility.is_creative(player)
|
||||
if minetest.settings:get_bool("creative_mode") == true then
|
||||
return true
|
||||
end
|
||||
local name = player:get_player_name()
|
||||
if name == nil or name == "" then
|
||||
return false
|
||||
end
|
||||
return minetest.check_player_privs(name, { creative = true })
|
||||
end
|
||||
|
||||
|
||||
function utility.is_replaceable(pos)
|
||||
local node = minetest.registered_nodes[minetest.get_node(pos)]
|
||||
if node == nil or node.name == "handholds_redo:holds" then return true end
|
||||
return node.name == "air" or node.buildable_to
|
||||
end
|
||||
|
||||
function utility.is_climbable(pos, level)
|
||||
local def = minetest.registered_nodes[minetest.get_node(pos).name]
|
||||
if def == nil then return false end
|
||||
if def.groups == nil or def.groups.handholds == nil then return false end
|
||||
return level >= def.groups.handholds
|
||||
end
|
||||
|
||||
|
||||
function utility.place_holds(itemstack, placer, pointed_thing)
|
||||
if itemstack == nil then return end
|
||||
local itemdef = itemstack:get_definition()
|
||||
if itemdef == nil
|
||||
or itemdef.groups == nil
|
||||
or itemdef.groups.climbing_pick == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if pointed_thing == nil or
|
||||
pointed_thing.type ~= "node" or
|
||||
pointed_thing.under.y + 1 == pointed_thing.above.y or
|
||||
not utility.is_replaceable(pointed_thing.above) or
|
||||
not utility.is_climbable(pointed_thing.under, itemdef.groups.climbing_pick) then
|
||||
return
|
||||
end
|
||||
|
||||
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) or
|
||||
minetest.is_protected(pointed_thing.above, placer:get_player_name()) then
|
||||
minetest.record_protection_violation(pointed_thing.above, placer)
|
||||
return
|
||||
end
|
||||
|
||||
local rotation = minetest.dir_to_wallmounted(
|
||||
vector.subtract(pointed_thing.under, pointed_thing.above)
|
||||
)
|
||||
|
||||
minetest.set_node(pointed_thing.above, {
|
||||
name = "handholds_redo:holds",
|
||||
param2 = rotation
|
||||
})
|
||||
|
||||
minetest.sound_play(
|
||||
"default_dig_cracky",
|
||||
{pos = pointed_thing.under, gain = 0.5, max_hear_distance = 8}
|
||||
)
|
||||
|
||||
if not utility.is_creative(placer) then
|
||||
local wdef = itemstack:get_definition()
|
||||
itemstack:add_wear(256)
|
||||
if itemstack:get_count() == 0 and wdef.sound and wdef.sound.breaks then
|
||||
minetest.sound_play(wdef.sound.breaks, {
|
||||
pos = pointed_thing.above,
|
||||
gain = 0.5
|
||||
})
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end
|
||||
|
||||
return utility
|
||||
Reference in New Issue
Block a user