Mods in den Spieleordner reingeschoben. So richtig tief.

This commit is contained in:
N-Nachtigal 2025-05-08 22:41:25 +02:00
parent b4b6c08f4f
commit f7bc25a670
1674 changed files with 56056 additions and 530 deletions

View file

@ -0,0 +1,23 @@
name: farlands_reloaded
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@main
- uses: buckaroobanzay/mtt@main
with:
modname: xcompat
git_game_repo: https://github.com/TerraQuest-Studios/farlands_reloaded
git_dependencies: |
https://github.com/mt-mods/unifieddyes
https://github.com/mt-mods/basic_materials
https://github.com/OgelGames/fakelib
https://github.com/mt-mods/pipeworks
https://github.com/mt-mods/steel
https://github.com/mt-mods/display_modpack
https://github.com/mt-mods/homedecor_modpack
additional_config: |
mtt_nodelist = farlands_reloaded.txt

View file

@ -0,0 +1,23 @@
name: hades_revisited
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@main
- uses: buckaroobanzay/mtt@main
with:
modname: xcompat
git_game_repo: https://codeberg.org/Wuzzy/Hades_Revisited
git_dependencies: |
https://github.com/mt-mods/unifieddyes
https://github.com/mt-mods/basic_materials
https://github.com/OgelGames/fakelib
https://github.com/mt-mods/pipeworks
https://github.com/mt-mods/steel
https://github.com/mt-mods/display_modpack
https://github.com/mt-mods/homedecor_modpack
additional_config: |
mtt_nodelist = hades_revisited.txt

View file

@ -0,0 +1,10 @@
name: luacheck
on: [push, pull_request]
jobs:
luacheck:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@main
- name: Luacheck
uses: lunarmodules/luacheck@master

View file

@ -0,0 +1,23 @@
name: mineclonia
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@main
- uses: buckaroobanzay/mtt@main
with:
modname: xcompat
git_game_repo: https://codeberg.org/mineclonia/mineclonia
git_dependencies: |
https://github.com/mt-mods/unifieddyes
https://github.com/mt-mods/basic_materials
https://github.com/OgelGames/fakelib
https://github.com/mt-mods/pipeworks
https://github.com/mt-mods/steel
https://github.com/mt-mods/display_modpack
https://github.com/mt-mods/homedecor_modpack
additional_config: |
mtt_nodelist = mineclonia.txt

View file

@ -0,0 +1,23 @@
name: minetest_game
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@main
- uses: buckaroobanzay/mtt@main
with:
modname: xcompat
git_game_repo: https://github.com/minetest/minetest_game
git_dependencies: |
https://github.com/mt-mods/unifieddyes
https://github.com/mt-mods/basic_materials
https://github.com/OgelGames/fakelib
https://github.com/mt-mods/pipeworks
https://github.com/mt-mods/steel
https://github.com/mt-mods/display_modpack
https://github.com/mt-mods/homedecor_modpack
additional_config: |
mtt_nodelist = minetest.txt

View file

@ -0,0 +1,23 @@
name: voxelibre
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@main
- uses: buckaroobanzay/mtt@main
with:
modname: xcompat
git_game_repo: https://git.minetest.land/VoxeLibre/VoxeLibre/
git_dependencies: |
https://github.com/mt-mods/unifieddyes
https://github.com/mt-mods/basic_materials
https://github.com/OgelGames/fakelib
https://github.com/mt-mods/pipeworks
https://github.com/mt-mods/steel
https://github.com/mt-mods/display_modpack
https://github.com/mt-mods/homedecor_modpack
additional_config: |
mtt_nodelist = voxelibre.txt

21
mods/xcompat/.luacheckrc Normal file
View file

@ -0,0 +1,21 @@
globals = {
"minetest",
"xcompat",
}
read_globals = {
"default",
"mcl_sounds",
"ks_sounds",
"nodes_nature",
"fl_stone",
"fl_topsoil",
"fl_trees",
"hades_sounds",
"rp_sounds",
"mtt",
"sounds",
"player_api",
"mcl_player",
"fl_player",
}

19
mods/xcompat/LICENSE Normal file
View file

@ -0,0 +1,19 @@
MIT Copyright 2021-2024 wsor4035
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
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

34
mods/xcompat/README.md Normal file
View file

