mirror of
https://git.minetest.land/Mineclonia/Mineclonia.git
synced 2024-11-05 01:05:05 +00:00
Workaround for crash if place stair/slab/trapdoor inside a buildable_to node
This commit is contained in:
parent
34d4c19855
commit
79ca0b2ab9
2 changed files with 37 additions and 7 deletions
|
@ -1,3 +1,20 @@
|
||||||
|
-- Wrapper around mintest.pointed_thing_to_face_pos.
|
||||||
|
local function get_fpos(placer, pointed_thing)
|
||||||
|
local fpos
|
||||||
|
-- Workaround: minetest.pointed_thing_to_face_pos crashes in MT 0.4.16 if
|
||||||
|
-- pointed_thing.under and pointed_thing.above are equal
|
||||||
|
-- FIXME: Remove this when MT got fixed.
|
||||||
|
if not vector.equals(pointed_thing.under, pointed_thing.above) then
|
||||||
|
-- The happy case: Everything is normal
|
||||||
|
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
||||||
|
fpos = finepos.y % 1
|
||||||
|
else
|
||||||
|
-- Fallback if both above and under are equal
|
||||||
|
fpos = 0
|
||||||
|
end
|
||||||
|
return fpos
|
||||||
|
end
|
||||||
|
|
||||||
---- Trapdoor ----
|
---- Trapdoor ----
|
||||||
|
|
||||||
function mcl_doors:register_trapdoor(name, def)
|
function mcl_doors:register_trapdoor(name, def)
|
||||||
|
@ -91,9 +108,7 @@ function mcl_doors:register_trapdoor(name, def)
|
||||||
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
|
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
|
||||||
end
|
end
|
||||||
|
|
||||||
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
local fpos = get_fpos(placer, pointed_thing)
|
||||||
local fpos = finepos.y % 1
|
|
||||||
|
|
||||||
|
|
||||||
local origname = itemstack:get_name()
|
local origname = itemstack:get_name()
|
||||||
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
||||||
|
|
|
@ -1,3 +1,20 @@
|
||||||
|
-- Wrapper around mintest.pointed_thing_to_face_pos.
|
||||||
|
local function get_fpos(placer, pointed_thing)
|
||||||
|
local fpos
|
||||||
|
-- Workaround: minetest.pointed_thing_to_face_pos crashes in MT 0.4.16 if
|
||||||
|
-- pointed_thing.under and pointed_thing.above are equal
|
||||||
|
-- FIXME: Remove this when MT got fixed.
|
||||||
|
if not vector.equals(pointed_thing.under, pointed_thing.above) then
|
||||||
|
-- The happy case: Everything is normal
|
||||||
|
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
||||||
|
fpos = finepos.y % 1
|
||||||
|
else
|
||||||
|
-- Fallback if both above and under are equal
|
||||||
|
fpos = 0
|
||||||
|
end
|
||||||
|
return fpos
|
||||||
|
end
|
||||||
|
|
||||||
local function place_slab_normal(itemstack, placer, pointed_thing)
|
local function place_slab_normal(itemstack, placer, pointed_thing)
|
||||||
-- Use pointed node's on_rightclick function first, if present
|
-- Use pointed node's on_rightclick function first, if present
|
||||||
local node = minetest.get_node(pointed_thing.under)
|
local node = minetest.get_node(pointed_thing.under)
|
||||||
|
@ -12,8 +29,7 @@ local function place_slab_normal(itemstack, placer, pointed_thing)
|
||||||
|
|
||||||
local placer_pos = placer:getpos()
|
local placer_pos = placer:getpos()
|
||||||
|
|
||||||
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
local fpos = get_fpos(placer, pointed_thing)
|
||||||
local fpos = finepos.y % 1
|
|
||||||
|
|
||||||
local place = ItemStack(itemstack)
|
local place = ItemStack(itemstack)
|
||||||
local origname = itemstack:get_name()
|
local origname = itemstack:get_name()
|
||||||
|
@ -44,8 +60,7 @@ local function place_stair(itemstack, placer, pointed_thing)
|
||||||
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
|
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
|
||||||
end
|
end
|
||||||
|
|
||||||
local finepos = minetest.pointed_thing_to_face_pos(placer, pointed_thing)
|
local fpos = get_pos(placer, pointed_thing)
|
||||||
local fpos = finepos.y % 1
|
|
||||||
|
|
||||||
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
if p0.y - 1 == p1.y or (fpos > 0 and fpos < 0.5)
|
||||||
or (fpos < -0.5 and fpos > -0.999999999) then
|
or (fpos < -0.5 and fpos > -0.999999999) then
|
||||||
|
|
Loading…
Reference in a new issue