mirror of
https://github.com/mt-mods/xcompat.git
synced 2025-10-29 07:25:22 +01:00
add stairs api (#56)
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
globals = {
|
||||
"minetest",
|
||||
"core",
|
||||
"xcompat",
|
||||
}
|
||||
|
||||
read_globals = {
|
||||
string = {fields = {"split"}},
|
||||
table = {fields = {"copy", "getn"}},
|
||||
|
||||
"default",
|
||||
"mcl_sounds",
|
||||
"ks_sounds",
|
||||
@@ -18,4 +22,5 @@ read_globals = {
|
||||
"player_api",
|
||||
"mcl_player",
|
||||
"fl_player",
|
||||
"stairs",
|
||||
}
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -1,5 +1,5 @@
|
||||
|
||||
MIT Copyright 2021-2024 wsor4035
|
||||
MIT Copyright 2021-2025 wsor4035, mt-mods and contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
||||
20
README.md
20
README.md
@@ -15,16 +15,16 @@ See the respective sub apis doc file in /doc for detailed documentation.
|
||||
|
||||
## Directly supported games and mods
|
||||
|
||||
| Games | Sounds | Materials | Textures | Player |
|
||||
| ----------------- | --------- | --------- | --------- | ------ |
|
||||
| Minetest Game | x | x | x | x |
|
||||
| MineClone2 | x | x | | x |
|
||||
| Mineclonia | x | x | | x |
|
||||
| Hades Revisited | x | x | | |
|
||||
| Farlands Reloaded | x | x | x | x |
|
||||
| Exile | x | | | |
|
||||
| KSurvive 2 | x | | | |
|
||||
| Forgotten Lands | x | | | |
|
||||
| Games | Sounds | Materials | Textures | Player | Stairs |
|
||||
| ----------------- | --------- | --------- | --------- | ------ | ------ |
|
||||
| Minetest Game | x | x | x | x | x |
|
||||
| MineClone2 | x | x | | x | |
|
||||
| Mineclonia | x | x | | x | |
|
||||
| Hades Revisited | x | x | | | |
|
||||
| Farlands Reloaded | x | x | x | x | x |
|
||||
| Exile | x | | | | |
|
||||
| KSurvive 2 | x | | | | |
|
||||
| Forgotten Lands | x | | | | |
|
||||
|
||||
For functions see /doc/functions.md for the specifics relating to the function
|
||||
|
||||
|
||||
30
doc/stairs.md
Normal file
30
doc/stairs.md
Normal file
@@ -0,0 +1,30 @@
|
||||
you can use this via `xcompat.stairs.register(nodename, def)`
|
||||
|
||||
an example would be:
|
||||
```lua
|
||||
xcompat.stairs.register(
|
||||
"xcompat_stairs_test:fake_node",
|
||||
core.registered_nodes["xcompat_stairs_test:fake_node"]
|
||||
)
|
||||
```
|
||||
|
||||
if the game you are running on isnt supported (see readme),
|
||||
it falls back to using a polyfill. each backend adds aliases
|
||||
to the polyfill, mainly so that if we add a future backend
|
||||
that ran on polyfill, everything keeps working (yay)
|
||||
|
||||
at this time stairsplus/moreblocks compatibility/upgrading
|
||||
isnt supported, however should be added in the future. for
|
||||
now, in your mod code do something like the following:
|
||||
|
||||
```lua
|
||||
if core.registered_modes("moreblocks") then
|
||||
--call stairs plus
|
||||
else
|
||||
xcompat.stairs.register(node, def)
|
||||
end
|
||||
```
|
||||
|
||||
that way in the future nothing will break when support is
|
||||
added and at your convince the first part of the if can be
|
||||
removed
|
||||
1
init.lua
1
init.lua
@@ -12,6 +12,7 @@ xcompat.materials = dofile(modpath .. "/src/materials.lua")
|
||||
xcompat.textures = dofile(modpath .. "/src/textures.lua")
|
||||
xcompat.functions = dofile(modpath .. "/src/functions.lua")
|
||||
xcompat.player = dofile(modpath .. "/src/player.lua")
|
||||
xcompat.stairs = dofile(modpath .. "/src/stairs.lua")
|
||||
|
||||
local function validate_sound(key)
|
||||
if key and xcompat.sounds[key] then
|
||||
|
||||
2
mod.conf
2
mod.conf
@@ -1,3 +1,3 @@
|
||||
name = xcompat
|
||||
description = Provides cross compatibility between mods and games for sounds and crafting materials.
|
||||
optional_depends = default, fl_stone, fl_trees, mcl_sounds, hades_sounds, ks_sounds, nodes_nature, fl_topsoil, fl_trees, mcl_core, farming, x_farming, sounds, mtt, player_api, mcl_player, fl_player
|
||||
optional_depends = default, fl_stone, fl_trees, mcl_sounds, hades_sounds, ks_sounds, nodes_nature, fl_topsoil, fl_trees, mcl_core, farming, x_farming, sounds, mtt, player_api, mcl_player, fl_player, stairs
|
||||
|
||||
8
src/stairs.lua
Normal file
8
src/stairs.lua
Normal file
@@ -0,0 +1,8 @@
|
||||
local filename = xcompat.gameid
|
||||
|
||||
--if we dont have a stairs file for the game, use xcompat_agnostic
|
||||
if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/stairs/" .. filename .. ".lua") then
|
||||
filename = "xcompat_agnostic"
|
||||
end
|
||||
|
||||
return dofile(xcompat.modpath .. "/src/stairs/" .. filename .. ".lua")
|
||||
25
src/stairs/farlands_reloaded.lua
Normal file
25
src/stairs/farlands_reloaded.lua
Normal file
@@ -0,0 +1,25 @@
|
||||
local function register(name, _)
|
||||
local splitName = name:split(":")
|
||||
local sName = splitName[2]
|
||||
|
||||
local groups = core.registered_nodes[name].groups
|
||||
groups.stairable = 1
|
||||
|
||||
core.override_item(name, {groups = groups})
|
||||
|
||||
local flStairNameOverrides = {
|
||||
["stair_inner"] = "inner_stair",
|
||||
["stair_outer"] = "outer_stair"
|
||||
}
|
||||
|
||||
for _, type in pairs({"slab", "stair", "stair_inner", "stair_outer"}) do
|
||||
|
||||
|
||||
minetest.register_alias(
|
||||
splitName[1] .. ":" .. type .. "_" .. sName,
|
||||
splitName[1] .. ":" .. sName .. "_" .. (flStairNameOverrides[type] or type)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
return {register = register}
|
||||
19
src/stairs/minetest.lua
Normal file
19
src/stairs/minetest.lua
Normal file
@@ -0,0 +1,19 @@
|
||||
local function register(name, def)
|
||||
local splitName = name:split(":")
|
||||
local sName = splitName[2]
|
||||
|
||||
stairs.register_stair_and_slab(
|
||||
sName,
|
||||
nil,
|
||||
def.groups,
|
||||
def.tiles,
|
||||
def.description,
|
||||
def.sounds
|
||||
)
|
||||
|
||||
for _, type in pairs({"slab", "stair", "stair_inner", "stair_outer"}) do
|
||||
minetest.register_alias(splitName[1] .. ":" .. type .. "_" .. sName, "stairs:" .. type .. "_" .. sName)
|
||||
end
|
||||
end
|
||||
|
||||
return {register = register}
|
||||
48
src/stairs/xcompat_agnostic.lua
Normal file
48
src/stairs/xcompat_agnostic.lua
Normal file
@@ -0,0 +1,48 @@
|
||||
local stairtable = {
|
||||
{
|
||||
"slab",
|
||||
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||
},
|
||||
{
|
||||
"stair",
|
||||
{
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
||||
{-0.5, 0.0, 0.0, 0.5, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
{
|
||||
"stair_inner",
|
||||
{
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
||||
{-0.5, 0.0, 0.0, 0.5, 0.5, 0.5},
|
||||
{-0.5, 0.0, -0.5, 0.0, 0.5, 0.0},
|
||||
},
|
||||
},
|
||||
{
|
||||
"stair_outer",
|
||||
{
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
||||
{-0.5, 0.0, 0.0, 0.0, 0.5, 0.5},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local function register(name, def)
|
||||
for _, sdef in pairs(stairtable) do
|
||||
local split = name:split(":")
|
||||
local ndef = table.copy(def)
|
||||
local item_name = ":" .. sdef[1] .. "_" .. split[2]
|
||||
|
||||
ndef.description = def.description .. " " .. string.gsub(sdef[1], "_", " ")
|
||||
ndef.paramtype, ndef.paramtype2 = "light", "facedir"
|
||||
ndef.drawtype = "nodebox"
|
||||
ndef.node_box = {
|
||||
type = "fixed",
|
||||
fixed = sdef[2],
|
||||
}
|
||||
|
||||
minetest.register_node(":" .. split[1] .. item_name, ndef)
|
||||
end
|
||||
end
|
||||
|
||||
return {register = register}
|
||||
Reference in New Issue
Block a user