Compare commits

..

2 Commits

Author SHA1 Message Date
Dehydrate6684 e5a260b563
Added vines and skulk vines to ladder group 2023-11-05 14:10:58 +08:00
Dehydrate6684 9b2b8ee56e
Removed direction checks 2023-11-05 14:06:53 +08:00
3 changed files with 29 additions and 37 deletions

View File

@ -11,42 +11,15 @@ local function rotate_climbable(pos, node, user, mode)
return false return false
end end
---Checks the direction (param2) of a ladder and a trapdoor and determine if they are
---facing the same direction.
---
---@param ladder integer The param2 value of the ladder.
---@param trapdoor integer The param2 value of the trapdoor.
---@return boolean If the ladder and trapdoor are in the same direction.
function mcl_core.check_direction(ladder, trapdoor)
local convert_table = {
{ 1, 23 },
{ 3, 21 },
{ 0, 20 },
{ 2, 22 },
}
local conversion = convert_table[ladder - 1];
if not conversion then
return false
elseif conversion[1] == trapdoor or conversion[2] == trapdoor then
return true
end
return false
end
---Updates the trapdoor above (if any). ---Updates the trapdoor above (if any).
--- ---
---@param pos mt.Vector The position of the ladder. ---@param pos mt.Vector The position of the ladder.
---@param ladder integer The param2 value of the ladder.
---@param event "place" | "destruct" The place or destruct event. ---@param event "place" | "destruct" The place or destruct event.
local function update_trapdoor(pos, ladder, event) function mcl_core.update_trapdoor(pos, event)
local top_pos = vector.offset(pos, 0, 1, 0) local top_pos = vector.offset(pos, 0, 1, 0)
local top_node = minetest.get_node_or_nil(top_pos) local top_node = minetest.get_node_or_nil(top_pos)
if top_node and minetest.get_item_group(top_node.name, "trapdoor") == 2 then
if top_node and minetest.get_item_group(top_node.name, "trapdoor") == 2
and mcl_core.check_direction(ladder, top_node.param2) then
local new_name = top_node.name local new_name = top_node.name
if event == "place" then if event == "place" then
new_name = string.gsub(new_name, "open$", "ladder") new_name = string.gsub(new_name, "open$", "ladder")
@ -142,11 +115,10 @@ minetest.register_node("mcl_core:ladder", {
return itemstack return itemstack
end, end,
after_destruct = function(pos, old) after_destruct = function(pos, old)
update_trapdoor(pos, old.param2, "destruct") mcl_core.update_trapdoor(pos, "destruct")
end, end,
after_place_node = function(pos) after_place_node = function(pos)
local me = minetest.get_node(pos) mcl_core.update_trapdoor(pos, "place")
update_trapdoor(pos, me.param2, "place")
end, end,
_mcl_blast_resistance = 0.4, _mcl_blast_resistance = 0.4,
_mcl_hardness = 0.4, _mcl_hardness = 0.4,
@ -186,7 +158,8 @@ minetest.register_node("mcl_core:vine", {
flammable = 2, flammable = 2,
fire_encouragement = 15, fire_encouragement = 15,
fire_flammability = 100, fire_flammability = 100,
foliage_palette_wallmounted = 1 foliage_palette_wallmounted = 1,
ladder = 1
}, },
sounds = mcl_sounds.node_sound_leaves_defaults(), sounds = mcl_sounds.node_sound_leaves_defaults(),
drop = "", drop = "",
@ -258,6 +231,12 @@ minetest.register_node("mcl_core:vine", {
minetest.registered_nodes[node.name].on_dig(below, node, digger) minetest.registered_nodes[node.name].on_dig(below, node, digger)
end end
end, end,
after_destruct = function(pos, old)
mcl_core.update_trapdoor(pos, "destruct")
end,
after_place_node = function(pos)
mcl_core.update_trapdoor(pos, "place")
end,
_mcl_blast_resistance = 0.2, _mcl_blast_resistance = 0.2,

View File

@ -79,8 +79,7 @@ function mcl_doors:register_trapdoor(name, def)
-- Checking if there is something underneath the trapdoor -- Checking if there is something underneath the trapdoor
if bottom_node then if bottom_node then
local is_ladder = minetest.get_item_group(bottom_node.name, "ladder") local is_ladder = minetest.get_item_group(bottom_node.name, "ladder")
local same_direction = mcl_core.check_direction(bottom_node.param2, me.param2) if is_ladder > 0 then
if is_ladder > 0 and same_direction then
name_end = "_ladder" name_end = "_ladder"
end end
end end

View File

@ -215,9 +215,23 @@ minetest.register_node("mcl_sculk:vein", {
type = "wallmounted", type = "wallmounted",
}, },
groups = { groups = {
handy = 1, axey = 1, shearsy = 1, swordy = 1, deco_block = 1, handy = 1,
dig_by_piston = 1, destroy_by_lava_flow = 1, sculk = 1, dig_by_water = 1, axey = 1,
shearsy = 1,
swordy = 1,
deco_block = 1,
dig_by_piston = 1,
destroy_by_lava_flow = 1,
sculk = 1,
dig_by_water = 1,
ladder = 1
}, },
after_destruct = function(pos, old)
mcl_core.update_trapdoor(pos, "destruct")
end,
after_place_node = function(pos)
mcl_core.update_trapdoor(pos, "place")
end,
sounds = sounds, sounds = sounds,
drop = "", drop = "",
_mcl_shears_drop = true, _mcl_shears_drop = true,