mirror of
https://github.com/mt-mods/xcompat.git
synced 2025-01-22 00:00:27 +01:00
add player compatibility api (#41)
This commit is contained in:
parent
931a16803e
commit
b18dc7ba14
@ -15,4 +15,7 @@ read_globals = {
|
||||
"rp_sounds",
|
||||
"mtt",
|
||||
"sounds",
|
||||
"player_api",
|
||||
"mcl_player",
|
||||
"fl_player",
|
||||
}
|
||||
|
22
README.md
22
README.md
@ -1,6 +1,6 @@
|
||||
# XCompat
|
||||
|
||||
[![luacheck](https://github.com/mt-mods/xcompat/workflows/luacheck/badge.svg)](https://github.com/mt-mods/xcompat/actions)
|
||||
[![luacheck](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml/badge.svg?branch=master)](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml)
|
||||
[![ContentDB](https://content.minetest.net/packages/mt-mods/xcompat/shields/downloads/)](https://content.minetest.net/packages/mt-mods/xcompat/)
|
||||
|
||||
Provides cross compatibility between games and mods for sounds and crafting materials.
|
||||
@ -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 |
|
||||
| ----------------- | --------- | --------- | --------- |
|
||||
| Minetest Game | x | x | x |
|
||||
| MineClone2 | x | x | |
|
||||
| Mineclonia | x | x | |
|
||||
| Hades Revisited | x | x | |
|
||||
| Farlands Reloaded | x | x | x |
|
||||
| Exile | x | | |
|
||||
| KSurvive 2 | x | | |
|
||||
| Forgotten Lands | x | | |
|
||||
| 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 | | | |
|
||||
|
||||
For functions see /doc/functions.md for the specifics relating to the function
|
||||
|
||||
|
13
doc/player.md
Normal file
13
doc/player.md
Normal file
@ -0,0 +1,13 @@
|
||||
# Player API
|
||||
|
||||
mimic mtg player_api
|
||||
|
||||
## NOTE
|
||||
|
||||
`xcompat.player.player_attached`
|
||||
|
||||
read/write from it is fine, looping over it is not as it is a proxy table. this
|
||||
would need lua5.2 __pairs/__ipairs metamethods support which i could polyfill
|
||||
for using https://stackoverflow.com/a/77354254 but didnt feel like doing at
|
||||
this time. (luajit supports this via 5.2 extensions). additionally see issue:
|
||||
https://github.com/minetest/minetest/issues/15133
|
1
init.lua
1
init.lua
@ -11,6 +11,7 @@ xcompat.sounds = dofile(modpath .. "/src/sounds.lua")
|
||||
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")
|
||||
|
||||
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
|
||||
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
|
||||
|
8
src/player.lua
Normal file
8
src/player.lua
Normal file
@ -0,0 +1,8 @@
|
||||
local filename = xcompat.gameid
|
||||
|
||||
--if we dont have a player file for the game, use minetest
|
||||
if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/player/" .. filename .. ".lua") then
|
||||
filename = "xcompat_agnostic"
|
||||
end
|
||||
|
||||
return dofile(xcompat.modpath .. "/src/player/" .. filename .. ".lua")
|
51
src/player/farlands_reloaded.lua
Normal file
51
src/player/farlands_reloaded.lua
Normal file
@ -0,0 +1,51 @@
|
||||
local papi = {}
|
||||
|
||||
local models = {}
|
||||
function papi.register_model(name, def)
|
||||
models[name] = def
|
||||
end
|
||||
|
||||
function papi.set_model(player, model_name)
|
||||
local model = models[model_name]
|
||||
|
||||
if not model then return end
|
||||
|
||||
player:set_properties({
|
||||
mesh = model_name,
|
||||
textures = model.textures,
|
||||
visual = "mesh",
|
||||
visual_size = model.visual_size,
|
||||
stepheight = model.stepheight
|
||||
})
|
||||
end
|
||||
|
||||
function papi.get_animation(_)
|
||||
--stub to keep from crashing
|
||||
end
|
||||
|
||||
function papi.get_textures(player)
|
||||
return player:get_properties().textures
|
||||
end
|
||||
|
||||
function papi.set_textures(player, textures)
|
||||
player:set_properties({textures = textures})
|
||||
end
|
||||
|
||||
function papi.set_animation(player, anim_name, speed, loop)
|
||||
player:set_animation(fl_player.animations[anim_name], speed, 0, loop)
|
||||
end
|
||||
|
||||
local metatable = {
|
||||
__index = function (_, key)
|
||||
return fl_player.ignore[key]
|
||||
end,
|
||||
__newindex = function (_, key, value)
|
||||
rawset(fl_player.ignore, key, value)
|
||||
end
|
||||
}
|
||||
|
||||
papi.player_attached = {}
|
||||
|
||||
setmetatable(papi.player_attached, metatable)
|
||||
|
||||
return papi
|
40
src/player/mineclonia.lua
Normal file
40
src/player/mineclonia.lua
Normal file
@ -0,0 +1,40 @@
|
||||
local papi = {}
|
||||
|
||||
function papi.register_model(name, def)
|
||||
return mcl_player.player_register_model(name, def)
|
||||
end
|
||||
|
||||
function papi.set_model(player, model)
|
||||
return mcl_player.player_set_model(player, model)
|
||||
end
|
||||
|
||||
function papi.get_animation(player)
|
||||
return mcl_player.player_get_animation(player)
|
||||
end
|
||||
|
||||
function papi.get_textures(player)
|
||||
return player:get_properties().textures
|
||||
end
|
||||
|
||||
function papi.set_textures(player, textures)
|
||||
player:set_properties({textures = textures})
|
||||
end
|
||||
|
||||
function papi.set_animation(player, anim_name, speed, _)
|
||||
return mcl_player.player_set_animation(player, anim_name, speed)
|
||||
end
|
||||
|
||||
local metatable = {
|
||||
__index = function (_, key)
|
||||
return mcl_player.player_attached[key]
|
||||
end,
|
||||
__newindex = function (_, key, value)
|
||||
rawset(mcl_player.player_attached, key, value)
|
||||
end
|
||||
}
|
||||
|
||||
papi.player_attached = {}
|
||||
|
||||
setmetatable(papi.player_attached, metatable)
|
||||
|
||||
return papi
|
41
src/player/minetest.lua
Normal file
41
src/player/minetest.lua
Normal file
@ -0,0 +1,41 @@
|
||||
local papi = {}
|
||||
|
||||
function papi.register_model(name, def)
|
||||
return player_api.register_model(name, def)
|
||||
end
|
||||
|
||||
function papi.set_model(player, model)
|
||||
return player_api.set_model(player, model)
|
||||
end
|
||||
|
||||
function papi.get_animation(player)
|
||||
return player_api.get_animation(player)
|
||||
end
|
||||
|
||||
function papi.get_textures(player)
|
||||
return player_api.get_textures(player)
|
||||
end
|
||||
|
||||
function papi.set_textures(player, texture)
|
||||
return player_api.set_textures(player, texture)
|
||||
end
|
||||
|
||||
function papi.set_animation(player, anim_name, speed, loop)
|
||||
return player_api.set_animation(player, anim_name, speed, loop)
|
||||
end
|
||||
|
||||
|
||||
local metatable = {
|
||||
__index = function (_, key)
|
||||
return player_api.player_attached[key]
|
||||
end,
|
||||
__newindex = function (_, key, value)
|
||||
rawset(player_api.player_attached, key, value)
|
||||
end
|
||||
}
|
||||
|
||||
papi.player_attached = {}
|
||||
|
||||
setmetatable(papi.player_attached, metatable)
|
||||
|
||||
return papi
|
41
src/player/xcompat_agnostic.lua
Normal file
41
src/player/xcompat_agnostic.lua
Normal file
@ -0,0 +1,41 @@
|
||||
local papi = {}
|
||||
|
||||
local models = {}
|
||||
function papi.register_model(name, def)
|
||||
models[name] = def
|
||||
end
|
||||
|
||||
function papi.set_model(player, model_name)
|
||||
local model = models[model_name]
|
||||
|
||||
if not model then return end
|
||||
|
||||
player:set_properties({
|
||||
mesh = model_name,
|
||||
textures = model.textures,
|
||||
visual = "mesh",
|
||||
visual_size = model.visual_size,
|
||||
stepheight = model.stepheight
|
||||
})
|
||||
end
|
||||
|
||||
function papi.get_animation(_)
|
||||
--stub to keep from crashing
|
||||
end
|
||||
|
||||
function papi.get_textures(player)
|
||||
return player:get_properties().textures
|
||||
end
|
||||
|
||||
function papi.set_textures(player, textures)
|
||||
player:set_properties({textures = textures})
|
||||
end
|
||||
|
||||
function papi.set_animation(_, _, _, _)
|
||||
--stub to keep from crashing
|
||||
end
|
||||
|
||||
--nothing to do here as we have no globalstep .....that we know about anyways
|
||||
papi.player_attached = {}
|
||||
|
||||
return papi
|
Loading…
Reference in New Issue
Block a user