@ -0,0 +1,34 @@
# XCompat
[![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.
Thanks to:
* MisterE, OgelGames, and Blockhead for naming advice/suggestion.
* luk3yx, Blockhead, BuckarooBanzai for bouncing ideas on the concept of this mod.
## Usage
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 | | | |
For functions see /doc/functions.md for the specifics relating to the function
**Mods**
* `basic_materials`
* `mesecons_materials`
* `moreores`

View file

@ -0,0 +1,13 @@
# Functions API
## `can_interact_with_node(player, pos)`
returns `bool`
checks for the ability to interact with a node via:
* if a player
* owner metadata key
* protection_bypass
supports
* minetest game default if present
* else polyfill

View file

@ -0,0 +1,12 @@
# GameId API
## minetest versions >= 5.7
simply returns `minetest.get_game_info().id`
## minetest versions < 5.7
approximates the gameid value via a hardcoded table of gameid=>modname
and then checks via `minetest.get_modpath()`. If it fails, it falls
back to using `xcompat_unknown_gameid` as the id. See the chart in the
readme for which games are supported

View file

@ -0,0 +1,3 @@
# Materials API
consult `/src/materials/minetest.lua` at this time

View 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

View file

@ -0,0 +1,35 @@
# Sound API
## Option 1: Agnostically depend
You can do this by using a custom field in your node def instead of the `sounds` key.
```lua
minetest.register_node(nodename, {
...
_sound_def = {
key = "",
input = {},
},
...
})
```
where:
* key: string name of the field from the sound api you want to use, for example `node_sound_stone_defaults`
* input: table input of fields you want passed to the key field, used to override specific sounds.
## Option 2: Hard depend
add this mod to your mod.confs depends and directly call the sound_api as follows
```lua
minetest.register_node(nodename, {
...
sounds = xcompat.sounds.node_sound_stone_defaults(input)
...
})
```
* input: optional table to override some or all of returned values

View file

@ -0,0 +1,3 @@
# Textures API
consult `/src/texture/minetest.lua` at this time

View file

@ -0,0 +1,2 @@
test export-ignore
.github export-ignore

51
mods/xcompat/init.lua Normal file
View file

@ -0,0 +1,51 @@
local modpath = minetest.get_modpath("xcompat")
xcompat = {
modpath = modpath,
}
xcompat.gameid = dofile(modpath .. "/src/gameid.lua")
xcompat.utilities = dofile(modpath .. "/src/utilities.lua")
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
return true
elseif key then
minetest.log("warning", "attempted to call invalid sound: "..key)
else
minetest.log("warning", "sound_def is missing a sound_api key")
end
return false
end
minetest.register_on_mods_loaded(function()
for name, def in pairs(minetest.registered_nodes) do
if def._sound_def and validate_sound(def._sound_def.key) then
minetest.override_item(name, {
sounds = xcompat.sounds[def._sound_def.key](def._sound_def.input)
})
end
end
local old_reg_node = minetest.register_node
function minetest.register_node(name, def)
if def._sound_def and validate_sound(def._sound_def.key) then
def.sounds = xcompat.sounds[def._sound_def.key](def._sound_def.input)
end
old_reg_node(name, def)
end
end)
dofile(modpath .. "/src/commands.lua")
if minetest.get_modpath("mtt") and mtt.enabled then
-- register tests
dofile(modpath .. "/mtt.lua")
end

6
mods/xcompat/mod.conf Normal file
View file

@ -0,0 +1,6 @@
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
release = 30345
author = mt-mods
title = Xcompat

10
mods/xcompat/mtt.lua Normal file
View file

@ -0,0 +1,10 @@
-- emerge a part of the world (basic smoketest)
mtt.emerge_area({ x=0, y=0, z=0 }, { x=10, y=10, z=10 })
-- check nodelist
local mtt_nodelist = minetest.settings:get("mtt_nodelist")
if mtt_nodelist then
-- nodelist specified, check if all the required nodes are present
mtt.validate_nodenames(minetest.get_modpath("xcompat") .. "/test/nodelist/" .. mtt_nodelist)
end

View file

@ -0,0 +1,76 @@
local materials_list = minetest.get_dir_list(xcompat.modpath.."/src/materials", false)
local materials = {}
for _, material in ipairs(materials_list) do
local gameid = material:sub(1, -5)
materials[gameid] = dofile(xcompat.modpath.."/src/materials/"..material)
end
local textures_list = minetest.get_dir_list(xcompat.modpath.."/src/textures", false)
local textures = {}
for _, texture in ipairs(textures_list) do
local gameid = texture:sub(1, -5)
textures[gameid] = dofile(xcompat.modpath.."/src/textures/"..texture)
end
local sounds_list = minetest.get_dir_list(xcompat.modpath.."/src/sounds", false)
local sounds = {}
for _, sound in ipairs(sounds_list) do
local gameid = sound:sub(1, -5)
sounds[gameid] = dofile(xcompat.modpath.."/src/sounds/"..sound)
end
minetest.register_chatcommand("xcompat_test_materials", {
description = "Test materials",
privs = {server=true},
func = function(name, _)
local reference_materials = materials["minetest"]
for gameid, game_materials in pairs(materials) do
for material, _ in pairs(reference_materials) do
if not game_materials[material] then
minetest.chat_send_player(name, "Missing material: "..material.." in game: "..gameid)
end
end
end
minetest.chat_send_player(name, "Materials test complete")
end
})
--WARNING: only handles top level of table currently
--TODO: handle nested tables
minetest.register_chatcommand("xcompat_test_textures", {
description = "Test textures",
privs = {server=true},
func = function(name, _)
local reference_textures = textures["xcompat_agnostic"]
for gameid, game_textures in pairs(textures) do
for texture, _ in pairs(reference_textures) do
if not game_textures[texture] then
minetest.chat_send_player(name, "Missing texture: "..texture.." in game: "..gameid)
end
end
end
minetest.chat_send_player(name, "Textures test complete")
end
})
minetest.register_chatcommand("xcompat_test_sounds", {
description = "Test sounds",
privs = {server=true},
func = function(name, _)
local reference_sounds = sounds["xcompat_agnostic"]
for gameid, game_sounds in pairs(sounds) do
for sound, _ in pairs(reference_sounds) do
if not game_sounds[sound] then
minetest.chat_send_player(name, "Missing sound: "..sound.." in game: "..gameid)
end
end
end
minetest.chat_send_player(name, "Sounds test complete")
end
})

View file

@ -0,0 +1,55 @@
local functions = {}
function functions.can_interact_with_node(player, pos)
--if we have default, use it
if default then return default.can_interact_with_node(player, pos) end
local owner = minetest.get_meta(pos):get_string("owner") or ""
--check that we have a valid player
if not player or not player:is_player() then return false end
--check there privs for compat with areas
if minetest.check_player_privs(player, "protection_bypass") then return true end
--if a normal player, check if they are the owner
if owner == "" or owner == player:get_player_name() then return true end
return false
end
function functions.sapling_on_place(
itemstack, player, pointed_thing, sapling_name, minp_relative, maxp_relative, interval
)
if default then
return default.sapling_on_place(
itemstack, player, pointed_thing, sapling_name, minp_relative, maxp_relative, interval
)
end
local pos = pointed_thing.above
local pname = player and player:get_player_name() or ""
local below_node = minetest.get_node_or_nil(pointed_thing.under)
if below_node and minetest.registered_items[below_node.name] and
minetest.registered_items[below_node.name].buildable_to then
pos = pointed_thing.under
end
--check protection
if minetest.is_protected(pos, pname) then
minetest.record_protection_violation(pos, pname)
return itemstack
end
--actually place sapling
minetest.set_node(pos, {name = sapling_name})
--handle survival
if not minetest.is_creative_enabled(pname) then
itemstack:take_item()
end
return itemstack
end
return functions

View file

@ -0,0 +1,33 @@
local game_alias = {
mineclone2 = "mineclonia",
}
local game_modnames = {
mineclonia = "mcl_core",
farlands_reloaded = "fl_core",
minetest = "default",
hades = "hades_core",
exile = "exile_env_sounds",
ksurvive2 = "ks_metals",
}
local gameid = "xcompat_unknown_gameid"
if type(minetest.get_game_info) == "function" then
gameid = minetest.get_game_info().id
else
for game, modname in pairs(game_modnames) do
if minetest.get_modpath(modname) then
gameid = game
break
end
end
end
--for games that are similar/derviatives of other games
if game_alias[gameid] then gameid = game_alias[gameid] end
--while minetest game derviates are not supported, we can still try to detect them
if minetest.get_modpath("default") then gameid = "minetest" end
return gameid

View file

@ -0,0 +1,8 @@
local filename = xcompat.gameid
--if we dont have a materials file for the game, use minetest
if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/materials/" .. filename .. ".lua") then
filename = "minetest"
end
return dofile(xcompat.modpath .. "/src/materials/" .. filename .. ".lua")

View file

@ -0,0 +1,106 @@
local materials = {
sand = "default:sand",
sandstone = "default:sandstone",
gravel = "default:gravel",
flint = "default:flint",
copper_ingot = "default:copper_ingot",
steel_ingot = "default:steel_ingot",
gold_ingot = "default:gold_ingot",
tin_ingot = "default:tin_ingot",
copper_block = "default:copperblock",
steel_block = "default:steelblock",
gold_block = "default:goldblock",
tin_block = "default:tinblock",
axe_steel = "default:axe_steel",
axe_diamond = "default:axe_diamond",
axe_bronze = "default:axe_bronze",
axe_stone = "default:axe_stone",
axe_wood = "default:axe_wood",
pick_steel = "default:pick_steel",
mese = "default:mese",
mese_crystal = "default:mese_crystal",
mese_crystal_fragment = "default:mese_crystal_fragment",
torch = "default:torch",
diamond = "default:diamond",
clay_lump = "default:clay_lump",
water_bucket = "bucket:bucket_water",
empty_bucket = "bucket:bucket_empty",
dye_dark_grey = "dye:dark_grey",
dye_black = "dye:black",
dye_white = "dye:white",
dye_green = "dye:green",
dye_red = "dye:red",
dye_yellow = "dye:yellow",
dye_brown = "dye:brown",
dye_blue = "dye:blue",
dye_violet = "dye:violet",
dye_grey = "dye:grey",
dye_dark_green = "dye:dark_green",
dye_orange = "dye:orange",
dye_pink = "dye:pink",
dye_cyan = "dye:cyan",
dye_magenta = "dye:magenta",
silicon = "mesecons_materials:silicon",
string = "farming:string",
paper = "default:paper",
book = "default:book",
iron_lump = "default:iron_lump",
wool_grey = "wool:grey",
wool_green = "wool:green",
wool_dark_green = "wool:dark_green",
wool_brown = "wool:brown",
wool_black = "wool:black",
wool_white = "wool:white",
slab_stone = "stairs:slab_stone",
slab_wood = "stairs:slab_wood",
glass = "default:glass",
glass_block = "default:glass",
glass_bottle = "vessels:glass_bottle",
coal_lump = "default:coal_lump",
stone = "default:stone",
desert_stone = "default:desert_stone",
desert_sand = "default:desert_sand",
chest = "default:chest",
cobble = "default:cobble",
brick = "default:brick",
obsidian_glass = "default:obsidian_glass",
water_source = "default:water_source",
water_flowing = "default:water_flowing",
dirt = "default:dirt",
dirt_with_grass = "default:dirt_with_grass",
apple_leaves = "default:leaves",
apple_log = "default:tree",
apple_planks = "default:wood",
birch_leaves = "default:aspen_leaves",
birch_log = "default:aspen_tree",
birch_planks = "default:aspen_wood",
jungle_leaves = "default:jungleleaves",
bowl = "",
stick = "default:stick",
}
if minetest.registered_items["farming:bowl"] then
materials.bowl = "farming:bowl"
elseif minetest.get_modpath("x_farming") then
materials.bowl = "x_farming:bowl"
end
if minetest.get_modpath("moreores") then
materials.silver_ingot = "moreores:silver_ingot"
end
if minetest.get_modpath("technic") then
materials.lead_ingot = "technic:lead_ingot"
materials.carbon_steel_ingot = "technic:carbon_steel_ingot"
materials.stainless_steel_ingot = "technic:stainless_steel_ingot"
end
if minetest.get_modpath("aloz") then
materials.aluminum_ingot = "aloz:aluminum_ingot"
end
if minetest.get_modpath("techage") then
materials.aluminum_ingot = "techage:aluminum"
end
return materials

View file

@ -0,0 +1,93 @@
local materials = {
sand = "fl_stone:sand",
sandstone = "fl_stone:sandstone",
gravel = "fl_topsoil:gravel",
flint = "fl_topsoil:flint",
copper_ingot = "fl_ores:copper_ingot",
steel_ingot = "fl_ores:iron_ingot",
gold_ingot = "fl_ores:gold_ingot",
tin_ingot = "fl_ores:tin_ingot",
copper_block = "fl_ores:copper_block",
steel_block = "fl_ores:iron_block",
gold_block = "fl_ores:gold_block",
tin_block = "fl_ores:tin_block",
axe_steel = "fl_tools:steel_axe",
axe_diamond = "fl_tools:diamond_axe",
axe_bronze = "fl_tools:bronze_axe",
axe_stone = "fl_tools:stone_axe",
axe_wood = "fl_tools:wood_axe",
pick_steel = "fl_tools:steel_pick",
mese = "fl_ores:iron_ingot",
mese_crystal = "fl_ores:iron_ingot",
mese_crystal_fragment = "fl_ores:iron_ingot",
torch = "fl_light_sources:torch",
diamond = "fl_ores:diamond",
clay_lump = "fl_bricks:clay_lump",
water_bucket = "fl_bucket:bucket_water",
empty_bucket = "fl_bucket:bucket",
dye_dark_grey = "fl_dyes:dark_grey_dye",
dye_black = "fl_dyes:black_dye",
dye_white = "fl_dyes:white_dye",
dye_green = "fl_dyes:green_dye",
dye_red = "fl_dyes:red_dye",
dye_yellow = "fl_dyes:yellow_dye",
dye_brown = "fl_dyes:brown_dye",
dye_blue = "fl_dyes:blue_dye",
dye_violet = "fl_dyes:violet_dye",
dye_grey = "fl_dyes:grey_dye",
dye_dark_green = "fl_dyes:dark_green_dye",
dye_orange = "fl_dyes:orange_dye",
dye_pink = "fl_dyes:pink_dye",
dye_cyan = "fl_dyes:cyan_dye",
dye_magenta = "fl_dyes:magenta_dye",
silver_ingot = "fl_ores:iron_ingot",
silicon = "mesecons_materials:silicon",
string = "fl_plantlife:oxeye_daisy",
paper = "",
book = "",
iron_lump = "fl_ores:iron_ore",
wool_grey = "",
wool_green = "",
wool_dark_green = "",
wool_brown = "",
wool_black = "",
wool_white = "",
slab_stone = "fl_stone:stone_slab",
slab_wood = "fl_trees:apple_plank_slab",
glass = "fl_glass:framed_glass",
glass_block = "fl_glass:framed_glass",
glass_bottle = "fl_bottles:bottle",
coal_lump = "fl_ores:coal_ore",
stone = "fl_stone:stone",
desert_stone = "fl_stone:desert_stone",
desert_sand = "fl_stone:desert_sand",
chest = "fl_storage:wood_chest",
cobble = "fl_stone:stone_rubble",
brick = "",
obsidian_glass = "",
water_source = "fl_liquids:water_source",
water_flowing = "fl_liquids:water_flowing",
dirt = "fl_stone:dirt",
dirt_with_grass = "fl_topsoil:dirt_with_grass",
apple_leaves = "fl_trees:apple_leaves",
apple_log = "fl_trees:apple_trunk",
apple_planks = "fl_trees:apple_plank",
birch_leaves = "fl_trees:aspen_leaves",
birch_log = "fl_trees:aspen_trunk",
birch_planks = "fl_trees:aspen_plank",
jungle_leaves = "fl_trees:jungletree_leaves",
bowl = "",
stick = "fl_trees:stick",
}
if minetest.get_modpath("basic_materials") then
materials.paper = "basic_materials:plastic_sheet"
end
if minetest.registered_items["farming:bowl"] then
materials.bowl = "farming:bowl"
elseif minetest.get_modpath("x_farming") then
materials.bowl = "x_farming:bowl"
end
return materials

View file

@ -0,0 +1,107 @@
local materials = {
sand = "hades_core:fertile_sand",
sandstone = "hades_core:sandstone",
gravel = "hades_core:gravel",
flint = "",
copper_ingot = "hades_core:copper_ingot",
steel_ingot = "hades_core:steel_ingot",
gold_ingot = "hades_core:gold_ingot",
tin_ingot = "hades_core:tin_ingot",
silver_ingot = "--unknown--",
copper_block = "hades_core:copperblock",
steel_block = "hades_core:steelblock",
gold_block = "hades_core:goldblock",
tin_block = "hades_core:tinblock",
axe_steel = "hades_core:axe_steel",
axe_diamond = "hades_core:axe_diamond",
axe_bronze = "hades_core:axe_bronze",
axe_stone = "hades_core:axe_stone",
axe_wood = "hades_core:axe_wood",
pick_steel = "hades_core:pick_steel",
mese = "hades_core:mese",
mese_crystal = "hades_core:mese_crystal",
mese_crystal_fragment = "hades_core:mese_crystal_fragment",
torch = "hades_torches:torch",
diamond = "hades_core:diamond",
clay_lump = "hades_core:clay_lump",
clay_brick = "hades_core:clay_brick",
--[[
Since hades doesnt have buckets or water for the user,
using dirt from near water to pull the water out
]]
water_bucket = "hades_core:dirt",
empty_bucket = "hades_core:fertile_sand",
dye_dark_grey = "dye:dark_grey",
dye_black = "dye:black",
dye_white = "dye:white",
dye_green = "dye:green",
dye_red = "dye:red",
dye_yellow = "dye:yellow",
dye_brown = "dye:brown",
dye_blue = "dye:blue",
dye_violet = "dye:violet",
dye_grey = "dye:grey",
dye_dark_green = "dye:dark_green",
dye_orange = "dye:orange",
dye_pink = "dye:pink",
dye_cyan = "dye:cyan",
dye_magenta = "dye:magenta",
silicon = "hades_materials:silicon",
string = "hades_farming:string",
paper = "hades_core:paper",
book = "hades_core:book",
iron_lump = "hades_core:iron_lump",
wool_grey = "wool:grey",
wool_green = "wool:green",
wool_dark_green = "wool:dark_green",
wool_brown = "wool:brown",
wool_black = "wool:black",
wool_white = "wool:white",
slab_stone = "stairs:slab_stone",
slab_wood = "stairs:slab_wood",
glass = "hades_core:glass",
glass_block = "hades_core:glass",
glass_bottle = "vessels:glass_bottle",
obsidian_glass = "hades_core:obsidian_glass",
coal_lump = "hades_core:coal_lump",
stone = "hades_core:stone",
desert_stone = "hades_core:stone_baked",
desert_sand = "hades_core:volcanic_sand",
chest = "hades_chests:chest";
cobble = "hades_core:cobble",
brick = "hades_core:brick",
water_source = "hades_core:water_source",
water_flowing = "hades_core:water_flowing",
dirt = "hades_core:dirt",
dirt_with_grass = "hades_core:dirt_with_grass",
apple_leaves = "hades_trees:leaves",
apple_log = "hades_trees:tree",
apple_planks = "hades_trees:wood",
birch_leaves = "hades_core:birch_leaves",
birch_log = "hades_trees:birch_tree",
birch_planks = "hades_trees:cream_wood",
jungle_leaves = "hades_trees:jungle_leaves",
--hades has no bowl but you get plate on eat so makes most sense?
bowl = "hades_food:plate",
stick = "hades_core:stick",
}
if minetest.get_modpath("hades_bucket") then
materials["water_bucket"] = "hades_bucket:bucket_water"
materials["empty_bucket"] = "hades_bucket:bucket_empty"
end
if minetest.get_modpath("hades_extraores") then
materials["silver_ingot"] = "hades_extraores:silver_ingot"
materials["aluminum_ingot"] = "hades_extraores:aluminum_ingot"
end
if minetest.get_modpath("hades_default") then
materials.desert_sand = "hades_default:desert_sand"
end
if minetest.get_modpath("hades_technic") then
materials.lead_ingot = "hades_technic:lead_ingot"
materials.carbon_steel_ingot = "hades_technic:carbon_steel_ingot"
materials.stainless_steel_ingot = "hades_technic:stainless_steel_ingot"
end
return materials

View file

@ -0,0 +1,117 @@
--note this file handles mineclonia, mineclone2, and its rename voxelibre
local mcl_dyes = minetest.get_modpath("mcl_dyes")
local mcl_dyes_name = mcl_dyes and "mcl_dyes" or "mcl_dye"
local materials = {
sand = "mcl_core:sand",
sandstone = "mcl_core:sandstone",
gravel = "mcl_core:gravel",
flint = "mcl_core:flint",
copper_ingot = "mcl_copper:copper_ingot",
steel_ingot = "mcl_core:iron_ingot",
gold_ingot = "mcl_core:gold_ingot",
tin_ingot = "mcl_core:iron_ingot",
copper_block = "mcl_copper:block",
steel_block = "mcl_core:ironblock",
gold_block = "mcl_core:goldblock",
tin_block = "mcl_core:ironblock",
axe_steel = "mcl_core:axe_steel",
axe_diamond = "mcl_core:axe_diamond",
axe_bronze = "mcl_core:axe_bronze",
axe_stone = "mcl_core:axe_stone",
axe_wood = "mcl_core:axe_wood",
pick_steel = "mcl_core:pick_steel",
torch = "mcl_torches:torch",
diamond = "mcl_core:diamond",
clay_lump = "mcl_core:clay_lump",
water_bucket = "mcl_buckets:bucket_water",
empty_bucket = "mcl_buckets:bucket_empty",
dye_dark_grey = mcl_dyes_name .. ":dark_grey",
dye_black = mcl_dyes_name .. ":black",
dye_white = mcl_dyes_name .. ":white",
dye_green = mcl_dyes_name .. ":green",
dye_red = mcl_dyes_name .. ":red",
dye_yellow = mcl_dyes_name .. ":yellow",
dye_brown = mcl_dyes_name .. ":brown",
dye_blue = mcl_dyes_name .. ":blue",
dye_violet = mcl_dyes_name .. ":violet",
dye_grey = mcl_dyes_name .. ":grey",
dye_dark_green = mcl_dyes_name .. ":dark_green",
dye_orange = mcl_dyes_name .. ":orange",
dye_pink = mcl_dyes_name .. ":pink",
dye_cyan = mcl_dyes_name .. ":cyan",
dye_magenta = mcl_dyes_name .. ":magenta",
silicon = "mcl_core:iron_ingot",
string = "mcl_mobitems:string",
paper = "mcl_core:paper",
book = "mcl_books:book",
iron_lump = "mcl_raw_ores:raw_iron",
wool_grey = "mcl_wool:grey",
wool_green = "mcl_wool:green",
wool_dark_green = "mcl_wool:dark_green",
wool_brown = "mcl_wool:brown",
wool_black = "mcl_wool:black",
wool_white = "mcl_wool:white",
slab_stone = "mcl_stairs:slab_stone",
slab_wood = "mcl_stairs:slab_wood",
glass = "mcl_core:glass",
glass_block = "mcl_core:glass",
glass_bottle = "mcl_potions:glass_bottle",
coal_lump = "mcl_core:coal_lump",
stone = "mcl_core:stone",
desert_stone = "mcl_core:redsandstone",
desert_sand = "mcl_core:sand",
chest = "mcl_chests:chest",
cobble = "mcl_core:cobble",
brick = "mcl_core:brick",
obsidian_glass = "",
water_source = "mcl_core:water_source",
water_flowing = "mcl_core:water_flowing",
dirt = "mcl_core:dirt",
dirt_with_grass = "mcl_core:dirt_with_grass",
bowl = "mcl_core:bowl",
stick = "mcl_core:stick",
}
if minetest.get_modpath("mcl_redstone") then
materials.mese = "mcl_redstone_torch:redstoneblock"
materials.mese_crystal = "mcl_redstone:redstone"
materials.mese_crystal_fragment = "mcl_core:iron_ingot"
else
materials.mese = "mesecons_torch:redstoneblock"
materials.mese_crystal = "mesecons:redstone"
materials.mese_crystal_fragment = "mcl_core:iron_ingot"
end
if minetest.get_modpath("mcl_trees") then
materials.apple_leaves = "mcl_trees:leaves_oak"
materials.apple_log = "mcl_trees:tree_oak"
materials.apple_planks = "mcl_trees:wood_oak"
materials.birch_leaves = "mcl_trees:leaves_birch"
materials.birch_log = "mcl_trees:tree_birch"
materials.birch_planks = "mcl_trees:wood_birch"
materials.jungle_leaves = "mcl_trees:leaves_jungle"
else
materials.apple_leaves = "mcl_core:leaves"
materials.apple_log = "mcl_core:tree"
materials.apple_planks = "mcl_core:wood"
materials.birch_leaves = "mcl_core:birchleaves"
materials.birch_log = "mcl_core:birchtree"
materials.birch_planks = "mcl_core:birchwood"
materials.jungle_leaves = "mcl_core:jungleleaves"
end
if minetest.get_modpath("moreores") then
materials.tin_ingot = "moreores:tin_ingot"
materials.tin_block = "moreores:tin_block"
materials.silver_ingot = "moreores:silver_ingot"
end
if minetest.get_modpath("technic") then
materials.lead_ingot = "technic:lead_ingot"
materials.carbon_steel_ingot = "technic:carbon_steel_ingot"
materials.stainless_steel_ingot = "technic:stainless_steel_ingot"
end
return materials

View file

@ -0,0 +1,106 @@
local materials = {
sand = "default:sand",
sandstone = "default:sandstone",
gravel = "default:gravel",
flint = "default:flint",
copper_ingot = "default:copper_ingot",
steel_ingot = "default:steel_ingot",
gold_ingot = "default:gold_ingot",
tin_ingot = "default:tin_ingot",
copper_block = "default:copperblock",
steel_block = "default:steelblock",
gold_block = "default:goldblock",
tin_block = "default:tinblock",
axe_steel = "default:axe_steel",
axe_diamond = "default:axe_diamond",
axe_bronze = "default:axe_bronze",
axe_stone = "default:axe_stone",
axe_wood = "default:axe_wood",
pick_steel = "default:pick_steel",
mese = "default:mese",
mese_crystal = "default:mese_crystal",
mese_crystal_fragment = "default:mese_crystal_fragment",
torch = "default:torch",
diamond = "default:diamond",
clay_lump = "default:clay_lump",
water_bucket = "bucket:bucket_water",
empty_bucket = "bucket:bucket_empty",
dye_dark_grey = "dye:dark_grey",
dye_black = "dye:black",
dye_white = "dye:white",
dye_green = "dye:green",
dye_red = "dye:red",
dye_yellow = "dye:yellow",
dye_brown = "dye:brown",
dye_blue = "dye:blue",
dye_violet = "dye:violet",
dye_grey = "dye:grey",
dye_dark_green = "dye:dark_green",
dye_orange = "dye:orange",
dye_pink = "dye:pink",
dye_cyan = "dye:cyan",
dye_magenta = "dye:magenta",
silicon = "mesecons_materials:silicon",
string = "farming:string",
paper = "default:paper",
book = "default:book",
iron_lump = "default:iron_lump",
wool_grey = "wool:grey",
wool_green = "wool:green",
wool_dark_green = "wool:dark_green",
wool_brown = "wool:brown",
wool_black = "wool:black",
wool_white = "wool:white",
slab_stone = "stairs:slab_stone",
slab_wood = "stairs:slab_wood",
glass = "default:glass",
glass_block = "default:glass",
glass_bottle = "vessels:glass_bottle",
coal_lump = "default:coal_lump",
stone = "default:stone",
desert_stone = "default:desert_stone",
desert_sand = "default:desert_sand",
chest = "default:chest",
cobble = "default:cobble",
brick = "default:brick",
obsidian_glass = "default:obsidian_glass",
water_source = "default:water_source",
water_flowing = "default:water_flowing",
dirt = "default:dirt",
dirt_with_grass = "default:dirt_with_grass",
apple_leaves = "default:leaves",
apple_log = "default:tree",
apple_planks = "default:wood",
birch_leaves = "default:aspen_leaves",
birch_log = "default:aspen_tree",
birch_planks = "default:aspen_wood",
jungle_leaves = "default:jungleleaves",
bowl = "",
stick = "default:stick",
}
if minetest.registered_items["farming:bowl"] then
materials.bowl = "farming:bowl"
elseif minetest.get_modpath("x_farming") then
materials.bowl = "x_farming:bowl"
end
if minetest.get_modpath("moreores") then
materials.silver_ingot = "moreores:silver_ingot"
end
if minetest.get_modpath("technic") then
materials.lead_ingot = "technic:lead_ingot"
materials.carbon_steel_ingot = "technic:carbon_steel_ingot"
materials.stainless_steel_ingot = "technic:stainless_steel_ingot"
end
if minetest.get_modpath("aloz") then
materials.aluminum_ingot = "aloz:aluminum_ingot"
end
if minetest.get_modpath("techage") then
materials.aluminum_ingot = "techage:aluminum"
end
return materials

View 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")

View 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

View 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

View 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

View 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

View file

@ -0,0 +1,8 @@
local filename = xcompat.gameid
--if we dont have a materials file for the game, use minetest
if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/sounds/" .. filename .. ".lua") then
filename = "xcompat_agnostic"
end
return dofile(xcompat.modpath .. "/src/sounds/" .. filename .. ".lua")

View file

@ -0,0 +1,67 @@
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return nodes_nature.node_sound_default(soundtable)
end
function sound_api.node_sound_stone_defaults(soundtable)
return nodes_nature.node_sound_stone_defaults(soundtable)
end
function sound_api.node_sound_dirt_defaults(soundtable)
return nodes_nature.node_sound_dirt_defaults(soundtable)
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(soundtable)
return sound_api.node_sound_dirt_defaults(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return nodes_nature.node_sound_sand_defaults(soundtable)
end
function sound_api.node_sound_gravel_defaults(soundtable)
return nodes_nature.node_sound_gravel_defaults(soundtable)
end
function sound_api.node_sound_wood_defaults(soundtable)
return nodes_nature.node_sound_wood_defaults(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return nodes_nature.node_sound_leaves_defaults(soundtable)
end
function sound_api.node_sound_glass_defaults(soundtable)
return nodes_nature.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_ice_defaults(soundtable)
--s/ice/glass
return nodes_nature.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_metal_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_water_defaults(soundtable)
return nodes_nature.node_sound_water_defaults(soundtable)
end
function sound_api.node_sound_lava_defaults(soundtable)
--s/lava/water
return nodes_nature.node_sound_water_defaults(soundtable)
end
function sound_api.node_sound_snow_defaults(soundtable)
return nodes_nature.node_sound_snow_defaults(soundtable)
end
function sound_api.node_sound_wool_defaults(soundtable)
return soundtable
end
return sound_api

View file

@ -0,0 +1,65 @@
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return soundtable
end
function sound_api.node_sound_stone_defaults(soundtable)
return fl_stone.sounds.stone(soundtable)
end
function sound_api.node_sound_dirt_defaults(soundtable)
return fl_topsoil.sounds.grass(soundtable)
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(soundtable)
return sound_api.node_sound_dirt_defaults(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return fl_stone.sounds.sand(soundtable)
end
function sound_api.node_sound_gravel_defaults(soundtable)
return fl_topsoil.sounds.gravel(soundtable)
end
function sound_api.node_sound_wood_defaults(soundtable)
return fl_trees.sounds.wood(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_glass_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_ice_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_metal_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_water_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_lava_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_snow_defaults(soundtable)
return fl_topsoil.sounds.snow(soundtable)
end
function sound_api.node_sound_wool_defaults(soundtable)
return soundtable
end
return sound_api

View file

@ -0,0 +1,63 @@
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return soundtable
end
function sound_api.node_sound_stone_defaults(soundtable)
return sounds.stone(soundtable)
end
function sound_api.node_sound_dirt_defaults(soundtable)
return sounds.dirt(soundtable)
end
function sound_api.node_sound_grass_defaults(soundtable)
return sounds.grass(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return sounds.sand(soundtable)
end
function sound_api.node_sound_gravel_defaults(soundtable)
return sounds.gravel(soundtable)
end
function sound_api.node_sound_wood_defaults(soundtable)
return sounds.wood(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_glass_defaults(soundtable)
return sounds.glass(soundtable)
end
function sound_api.node_sound_ice_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_metal_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_water_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_lava_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_snow_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_wool_defaults(soundtable)
return soundtable
end
return sound_api

View file

@ -0,0 +1,66 @@
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return hades_sounds.node_sound_defaults(soundtable)
end
function sound_api.node_sound_stone_defaults(soundtable)
return hades_sounds.node_sound_stone_defaults(soundtable)
end
function sound_api.node_sound_dirt_defaults(soundtable)
return hades_sounds.node_sound_dirt_defaults(soundtable)
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(soundtable)
return hades_sounds.node_sound_grass_defaults(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return hades_sounds.node_sound_sand_defaults(soundtable)
end
function sound_api.node_sound_gravel_defaults(soundtable)
return hades_sounds.node_sound_gravel_defaults(soundtable)
end
function sound_api.node_sound_wood_defaults(soundtable)
return hades_sounds.node_sound_wood_defaults(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return hades_sounds.node_sound_leaves_defaults(soundtable)
end
function sound_api.node_sound_glass_defaults(soundtable)
return hades_sounds.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_ice_defaults(soundtable)
--s/ice/glass
return hades_sounds.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_metal_defaults(soundtable)
return hades_sounds.node_sound_metal_defaults(soundtable)
end
function sound_api.node_sound_water_defaults(soundtable)
return hades_sounds.node_sound_water_defaults(soundtable)
end
function sound_api.node_sound_lava_defaults(soundtable)
return hades_sounds.node_sound_lava_defaults(soundtable)
end
function sound_api.node_sound_snow_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_wool_defaults(soundtable)
return soundtable
end
return sound_api

View file

@ -0,0 +1,107 @@
local sound_api = {}
--ks_sounds conversion
--currently loggy and bedrock are ignored
local ks = {}
function ks.node_sound_defaults(soundtable)
soundtable = soundtable or {}
soundtable.footstep = soundtable.footstep or ks_sounds.generalnode_sounds.footstep
soundtable.dug = soundtable.dug or ks_sounds.generalnode_sounds.dug
soundtable.dig = soundtable.dig or ks_sounds.generalnode_sounds.dig
soundtable.place = soundtable.place or ks_sounds.generalnode_sounds.place
return soundtable
end
function ks.node_sound_wood_defaults(soundtable)
soundtable = soundtable or {}
soundtable.footstep = soundtable.footstep or ks_sounds.woodennode_sounds.footstep
soundtable.dug = soundtable.dug or ks_sounds.woodennode_sounds.dug
soundtable.dig = soundtable.dig or ks_sounds.woodennode_sounds.dig
soundtable.place = soundtable.place or ks_sounds.woodennode_sounds.place
ks.node_sound_defaults(soundtable)
return soundtable
end
function ks.node_sound_leaves_defaults(soundtable)
soundtable = soundtable or {}
soundtable.footstep = soundtable.footstep or ks_sounds.leafynode_sounds.footstep
soundtable.dug = soundtable.dug or ks_sounds.leafynode_sounds.dug
soundtable.dig = soundtable.dig or ks_sounds.leafynode_sounds.dig
soundtable.place = soundtable.place or ks_sounds.leafynode_sounds.place
ks.node_sound_defaults(soundtable)
return soundtable
end
function ks.node_sound_snow_defaults(soundtable)
soundtable = soundtable or {}
soundtable.footstep = soundtable.footstep or ks_sounds.snowynode_sounds.footstep
soundtable.dug = soundtable.dug or ks_sounds.snowynode_sounds.dug
soundtable.dig = soundtable.dig or ks_sounds.snowynode_sounds.dig
soundtable.place = soundtable.place or ks_sounds.snowynode_sounds.place
ks.node_sound_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_default(soundtable)
return ks.node_sound_default(soundtable)
end
function sound_api.node_sound_stone_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_dirt_defaults(soundtable)
return soundtable
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(soundtable)
return sound_api.node_sound_dirt_defaults(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_gravel_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_wood_defaults(soundtable)
return ks.node_sound_wood_default(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return ks.node_sound_leaves_default(soundtable)
end
function sound_api.node_sound_glass_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_ice_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_metal_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_water_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_lava_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_snow_defaults(soundtable)
return ks.node_sound_snow_default(soundtable)
end
function sound_api.node_sound_wool_defaults(soundtable)
return soundtable
end
return sound_api

View file

@ -0,0 +1,67 @@
--note this file handles mineclonia, mineclone2, and its rename voxelibre
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return mcl_sounds.node_sound_defaults(soundtable)
end
function sound_api.node_sound_stone_defaults(soundtable)
return mcl_sounds.node_sound_stone_defaults(soundtable)
end
function sound_api.node_sound_dirt_defaults(soundtable)
return mcl_sounds.node_sound_dirt_defaults(soundtable)
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(soundtable)
return sound_api.node_sound_dirt_defaults(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return mcl_sounds.node_sound_sand_defaults(soundtable)
end
function sound_api.node_sound_gravel_defaults(soundtable)
return mcl_sounds.node_sound_sand_defaults(soundtable)
end
function sound_api.node_sound_wood_defaults(soundtable)
return mcl_sounds.node_sound_wood_defaults(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return mcl_sounds.node_sound_leaves_defaults(soundtable)
end
function sound_api.node_sound_glass_defaults(soundtable)
return mcl_sounds.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_ice_defaults(soundtable)
return mcl_sounds.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_metal_defaults(soundtable)
return mcl_sounds.node_sound_metal_defaults(soundtable)
end
function sound_api.node_sound_water_defaults(soundtable)
return mcl_sounds.node_sound_water_defaults(soundtable)
end
function sound_api.node_sound_lava_defaults(soundtable)
return mcl_sounds.node_sound_lava_defaults(soundtable)
end
function sound_api.node_sound_snow_defaults(soundtable)
return mcl_sounds.node_sound_snow_defaults(soundtable)
end
function sound_api.node_sound_wool_defaults(soundtable)
return mcl_sounds.node_sound_wool_defaults(soundtable)
end
return sound_api

View file

@ -0,0 +1,67 @@
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return default.node_sound_defaults(soundtable)
end
function sound_api.node_sound_stone_defaults(soundtable)
return default.node_sound_stone_defaults(soundtable)
end
function sound_api.node_sound_dirt_defaults(soundtable)
return default.node_sound_dirt_defaults(soundtable)
end
--return dirt as some games use dirt vs grass
function sound_api.node_sound_grass_defaults(soundtable)
return sound_api.node_sound_dirt_defaults(soundtable)
end
function sound_api.node_sound_sand_defaults(soundtable)
return default.node_sound_sand_defaults(soundtable)
end
function sound_api.node_sound_gravel_defaults(soundtable)
return default.node_sound_gravel_defaults(soundtable)
end
function sound_api.node_sound_wood_defaults(soundtable)
return default.node_sound_wood_defaults(soundtable)
end
function sound_api.node_sound_leaves_defaults(soundtable)
return default.node_sound_leaves_defaults(soundtable)
end
function sound_api.node_sound_glass_defaults(soundtable)
return default.node_sound_glass_defaults(soundtable)
end
function sound_api.node_sound_ice_defaults(soundtable)
return default.node_sound_ice_defaults(soundtable)
end
function sound_api.node_sound_metal_defaults(soundtable)
return default.node_sound_metal_defaults(soundtable)
end
function sound_api.node_sound_water_defaults(soundtable)
return default.node_sound_water_defaults(soundtable)
end
function sound_api.node_sound_lava_defaults(soundtable)
--s/lava/water
return default.node_sound_water_defaults(soundtable)
end
function sound_api.node_sound_snow_defaults(soundtable)
return default.node_sound_snow_defaults(soundtable)
end
function sound_api.node_sound_wool_defaults(soundtable)
--s/wool/default
return default.node_sound_defaults(soundtable)
end
return sound_api

View file

@ -0,0 +1,63 @@
local sound_api = {}
function sound_api.node_sound_default(soundtable)
return soundtable
end
function sound_api.node_sound_stone_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_dirt_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_grass_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_sand_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_gravel_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_wood_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_leaves_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_glass_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_ice_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_metal_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_water_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_lava_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_snow_defaults(soundtable)
return soundtable
end
function sound_api.node_sound_wool_defaults(soundtable)
return soundtable
end
return sound_api

View file

@ -0,0 +1,8 @@
local filename = xcompat.gameid
--if we dont have a materials file for the game, use minetest
if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/textures/" .. filename .. ".lua") then
filename = "xcompat_agnostic"
end
return dofile(xcompat.modpath .. "/src/textures/" .. filename .. ".lua")

View file

@ -0,0 +1,57 @@
local textures = {
gravel = "farlands_gravel.png",
brick = "farlands_brick.png",
metal = {
steel = {
ore = "farlands_iron_ingot.png",
ingot = "farlands_iron_ingot.png",
block = "farlands_iron_block.png",
},
gold = {
ore = "farlands_gold_ore.png",
ingot = "farlands_gold_ingot.png",
block = "farlands_gold_block.png",
},
},
glass = {
pane = "farlands_glass.png",
detail = "farlands_glass_detail.png",
},
wood = {
apple = {
sapling = "farlands_apple_sapling.png",
planks = "farlands_apple_planks.png",
trunk_side = "farlands_apple_trunk.png",
trunk_top = "farlands_apple_trunk_top.png",
leaves = "farlands_apple_leaves.png",
},
jungle = {
sapling = "farlands_jungletree_sapling.png",
planks = "farlands_jungletree_planks.png",
trunk_side = "farlands_jungletree_trunk.png",
trunk_top = "farlands_jungletree_trunk_top.png",
leaves = "farlands_jungletree_leaves.png",
},
},
water = {
tile = "farlands_water.png",
animated = {
source = "farlands_water_source_animated.png",
flowing = "farlands_water_flowing_animated.png",
},
},
wool = {
white = "farlands_wool.png",
black = "farlands_wool.png",
grey = "farlands_wool.png",
dark_grey = "farlands_wool.png",
},
grass = {
top = "farlands_grass.png",
side = "farlands_dirt.png^farlands_grass_side.png",
dirt = "farlands_dirt.png",
},
}
return textures

View file

@ -0,0 +1,57 @@
local textures = {
gravel = "default_gravel.png",
brick = "default_brick.png",
metal = {
steel = {
ore = "default_iron_lump.png",
ingot = "default_steel_ingot.png",
block = "default_steel_block.png",
},
gold = {
ore = "default_gold_lump.png",
ingot = "default_gold_ingot.png",
block = "default_gold_block.png",
},
},
glass = {
pane = "default_glass.png",
detail = "default_glass_detail.png",
},
wood = {
apple = {
sapling = "default_sapling.png",
planks = "default_wood.png",
trunk_side = "default_tree.png",
trunk_top = "default_tree_top.png",
leaves = "default_leaves.png",
},
jungle = {
sapling = "default_junglesapling.png",
planks = "default_junglewood.png",
trunk_side = "default_jungletree.png",
trunk_top = "default_jungletree_top.png",
leaves = "default_jungleleaves.png",
},
},
water = {
tile = "default_water.png",
animated = {
source = "default_water_source_animated.png",
flowing = "default_water_flowing_animated.png",
},
},
wool = {
white = "wool_white.png",
black = "wool_black.png",
grey = "wool_grey.png",
dark_grey = "wool_dark_grey.png",
},
grass = {
top = "default_grass.png",
side = "default_dirt.png^default_grass_side.png",
dirt = "default_dirt.png",
},
}
return textures

View file

@ -0,0 +1,65 @@
local textures = {
gravel = "[combine:16x16^[noalpha^[colorize:#3a3b3c",
brick = "[combine:16x16^[noalpha^[colorize:#AA4A44",
metal = {
steel = {
ore = "[combine:16x16^[noalpha^[colorize:#D3D3D3",
ingot = "[combine:16x16^[noalpha^[colorize:#D3D3D3",
block = "[combine:16x16^[noalpha^[colorize:#D3D3D3",
},
gold = {
ore = "[combine:16x16^[noalpha^[colorize:#FFD700",
ingot = "[combine:16x16^[noalpha^[colorize:#FFD700",
block = "[combine:16x16^[noalpha^[colorize:#FFD700",
},
},
glass = {
pane = "[combine:16x16:" ..
"0,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff:" ..
"0,0=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" ..
"0,15=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" ..
"15,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff",
detail = "[combine:16x16:" ..
"0,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff:" ..
"0,0=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" ..
"0,15=\\[combine\\:16x1\\^[noalpha\\^[colorize\\:#ffffff:" ..
"15,0=\\[combine\\:1x16\\^[noalpha\\^[colorize\\:#ffffff",
},
wood = {
apple = {
sapling = "[combine:16x16^[noalpha^[colorize:#654321",
planks = "[combine:16x16^[noalpha^[colorize:#654321",
trunk_side = "[combine:16x16^[noalpha^[colorize:#654321",
trunk_top = "[combine:16x16^[noalpha^[colorize:#654321",
leaves = "[combine:16x16^[noalpha^[colorize:#654321",
},
jungle = {
sapling = "[combine:16x16^[noalpha^[colorize:#563d2d",
planks = "[combine:16x16^[noalpha^[colorize:#563d2d",
trunk_side = "[combine:16x16^[noalpha^[colorize:#563d2d",
trunk_top = "[combine:16x16^[noalpha^[colorize:#563d2d",
leaves = "[combine:16x16^[noalpha^[colorize:#563d2d",
},
},
water = {
tile = "[combine:16x16^[noalpha^[colorize:#00008b",
animated = {
source = "[combine:16x16^[noalpha^[colorize:#00008b",
flowing = "[combine:16x16^[noalpha^[colorize:#00008b",
},
},
wool = {
white = "[combine:16x16^[noalpha^[colorize:#ffffff",
black = "[combine:16x16^[noalpha^[colorize:#000000",
grey = "[combine:16x16^[noalpha^[colorize:#313b3c",
dark_grey = "[combine:16x16^[noalpha^[colorize:#313b3c",
},
grass = {
top = "[combine:16x16^[noalpha^[colorize:#006400",
side = "[combine:16x16^[noalpha^[colorize:#006400",
dirt = "[combine:16x16^[noalpha^[colorize:#563d2d",
},
}
return textures

View file

@ -0,0 +1,8 @@
local utilities = {}
function utilities.file_exists(name)
local f=io.open(name,"r")
if f~=nil then io.close(f) return true else return false end
end
return utilities

View file

@ -0,0 +1,356 @@
fl_furniture:yellow_ipe_table
fl_trees:palm_trunk
fl_stone:mossy_stone
fl_trees:acacia_sapling
fl_doors:copper_door_a
fl_trees:jungletree_plank
fl_workshop:furnace_active
fl_topsoil:wet_farmland
fl_trees:spruce_leaves
fl_stone:stone_brick
fl_light_sources:lantern
fl_plantlife:red_mushroom_leaves
fl_stone:basalt
fl_topsoil:condensed_ice
fl_doors:apple_door_b
fl_beds:bed_pink
fl_plantlife:petunia_blue
fl_trees:acacia_leaves
fl_stone:basalt_block
fl_ores:coal_in_tuff
fl_topsoil:sea_grass_3
fl_agriculture:carrot_2
fl_beds:bed_violet
fl_stone:basalt_rubble
fl_furniture:spruce_bench
fl_ores:copper_in_tuff
fl_trees:willow_plank
fl_trees:yellow_ipe_plank_fence
fl_storage:spruce_vessel_shelf
fl_beds:bed_blue
fl_stone:stone_block
fl_stone:tuff_rubble
fl_ores:mithite_in_stone
fl_topsoil:savannah_dirt_with_grass
fl_furniture:pine_table
fl_trees:pine_plank_fence
fl_furniture:baobab_chair
fl_plantlife:grass_2
fl_trees:pine_sapling
fl_beds:bed_dark_green
fl_plantlife:cactus
fl_storage:spruce_book_shelf
fl_signs:sign_wood
fl_plantlife:pink_ground_flower
fl_doors:steel_door_b
fl_topsoil:sea_grass_1
fl_trees:aspen_leaves
fl_stone:ors_brick
fl_doors:jungletree_door_a
fl_paintings:forest
fl_storage:spruce_multi_shelf
fl_beds:bed_red
fl_tnt:tnt
fl_beds:bed_brown
fl_storage:pine_multi_shelf
fl_ores:mithite_block
fl_beds:bed_orange
fl_ores:coal_in_desert_stone
fl_plantlife:red_ground_flower
fl_ores:gold_in_desert_stone
fl_stone:silver_sandstone_block
fl_storage:wood_chest
fl_furniture:aspen_table
fl_doors:aspen_door_a
fl_stone:ors
fl_stone:sandstone_brick
fl_doors:pine_door_b
fl_furniture:acacia_table
fl_trees:acacia_trunk
fl_stone:mossy_stone_block
fl_doors:baobab_door_b
fl_plantlife:pansy_purple
fl_industrial:conveyor_funnel
fl_stone:savannah_rubble
fl_trains:straight_rise_track
fl_storage:baobab_book_shelf
fl_plantlife:purple_allium
fl_ores:diamond_block
fl_topsoil:dirt_with_grass
fl_plantlife:ground_waterlily
fl_plantlife:flowerpot
fl_plantlife:grass_4
fl_storage:pine_book_shelf
fl_doors:palm_door_a
fl_furniture:willow_table
fl_trains:straight_45_track
fl_trees:palm_leaves
fl_glass:framed_glass_panes
fl_storage:yellow_ipe_vessel_shelf
fl_ores:coal_block
fl_plantlife:dandelion_yellow
fl_beds:bed_cyan
fl_topsoil:gravel
fl_storage:acacia_book_shelf
fl_furniture:baobab_bench
fl_furniture:willow_bench
fl_plantlife:savannah_grass_1
fl_industrial:conveyor
fl_storage:acacia_vessel_shelf
fl_light_sources:chain
fl_trees:spruce_plank
fl_trees:apple_leaves
fl_trees:baobab_leaves
fl_stone:silver_sand
fl_stone:desert_stone
fl_furniture:spruce_chair
fl_ores:copper_in_desert_stone
fl_topsoil:snow_block
fl_ores:mithite_in_savannah
fl_trees:acacia_plank
fl_topsoil:dirt
fl_fire:fire
fl_stone:gneiss_rubble
fl_furniture:acacia_bench
fl_storage:willow_vessel_shelf
fl_plantlife:lantana
fl_stone:sandstone
fl_furniture:jungletree_chair
fl_workshop:furnace
fl_stone:gneiss
fl_agriculture:potato_4
fl_topsoil:permafrost_with_stones
fl_topsoil:snow
fl_trees:baobab_plank
fl_stone:tuff_brick
fl_stone:desert_sandstone_block
fl_bones:bone_block
fl_stone:basalt_brick
fl_doors:steel_door_a
fl_furniture:aspen_bench
fl_ores:tin_in_savannah
fl_trees:palm_plank_fence
fl_doors:apple_door_a
fl_wool:wool
fl_furniture:spruce_table
fl_agriculture:carrot_1
fl_ores:iron_in_stone
fl_stone:desert_sandstone_brick
fl_storage:apple_empty_shelf
fl_stone:gneiss_block
fl_stone:mossy_stone_rubble
fl_agriculture:carrot_3
fl_trees:willow_trunk
fl_trees:pine_leaves
fl_trains:curve_right_track
fl_doors:copper_door_b
fl_doors:jungletree_door_b
fl_furniture:jungletree_bench
fl_doors:willow_door_b
fl_topsoil:sea_grass_2
fl_ores:gold_in_ors
fl_doors:willow_door_a
fl_trains:switch_right_track
fl_doors:aspen_door_b
fl_doors:palm_door_b
fl_stone:stone
fl_plantlife:rose
fl_doors:yellow_ipe_door_b
fl_doors:yellow_ipe_door_a
fl_plantlife:grass_3
fl_storage:apple_vessel_shelf
fl_plantlife:tulip
fl_light_sources:torch
fl_trees:palm_sapling
fl_doors:blocker_top
fl_bricks:terracotta
fl_bricks:clay_block
fl_bricks:brick
fl_agriculture:carrot_4
fl_paintings:cthulhu
fl_trees:aspen_trunk
fl_furniture:willow_chair
fl_glass:tinted_framed_glass_panes
fl_stone:sandstone_block
fl_glass:tinted_framed_glass
fl_ores:gold_block
fl_furniture:apple_chair
fl_glass:framed_glass
fl_storage:pine_vessel_shelf
fl_beds:bed_yellow
fl_beds:bed_black
fl_stone:silver_sandstone
fl_beds:bed_dark_grey
fl_beds:bed_green
fl_ores:tin_in_tuff
fl_beds:bed_grey
fl_beds:bed_magenta
fl_beds:bed_white
fl_wildlife:spawner
fl_wool:wool_carpet
fl_paintings:dragon
fl_topsoil:dirt_with_snow
fl_ores:tin_block
fl_furniture:baobab_table
fl_dyes:demo_node
fl_plantlife:viola
fl_ores:diamond_in_ors
fl_plantlife:savannah_grass_4
fl_plantlife:oxeye_daisy
fl_plantlife:geranium
fl_plantlife:mushroom_trunk
fl_stone:ors_rubble
fl_doors:baobab_door_a
fl_light_sources:lantern_c
fl_doors:acacia_door_b
fl_plantlife:petunia_white
fl_storage:spruce_empty_shelf
fl_plantlife:petunia_pink
fl_ores:tin_in_stone
fl_ores:mithite_in_desert_stone
fl_stone:desert_sand
fl_plantlife:pansy_blue
fl_plantlife:frozen_rose
fl_ores:gold_in_tuff
fl_stone:savannah_brick
fl_ores:coal_in_savannah
fl_plantlife:blue_ground_flower
fl_ores:iron_in_desert_stone
fl_industrial:injector
fl_trees:aspen_plank_fence
fl_plantlife:savannah_grass_2
fl_plantlife:dandelion_white
fl_plantlife:flame_lily
fl_plantlife:brown_mushroom
fl_plantlife:red_mushroom
fl_trees:jungletree_plank_fence
fl_plantlife:brown_mushroom_leaves
fl_plantlife:raw_mushroom_leaves
fl_plantlife:savannah_grass_5
fl_stone:tuff_block
fl_plantlife:savannah_grass_3
fl_trees:acacia_plank_fence
fl_trees:jungletree_sapling
fl_furniture:pine_bench
fl_plantlife:grass_1
fl_plantlife:lavender_flower
fl_ores:coal_in_stone
fl_plantlife:grass_5
fl_ores:bronze_block
fl_trees:yellow_ipe_plank
fl_stone:gneiss_brick
fl_ores:diamond_in_savannah
fl_trees:pine_plank
fl_ores:diamond_in_desert_stone
fl_ores:diamond_in_tuff
fl_storage:baobab_empty_shelf
fl_storage:yellow_ipe_empty_shelf
fl_paintings:landscape
fl_stairs:tablesaw
fl_furniture:yellow_ipe_chair
fl_ores:copper_in_ors
fl_trees:apple_trunk
fl_trees:yellow_ipe_leaves
fl_trees:dead_aspen_leaves
fl_liquids:water_flowing
fl_furniture:aspen_chair
fl_plantlife:lobelia
fl_topsoil:dry_farmland
fl_trees:apple_plank
ignore
fl_trains:switch_left_track
fl_storage:willow_empty_shelf
fl_trees:spruce_plank_fence
fl_ores:copper_in_savannah
fl_stone:sand
fl_furniture:pine_chair
fl_storage:aspen_empty_shelf
fl_topsoil:coarse_dirt
fl_storage:acacia_multi_shelf
fl_ores:mithite_in_ors
fl_paintings:waterlilie
fl_stone:tuff
fl_stone:savannah_block
fl_trees:willow_plank_fence
fl_storage:baobab_vessel_shelf
fl_furniture:apple_table
fl_paintings:rose
fl_liquids:river_water_source
fl_trees:pine_trunk
fl_storage:aspen_vessel_shelf
fl_topsoil:ice
fl_storage:aspen_book_shelf
fl_liquids:lava_source
fl_agriculture:potato_2
fl_storage:aspen_multi_shelf
fl_storage:willow_book_shelf
fl_furniture:acacia_chair
fl_trains:crossing_track
fl_trees:apple_plank_fence
fl_liquids:river_water_flowing
fl_trees:baobab_sapling
fl_ores:gold_in_stone
fl_trains:curve_left_track
fl_trains:straight_track
fl_doors:acacia_door_a
fl_storage:apple_multi_shelf
fl_trees:aspen_plank
fl_trees:spruce_trunk
fl_stone:desert_stone_rubble
fl_trees:baobab_trunk
fl_ores:copper_in_stone
fl_industrial:conveyor_left
fl_storage:acacia_empty_shelf
fl_trees:palm_plank
fl_agriculture:potato_1
fl_trees:apple_sapling
fl_trees:baobab_plank_fence
fl_furniture:yellow_ipe_bench
fl_ores:tin_in_desert_stone
fl_furniture:palm_bench
fl_storage:yellow_ipe_book_shelf
fl_stone:savannah
fl_furniture:apple_bench
fl_ores:iron_block
fl_furniture:palm_chair
fl_glass:tinted_connected_glass
fl_agriculture:potato_3
fl_trees:aspen_sapling
fl_storage:baobab_multi_shelf
fl_storage:willow_multi_shelf
fl_furniture:palm_table
fl_furniture:jungletree_table
fl_trees:jungletree_trunk
fl_stone:stone_rubble
fl_doors:pine_door_a
fl_storage:pine_empty_shelf
fl_stone:mossy_stone_brick
fl_stone:ors_block
fl_paintings:possessedwoman
fl_storage:apple_book_shelf
fl_storage:yellow_ipe_multi_shelf
fl_stone:desert_stone_block
fl_stone:desert_stone_brick
fl_trees:jungletree_leaves
fl_liquids:water_source
fl_stone:desert_sandstone
fl_trees:willow_leaves
fl_workshop:anvil
fl_paintings:mistiriusgirl
fl_trees:yellow_ipe_trunk
fl_topsoil:savannah_dirt
fl_ores:coal_in_ors
fl_topsoil:permafrost
fl_liquids:lava_flowing
fl_ores:iron_in_ors
fl_industrial:conveyor_right
fl_ores:iron_in_tuff
fl_ores:iron_in_savannah
fl_ores:copper_block
fl_stone:silver_sandstone_brick
air
fl_ores:gold_in_savannah
fl_ores:tin_in_ors
fl_ores:mithite_in_tuff
fl_stone:bedrock
fl_ores:diamond_in_stone

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff