mirror of
				https://github.com/mt-mods/xcompat.git
				synced 2025-11-04 02:05:27 +01:00 
			
		
		
		
	add player compatibility api (#41)
This commit is contained in:
		@@ -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
 | 
			
		||||
 | 
			
		||||
[](https://github.com/mt-mods/xcompat/actions)
 | 
			
		||||
[](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml)
 | 
			
		||||
[](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
 | 
			
		||||
		Reference in New Issue
	
	Block a user