Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
minetest_game
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Illuna-Minetest
minetest_game
Commits
3804d8a0
Commit
3804d8a0
authored
11 years ago
by
PilzAdam
Browse files
Options
Downloads
Patches
Plain Diff
Use 6d facedir to place upside down slabs and stairs
parent
a4823a42
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
mods/stairs/init.lua
+69
-59
69 additions, 59 deletions
mods/stairs/init.lua
with
69 additions
and
59 deletions
mods/stairs/init.lua
+
69
−
59
View file @
3804d8a0
...
@@ -28,36 +28,35 @@ function stairs.register_stair(subname, recipeitem, groups, images, description,
...
@@ -28,36 +28,35 @@ function stairs.register_stair(subname, recipeitem, groups, images, description,
local
p0
=
pointed_thing
.
under
local
p0
=
pointed_thing
.
under
local
p1
=
pointed_thing
.
above
local
p1
=
pointed_thing
.
above
local
param2
=
0
local
placer_pos
=
placer
:
getpos
()
if
placer_pos
then
local
dir
=
{
x
=
p1
.
x
-
placer_pos
.
x
,
y
=
p1
.
y
-
placer_pos
.
y
,
z
=
p1
.
z
-
placer_pos
.
z
}
param2
=
minetest
.
dir_to_facedir
(
dir
)
end
if
p0
.
y
-
1
==
p1
.
y
then
if
p0
.
y
-
1
==
p1
.
y
then
local
fakestack
=
ItemStack
(
"stairs:stair_"
..
subname
..
"upside_down"
)
param2
=
param2
+
20
local
ret
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
if
param2
==
21
then
if
ret
:
is_empty
()
then
param2
=
23
itemstack
:
take_item
()
elseif
param2
==
23
then
return
itemstack
param2
=
21
end
end
end
end
-- Otherwise place regularly
return
minetest
.
item_place
(
itemstack
,
placer
,
pointed_thing
,
param2
)
return
minetest
.
item_place
(
itemstack
,
placer
,
pointed_thing
)
end
,
end
,
})
})
-- for replace ABM
minetest
.
register_node
(
":stairs:stair_"
..
subname
..
"upside_down"
,
{
minetest
.
register_node
(
":stairs:stair_"
..
subname
..
"upside_down"
,
{
drop
=
"stairs:stair_"
..
subname
,
replace_name
=
"stairs:stair_"
..
subname
,
drawtype
=
"nodebox"
,
groups
=
{
slabs_replace
=
1
},
tiles
=
images
,
paramtype
=
"light"
,
paramtype2
=
"facedir"
,
is_ground_content
=
true
,
groups
=
groups
,
sounds
=
sounds
,
node_box
=
{
type
=
"fixed"
,
fixed
=
{
{
-
0
.
5
,
0
,
-
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
},
{
-
0
.
5
,
-
0
.
5
,
0
,
0
.
5
,
0
,
0
.
5
},
},
},
})
})
minetest
.
register_craft
({
minetest
.
register_craft
({
...
@@ -87,6 +86,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
...
@@ -87,6 +86,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
drawtype
=
"nodebox"
,
drawtype
=
"nodebox"
,
tiles
=
images
,
tiles
=
images
,
paramtype
=
"light"
,
paramtype
=
"light"
,
paramtype2
=
"facedir"
,
is_ground_content
=
true
,
is_ground_content
=
true
,
groups
=
groups
,
groups
=
groups
,
sounds
=
sounds
,
sounds
=
sounds
,
...
@@ -106,21 +106,32 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
...
@@ -106,21 +106,32 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
local
p0
=
pointed_thing
.
under
local
p0
=
pointed_thing
.
under
local
p1
=
pointed_thing
.
above
local
p1
=
pointed_thing
.
above
local
n0
=
minetest
.
get_node
(
p0
)
local
n0
=
minetest
.
get_node
(
p0
)
if
n0
.
name
==
"stairs:slab_"
..
subname
and
local
n1
=
minetest
.
get_node
(
p1
)
p0
.
y
+
1
==
p1
.
y
then
local
param2
=
0
local
n0_is_upside_down
=
(
n0
.
name
==
"stairs:slab_"
..
subname
and
n0
.
param2
>=
20
)
if
n0
.
name
==
"stairs:slab_"
..
subname
and
not
n0_is_upside_down
and
p0
.
y
+
1
==
p1
.
y
then
slabpos
=
p0
slabpos
=
p0
slabnode
=
n0
slabnode
=
n0
elseif
n1
.
name
==
"stairs:slab_"
..
subname
then
slabpos
=
p1
slabnode
=
n1
end
end
if
slabpos
then
if
slabpos
then
-- Remove the slab at slabpos
-- Remove the slab at slabpos
minetest
.
remove_node
(
slabpos
)
minetest
.
remove_node
(
slabpos
)
-- Make a fake stack of a single item and try to place it
-- Make a fake stack of a single item and try to place it
local
fakestack
=
ItemStack
(
recipeitem
)
local
fakestack
=
ItemStack
(
recipeitem
)
fakestack
:
set_count
(
itemstack
:
get_count
())
pointed_thing
.
above
=
slabpos
pointed_thing
.
above
=
slabpos
fakestack
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
local
success
fakestack
,
success
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
-- If the item was taken from the fake stack, decrement original
-- If the item was taken from the fake stack, decrement original
if
not
fakestack
or
fakestack
:
is_empty
()
then
if
success
then
itemstack
:
take_item
(
1
)
itemstack
:
set_count
(
fakestack
:
get_count
()
)
-- Else put old node back
-- Else put old node back
else
else
minetest
.
set_node
(
slabpos
,
slabnode
)
minetest
.
set_node
(
slabpos
,
slabnode
)
...
@@ -131,16 +142,19 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
...
@@ -131,16 +142,19 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
-- Upside down slabs
-- Upside down slabs
if
p0
.
y
-
1
==
p1
.
y
then
if
p0
.
y
-
1
==
p1
.
y
then
-- Turn into full block if pointing at a existing slab
-- Turn into full block if pointing at a existing slab
if
n0
.
name
==
"stairs:slab_"
..
subname
..
"
upside_down
"
then
if
n0
_is_
upside_down
then
-- Remove the slab at the position of the slab
-- Remove the slab at the position of the slab
minetest
.
remove_node
(
p0
)
minetest
.
remove_node
(
p0
)
-- Make a fake stack of a single item and try to place it
-- Make a fake stack of a single item and try to place it
local
fakestack
=
ItemStack
(
recipeitem
)
local
fakestack
=
ItemStack
(
recipeitem
)
fakestack
:
set_count
(
itemstack
:
get_count
())
pointed_thing
.
above
=
p0
pointed_thing
.
above
=
p0
fakestack
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
local
success
fakestack
,
success
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
-- If the item was taken from the fake stack, decrement original
-- If the item was taken from the fake stack, decrement original
if
not
fakestack
or
fakestack
:
is_empty
()
then
if
success
then
itemstack
:
take_item
(
1
)
itemstack
:
set_count
(
fakestack
:
get_count
()
)
-- Else put old node back
-- Else put old node back
else
else
minetest
.
set_node
(
p0
,
n0
)
minetest
.
set_node
(
p0
,
n0
)
...
@@ -149,43 +163,22 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
...
@@ -149,43 +163,22 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
end
end
-- Place upside down slab
-- Place upside down slab
local
fakestack
=
ItemStack
(
"stairs:slab_"
..
subname
..
"upside_down"
)
param2
=
20
local
ret
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
if
ret
:
is_empty
()
then
itemstack
:
take_item
()
return
itemstack
end
end
end
-- If pointing at the side of a upside down slab
-- If pointing at the side of a upside down slab
if
n0
.
name
==
"stairs:slab_"
..
subname
..
"upside_down"
and
if
n0_is_upside_down
and
p0
.
y
+
1
~=
p1
.
y
then
p0
.
y
+
1
~=
p1
.
y
then
param2
=
20
-- Place upside down slab
local
fakestack
=
ItemStack
(
"stairs:slab_"
..
subname
..
"upside_down"
)
local
ret
=
minetest
.
item_place
(
fakestack
,
placer
,
pointed_thing
)
if
ret
:
is_empty
()
then
itemstack
:
take_item
()
return
itemstack
end
end
end
-- Otherwise place regularly
return
minetest
.
item_place
(
itemstack
,
placer
,
pointed_thing
,
param2
)
return
minetest
.
item_place
(
itemstack
,
placer
,
pointed_thing
)
end
,
end
,
})
})
-- for replace ABM
minetest
.
register_node
(
":stairs:slab_"
..
subname
..
"upside_down"
,
{
minetest
.
register_node
(
":stairs:slab_"
..
subname
..
"upside_down"
,
{
drop
=
"stairs:slab_"
..
subname
,
replace_name
=
"stairs:slab_"
..
subname
,
drawtype
=
"nodebox"
,
groups
=
{
slabs_replace
=
1
},
tiles
=
images
,
paramtype
=
"light"
,
is_ground_content
=
true
,
groups
=
groups
,
sounds
=
sounds
,
node_box
=
{
type
=
"fixed"
,
fixed
=
{
-
0
.
5
,
0
,
-
0
.
5
,
0
.
5
,
0
.
5
,
0
.
5
},
},
})
})
minetest
.
register_craft
({
minetest
.
register_craft
({
...
@@ -196,6 +189,23 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
...
@@ -196,6 +189,23 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
})
})
end
end
-- Replace old "upside_down" nodes with new param2 versions
minetest
.
register_abm
({
nodenames
=
{
"group:slabs_replace"
},
interval
=
1
,
chance
=
1
,
action
=
function
(
pos
,
node
)
node
.
name
=
minetest
.
registered_nodes
[
node
.
name
].
replace_name
node
.
param2
=
node
.
param2
+
20
if
node
.
param2
==
21
then
node
.
param2
=
23
elseif
node
.
param2
==
23
then
node
.
param2
=
21
end
minetest
.
set_node
(
pos
,
node
)
end
,
})
-- Nodes will be called stairs:{stair,slab}_<subname>
-- Nodes will be called stairs:{stair,slab}_<subname>
function
stairs
.
register_stair_and_slab
(
subname
,
recipeitem
,
groups
,
images
,
desc_stair
,
desc_slab
,
sounds
)
function
stairs
.
register_stair_and_slab
(
subname
,
recipeitem
,
groups
,
images
,
desc_stair
,
desc_slab
,
sounds
)
stairs
.
register_stair
(
subname
,
recipeitem
,
groups
,
images
,
desc_stair
,
sounds
)
stairs
.
register_stair
(
subname
,
recipeitem
,
groups
,
images
,
desc_stair
,
sounds
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment