From 65a7e71892bb4ef280d82ff85fac0150981efde8 Mon Sep 17 00:00:00 2001 From: FreeGamers Date: Tue, 26 May 2020 12:18:14 -0500 Subject: [PATCH] temp remove skin and cloth mods while they are WIP. sign fixes. --- README.md | 19 +- mods/clothing/init.lua | 3 - mods/craftguide/init.lua | 2 +- mods/default/aliases.lua | 2 - mods/default/nodes.lua | 3 - mods/dfcaverns/df_caverns/dungeon_loot.lua | 6 +- mods/dynamic_liquid/init.lua | 9 +- .../lootchests_default/chests.lua | 14 +- .../lootchests_default/item_tables.lua | 6 +- .../lootchests_magic_materials/chests.lua | 6 +- mods/moreblocks/redefinitions.lua | 9 - .../textures/character.png} | Bin .../settlements_medieval/init.lua | 3 +- .../schematics/medieval_townhall.lua | 2 +- mods/signs/README.md | 2 +- mods/skinsdb/meta/character_10.txt | 3 - mods/skinsdb/meta/character_11.txt | 3 - mods/skinsdb/meta/character_12.txt | 3 - mods/skinsdb/meta/character_13.txt | 3 - mods/skinsdb/meta/character_14.txt | 3 - mods/skinsdb/meta/character_15.txt | 3 - mods/skinsdb/meta/character_16.txt | 3 - mods/skinsdb/meta/character_5.txt | 3 - mods/skinsdb/meta/character_6.txt | 3 - mods/skinsdb/meta/character_7.txt | 3 - mods/skinsdb/meta/character_8.txt | 3 - mods/skinsdb/meta/character_9.txt | 3 - mods/skinsdb/textures/character_10.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_11.png | Bin 10805 -> 0 bytes mods/skinsdb/textures/character_12.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_13.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_14.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_15.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_16.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_5.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_6.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_7.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_8.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/character_9.png | Bin 8325 -> 0 bytes mods/skinsdb/textures/skins_button.png | Bin 250 -> 0 bytes mods/skinsdb/textures/ui_misc_form.png | Bin 6177 -> 0 bytes mods/toolranks/init.lua | 2 +- mods_disabled/ethereal/README.md | 377 + mods_disabled/ethereal/compatibility.lua | 46 + mods_disabled/ethereal/crystal.lua | 311 + mods_disabled/ethereal/depends.txt | 10 + mods_disabled/ethereal/description.txt | 1 + mods_disabled/ethereal/dirt.lua | 309 + mods_disabled/ethereal/extra.lua | 353 + mods_disabled/ethereal/fences.lua | 82 + mods_disabled/ethereal/fishing.lua | 167 + mods_disabled/ethereal/food.lua | 232 + mods_disabled/ethereal/gates.lua | 111 + mods_disabled/ethereal/init.lua | 120 + mods_disabled/ethereal/leaves.lua | 505 ++ mods_disabled/ethereal/license.txt | 21 + mods_disabled/ethereal/locale/de.txt | 220 + mods_disabled/ethereal/locale/ru.txt | 220 + mods_disabled/ethereal/locale/template.txt | 218 + mods_disabled/ethereal/lucky_block.lua | 89 + mods_disabled/ethereal/mapgen.lua | 1271 +++ mods_disabled/ethereal/mod.conf | 1 + mods_disabled/ethereal/mushroom.lua | 27 + mods_disabled/ethereal/onion.lua | 104 + mods_disabled/ethereal/ores.lua | 91 + mods_disabled/ethereal/plantlife.lua | 312 + mods_disabled/ethereal/plantpack.lua | 193 + mods_disabled/ethereal/sapling.lua | 235 + .../ethereal/schematics/bamboo_tree.lua | 85 + .../ethereal/schematics/banana_tree.lua | 83 + mods_disabled/ethereal/schematics/bigtree.lua | 100 + .../ethereal/schematics/birch_tree.lua | 59 + mods_disabled/ethereal/schematics/bush.lua | 38 + mods_disabled/ethereal/schematics/corals.mts | Bin 0 -> 171 bytes .../ethereal/schematics/frosttrees.lua | 184 + mods_disabled/ethereal/schematics/igloo.lua | 60 + .../ethereal/schematics/mushroomone.lua | 116 + .../ethereal/schematics/orange_tree.lua | 41 + .../ethereal/schematics/palmtree.lua | 110 + .../ethereal/schematics/pinetree.lua | 81 + .../ethereal/schematics/redwood_tree.lua | 533 ++ mods_disabled/ethereal/schematics/sakura.lua | 96 + .../ethereal/schematics/vinetree.lua | 77 + .../ethereal/schematics/volcanol.lua | 97 + .../ethereal/schematics/volcanom.lua | 36 + .../ethereal/schematics/waterlily.lua | 20 + mods_disabled/ethereal/schematics/willow.lua | 199 + .../ethereal/schematics/yellowtree.lua | 201 + mods_disabled/ethereal/screenshot.png | Bin 0 -> 44078 bytes mods_disabled/ethereal/sealife.lua | 295 + mods_disabled/ethereal/settings.conf_example | 42 + mods_disabled/ethereal/stairs.lua | 338 + mods_disabled/ethereal/strawberry.lua | 127 + .../ethereal/textures/baked_clay_grey.png | Bin 0 -> 211 bytes .../ethereal/textures/baked_clay_orange.png | Bin 0 -> 421 bytes .../ethereal/textures/baked_clay_red.png | Bin 0 -> 425 bytes mods_disabled/ethereal/textures/bamboo.png | Bin 0 -> 207 bytes .../ethereal/textures/bamboo_floor.png | Bin 0 -> 564 bytes .../ethereal/textures/bamboo_leaves.png | Bin 0 -> 219 bytes .../ethereal/textures/bamboo_sprout.png | Bin 0 -> 367 bytes .../ethereal/textures/banana_bread.png | Bin 0 -> 385 bytes .../ethereal/textures/banana_dough.png | Bin 0 -> 193 bytes .../ethereal/textures/banana_leaf.png | Bin 0 -> 421 bytes .../ethereal/textures/banana_leaf_old.png | Bin 0 -> 444 bytes .../ethereal/textures/banana_single.png | Bin 0 -> 200 bytes .../ethereal/textures/banana_tree_sapling.png | Bin 0 -> 177 bytes .../ethereal/textures/banana_trunk.png | Bin 0 -> 218 bytes .../ethereal/textures/banana_trunk_top.png | Bin 0 -> 208 bytes .../ethereal/textures/banana_wood.png | Bin 0 -> 210 bytes mods_disabled/ethereal/textures/blank.png | Bin 0 -> 357 bytes mods_disabled/ethereal/textures/bowl.png | Bin 0 -> 314 bytes mods_disabled/ethereal/textures/brick_ice.png | Bin 0 -> 272 bytes .../ethereal/textures/brick_ice.png_old | Bin 0 -> 277 bytes .../ethereal/textures/brick_snow.png | Bin 0 -> 166 bytes .../ethereal/textures/bucket_cactus.png | Bin 0 -> 276 bytes .../ethereal/textures/bucket_cactus.png_hd | Bin 0 -> 421 bytes mods_disabled/ethereal/textures/candle.png | Bin 0 -> 229 bytes .../ethereal/textures/candle_static.png | Bin 0 -> 187 bytes .../ethereal/textures/charcoal_lump.png | Bin 0 -> 186 bytes mods_disabled/ethereal/textures/coral2.png | Bin 0 -> 257 bytes mods_disabled/ethereal/textures/coral3.png | Bin 0 -> 209 bytes mods_disabled/ethereal/textures/coral4.png | Bin 0 -> 216 bytes mods_disabled/ethereal/textures/coral5.png | Bin 0 -> 348 bytes .../ethereal/textures/crystal_axe.png | Bin 0 -> 181 bytes .../ethereal/textures/crystal_block.png | Bin 0 -> 306 bytes .../ethereal/textures/crystal_gilly_staff.png | Bin 0 -> 179 bytes .../ethereal/textures/crystal_ingot.png | Bin 0 -> 232 bytes .../ethereal/textures/crystal_pick.png | Bin 0 -> 204 bytes .../ethereal/textures/crystal_shovel.png | Bin 0 -> 184 bytes .../ethereal/textures/crystal_spike.png | Bin 0 -> 380 bytes .../ethereal/textures/crystal_sword.png | Bin 0 -> 183 bytes .../ethereal/textures/default_apple_gold.png | Bin 0 -> 194 bytes .../ethereal/textures/default_ice.png | Bin 0 -> 272 bytes .../textures/ethereal_agar_powder.png | Bin 0 -> 148 bytes .../textures/ethereal_big_tree_sapling.png | Bin 0 -> 317 bytes .../ethereal/textures/ethereal_bush.png | Bin 0 -> 220 bytes .../textures/ethereal_crystalgrass.png | Bin 0 -> 202 bytes .../ethereal/textures/ethereal_dry_dirt.png | Bin 0 -> 272 bytes .../ethereal/textures/ethereal_dry_shrub.png | Bin 0 -> 283 bytes .../textures/ethereal_etherium_dust.png | Bin 0 -> 169 bytes .../textures/ethereal_etherium_ore.png | Bin 0 -> 165 bytes .../textures/ethereal_fire_flower.png | Bin 0 -> 203 bytes .../ethereal/textures/ethereal_firethorn.png | Bin 0 -> 153 bytes .../textures/ethereal_firethorn_jelly.png | Bin 0 -> 167 bytes .../textures/ethereal_frost_leaves.png | Bin 0 -> 300 bytes .../ethereal/textures/ethereal_frost_tree.png | Bin 0 -> 670 bytes .../textures/ethereal_frost_tree_sapling.png | Bin 0 -> 317 bytes .../textures/ethereal_frost_tree_top.png | Bin 0 -> 797 bytes .../textures/ethereal_grass_bamboo_side.png | Bin 0 -> 578 bytes .../textures/ethereal_grass_bamboo_top.png | Bin 0 -> 390 bytes .../textures/ethereal_grass_cold_side.png | Bin 0 -> 557 bytes .../textures/ethereal_grass_cold_top.png | Bin 0 -> 390 bytes .../textures/ethereal_grass_crystal_side.png | Bin 0 -> 555 bytes .../textures/ethereal_grass_crystal_top.png | Bin 0 -> 390 bytes .../textures/ethereal_grass_fiery_side.png | Bin 0 -> 535 bytes .../textures/ethereal_grass_fiery_top.png | Bin 0 -> 316 bytes .../textures/ethereal_grass_gray_side.png | Bin 0 -> 546 bytes .../textures/ethereal_grass_gray_top.png | Bin 0 -> 390 bytes .../textures/ethereal_grass_grove_side.png | Bin 0 -> 577 bytes .../textures/ethereal_grass_grove_top.png | Bin 0 -> 390 bytes .../textures/ethereal_grass_jungle_side.png | Bin 0 -> 527 bytes .../textures/ethereal_grass_jungle_top.png | Bin 0 -> 390 bytes .../textures/ethereal_grass_mushroom_side.png | Bin 0 -> 561 bytes .../textures/ethereal_grass_mushroom_top.png | Bin 0 -> 316 bytes .../textures/ethereal_grass_prairie_side.png | Bin 0 -> 606 bytes .../textures/ethereal_grass_prairie_top.png | Bin 0 -> 461 bytes .../textures/ethereal_gray_tree_sapling.png | Bin 0 -> 343 bytes .../textures/ethereal_jungle_tree_sapling.png | Bin 0 -> 355 bytes .../textures/ethereal_mushroom_sapling.png | Bin 0 -> 254 bytes .../textures/ethereal_pine_tree_sapling.png | Bin 0 -> 210 bytes .../textures/ethereal_sakura_door.png | Bin 0 -> 981 bytes .../textures/ethereal_sakura_door_inv.png | Bin 0 -> 220 bytes .../textures/ethereal_sakura_leaves.png | Bin 0 -> 280 bytes .../textures/ethereal_sakura_leaves2.png | Bin 0 -> 183 bytes .../textures/ethereal_sakura_sapling.png | Bin 0 -> 175 bytes .../textures/ethereal_sakura_trunk.png | Bin 0 -> 564 bytes .../textures/ethereal_sakura_trunk_top.png | Bin 0 -> 592 bytes .../textures/ethereal_sakura_wood.png | Bin 0 -> 529 bytes .../ethereal/textures/ethereal_snowygrass.png | Bin 0 -> 290 bytes .../ethereal/textures/ethereal_sponge.png | Bin 0 -> 272 bytes .../ethereal/textures/ethereal_sponge_wet.png | Bin 0 -> 272 bytes .../textures/ethereal_tree_sapling.png | Bin 0 -> 209 bytes .../textures/ethereal_wild_onion_1.png | Bin 0 -> 192 bytes .../textures/ethereal_wild_onion_2.png | Bin 0 -> 195 bytes .../textures/ethereal_wild_onion_3.png | Bin 0 -> 194 bytes .../textures/ethereal_wild_onion_4.png | Bin 0 -> 197 bytes .../textures/ethereal_wild_onion_5.png | Bin 0 -> 130 bytes .../ethereal/textures/farming_orange.png | Bin 0 -> 236 bytes mods_disabled/ethereal/textures/fern.png | Bin 0 -> 214 bytes .../ethereal/textures/fern_tubers.png | Bin 0 -> 187 bytes mods_disabled/ethereal/textures/fire_dust.png | Bin 0 -> 161 bytes .../ethereal/textures/fish_cooked.png | Bin 0 -> 344 bytes mods_disabled/ethereal/textures/fish_raw.png | Bin 0 -> 367 bytes .../ethereal/textures/fishing_rod.png | Bin 0 -> 193 bytes .../ethereal/textures/fishing_rod_baited.png | Bin 0 -> 214 bytes .../ethereal/textures/fishing_rod_wield.png | Bin 0 -> 215 bytes .../ethereal/textures/frost_wood.png | Bin 0 -> 269 bytes mods_disabled/ethereal/textures/glostone.png | Bin 0 -> 524 bytes .../ethereal/textures/hearty_stew.png | Bin 0 -> 334 bytes .../ethereal/textures/illumishroom.png | Bin 0 -> 2672 bytes .../ethereal/textures/illumishroom2.png | Bin 0 -> 2382 bytes .../ethereal/textures/illumishroom3.png | Bin 0 -> 2426 bytes .../ethereal/textures/light_staff.png | Bin 0 -> 361 bytes .../ethereal/textures/lightstring.png | Bin 0 -> 201 bytes .../textures/moretrees_acacia_leaves.png | Bin 0 -> 340 bytes .../textures/moretrees_birch_leaves.png | Bin 0 -> 459 bytes .../textures/moretrees_birch_sapling.png | Bin 0 -> 208 bytes .../textures/moretrees_birch_trunk.png | Bin 0 -> 975 bytes .../textures/moretrees_birch_trunk_top.png | Bin 0 -> 811 bytes .../textures/moretrees_birch_wood.png | Bin 0 -> 1075 bytes .../ethereal/textures/moretrees_coconut.png | Bin 0 -> 985 bytes .../textures/moretrees_coconut_slice.png | Bin 0 -> 257 bytes .../textures/moretrees_palm_leaves.png | Bin 0 -> 918 bytes .../textures/moretrees_palm_sapling.png | Bin 0 -> 259 bytes .../textures/moretrees_palm_trunk.png | Bin 0 -> 319 bytes .../textures/moretrees_palm_trunk_top.png | Bin 0 -> 422 bytes .../ethereal/textures/moretrees_palm_wood.png | Bin 0 -> 598 bytes .../ethereal/textures/mushroom_block.png | Bin 0 -> 232 bytes .../ethereal/textures/mushroom_pore.png | Bin 0 -> 247 bytes .../ethereal/textures/mushroom_soup.png | Bin 0 -> 312 bytes .../ethereal/textures/mushroom_trunk.png | Bin 0 -> 209 bytes .../ethereal/textures/mushroom_trunk_top.png | Bin 0 -> 277 bytes .../ethereal/textures/orange_leaves.png | Bin 0 -> 622 bytes .../ethereal/textures/orange_tree_sapling.png | Bin 0 -> 190 bytes mods_disabled/ethereal/textures/palm_wax.png | Bin 0 -> 165 bytes .../ethereal/textures/paper_wall.png | Bin 0 -> 325 bytes .../ethereal/textures/pine_leaves.png | Bin 0 -> 982 bytes mods_disabled/ethereal/textures/pine_nuts.png | Bin 0 -> 140 bytes .../ethereal/textures/purple_leaves.png | Bin 0 -> 300 bytes .../ethereal/textures/redwood_leaves.png | Bin 0 -> 969 bytes .../ethereal/textures/redwood_sapling.png | Bin 0 -> 226 bytes .../ethereal/textures/redwood_trunk.png | Bin 0 -> 867 bytes .../ethereal/textures/redwood_trunk_top.png | Bin 0 -> 822 bytes .../ethereal/textures/redwood_wood.png | Bin 0 -> 654 bytes mods_disabled/ethereal/textures/sashimi.png | Bin 0 -> 485 bytes .../ethereal/textures/scorched_tree.png | Bin 0 -> 272 bytes .../ethereal/textures/scorched_tree_top.png | Bin 0 -> 272 bytes mods_disabled/ethereal/textures/seaweed.png | Bin 0 -> 506 bytes .../ethereal/textures/stone_ladder.png | Bin 0 -> 181 bytes .../ethereal/textures/strawberry.png | Bin 0 -> 382 bytes .../ethereal/textures/strawberry_1.png | Bin 0 -> 116 bytes .../ethereal/textures/strawberry_2.png | Bin 0 -> 137 bytes .../ethereal/textures/strawberry_3.png | Bin 0 -> 157 bytes .../ethereal/textures/strawberry_4.png | Bin 0 -> 209 bytes .../ethereal/textures/strawberry_5.png | Bin 0 -> 234 bytes .../ethereal/textures/strawberry_6.png | Bin 0 -> 240 bytes .../ethereal/textures/strawberry_7.png | Bin 0 -> 258 bytes .../ethereal/textures/strawberry_8.png | Bin 0 -> 258 bytes mods_disabled/ethereal/textures/vine.png | Bin 0 -> 206 bytes .../ethereal/textures/wild_onion.png | Bin 0 -> 174 bytes .../ethereal/textures/willow_sapling.png | Bin 0 -> 355 bytes .../ethereal/textures/willow_trunk.png | Bin 0 -> 656 bytes .../ethereal/textures/willow_trunk_top.png | Bin 0 -> 492 bytes .../ethereal/textures/willow_twig.png | Bin 0 -> 1402 bytes .../ethereal/textures/willow_wood.png | Bin 0 -> 818 bytes mods_disabled/ethereal/textures/worm.png | Bin 0 -> 164 bytes .../ethereal/textures/yellow_leaves.png | Bin 0 -> 300 bytes .../ethereal/textures/yellow_tree.png | Bin 0 -> 674 bytes .../ethereal/textures/yellow_tree_sapling.png | Bin 0 -> 184 bytes .../ethereal/textures/yellow_tree_top.png | Bin 0 -> 800 bytes .../ethereal/textures/yellow_wood.png | Bin 0 -> 269 bytes mods_disabled/ethereal/water.lua | 182 + mods_disabled/ethereal/wood.lua | 290 + {mods => mods_disabled}/goodie_bags/README.md | 0 .../goodie_bags/craftitems.lua | 0 .../goodie_bags/depends.txt | 0 .../goodie_bags/description.txt | 0 .../goodie_bags/ff_goodie_bags.conf | 0 .../goodie_bags/functions.lua | 0 {mods => mods_disabled}/goodie_bags/init.lua | 0 .../goodie_bags/item_lists.lua | 2 - .../goodie_bags/license.txt | 0 {mods => mods_disabled}/goodie_bags/mod.conf | 0 .../sounds/ff_goodie_bags_Coin01.ogg | Bin .../ff_goodie_bags_blue_goodie_bag.png | Bin .../ff_goodie_bags_goodie_bag_contents.png | Bin .../ff_goodie_bags_green_goodie_bag.png | Bin .../ff_goodie_bags_orange_goodie_bag.png | Bin .../ff_goodie_bags_red_goodie_bag.png | Bin {mods => mods_disabled}/helicopter/LICENSE | 0 {mods => mods_disabled}/helicopter/README.md | 0 .../helicopter/depends.txt | 0 {mods => mods_disabled}/helicopter/init.lua | 0 {mods => mods_disabled}/helicopter/matrix.lua | 0 {mods => mods_disabled}/helicopter/mod.conf | 0 .../helicopter/models/helicopter_heli.x | 0 .../helicopter/sounds/helicopter_motor.ogg | Bin .../helicopter/textures/helicopter_blades.png | Bin .../textures/helicopter_blades_inv.png | Bin .../textures/helicopter_cabin_inv.png | Bin .../helicopter/textures/helicopter_glass.png | Bin .../helicopter/textures/helicopter_heli.png | Bin .../textures/helicopter_heli_inv.png | Bin .../textures/helicopter_water_driblet.png | Bin .../.github/workflows/integration-test.yml | 14 + .../jumpdrive/.github/workflows/luacheck.yml | 17 + mods_disabled/jumpdrive/.luacheckrc | 39 + mods_disabled/jumpdrive/backbone.lua | 10 + mods_disabled/jumpdrive/blacklist.lua | 6 + mods_disabled/jumpdrive/bookmark.lua | 107 + mods_disabled/jumpdrive/common.lua | 52 + mods_disabled/jumpdrive/compat/anchor.lua | 57 + mods_disabled/jumpdrive/compat/areas.lua | 27 + mods_disabled/jumpdrive/compat/beds.lua | 64 + mods_disabled/jumpdrive/compat/compat.lua | 107 + mods_disabled/jumpdrive/compat/drawers.lua | 9 + mods_disabled/jumpdrive/compat/elevator.lua | 18 + mods_disabled/jumpdrive/compat/itemframes.lua | 20 + mods_disabled/jumpdrive/compat/locator.lua | 8 + mods_disabled/jumpdrive/compat/ropes.lua | 86 + mods_disabled/jumpdrive/compat/sethome.lua | 19 + mods_disabled/jumpdrive/compat/signs.lua | 10 + mods_disabled/jumpdrive/compat/telemosaic.lua | 47 + .../jumpdrive/compat/teleporttube.lua | 47 + mods_disabled/jumpdrive/compat/textline.lua | 17 + mods_disabled/jumpdrive/compat/travelnet.lua | 25 + mods_disabled/jumpdrive/crafts.lua | 20 + mods_disabled/jumpdrive/digiline.lua | 109 + mods_disabled/jumpdrive/doc/digiline.md | 293 + mods_disabled/jumpdrive/doc/lua_api.txt | 7408 +++++++++++++++++ mods_disabled/jumpdrive/engines/area.lua | 268 + .../jumpdrive/engines/area_formspec.lua | 45 + mods_disabled/jumpdrive/engines/default.lua | 249 + .../jumpdrive/engines/default_formspec.lua | 48 + .../jumpdrive/engines/default_jump.lua | 183 + .../jumpdrive/fleet/fleet_controller.lua | 227 + .../jumpdrive/fleet/fleet_digiline.lua | 306 + .../jumpdrive/fleet/fleet_formspec.lua | 40 + .../jumpdrive/fleet/fleet_functions.lua | 71 + mods_disabled/jumpdrive/fuel.lua | 21 + mods_disabled/jumpdrive/infotext.lua | 15 + mods_disabled/jumpdrive/init.lua | 87 + mods_disabled/jumpdrive/integration-test.sh | 27 + mods_disabled/jumpdrive/integration_test.lua | 83 + mods_disabled/jumpdrive/is_area_empty.lua | 47 + mods_disabled/jumpdrive/is_area_protected.lua | 50 + mods_disabled/jumpdrive/license.txt | 14 + mods_disabled/jumpdrive/mapgen.lua | 66 + mods_disabled/jumpdrive/marker.lua | 54 + mods_disabled/jumpdrive/metrics.lua | 4 + mods_disabled/jumpdrive/migrate.lua | 27 + mods_disabled/jumpdrive/mod.conf | 2 + mods_disabled/jumpdrive/move/move.lua | 168 + .../jumpdrive/move/move_metadata.lua | 36 + .../jumpdrive/move/move_nodetimers.lua | 42 + mods_disabled/jumpdrive/move/move_objects.lua | 43 + .../jumpdrive/override/teleport_tube.lua | 275 + .../jumpdrive/patches/pipeworks.patch | 21 + mods_disabled/jumpdrive/patches/readme.md | 24 + mods_disabled/jumpdrive/readme.md | 171 + .../screenshot_20180507_200203.png | Bin 0 -> 1843242 bytes .../screenshot_20180507_200309.png | Bin 0 -> 221533 bytes .../jumpdrive/sounds/jumpdrive_engine.ogg | Bin 0 -> 7697 bytes mods_disabled/jumpdrive/technic_run.lua | 22 + .../jumpdrive/textures/jumpdrive.png | Bin 0 -> 227 bytes .../jumpdrive/textures/jumpdrive_air.png | Bin 0 -> 144 bytes .../jumpdrive/textures/jumpdrive_area.png | Bin 0 -> 1533 bytes .../jumpdrive/textures/jumpdrive_backbone.png | Bin 0 -> 208 bytes .../textures/jumpdrive_blue_mese_crystal.png | Bin 0 -> 420 bytes .../textures/jumpdrive_fleet_controller.png | Bin 0 -> 292 bytes .../jumpdrive_raw_blue_mese_crystal.png | Bin 0 -> 390 bytes .../jumpdrive/textures/jumpdrive_remote.png | Bin 0 -> 267 bytes .../jumpdrive/textures/marker_blue.png | Bin 0 -> 163 bytes .../jumpdrive/textures/marker_green.png | Bin 0 -> 163 bytes .../jumpdrive/textures/marker_red.png | Bin 0 -> 163 bytes mods_disabled/jumpdrive/textures/spark.png | Bin 0 -> 253 bytes mods_disabled/jumpdrive/upgrade.lua | 47 + mods_disabled/laptop/.gitattributes | 17 + mods_disabled/laptop/API.md | 258 + mods_disabled/laptop/LICENSE.txt | 9 + mods_disabled/laptop/MTBOX.md | 18 + mods_disabled/laptop/README-LICENSE.txt | 11 + mods_disabled/laptop/README.md | 77 + mods_disabled/laptop/app_fw.lua | 96 + mods_disabled/laptop/apps/TNTsweeper_app.lua | 195 + mods_disabled/laptop/apps/browser_app.lua | 137 + mods_disabled/laptop/apps/calculator_app.lua | 160 + mods_disabled/laptop/apps/cs-bos_app.lua | 464 ++ mods_disabled/laptop/apps/ecommerce_app.lua | 42 + mods_disabled/laptop/apps/launcher_app.lua | 77 + .../laptop/apps/launcher_settings_app.lua | 63 + mods_disabled/laptop/apps/mail_app.lua | 287 + mods_disabled/laptop/apps/os_dialogs_app.lua | 162 + mods_disabled/laptop/apps/os_print_app.lua | 306 + mods_disabled/laptop/apps/realchess_app.lua | 632 ++ mods_disabled/laptop/apps/removable_app.lua | 62 + mods_disabled/laptop/apps/shell-os_app.lua | 20 + mods_disabled/laptop/apps/stickynote_app.lua | 82 + mods_disabled/laptop/apps/tetris_app.lua | 285 + mods_disabled/laptop/block_devices.lua | 204 + mods_disabled/laptop/craftitems.lua | 266 + mods_disabled/laptop/depends.txt | 1 + mods_disabled/laptop/hardware_fw.lua | 240 + mods_disabled/laptop/hardware_nodes.lua | 536 ++ mods_disabled/laptop/init.lua | 10 + mods_disabled/laptop/mod.conf | 2 + mods_disabled/laptop/mtos.lua | 437 + mods_disabled/laptop/recipe_compat.lua | 68 + mods_disabled/laptop/screenshot.png | Bin 0 -> 519536 bytes .../textures/commoditymarket_gold_coins.png | Bin 0 -> 1364 bytes .../laptop/textures/laptop_ad1_web.png | Bin 0 -> 58793 bytes .../laptop/textures/laptop_background.png | Bin 0 -> 511645 bytes mods_disabled/laptop/textures/laptop_bat.png | Bin 0 -> 383 bytes mods_disabled/laptop/textures/laptop_boom.png | Bin 0 -> 442 bytes .../laptop/textures/laptop_browser.png | Bin 0 -> 279 bytes .../laptop/textures/laptop_calculator.png | Bin 0 -> 349 bytes mods_disabled/laptop/textures/laptop_case.png | Bin 0 -> 311 bytes .../laptop/textures/laptop_cpu_65536.png | Bin 0 -> 404 bytes .../laptop/textures/laptop_cpu_c6.png | Bin 0 -> 360 bytes .../laptop/textures/laptop_cpu_d75a.png | Bin 0 -> 350 bytes .../laptop/textures/laptop_cpu_jetcore.png | Bin 0 -> 442 bytes mods_disabled/laptop/textures/laptop_crt.png | Bin 0 -> 334 bytes .../laptop/textures/laptop_crt_amber.png | Bin 0 -> 292 bytes .../laptop/textures/laptop_crt_green.png | Bin 0 -> 306 bytes .../laptop/textures/laptop_cs_bos.png | Bin 0 -> 368 bytes .../textures/laptop_cube_monitor_back.png | Bin 0 -> 272 bytes .../textures/laptop_cube_monitor_bottom.png | Bin 0 -> 383 bytes .../textures/laptop_cube_monitor_front.png | Bin 0 -> 306 bytes .../textures/laptop_cube_monitor_front_on.png | Bin 0 -> 403 bytes .../textures/laptop_cube_monitor_left.png | Bin 0 -> 243 bytes .../textures/laptop_cube_monitor_right.png | Bin 0 -> 197 bytes .../textures/laptop_cube_monitor_top.png | Bin 0 -> 352 bytes .../textures/laptop_cube_tower_back.png | Bin 0 -> 301 bytes .../textures/laptop_cube_tower_bottom.png | Bin 0 -> 163 bytes .../textures/laptop_cube_tower_front.png | Bin 0 -> 264 bytes .../textures/laptop_cube_tower_front_on.png | Bin 0 -> 297 bytes .../textures/laptop_cube_tower_left.png | Bin 0 -> 235 bytes .../textures/laptop_cube_tower_right.png | Bin 0 -> 207 bytes .../laptop/textures/laptop_cube_tower_top.png | Bin 0 -> 419 bytes .../laptop/textures/laptop_diskette.png | Bin 0 -> 402 bytes .../laptop/textures/laptop_email_edit.png | Bin 0 -> 464 bytes .../laptop/textures/laptop_email_forward.png | Bin 0 -> 371 bytes .../laptop/textures/laptop_email_letter.png | Bin 0 -> 589 bytes .../laptop/textures/laptop_email_new.png | Bin 0 -> 321 bytes .../laptop/textures/laptop_email_reply.png | Bin 0 -> 363 bytes .../laptop/textures/laptop_email_trash.png | Bin 0 -> 399 bytes mods_disabled/laptop/textures/laptop_fan.png | Bin 0 -> 243 bytes .../laptop/textures/laptop_fruit_base.png | Bin 0 -> 194 bytes .../laptop/textures/laptop_fruit_lcd_back.png | Bin 0 -> 434 bytes .../textures/laptop_fruit_stand_top.png | Bin 0 -> 346 bytes .../laptop/textures/laptop_go_web.png | Bin 0 -> 182 bytes mods_disabled/laptop/textures/laptop_gpu.png | Bin 0 -> 405 bytes .../laptop/textures/laptop_harddrive.png | Bin 0 -> 320 bytes .../laptop/textures/laptop_home_web.png | Bin 0 -> 180 bytes .../laptop/textures/laptop_k_back.png | Bin 0 -> 607 bytes .../laptop/textures/laptop_k_bottom.png | Bin 0 -> 512 bytes .../laptop/textures/laptop_k_front.png | Bin 0 -> 609 bytes .../laptop/textures/laptop_k_left.png | Bin 0 -> 621 bytes .../laptop/textures/laptop_k_right.png | Bin 0 -> 612 bytes .../laptop/textures/laptop_k_top.png | Bin 0 -> 597 bytes .../textures/laptop_lap_base_closed_back.png | Bin 0 -> 260 bytes .../laptop_lap_base_closed_bottom.png | Bin 0 -> 448 bytes .../textures/laptop_lap_base_closed_front.png | Bin 0 -> 222 bytes .../textures/laptop_lap_base_closed_left.png | Bin 0 -> 239 bytes .../textures/laptop_lap_base_closed_right.png | Bin 0 -> 256 bytes .../textures/laptop_lap_base_closed_top.png | Bin 0 -> 297 bytes .../textures/laptop_lap_base_open_back.png | Bin 0 -> 346 bytes .../textures/laptop_lap_base_open_bottom.png | Bin 0 -> 448 bytes .../textures/laptop_lap_base_open_front.png | Bin 0 -> 244 bytes .../textures/laptop_lap_base_open_left.png | Bin 0 -> 323 bytes .../textures/laptop_lap_base_open_on_top.png | Bin 0 -> 598 bytes .../textures/laptop_lap_base_open_right.png | Bin 0 -> 325 bytes .../textures/laptop_lap_base_open_top.png | Bin 0 -> 600 bytes .../laptop/textures/laptop_lap_car_bottom.png | Bin 0 -> 533 bytes .../textures/laptop_lap_car_closed_back.png | Bin 0 -> 245 bytes .../textures/laptop_lap_car_closed_front.png | Bin 0 -> 219 bytes .../textures/laptop_lap_car_closed_left.png | Bin 0 -> 244 bytes .../textures/laptop_lap_car_closed_right.png | Bin 0 -> 246 bytes .../textures/laptop_lap_car_closed_top.png | Bin 0 -> 400 bytes .../textures/laptop_lap_car_open_back.png | Bin 0 -> 401 bytes .../textures/laptop_lap_car_open_front.png | Bin 0 -> 245 bytes .../textures/laptop_lap_car_open_left.png | Bin 0 -> 317 bytes .../textures/laptop_lap_car_open_on_top.png | Bin 0 -> 497 bytes .../textures/laptop_lap_car_open_right.png | Bin 0 -> 307 bytes .../textures/laptop_lap_car_open_top.png | Bin 0 -> 498 bytes .../laptop_lap_car_sc_open_bottom.png | Bin 0 -> 361 bytes .../textures/laptop_lap_car_sc_open_front.png | Bin 0 -> 473 bytes .../laptop_lap_car_sc_open_on_front.png | Bin 0 -> 590 bytes .../textures/laptop_lap_sc_open_back.png | Bin 0 -> 536 bytes .../textures/laptop_lap_sc_open_bottom.png | Bin 0 -> 346 bytes .../textures/laptop_lap_sc_open_front.png | Bin 0 -> 504 bytes .../textures/laptop_lap_sc_open_on_front.png | Bin 0 -> 627 bytes .../laptop_launcher_insert_floppy.png | Bin 0 -> 5639 bytes mods_disabled/laptop/textures/laptop_lcd.png | Bin 0 -> 328 bytes .../laptop/textures/laptop_lcd_fruit.png | Bin 0 -> 230 bytes .../laptop/textures/laptop_lcd_fruit_on.png | Bin 0 -> 452 bytes .../laptop/textures/laptop_m_back.png | Bin 0 -> 388 bytes .../laptop/textures/laptop_m_bottom.png | Bin 0 -> 363 bytes .../laptop/textures/laptop_m_front.png | Bin 0 -> 518 bytes .../laptop/textures/laptop_m_front_on.png | Bin 0 -> 502 bytes .../laptop/textures/laptop_m_left.png | Bin 0 -> 477 bytes .../laptop/textures/laptop_m_right.png | Bin 0 -> 458 bytes .../laptop/textures/laptop_m_top.png | Bin 0 -> 413 bytes mods_disabled/laptop/textures/laptop_mail.png | Bin 0 -> 429 bytes .../laptop/textures/laptop_mail_button.png | Bin 0 -> 371 bytes .../laptop/textures/laptop_mail_read.png | Bin 0 -> 612 bytes .../textures/laptop_mail_read_button.png | Bin 0 -> 444 bytes .../laptop/textures/laptop_mail_received.png | Bin 0 -> 467 bytes .../laptop/textures/laptop_mail_sentbox.png | Bin 0 -> 402 bytes .../laptop/textures/laptop_motherboard.png | Bin 0 -> 425 bytes .../laptop/textures/laptop_notes_pad.png | Bin 0 -> 391 bytes .../laptop/textures/laptop_opti_kb_back.png | Bin 0 -> 278 bytes .../laptop/textures/laptop_opti_kb_bottom.png | Bin 0 -> 340 bytes .../laptop/textures/laptop_opti_kb_front.png | Bin 0 -> 288 bytes .../laptop/textures/laptop_opti_kb_left.png | Bin 0 -> 454 bytes .../laptop/textures/laptop_opti_kb_right.png | Bin 0 -> 440 bytes .../laptop/textures/laptop_opti_kb_top.png | Bin 0 -> 458 bytes .../laptop/textures/laptop_opti_lcb_back.png | Bin 0 -> 407 bytes .../laptop/textures/laptop_opti_lcb_front.png | Bin 0 -> 403 bytes .../laptop/textures/laptop_opti_lcb_left.png | Bin 0 -> 400 bytes .../laptop/textures/laptop_opti_lcb_right.png | Bin 0 -> 411 bytes .../laptop/textures/laptop_opti_lcb_top.png | Bin 0 -> 520 bytes .../laptop/textures/laptop_opti_lcd_back.png | Bin 0 -> 545 bytes .../textures/laptop_opti_lcd_bottom.png | Bin 0 -> 559 bytes .../laptop/textures/laptop_opti_lcd_front.png | Bin 0 -> 588 bytes .../laptop/textures/laptop_opti_lcd_left.png | Bin 0 -> 478 bytes .../textures/laptop_opti_lcd_on_front.png | Bin 0 -> 699 bytes .../laptop/textures/laptop_opti_lcd_right.png | Bin 0 -> 463 bytes .../laptop/textures/laptop_opti_lcd_top.png | Bin 0 -> 538 bytes .../laptop/textures/laptop_opti_lcp_back.png | Bin 0 -> 449 bytes .../laptop/textures/laptop_opti_lcp_front.png | Bin 0 -> 487 bytes .../laptop/textures/laptop_opti_lcp_left.png | Bin 0 -> 444 bytes .../laptop/textures/laptop_opti_lcp_right.png | Bin 0 -> 425 bytes .../laptop/textures/laptop_opti_lcp_top.png | Bin 0 -> 541 bytes .../laptop/textures/laptop_opti_ms_back.png | Bin 0 -> 339 bytes .../laptop/textures/laptop_opti_ms_bottom.png | Bin 0 -> 425 bytes .../laptop/textures/laptop_opti_ms_front.png | Bin 0 -> 332 bytes .../laptop/textures/laptop_opti_ms_left.png | Bin 0 -> 467 bytes .../laptop/textures/laptop_opti_ms_right.png | Bin 0 -> 447 bytes .../laptop/textures/laptop_opti_ms_top.png | Bin 0 -> 496 bytes .../laptop/textures/laptop_opti_pc_back.png | Bin 0 -> 335 bytes .../laptop/textures/laptop_opti_pc_bottom.png | Bin 0 -> 245 bytes .../laptop/textures/laptop_opti_pc_front.png | Bin 0 -> 313 bytes .../laptop/textures/laptop_opti_pc_left.png | Bin 0 -> 319 bytes .../textures/laptop_opti_pc_on_front.png | Bin 0 -> 315 bytes .../laptop/textures/laptop_opti_pc_right.png | Bin 0 -> 321 bytes .../laptop/textures/laptop_opti_pc_top.png | Bin 0 -> 449 bytes .../laptop/textures/laptop_p_back.png | Bin 0 -> 541 bytes .../laptop/textures/laptop_p_bottom.png | Bin 0 -> 379 bytes .../laptop/textures/laptop_p_front.png | Bin 0 -> 545 bytes .../laptop/textures/laptop_p_left.png | Bin 0 -> 564 bytes .../laptop/textures/laptop_p_right.png | Bin 0 -> 333 bytes .../laptop/textures/laptop_p_top.png | Bin 0 -> 398 bytes .../laptop/textures/laptop_printed_paper.png | Bin 0 -> 203 bytes .../laptop/textures/laptop_printer_back.png | Bin 0 -> 351 bytes .../laptop/textures/laptop_printer_bottom.png | Bin 0 -> 204 bytes .../laptop/textures/laptop_printer_button.png | Bin 0 -> 335 bytes .../laptop/textures/laptop_printer_front.png | Bin 0 -> 444 bytes .../textures/laptop_printer_front_off.png | Bin 0 -> 451 bytes .../textures/laptop_printer_front_on.png | Bin 0 -> 450 bytes .../laptop/textures/laptop_printer_left.png | Bin 0 -> 532 bytes .../laptop/textures/laptop_printer_right.png | Bin 0 -> 517 bytes .../laptop/textures/laptop_printer_top.png | Bin 0 -> 496 bytes mods_disabled/laptop/textures/laptop_psu.png | Bin 0 -> 452 bytes .../laptop_realchess_bishop_black.png | Bin 0 -> 170 bytes .../laptop_realchess_bishop_white.png | Bin 0 -> 175 bytes .../textures/laptop_realchess_chess_bg.png | Bin 0 -> 848 bytes .../laptop_realchess_chessboard_icon.png | Bin 0 -> 207 bytes .../textures/laptop_realchess_king_black.png | Bin 0 -> 247 bytes .../textures/laptop_realchess_king_white.png | Bin 0 -> 194 bytes .../laptop_realchess_knight_black.png | Bin 0 -> 231 bytes .../laptop_realchess_knight_white.png | Bin 0 -> 235 bytes .../textures/laptop_realchess_pawn_black.png | Bin 0 -> 166 bytes .../textures/laptop_realchess_pawn_white.png | Bin 0 -> 166 bytes .../textures/laptop_realchess_queen_black.png | Bin 0 -> 238 bytes .../textures/laptop_realchess_queen_white.png | Bin 0 -> 188 bytes .../textures/laptop_realchess_rook_black.png | Bin 0 -> 172 bytes .../textures/laptop_realchess_rook_white.png | Bin 0 -> 178 bytes .../laptop/textures/laptop_removable.png | Bin 0 -> 660 bytes .../laptop/textures/laptop_setting_wrench.png | Bin 0 -> 536 bytes .../laptop/textures/laptop_settings_web.png | Bin 0 -> 186 bytes .../laptop/textures/laptop_t_back.png | Bin 0 -> 490 bytes .../laptop/textures/laptop_t_bottom.png | Bin 0 -> 212 bytes .../laptop/textures/laptop_t_front.png | Bin 0 -> 508 bytes .../laptop/textures/laptop_t_front_on.png | Bin 0 -> 491 bytes .../laptop/textures/laptop_t_left.png | Bin 0 -> 503 bytes .../laptop/textures/laptop_t_right.png | Bin 0 -> 498 bytes .../laptop/textures/laptop_t_top.png | Bin 0 -> 414 bytes .../laptop/textures/laptop_tetris_block.png | Bin 0 -> 258 bytes .../laptop/textures/laptop_tetris_icon.png | Bin 0 -> 168 bytes ...laptop_theme_ambershell_app_background.png | Bin 0 -> 262 bytes .../laptop_theme_ambershell_back_button.png | Bin 0 -> 276 bytes ...aptop_theme_ambershell_calculator_icon.png | Bin 0 -> 300 bytes .../laptop_theme_ambershell_cs_bos_icon.png | Bin 0 -> 343 bytes ...op_theme_ambershell_desktop_background.png | Bin 0 -> 900 bytes ...e_ambershell_desktop_icon_label_button.png | Bin 0 -> 109 bytes .../laptop_theme_ambershell_email_edit.png | Bin 0 -> 262 bytes .../laptop_theme_ambershell_email_forward.png | Bin 0 -> 239 bytes ...ptop_theme_ambershell_email_letter_new.png | Bin 0 -> 297 bytes .../laptop_theme_ambershell_email_new.png | Bin 0 -> 290 bytes .../laptop_theme_ambershell_email_read.png | Bin 0 -> 318 bytes .../laptop_theme_ambershell_email_reply.png | Bin 0 -> 249 bytes .../laptop_theme_ambershell_email_trash.png | Bin 0 -> 277 bytes .../laptop_theme_ambershell_exit_button.png | Bin 0 -> 212 bytes .../laptop_theme_ambershell_laptop_boom.png | Bin 0 -> 277 bytes .../laptop_theme_ambershell_mail_button.png | Bin 0 -> 277 bytes .../laptop_theme_ambershell_mail_icon.png | Bin 0 -> 691 bytes .../laptop_theme_ambershell_mail_received.png | Bin 0 -> 356 bytes .../laptop_theme_ambershell_mail_sentbox.png | Bin 0 -> 349 bytes .../laptop_theme_ambershell_major_button.png | Bin 0 -> 192 bytes .../laptop_theme_ambershell_minor_button.png | Bin 0 -> 183 bytes .../laptop_theme_ambershell_notepad_icon.png | Bin 0 -> 301 bytes ...laptop_theme_ambershell_printer_button.png | Bin 0 -> 217 bytes ...e_ambershell_realchess_chessboard_icon.png | Bin 0 -> 190 bytes ...laptop_theme_ambershell_removable_icon.png | Bin 0 -> 344 bytes .../laptop_theme_ambershell_settings_icon.png | Bin 0 -> 363 bytes .../laptop_theme_ambershell_tetris_icon.png | Bin 0 -> 220 bytes .../laptop_theme_ambershell_tnt_icon.png | Bin 0 -> 264 bytes .../laptop_theme_argyle_app_background.png | Bin 0 -> 977 bytes ...laptop_theme_argyle_desktop_background.png | Bin 0 -> 15061 bytes .../laptop_theme_argyle_exit_button.png | Bin 0 -> 182 bytes .../laptop_theme_argyle_major_button.png | Bin 0 -> 217 bytes .../laptop_theme_basic_app_background.png | Bin 0 -> 19255 bytes .../textures/laptop_theme_basic_button.png | Bin 0 -> 2074 bytes .../laptop_theme_basic_desktop_background.png | Bin 0 -> 31484 bytes .../laptop_theme_blue_app_background.png | Bin 0 -> 1005 bytes .../laptop_theme_blue_back_button.png | Bin 0 -> 215 bytes .../laptop_theme_blue_desktop_background.png | Bin 0 -> 547152 bytes .../laptop_theme_blue_desktop_icon_button.png | Bin 0 -> 249 bytes .../laptop_theme_blue_exit_button.png | Bin 0 -> 221 bytes .../laptop_theme_blue_major_button.png | Bin 0 -> 263 bytes .../laptop_theme_boing_app_background.png | Bin 0 -> 3488 bytes .../laptop_theme_boing_back_button.png | Bin 0 -> 1509 bytes .../laptop_theme_boing_desktop_background.png | Bin 0 -> 18780 bytes .../laptop_theme_boing_exit_button.png | Bin 0 -> 1670 bytes .../laptop_theme_boing_major_button.png | Bin 0 -> 109 bytes ...aptop_theme_bubbles_desktop_background.png | Bin 0 -> 320419 bytes .../laptop_theme_circuit_app_background.png | Bin 0 -> 1023 bytes .../laptop_theme_circuit_back_button.png | Bin 0 -> 204 bytes ...aptop_theme_circuit_desktop_background.png | Bin 0 -> 117759 bytes .../laptop_theme_circuit_exit_button.png | Bin 0 -> 249 bytes .../laptop_theme_circuit_major_button.png | Bin 0 -> 188 bytes .../laptop_theme_clouds_app_background.png | Bin 0 -> 10248 bytes ...laptop_theme_clouds_desktop_background.png | Bin 0 -> 15458 bytes ...theme_clouds_desktop_icon_label_button.png | Bin 0 -> 122 bytes .../laptop_theme_cubic_app_background.png | Bin 0 -> 1005 bytes .../laptop_theme_cubic_back_button.png | Bin 0 -> 217 bytes .../laptop_theme_cubic_desktop_background.png | Bin 0 -> 81754 bytes ...laptop_theme_cubic_desktop_icon_button.png | Bin 0 -> 250 bytes .../laptop_theme_cubic_exit_button.png | Bin 0 -> 220 bytes .../laptop_theme_cubic_major_button.png | Bin 0 -> 261 bytes ..._theme_desktop_icon_label_button_black.png | Bin 0 -> 122 bytes ...p_theme_desktop_icon_label_button_grey.png | Bin 0 -> 122 bytes .../laptop_theme_freedom_app_background.png | Bin 0 -> 1005 bytes .../laptop_theme_freedom_back_button.png | Bin 0 -> 215 bytes ...aptop_theme_freedom_desktop_background.png | Bin 0 -> 221316 bytes ...ptop_theme_freedom_desktop_icon_button.png | Bin 0 -> 250 bytes .../laptop_theme_freedom_exit_button.png | Bin 0 -> 222 bytes .../laptop_theme_freedom_major_button.png | Bin 0 -> 260 bytes .../laptop_theme_fruit_desktop_background.png | Bin 0 -> 129955 bytes ...laptop_theme_greenshell_app_background.png | Bin 0 -> 262 bytes .../laptop_theme_greenshell_back_button.png | Bin 0 -> 276 bytes ...aptop_theme_greenshell_calculator_icon.png | Bin 0 -> 297 bytes .../laptop_theme_greenshell_cs_bos_icon.png | Bin 0 -> 345 bytes ...op_theme_greenshell_desktop_background.png | Bin 0 -> 900 bytes ...e_greenshell_desktop_icon_label_button.png | Bin 0 -> 109 bytes .../laptop_theme_greenshell_email_edit.png | Bin 0 -> 263 bytes .../laptop_theme_greenshell_email_forward.png | Bin 0 -> 240 bytes ...ptop_theme_greenshell_email_letter_new.png | Bin 0 -> 278 bytes .../laptop_theme_greenshell_email_new.png | Bin 0 -> 274 bytes .../laptop_theme_greenshell_email_read.png | Bin 0 -> 304 bytes .../laptop_theme_greenshell_email_reply.png | Bin 0 -> 249 bytes .../laptop_theme_greenshell_email_trash.png | Bin 0 -> 279 bytes .../laptop_theme_greenshell_exit_button.png | Bin 0 -> 213 bytes .../laptop_theme_greenshell_laptop_boom.png | Bin 0 -> 297 bytes .../laptop_theme_greenshell_mail_button.png | Bin 0 -> 279 bytes .../laptop_theme_greenshell_mail_icon.png | Bin 0 -> 692 bytes .../laptop_theme_greenshell_mail_received.png | Bin 0 -> 331 bytes .../laptop_theme_greenshell_mail_sentbox.png | Bin 0 -> 324 bytes .../laptop_theme_greenshell_major_button.png | Bin 0 -> 193 bytes .../laptop_theme_greenshell_minor_button.png | Bin 0 -> 185 bytes .../laptop_theme_greenshell_notepad_icon.png | Bin 0 -> 276 bytes ...laptop_theme_greenshell_printer_button.png | Bin 0 -> 221 bytes ...laptop_theme_greenshell_removable_icon.png | Bin 0 -> 329 bytes .../laptop_theme_greenshell_settings_icon.png | Bin 0 -> 360 bytes .../laptop_theme_greenshell_tetris_icon.png | Bin 0 -> 204 bytes .../laptop_theme_greenshell_tnt_icon.png | Bin 0 -> 245 bytes .../laptop_theme_magma_app_background.png | Bin 0 -> 1005 bytes .../laptop_theme_magma_back_button.png | Bin 0 -> 213 bytes .../laptop_theme_magma_desktop_background.png | Bin 0 -> 416182 bytes ...laptop_theme_magma_desktop_icon_button.png | Bin 0 -> 249 bytes .../laptop_theme_magma_exit_button.png | Bin 0 -> 220 bytes .../laptop_theme_magma_major_button.png | Bin 0 -> 260 bytes .../textures/laptop_theme_minor_button.png | Bin 0 -> 264 bytes .../laptop_theme_printos_major_button.png | Bin 0 -> 207 bytes .../laptop_theme_printos_minor_button.png | Bin 0 -> 207 bytes .../laptop_theme_red_app_background.png | Bin 0 -> 1005 bytes .../textures/laptop_theme_red_back_button.png | Bin 0 -> 212 bytes .../laptop_theme_red_desktop_background.png | Bin 0 -> 220747 bytes .../laptop_theme_red_desktop_icon_button.png | Bin 0 -> 247 bytes .../textures/laptop_theme_red_exit_button.png | Bin 0 -> 221 bytes .../laptop_theme_red_major_button.png | Bin 0 -> 259 bytes .../laptop_theme_shell_app_background.png | Bin 0 -> 3613 bytes .../laptop_theme_shell_back_button.png | Bin 0 -> 290 bytes .../laptop_theme_shell_desktop_background.png | Bin 0 -> 1525 bytes ..._theme_shell_desktop_icon_label_button.png | Bin 0 -> 109 bytes .../laptop_theme_shell_exit_button.png | Bin 0 -> 209 bytes .../laptop_theme_shell_major_button.png | Bin 0 -> 179 bytes .../laptop_theme_shell_minor_button.png | Bin 0 -> 178 bytes .../laptop_theme_snowpines_app_background.png | Bin 0 -> 987 bytes ...top_theme_snowpines_desktop_background.png | Bin 0 -> 293885 bytes .../laptop_theme_snowpines_exit_button.png | Bin 0 -> 177 bytes .../laptop_theme_snowpines_major_button.png | Bin 0 -> 133 bytes .../laptop_theme_snowpines_minor_button.png | Bin 0 -> 179 bytes mods_disabled/laptop/textures/laptop_tnt.png | Bin 0 -> 249 bytes mods_disabled/laptop/textures/laptop_usb.png | Bin 0 -> 995 bytes .../laptop/textures/laptop_wa_web.png | Bin 0 -> 9835 bytes .../laptop/textures/laptop_welcome_web.png | Bin 0 -> 10986 bytes mods_disabled/laptop/themes.lua | 136 + .../laptop/themes/ambershell_theme.lua | 52 + mods_disabled/laptop/themes/argyle_theme.lua | 15 + mods_disabled/laptop/themes/basic_theme.lua | 14 + mods_disabled/laptop/themes/blue_theme.lua | 11 + mods_disabled/laptop/themes/boing_theme.lua | 17 + mods_disabled/laptop/themes/bubbles_theme.lua | 10 + mods_disabled/laptop/themes/circuit_theme.lua | 14 + mods_disabled/laptop/themes/clouds_theme.lua | 13 + mods_disabled/laptop/themes/cubic_theme.lua | 14 + mods_disabled/laptop/themes/freedom_theme.lua | 11 + mods_disabled/laptop/themes/fruit_theme.lua | 5 + .../laptop/themes/greenshell_theme.lua | 52 + mods_disabled/laptop/themes/magma_theme.lua | 9 + mods_disabled/laptop/themes/printer_theme.lua | 15 + mods_disabled/laptop/themes/red_theme.lua | 11 + mods_disabled/laptop/themes/shell_theme.lua | 22 + .../laptop/themes/snowpines_theme.lua | 20 + .../.github/workflows/check-release.yml | 0 {mods => mods_disabled}/lavastuff/.luacheckrc | 0 {mods => mods_disabled}/lavastuff/depends.txt | 0 {mods => mods_disabled}/lavastuff/init.lua | 0 {mods => mods_disabled}/lavastuff/license.txt | 0 .../lavastuff/locale/lavastuff.de.tr | 0 .../lavastuff/locale/lavastuff.es.tr | 0 .../lavastuff/locale/lavastuff.fr.tr | 0 .../lavastuff/locale/lavastuff.it.tr | 0 {mods => mods_disabled}/lavastuff/mod.conf | 0 {mods => mods_disabled}/lavastuff/readme.md | 0 .../lavastuff/screenshot.png | Bin .../lavastuff/settingtypes.txt | 0 .../lavastuff/textures/lavastuff_axe.png | Bin .../lavastuff/textures/lavastuff_block.png | Bin .../lavastuff/textures/lavastuff_boots.png | Bin .../textures/lavastuff_boots_preview.png | Bin .../textures/lavastuff_chestplate.png | Bin .../textures/lavastuff_chestplate_preview.png | Bin .../lavastuff/textures/lavastuff_helmet.png | Bin .../textures/lavastuff_helmet_preview.png | Bin .../lavastuff/textures/lavastuff_ingot.png | Bin .../textures/lavastuff_inv_boots.png | Bin .../textures/lavastuff_inv_chestplate.png | Bin .../textures/lavastuff_inv_helmet.png | Bin .../textures/lavastuff_inv_leggings.png | Bin .../textures/lavastuff_inven_shield.png | Bin .../textures/lavastuff_lava_in_a_bottle.png | Bin .../lavastuff/textures/lavastuff_leggings.png | Bin .../textures/lavastuff_leggings_preview.png | Bin .../lavastuff/textures/lavastuff_pick.png | Bin .../lavastuff/textures/lavastuff_shield.png | Bin .../textures/lavastuff_shield_preview.png | Bin .../lavastuff/textures/lavastuff_shovel.png | Bin .../lavastuff/textures/lavastuff_sword.png | Bin .../lavastuff/textures/license.txt | 0 .../lavastuff/textures/zmobs_lava_orb.png | Bin .../letter_blocks/description.txt | 0 .../letter_blocks/init.lua | 0 .../letter_blocks/license.txt | 0 .../letter_blocks/mod.conf | 0 .../textures/letter_blocks_a_sign.png | Bin .../letter_blocks_apostrophe_sign.png | Bin .../textures/letter_blocks_b_sign.png | Bin .../textures/letter_blocks_blank_sign.png | Bin .../textures/letter_blocks_c_sign.png | Bin .../textures/letter_blocks_check_sign.png | Bin .../textures/letter_blocks_comma_sign.png | Bin .../textures/letter_blocks_d_sign.png | Bin .../letter_blocks_double_quote_sign.png | Bin .../textures/letter_blocks_e_sign.png | Bin .../letter_blocks_exclamation_sign.png | Bin .../textures/letter_blocks_f_sign.png | Bin .../textures/letter_blocks_g_sign.png | Bin .../textures/letter_blocks_h_sign.png | Bin .../textures/letter_blocks_i_sign.png | Bin .../textures/letter_blocks_j_sign.png | Bin .../textures/letter_blocks_k_sign.png | Bin .../textures/letter_blocks_l_sign.png | Bin .../textures/letter_blocks_m_sign.png | Bin .../textures/letter_blocks_n_sign.png | Bin .../textures/letter_blocks_o_sign.png | Bin .../textures/letter_blocks_p_sign.png | Bin .../textures/letter_blocks_q_sign.png | Bin .../textures/letter_blocks_question_sign.png | Bin .../textures/letter_blocks_r_sign.png | Bin .../textures/letter_blocks_s_sign.png | Bin .../textures/letter_blocks_t_sign.png | Bin .../textures/letter_blocks_u_sign.png | Bin .../textures/letter_blocks_v_sign.png | Bin .../textures/letter_blocks_w_sign.png | Bin .../textures/letter_blocks_x_sign.png | Bin .../textures/letter_blocks_y_sign.png | Bin .../textures/letter_blocks_z_sign.png | Bin {mods => mods_disabled}/rainbow_ore/README.md | 0 .../rainbow_ore/depends.txt | 0 {mods => mods_disabled}/rainbow_ore/init.lua | 0 .../rainbow_ore/rainbow_armor.lua | 0 .../rainbow_ore/rainbow_shield.lua | 0 .../rainbow_ore/textures/raibow_ore.png | Bin .../rainbow_ore/textures/rainbow_ore_axe.png | Bin .../textures/rainbow_ore_block.png | Bin .../textures/rainbow_ore_boots_inv.png | Bin .../textures/rainbow_ore_chestplate_inv.png | Bin .../textures/rainbow_ore_helmet_inv.png | Bin .../textures/rainbow_ore_ingot.png | Bin .../textures/rainbow_ore_leggings_inv.png | Bin .../textures/rainbow_ore_pickaxe.png | Bin .../rainbow_ore_rainbow_ore_boots.png | Bin .../rainbow_ore_rainbow_ore_boots_preview.png | Bin .../rainbow_ore_rainbow_ore_chestplate.png | Bin ...bow_ore_rainbow_ore_chestplate_preview.png | Bin .../rainbow_ore_rainbow_ore_helmet.png | Bin ...rainbow_ore_rainbow_ore_helmet_preview.png | Bin .../rainbow_ore_rainbow_ore_leggings.png | Bin ...inbow_ore_rainbow_ore_leggings_preview.png | Bin .../rainbow_ore_rainbow_ore_shield.png | Bin ...rainbow_ore_rainbow_ore_shield_preview.png | Bin .../textures/rainbow_ore_shield_inv.png | Bin .../textures/rainbow_ore_shovel.png | Bin .../textures/rainbow_ore_sword.png | Bin {mods => mods_disabled}/skinsdb/API.md | 0 {mods => mods_disabled}/skinsdb/README.md | 0 {mods => mods_disabled}/skinsdb/api.lua | 0 .../skinsdb/chatcommands.lua | 0 {mods => mods_disabled}/skinsdb/formspecs.lua | 0 {mods => mods_disabled}/skinsdb/init.lua | 0 .../skinsdb/locale/skinsdb.de.tr | 0 .../skinsdb/locale/skinsdb.fr.tr | 0 .../skinsdb/locale/skinsdb.ms.tr | 0 .../skinsdb/locale/skinsdb.zh_CN.tr | 0 .../skinsdb/locale/skinsdb.zh_TW.tr | 0 .../skinsdb/locale/template.txt | 0 .../skinsdb/meta/character_1.txt | 0 .../skinsdb/meta/character_2.txt | 0 .../skinsdb/meta/character_3.txt | 0 .../skinsdb/meta/character_4.txt | 0 .../skinsdb/meta/readme.txt | 0 {mods => mods_disabled}/skinsdb/mod.conf | 0 .../models/skinsdb_3d_armor_character_5.b3d | Bin .../models/skinsdb_3d_armor_character_5.blend | Bin .../skinsdb/sfinv_page.lua | 0 .../skinsdb/skin_meta_api.lua | 0 {mods => mods_disabled}/skinsdb/skinlist.lua | 0 mods_disabled/skinsdb/textures/character.png | Bin 0 -> 3774 bytes .../skinsdb/textures/character_1.png | Bin .../skinsdb/textures/character_2.png | Bin .../skinsdb/textures/character_4.png | Bin .../skinsdb/textures/readme.txt | 0 .../skinsdb/textures/skindb_mask_chest.png | Bin .../skinsdb/textures/skindb_mask_head.png | Bin .../skinsdb/textures/skindb_mask_rarm.png | Bin .../skinsdb/textures/skindb_mask_rleg.png | Bin .../skinsdb/textures/skindb_transform.png | Bin {mods => mods_disabled}/ts_doors/.gitignore | 0 {mods => mods_disabled}/ts_doors/LICENSE | 0 {mods => mods_disabled}/ts_doors/README.md | 0 {mods => mods_disabled}/ts_doors/depends.txt | 0 .../ts_doors/description.txt | 0 {mods => mods_disabled}/ts_doors/init.lua | 0 {mods => mods_disabled}/ts_doors/mod.conf | 0 .../ts_doors/textures/ts_doors_base.png | Bin .../ts_doors/textures/ts_doors_base_full.png | Bin .../textures/ts_doors_base_full_inv.png | Bin .../textures/ts_doors_base_full_locked.png | Bin .../ts_doors_base_full_locked_inv.png | Bin .../ts_doors/textures/ts_doors_base_inv.png | Bin .../textures/ts_doors_base_locked.png | Bin .../textures/ts_doors_base_locked_inv.png | Bin .../textures/ts_doors_base_trapdoor.png | Bin .../textures/ts_doors_base_trapdoor_full.png | Bin .../ts_doors_base_trapdoor_full_locked.png | Bin .../ts_doors_base_trapdoor_locked.png | Bin todo-list.txt | 7 + 880 files changed, 26246 insertions(+), 87 deletions(-) rename mods/{skinsdb/textures/character_3.png => saras_world/textures/character.png} (100%) delete mode 100644 mods/skinsdb/meta/character_10.txt delete mode 100644 mods/skinsdb/meta/character_11.txt delete mode 100644 mods/skinsdb/meta/character_12.txt delete mode 100644 mods/skinsdb/meta/character_13.txt delete mode 100644 mods/skinsdb/meta/character_14.txt delete mode 100644 mods/skinsdb/meta/character_15.txt delete mode 100644 mods/skinsdb/meta/character_16.txt delete mode 100644 mods/skinsdb/meta/character_5.txt delete mode 100644 mods/skinsdb/meta/character_6.txt delete mode 100644 mods/skinsdb/meta/character_7.txt delete mode 100644 mods/skinsdb/meta/character_8.txt delete mode 100644 mods/skinsdb/meta/character_9.txt delete mode 100644 mods/skinsdb/textures/character_10.png delete mode 100644 mods/skinsdb/textures/character_11.png delete mode 100644 mods/skinsdb/textures/character_12.png delete mode 100644 mods/skinsdb/textures/character_13.png delete mode 100644 mods/skinsdb/textures/character_14.png delete mode 100644 mods/skinsdb/textures/character_15.png delete mode 100644 mods/skinsdb/textures/character_16.png delete mode 100644 mods/skinsdb/textures/character_5.png delete mode 100644 mods/skinsdb/textures/character_6.png delete mode 100644 mods/skinsdb/textures/character_7.png delete mode 100644 mods/skinsdb/textures/character_8.png delete mode 100644 mods/skinsdb/textures/character_9.png delete mode 100644 mods/skinsdb/textures/skins_button.png delete mode 100644 mods/skinsdb/textures/ui_misc_form.png create mode 100644 mods_disabled/ethereal/README.md create mode 100644 mods_disabled/ethereal/compatibility.lua create mode 100644 mods_disabled/ethereal/crystal.lua create mode 100644 mods_disabled/ethereal/depends.txt create mode 100644 mods_disabled/ethereal/description.txt create mode 100644 mods_disabled/ethereal/dirt.lua create mode 100644 mods_disabled/ethereal/extra.lua create mode 100644 mods_disabled/ethereal/fences.lua create mode 100644 mods_disabled/ethereal/fishing.lua create mode 100644 mods_disabled/ethereal/food.lua create mode 100644 mods_disabled/ethereal/gates.lua create mode 100644 mods_disabled/ethereal/init.lua create mode 100644 mods_disabled/ethereal/leaves.lua create mode 100644 mods_disabled/ethereal/license.txt create mode 100644 mods_disabled/ethereal/locale/de.txt create mode 100644 mods_disabled/ethereal/locale/ru.txt create mode 100644 mods_disabled/ethereal/locale/template.txt create mode 100644 mods_disabled/ethereal/lucky_block.lua create mode 100644 mods_disabled/ethereal/mapgen.lua create mode 100644 mods_disabled/ethereal/mod.conf create mode 100644 mods_disabled/ethereal/mushroom.lua create mode 100644 mods_disabled/ethereal/onion.lua create mode 100644 mods_disabled/ethereal/ores.lua create mode 100644 mods_disabled/ethereal/plantlife.lua create mode 100644 mods_disabled/ethereal/plantpack.lua create mode 100644 mods_disabled/ethereal/sapling.lua create mode 100644 mods_disabled/ethereal/schematics/bamboo_tree.lua create mode 100644 mods_disabled/ethereal/schematics/banana_tree.lua create mode 100644 mods_disabled/ethereal/schematics/bigtree.lua create mode 100644 mods_disabled/ethereal/schematics/birch_tree.lua create mode 100644 mods_disabled/ethereal/schematics/bush.lua create mode 100644 mods_disabled/ethereal/schematics/corals.mts create mode 100644 mods_disabled/ethereal/schematics/frosttrees.lua create mode 100644 mods_disabled/ethereal/schematics/igloo.lua create mode 100644 mods_disabled/ethereal/schematics/mushroomone.lua create mode 100644 mods_disabled/ethereal/schematics/orange_tree.lua create mode 100644 mods_disabled/ethereal/schematics/palmtree.lua create mode 100644 mods_disabled/ethereal/schematics/pinetree.lua create mode 100644 mods_disabled/ethereal/schematics/redwood_tree.lua create mode 100644 mods_disabled/ethereal/schematics/sakura.lua create mode 100644 mods_disabled/ethereal/schematics/vinetree.lua create mode 100644 mods_disabled/ethereal/schematics/volcanol.lua create mode 100644 mods_disabled/ethereal/schematics/volcanom.lua create mode 100644 mods_disabled/ethereal/schematics/waterlily.lua create mode 100644 mods_disabled/ethereal/schematics/willow.lua create mode 100644 mods_disabled/ethereal/schematics/yellowtree.lua create mode 100644 mods_disabled/ethereal/screenshot.png create mode 100644 mods_disabled/ethereal/sealife.lua create mode 100644 mods_disabled/ethereal/settings.conf_example create mode 100644 mods_disabled/ethereal/stairs.lua create mode 100644 mods_disabled/ethereal/strawberry.lua create mode 100644 mods_disabled/ethereal/textures/baked_clay_grey.png create mode 100644 mods_disabled/ethereal/textures/baked_clay_orange.png create mode 100644 mods_disabled/ethereal/textures/baked_clay_red.png create mode 100644 mods_disabled/ethereal/textures/bamboo.png create mode 100644 mods_disabled/ethereal/textures/bamboo_floor.png create mode 100644 mods_disabled/ethereal/textures/bamboo_leaves.png create mode 100644 mods_disabled/ethereal/textures/bamboo_sprout.png create mode 100644 mods_disabled/ethereal/textures/banana_bread.png create mode 100644 mods_disabled/ethereal/textures/banana_dough.png create mode 100644 mods_disabled/ethereal/textures/banana_leaf.png create mode 100644 mods_disabled/ethereal/textures/banana_leaf_old.png create mode 100644 mods_disabled/ethereal/textures/banana_single.png create mode 100644 mods_disabled/ethereal/textures/banana_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/banana_trunk.png create mode 100644 mods_disabled/ethereal/textures/banana_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/banana_wood.png create mode 100644 mods_disabled/ethereal/textures/blank.png create mode 100644 mods_disabled/ethereal/textures/bowl.png create mode 100644 mods_disabled/ethereal/textures/brick_ice.png create mode 100644 mods_disabled/ethereal/textures/brick_ice.png_old create mode 100644 mods_disabled/ethereal/textures/brick_snow.png create mode 100644 mods_disabled/ethereal/textures/bucket_cactus.png create mode 100644 mods_disabled/ethereal/textures/bucket_cactus.png_hd create mode 100644 mods_disabled/ethereal/textures/candle.png create mode 100644 mods_disabled/ethereal/textures/candle_static.png create mode 100644 mods_disabled/ethereal/textures/charcoal_lump.png create mode 100644 mods_disabled/ethereal/textures/coral2.png create mode 100644 mods_disabled/ethereal/textures/coral3.png create mode 100644 mods_disabled/ethereal/textures/coral4.png create mode 100644 mods_disabled/ethereal/textures/coral5.png create mode 100644 mods_disabled/ethereal/textures/crystal_axe.png create mode 100644 mods_disabled/ethereal/textures/crystal_block.png create mode 100644 mods_disabled/ethereal/textures/crystal_gilly_staff.png create mode 100644 mods_disabled/ethereal/textures/crystal_ingot.png create mode 100644 mods_disabled/ethereal/textures/crystal_pick.png create mode 100644 mods_disabled/ethereal/textures/crystal_shovel.png create mode 100644 mods_disabled/ethereal/textures/crystal_spike.png create mode 100644 mods_disabled/ethereal/textures/crystal_sword.png create mode 100644 mods_disabled/ethereal/textures/default_apple_gold.png create mode 100644 mods_disabled/ethereal/textures/default_ice.png create mode 100644 mods_disabled/ethereal/textures/ethereal_agar_powder.png create mode 100644 mods_disabled/ethereal/textures/ethereal_big_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_bush.png create mode 100644 mods_disabled/ethereal/textures/ethereal_crystalgrass.png create mode 100644 mods_disabled/ethereal/textures/ethereal_dry_dirt.png create mode 100644 mods_disabled/ethereal/textures/ethereal_dry_shrub.png create mode 100644 mods_disabled/ethereal/textures/ethereal_etherium_dust.png create mode 100644 mods_disabled/ethereal/textures/ethereal_etherium_ore.png create mode 100644 mods_disabled/ethereal/textures/ethereal_fire_flower.png create mode 100644 mods_disabled/ethereal/textures/ethereal_firethorn.png create mode 100644 mods_disabled/ethereal/textures/ethereal_firethorn_jelly.png create mode 100644 mods_disabled/ethereal/textures/ethereal_frost_leaves.png create mode 100644 mods_disabled/ethereal/textures/ethereal_frost_tree.png create mode 100644 mods_disabled/ethereal/textures/ethereal_frost_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_frost_tree_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_bamboo_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_bamboo_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_cold_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_cold_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_crystal_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_crystal_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_fiery_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_fiery_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_gray_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_gray_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_grove_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_grove_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_jungle_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_jungle_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_mushroom_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_mushroom_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_prairie_side.png create mode 100644 mods_disabled/ethereal/textures/ethereal_grass_prairie_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_gray_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_jungle_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_mushroom_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_pine_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_door.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_door_inv.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_leaves.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_leaves2.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_trunk.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sakura_wood.png create mode 100644 mods_disabled/ethereal/textures/ethereal_snowygrass.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sponge.png create mode 100644 mods_disabled/ethereal/textures/ethereal_sponge_wet.png create mode 100644 mods_disabled/ethereal/textures/ethereal_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/ethereal_wild_onion_1.png create mode 100644 mods_disabled/ethereal/textures/ethereal_wild_onion_2.png create mode 100644 mods_disabled/ethereal/textures/ethereal_wild_onion_3.png create mode 100644 mods_disabled/ethereal/textures/ethereal_wild_onion_4.png create mode 100644 mods_disabled/ethereal/textures/ethereal_wild_onion_5.png create mode 100644 mods_disabled/ethereal/textures/farming_orange.png create mode 100644 mods_disabled/ethereal/textures/fern.png create mode 100644 mods_disabled/ethereal/textures/fern_tubers.png create mode 100644 mods_disabled/ethereal/textures/fire_dust.png create mode 100644 mods_disabled/ethereal/textures/fish_cooked.png create mode 100644 mods_disabled/ethereal/textures/fish_raw.png create mode 100644 mods_disabled/ethereal/textures/fishing_rod.png create mode 100644 mods_disabled/ethereal/textures/fishing_rod_baited.png create mode 100644 mods_disabled/ethereal/textures/fishing_rod_wield.png create mode 100644 mods_disabled/ethereal/textures/frost_wood.png create mode 100644 mods_disabled/ethereal/textures/glostone.png create mode 100644 mods_disabled/ethereal/textures/hearty_stew.png create mode 100644 mods_disabled/ethereal/textures/illumishroom.png create mode 100644 mods_disabled/ethereal/textures/illumishroom2.png create mode 100644 mods_disabled/ethereal/textures/illumishroom3.png create mode 100644 mods_disabled/ethereal/textures/light_staff.png create mode 100644 mods_disabled/ethereal/textures/lightstring.png create mode 100644 mods_disabled/ethereal/textures/moretrees_acacia_leaves.png create mode 100644 mods_disabled/ethereal/textures/moretrees_birch_leaves.png create mode 100644 mods_disabled/ethereal/textures/moretrees_birch_sapling.png create mode 100644 mods_disabled/ethereal/textures/moretrees_birch_trunk.png create mode 100644 mods_disabled/ethereal/textures/moretrees_birch_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/moretrees_birch_wood.png create mode 100644 mods_disabled/ethereal/textures/moretrees_coconut.png create mode 100644 mods_disabled/ethereal/textures/moretrees_coconut_slice.png create mode 100644 mods_disabled/ethereal/textures/moretrees_palm_leaves.png create mode 100644 mods_disabled/ethereal/textures/moretrees_palm_sapling.png create mode 100644 mods_disabled/ethereal/textures/moretrees_palm_trunk.png create mode 100644 mods_disabled/ethereal/textures/moretrees_palm_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/moretrees_palm_wood.png create mode 100644 mods_disabled/ethereal/textures/mushroom_block.png create mode 100644 mods_disabled/ethereal/textures/mushroom_pore.png create mode 100644 mods_disabled/ethereal/textures/mushroom_soup.png create mode 100644 mods_disabled/ethereal/textures/mushroom_trunk.png create mode 100644 mods_disabled/ethereal/textures/mushroom_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/orange_leaves.png create mode 100644 mods_disabled/ethereal/textures/orange_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/palm_wax.png create mode 100644 mods_disabled/ethereal/textures/paper_wall.png create mode 100644 mods_disabled/ethereal/textures/pine_leaves.png create mode 100644 mods_disabled/ethereal/textures/pine_nuts.png create mode 100644 mods_disabled/ethereal/textures/purple_leaves.png create mode 100644 mods_disabled/ethereal/textures/redwood_leaves.png create mode 100644 mods_disabled/ethereal/textures/redwood_sapling.png create mode 100644 mods_disabled/ethereal/textures/redwood_trunk.png create mode 100644 mods_disabled/ethereal/textures/redwood_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/redwood_wood.png create mode 100644 mods_disabled/ethereal/textures/sashimi.png create mode 100644 mods_disabled/ethereal/textures/scorched_tree.png create mode 100644 mods_disabled/ethereal/textures/scorched_tree_top.png create mode 100644 mods_disabled/ethereal/textures/seaweed.png create mode 100644 mods_disabled/ethereal/textures/stone_ladder.png create mode 100644 mods_disabled/ethereal/textures/strawberry.png create mode 100644 mods_disabled/ethereal/textures/strawberry_1.png create mode 100644 mods_disabled/ethereal/textures/strawberry_2.png create mode 100644 mods_disabled/ethereal/textures/strawberry_3.png create mode 100644 mods_disabled/ethereal/textures/strawberry_4.png create mode 100644 mods_disabled/ethereal/textures/strawberry_5.png create mode 100644 mods_disabled/ethereal/textures/strawberry_6.png create mode 100644 mods_disabled/ethereal/textures/strawberry_7.png create mode 100644 mods_disabled/ethereal/textures/strawberry_8.png create mode 100644 mods_disabled/ethereal/textures/vine.png create mode 100644 mods_disabled/ethereal/textures/wild_onion.png create mode 100644 mods_disabled/ethereal/textures/willow_sapling.png create mode 100644 mods_disabled/ethereal/textures/willow_trunk.png create mode 100644 mods_disabled/ethereal/textures/willow_trunk_top.png create mode 100644 mods_disabled/ethereal/textures/willow_twig.png create mode 100644 mods_disabled/ethereal/textures/willow_wood.png create mode 100644 mods_disabled/ethereal/textures/worm.png create mode 100644 mods_disabled/ethereal/textures/yellow_leaves.png create mode 100644 mods_disabled/ethereal/textures/yellow_tree.png create mode 100644 mods_disabled/ethereal/textures/yellow_tree_sapling.png create mode 100644 mods_disabled/ethereal/textures/yellow_tree_top.png create mode 100644 mods_disabled/ethereal/textures/yellow_wood.png create mode 100644 mods_disabled/ethereal/water.lua create mode 100644 mods_disabled/ethereal/wood.lua rename {mods => mods_disabled}/goodie_bags/README.md (100%) rename {mods => mods_disabled}/goodie_bags/craftitems.lua (100%) rename {mods => mods_disabled}/goodie_bags/depends.txt (100%) rename {mods => mods_disabled}/goodie_bags/description.txt (100%) rename {mods => mods_disabled}/goodie_bags/ff_goodie_bags.conf (100%) rename {mods => mods_disabled}/goodie_bags/functions.lua (100%) rename {mods => mods_disabled}/goodie_bags/init.lua (100%) rename {mods => mods_disabled}/goodie_bags/item_lists.lua (97%) rename {mods => mods_disabled}/goodie_bags/license.txt (100%) rename {mods => mods_disabled}/goodie_bags/mod.conf (100%) rename {mods => mods_disabled}/goodie_bags/sounds/ff_goodie_bags_Coin01.ogg (100%) rename {mods => mods_disabled}/goodie_bags/textures/ff_goodie_bags_blue_goodie_bag.png (100%) rename {mods => mods_disabled}/goodie_bags/textures/ff_goodie_bags_goodie_bag_contents.png (100%) rename {mods => mods_disabled}/goodie_bags/textures/ff_goodie_bags_green_goodie_bag.png (100%) rename {mods => mods_disabled}/goodie_bags/textures/ff_goodie_bags_orange_goodie_bag.png (100%) rename {mods => mods_disabled}/goodie_bags/textures/ff_goodie_bags_red_goodie_bag.png (100%) rename {mods => mods_disabled}/helicopter/LICENSE (100%) rename {mods => mods_disabled}/helicopter/README.md (100%) rename {mods => mods_disabled}/helicopter/depends.txt (100%) rename {mods => mods_disabled}/helicopter/init.lua (100%) rename {mods => mods_disabled}/helicopter/matrix.lua (100%) rename {mods => mods_disabled}/helicopter/mod.conf (100%) rename {mods => mods_disabled}/helicopter/models/helicopter_heli.x (100%) rename {mods => mods_disabled}/helicopter/sounds/helicopter_motor.ogg (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_blades.png (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_blades_inv.png (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_cabin_inv.png (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_glass.png (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_heli.png (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_heli_inv.png (100%) rename {mods => mods_disabled}/helicopter/textures/helicopter_water_driblet.png (100%) create mode 100644 mods_disabled/jumpdrive/.github/workflows/integration-test.yml create mode 100644 mods_disabled/jumpdrive/.github/workflows/luacheck.yml create mode 100644 mods_disabled/jumpdrive/.luacheckrc create mode 100644 mods_disabled/jumpdrive/backbone.lua create mode 100644 mods_disabled/jumpdrive/blacklist.lua create mode 100644 mods_disabled/jumpdrive/bookmark.lua create mode 100644 mods_disabled/jumpdrive/common.lua create mode 100644 mods_disabled/jumpdrive/compat/anchor.lua create mode 100644 mods_disabled/jumpdrive/compat/areas.lua create mode 100644 mods_disabled/jumpdrive/compat/beds.lua create mode 100644 mods_disabled/jumpdrive/compat/compat.lua create mode 100644 mods_disabled/jumpdrive/compat/drawers.lua create mode 100644 mods_disabled/jumpdrive/compat/elevator.lua create mode 100644 mods_disabled/jumpdrive/compat/itemframes.lua create mode 100644 mods_disabled/jumpdrive/compat/locator.lua create mode 100644 mods_disabled/jumpdrive/compat/ropes.lua create mode 100644 mods_disabled/jumpdrive/compat/sethome.lua create mode 100644 mods_disabled/jumpdrive/compat/signs.lua create mode 100644 mods_disabled/jumpdrive/compat/telemosaic.lua create mode 100644 mods_disabled/jumpdrive/compat/teleporttube.lua create mode 100644 mods_disabled/jumpdrive/compat/textline.lua create mode 100644 mods_disabled/jumpdrive/compat/travelnet.lua create mode 100644 mods_disabled/jumpdrive/crafts.lua create mode 100644 mods_disabled/jumpdrive/digiline.lua create mode 100644 mods_disabled/jumpdrive/doc/digiline.md create mode 100644 mods_disabled/jumpdrive/doc/lua_api.txt create mode 100644 mods_disabled/jumpdrive/engines/area.lua create mode 100644 mods_disabled/jumpdrive/engines/area_formspec.lua create mode 100644 mods_disabled/jumpdrive/engines/default.lua create mode 100644 mods_disabled/jumpdrive/engines/default_formspec.lua create mode 100644 mods_disabled/jumpdrive/engines/default_jump.lua create mode 100644 mods_disabled/jumpdrive/fleet/fleet_controller.lua create mode 100644 mods_disabled/jumpdrive/fleet/fleet_digiline.lua create mode 100644 mods_disabled/jumpdrive/fleet/fleet_formspec.lua create mode 100644 mods_disabled/jumpdrive/fleet/fleet_functions.lua create mode 100644 mods_disabled/jumpdrive/fuel.lua create mode 100644 mods_disabled/jumpdrive/infotext.lua create mode 100644 mods_disabled/jumpdrive/init.lua create mode 100755 mods_disabled/jumpdrive/integration-test.sh create mode 100644 mods_disabled/jumpdrive/integration_test.lua create mode 100644 mods_disabled/jumpdrive/is_area_empty.lua create mode 100644 mods_disabled/jumpdrive/is_area_protected.lua create mode 100644 mods_disabled/jumpdrive/license.txt create mode 100644 mods_disabled/jumpdrive/mapgen.lua create mode 100644 mods_disabled/jumpdrive/marker.lua create mode 100644 mods_disabled/jumpdrive/metrics.lua create mode 100644 mods_disabled/jumpdrive/migrate.lua create mode 100644 mods_disabled/jumpdrive/mod.conf create mode 100644 mods_disabled/jumpdrive/move/move.lua create mode 100644 mods_disabled/jumpdrive/move/move_metadata.lua create mode 100644 mods_disabled/jumpdrive/move/move_nodetimers.lua create mode 100644 mods_disabled/jumpdrive/move/move_objects.lua create mode 100644 mods_disabled/jumpdrive/override/teleport_tube.lua create mode 100644 mods_disabled/jumpdrive/patches/pipeworks.patch create mode 100644 mods_disabled/jumpdrive/patches/readme.md create mode 100644 mods_disabled/jumpdrive/readme.md create mode 100644 mods_disabled/jumpdrive/screenshots/screenshot_20180507_200203.png create mode 100644 mods_disabled/jumpdrive/screenshots/screenshot_20180507_200309.png create mode 100644 mods_disabled/jumpdrive/sounds/jumpdrive_engine.ogg create mode 100644 mods_disabled/jumpdrive/technic_run.lua create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_air.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_area.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_backbone.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_blue_mese_crystal.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_fleet_controller.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_raw_blue_mese_crystal.png create mode 100644 mods_disabled/jumpdrive/textures/jumpdrive_remote.png create mode 100644 mods_disabled/jumpdrive/textures/marker_blue.png create mode 100644 mods_disabled/jumpdrive/textures/marker_green.png create mode 100644 mods_disabled/jumpdrive/textures/marker_red.png create mode 100644 mods_disabled/jumpdrive/textures/spark.png create mode 100644 mods_disabled/jumpdrive/upgrade.lua create mode 100644 mods_disabled/laptop/.gitattributes create mode 100644 mods_disabled/laptop/API.md create mode 100644 mods_disabled/laptop/LICENSE.txt create mode 100644 mods_disabled/laptop/MTBOX.md create mode 100644 mods_disabled/laptop/README-LICENSE.txt create mode 100644 mods_disabled/laptop/README.md create mode 100644 mods_disabled/laptop/app_fw.lua create mode 100644 mods_disabled/laptop/apps/TNTsweeper_app.lua create mode 100644 mods_disabled/laptop/apps/browser_app.lua create mode 100644 mods_disabled/laptop/apps/calculator_app.lua create mode 100644 mods_disabled/laptop/apps/cs-bos_app.lua create mode 100644 mods_disabled/laptop/apps/ecommerce_app.lua create mode 100644 mods_disabled/laptop/apps/launcher_app.lua create mode 100644 mods_disabled/laptop/apps/launcher_settings_app.lua create mode 100644 mods_disabled/laptop/apps/mail_app.lua create mode 100644 mods_disabled/laptop/apps/os_dialogs_app.lua create mode 100644 mods_disabled/laptop/apps/os_print_app.lua create mode 100644 mods_disabled/laptop/apps/realchess_app.lua create mode 100644 mods_disabled/laptop/apps/removable_app.lua create mode 100644 mods_disabled/laptop/apps/shell-os_app.lua create mode 100644 mods_disabled/laptop/apps/stickynote_app.lua create mode 100644 mods_disabled/laptop/apps/tetris_app.lua create mode 100644 mods_disabled/laptop/block_devices.lua create mode 100644 mods_disabled/laptop/craftitems.lua create mode 100644 mods_disabled/laptop/depends.txt create mode 100644 mods_disabled/laptop/hardware_fw.lua create mode 100644 mods_disabled/laptop/hardware_nodes.lua create mode 100644 mods_disabled/laptop/init.lua create mode 100644 mods_disabled/laptop/mod.conf create mode 100644 mods_disabled/laptop/mtos.lua create mode 100644 mods_disabled/laptop/recipe_compat.lua create mode 100644 mods_disabled/laptop/screenshot.png create mode 100644 mods_disabled/laptop/textures/commoditymarket_gold_coins.png create mode 100644 mods_disabled/laptop/textures/laptop_ad1_web.png create mode 100644 mods_disabled/laptop/textures/laptop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_bat.png create mode 100644 mods_disabled/laptop/textures/laptop_boom.png create mode 100644 mods_disabled/laptop/textures/laptop_browser.png create mode 100644 mods_disabled/laptop/textures/laptop_calculator.png create mode 100644 mods_disabled/laptop/textures/laptop_case.png create mode 100644 mods_disabled/laptop/textures/laptop_cpu_65536.png create mode 100644 mods_disabled/laptop/textures/laptop_cpu_c6.png create mode 100644 mods_disabled/laptop/textures/laptop_cpu_d75a.png create mode 100644 mods_disabled/laptop/textures/laptop_cpu_jetcore.png create mode 100644 mods_disabled/laptop/textures/laptop_crt.png create mode 100644 mods_disabled/laptop/textures/laptop_crt_amber.png create mode 100644 mods_disabled/laptop/textures/laptop_crt_green.png create mode 100644 mods_disabled/laptop/textures/laptop_cs_bos.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_back.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_front.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_front_on.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_left.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_right.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_monitor_top.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_back.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_front.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_front_on.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_left.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_right.png create mode 100644 mods_disabled/laptop/textures/laptop_cube_tower_top.png create mode 100644 mods_disabled/laptop/textures/laptop_diskette.png create mode 100644 mods_disabled/laptop/textures/laptop_email_edit.png create mode 100644 mods_disabled/laptop/textures/laptop_email_forward.png create mode 100644 mods_disabled/laptop/textures/laptop_email_letter.png create mode 100644 mods_disabled/laptop/textures/laptop_email_new.png create mode 100644 mods_disabled/laptop/textures/laptop_email_reply.png create mode 100644 mods_disabled/laptop/textures/laptop_email_trash.png create mode 100644 mods_disabled/laptop/textures/laptop_fan.png create mode 100644 mods_disabled/laptop/textures/laptop_fruit_base.png create mode 100644 mods_disabled/laptop/textures/laptop_fruit_lcd_back.png create mode 100644 mods_disabled/laptop/textures/laptop_fruit_stand_top.png create mode 100644 mods_disabled/laptop/textures/laptop_go_web.png create mode 100644 mods_disabled/laptop/textures/laptop_gpu.png create mode 100644 mods_disabled/laptop/textures/laptop_harddrive.png create mode 100644 mods_disabled/laptop/textures/laptop_home_web.png create mode 100644 mods_disabled/laptop/textures/laptop_k_back.png create mode 100644 mods_disabled/laptop/textures/laptop_k_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_k_front.png create mode 100644 mods_disabled/laptop/textures/laptop_k_left.png create mode 100644 mods_disabled/laptop/textures/laptop_k_right.png create mode 100644 mods_disabled/laptop/textures/laptop_k_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_closed_back.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_closed_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_closed_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_closed_left.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_closed_right.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_closed_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_back.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_left.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_on_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_right.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_base_open_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_closed_back.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_closed_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_closed_left.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_closed_right.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_closed_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_open_back.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_open_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_open_left.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_open_on_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_open_right.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_open_top.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_sc_open_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_sc_open_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_car_sc_open_on_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_sc_open_back.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_sc_open_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_sc_open_front.png create mode 100644 mods_disabled/laptop/textures/laptop_lap_sc_open_on_front.png create mode 100644 mods_disabled/laptop/textures/laptop_launcher_insert_floppy.png create mode 100644 mods_disabled/laptop/textures/laptop_lcd.png create mode 100644 mods_disabled/laptop/textures/laptop_lcd_fruit.png create mode 100644 mods_disabled/laptop/textures/laptop_lcd_fruit_on.png create mode 100644 mods_disabled/laptop/textures/laptop_m_back.png create mode 100644 mods_disabled/laptop/textures/laptop_m_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_m_front.png create mode 100644 mods_disabled/laptop/textures/laptop_m_front_on.png create mode 100644 mods_disabled/laptop/textures/laptop_m_left.png create mode 100644 mods_disabled/laptop/textures/laptop_m_right.png create mode 100644 mods_disabled/laptop/textures/laptop_m_top.png create mode 100644 mods_disabled/laptop/textures/laptop_mail.png create mode 100644 mods_disabled/laptop/textures/laptop_mail_button.png create mode 100644 mods_disabled/laptop/textures/laptop_mail_read.png create mode 100644 mods_disabled/laptop/textures/laptop_mail_read_button.png create mode 100644 mods_disabled/laptop/textures/laptop_mail_received.png create mode 100644 mods_disabled/laptop/textures/laptop_mail_sentbox.png create mode 100644 mods_disabled/laptop/textures/laptop_motherboard.png create mode 100644 mods_disabled/laptop/textures/laptop_notes_pad.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_kb_back.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_kb_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_kb_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_kb_left.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_kb_right.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_kb_top.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcb_back.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcb_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcb_left.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcb_right.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcb_top.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_back.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_left.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_on_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_right.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcd_top.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcp_back.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcp_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcp_left.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcp_right.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_lcp_top.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_ms_back.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_ms_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_ms_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_ms_left.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_ms_right.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_ms_top.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_back.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_left.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_on_front.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_right.png create mode 100644 mods_disabled/laptop/textures/laptop_opti_pc_top.png create mode 100644 mods_disabled/laptop/textures/laptop_p_back.png create mode 100644 mods_disabled/laptop/textures/laptop_p_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_p_front.png create mode 100644 mods_disabled/laptop/textures/laptop_p_left.png create mode 100644 mods_disabled/laptop/textures/laptop_p_right.png create mode 100644 mods_disabled/laptop/textures/laptop_p_top.png create mode 100644 mods_disabled/laptop/textures/laptop_printed_paper.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_back.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_button.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_front.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_front_off.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_front_on.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_left.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_right.png create mode 100644 mods_disabled/laptop/textures/laptop_printer_top.png create mode 100644 mods_disabled/laptop/textures/laptop_psu.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_bishop_black.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_bishop_white.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_chess_bg.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_chessboard_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_king_black.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_king_white.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_knight_black.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_knight_white.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_pawn_black.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_pawn_white.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_queen_black.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_queen_white.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_rook_black.png create mode 100644 mods_disabled/laptop/textures/laptop_realchess_rook_white.png create mode 100644 mods_disabled/laptop/textures/laptop_removable.png create mode 100644 mods_disabled/laptop/textures/laptop_setting_wrench.png create mode 100644 mods_disabled/laptop/textures/laptop_settings_web.png create mode 100644 mods_disabled/laptop/textures/laptop_t_back.png create mode 100644 mods_disabled/laptop/textures/laptop_t_bottom.png create mode 100644 mods_disabled/laptop/textures/laptop_t_front.png create mode 100644 mods_disabled/laptop/textures/laptop_t_front_on.png create mode 100644 mods_disabled/laptop/textures/laptop_t_left.png create mode 100644 mods_disabled/laptop/textures/laptop_t_right.png create mode 100644 mods_disabled/laptop/textures/laptop_t_top.png create mode 100644 mods_disabled/laptop/textures/laptop_tetris_block.png create mode 100644 mods_disabled/laptop/textures/laptop_tetris_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_calculator_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_cs_bos_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_desktop_icon_label_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_edit.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_forward.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_letter_new.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_new.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_read.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_reply.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_email_trash.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_laptop_boom.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_mail_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_mail_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_mail_received.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_mail_sentbox.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_minor_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_notepad_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_printer_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_realchess_chessboard_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_removable_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_settings_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_tetris_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_ambershell_tnt_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_argyle_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_argyle_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_argyle_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_argyle_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_basic_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_basic_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_basic_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_blue_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_blue_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_blue_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_blue_desktop_icon_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_blue_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_blue_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_boing_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_boing_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_boing_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_boing_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_boing_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_bubbles_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_circuit_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_circuit_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_circuit_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_circuit_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_circuit_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_clouds_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_clouds_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_clouds_desktop_icon_label_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_cubic_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_cubic_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_cubic_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_cubic_desktop_icon_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_cubic_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_cubic_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_desktop_icon_label_button_black.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_desktop_icon_label_button_grey.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_freedom_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_freedom_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_freedom_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_freedom_desktop_icon_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_freedom_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_freedom_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_fruit_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_calculator_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_cs_bos_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_desktop_icon_label_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_edit.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_forward.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_letter_new.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_new.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_read.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_reply.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_email_trash.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_laptop_boom.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_mail_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_mail_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_mail_received.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_mail_sentbox.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_minor_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_notepad_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_printer_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_removable_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_settings_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_tetris_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_greenshell_tnt_icon.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_magma_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_magma_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_magma_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_magma_desktop_icon_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_magma_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_magma_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_minor_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_printos_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_printos_minor_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_red_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_red_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_red_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_red_desktop_icon_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_red_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_red_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_back_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_desktop_icon_label_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_shell_minor_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_snowpines_app_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_snowpines_desktop_background.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_snowpines_exit_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_snowpines_major_button.png create mode 100644 mods_disabled/laptop/textures/laptop_theme_snowpines_minor_button.png create mode 100644 mods_disabled/laptop/textures/laptop_tnt.png create mode 100644 mods_disabled/laptop/textures/laptop_usb.png create mode 100644 mods_disabled/laptop/textures/laptop_wa_web.png create mode 100644 mods_disabled/laptop/textures/laptop_welcome_web.png create mode 100644 mods_disabled/laptop/themes.lua create mode 100644 mods_disabled/laptop/themes/ambershell_theme.lua create mode 100644 mods_disabled/laptop/themes/argyle_theme.lua create mode 100644 mods_disabled/laptop/themes/basic_theme.lua create mode 100644 mods_disabled/laptop/themes/blue_theme.lua create mode 100644 mods_disabled/laptop/themes/boing_theme.lua create mode 100644 mods_disabled/laptop/themes/bubbles_theme.lua create mode 100644 mods_disabled/laptop/themes/circuit_theme.lua create mode 100644 mods_disabled/laptop/themes/clouds_theme.lua create mode 100644 mods_disabled/laptop/themes/cubic_theme.lua create mode 100644 mods_disabled/laptop/themes/freedom_theme.lua create mode 100644 mods_disabled/laptop/themes/fruit_theme.lua create mode 100644 mods_disabled/laptop/themes/greenshell_theme.lua create mode 100644 mods_disabled/laptop/themes/magma_theme.lua create mode 100644 mods_disabled/laptop/themes/printer_theme.lua create mode 100644 mods_disabled/laptop/themes/red_theme.lua create mode 100644 mods_disabled/laptop/themes/shell_theme.lua create mode 100644 mods_disabled/laptop/themes/snowpines_theme.lua rename {mods => mods_disabled}/lavastuff/.github/workflows/check-release.yml (100%) rename {mods => mods_disabled}/lavastuff/.luacheckrc (100%) rename {mods => mods_disabled}/lavastuff/depends.txt (100%) rename {mods => mods_disabled}/lavastuff/init.lua (100%) rename {mods => mods_disabled}/lavastuff/license.txt (100%) rename {mods => mods_disabled}/lavastuff/locale/lavastuff.de.tr (100%) rename {mods => mods_disabled}/lavastuff/locale/lavastuff.es.tr (100%) rename {mods => mods_disabled}/lavastuff/locale/lavastuff.fr.tr (100%) rename {mods => mods_disabled}/lavastuff/locale/lavastuff.it.tr (100%) rename {mods => mods_disabled}/lavastuff/mod.conf (100%) rename {mods => mods_disabled}/lavastuff/readme.md (100%) rename {mods => mods_disabled}/lavastuff/screenshot.png (100%) rename {mods => mods_disabled}/lavastuff/settingtypes.txt (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_axe.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_block.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_boots.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_boots_preview.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_chestplate.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_chestplate_preview.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_helmet.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_helmet_preview.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_ingot.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_inv_boots.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_inv_chestplate.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_inv_helmet.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_inv_leggings.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_inven_shield.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_lava_in_a_bottle.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_leggings.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_leggings_preview.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_pick.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_shield.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_shield_preview.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_shovel.png (100%) rename {mods => mods_disabled}/lavastuff/textures/lavastuff_sword.png (100%) rename {mods => mods_disabled}/lavastuff/textures/license.txt (100%) rename {mods => mods_disabled}/lavastuff/textures/zmobs_lava_orb.png (100%) rename {mods => mods_disabled}/letter_blocks/description.txt (100%) rename {mods => mods_disabled}/letter_blocks/init.lua (100%) rename {mods => mods_disabled}/letter_blocks/license.txt (100%) rename {mods => mods_disabled}/letter_blocks/mod.conf (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_a_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_apostrophe_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_b_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_blank_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_c_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_check_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_comma_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_d_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_double_quote_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_e_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_exclamation_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_f_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_g_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_h_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_i_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_j_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_k_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_l_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_m_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_n_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_o_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_p_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_q_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_question_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_r_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_s_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_t_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_u_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_v_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_w_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_x_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_y_sign.png (100%) rename {mods => mods_disabled}/letter_blocks/textures/letter_blocks_z_sign.png (100%) rename {mods => mods_disabled}/rainbow_ore/README.md (100%) rename {mods => mods_disabled}/rainbow_ore/depends.txt (100%) rename {mods => mods_disabled}/rainbow_ore/init.lua (100%) rename {mods => mods_disabled}/rainbow_ore/rainbow_armor.lua (100%) rename {mods => mods_disabled}/rainbow_ore/rainbow_shield.lua (100%) rename {mods => mods_disabled}/rainbow_ore/textures/raibow_ore.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_axe.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_block.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_boots_inv.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_chestplate_inv.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_helmet_inv.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_ingot.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_leggings_inv.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_pickaxe.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_boots.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_boots_preview.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_chestplate.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_chestplate_preview.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_helmet.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_helmet_preview.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_leggings.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_leggings_preview.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_shield.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_rainbow_ore_shield_preview.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_shield_inv.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_shovel.png (100%) rename {mods => mods_disabled}/rainbow_ore/textures/rainbow_ore_sword.png (100%) rename {mods => mods_disabled}/skinsdb/API.md (100%) rename {mods => mods_disabled}/skinsdb/README.md (100%) rename {mods => mods_disabled}/skinsdb/api.lua (100%) rename {mods => mods_disabled}/skinsdb/chatcommands.lua (100%) rename {mods => mods_disabled}/skinsdb/formspecs.lua (100%) rename {mods => mods_disabled}/skinsdb/init.lua (100%) rename {mods => mods_disabled}/skinsdb/locale/skinsdb.de.tr (100%) rename {mods => mods_disabled}/skinsdb/locale/skinsdb.fr.tr (100%) rename {mods => mods_disabled}/skinsdb/locale/skinsdb.ms.tr (100%) rename {mods => mods_disabled}/skinsdb/locale/skinsdb.zh_CN.tr (100%) rename {mods => mods_disabled}/skinsdb/locale/skinsdb.zh_TW.tr (100%) rename {mods => mods_disabled}/skinsdb/locale/template.txt (100%) rename {mods => mods_disabled}/skinsdb/meta/character_1.txt (100%) rename {mods => mods_disabled}/skinsdb/meta/character_2.txt (100%) rename {mods => mods_disabled}/skinsdb/meta/character_3.txt (100%) rename {mods => mods_disabled}/skinsdb/meta/character_4.txt (100%) rename {mods => mods_disabled}/skinsdb/meta/readme.txt (100%) rename {mods => mods_disabled}/skinsdb/mod.conf (100%) rename {mods => mods_disabled}/skinsdb/models/skinsdb_3d_armor_character_5.b3d (100%) rename {mods => mods_disabled}/skinsdb/models/skinsdb_3d_armor_character_5.blend (100%) rename {mods => mods_disabled}/skinsdb/sfinv_page.lua (100%) rename {mods => mods_disabled}/skinsdb/skin_meta_api.lua (100%) rename {mods => mods_disabled}/skinsdb/skinlist.lua (100%) create mode 100644 mods_disabled/skinsdb/textures/character.png rename {mods => mods_disabled}/skinsdb/textures/character_1.png (100%) rename {mods => mods_disabled}/skinsdb/textures/character_2.png (100%) rename {mods => mods_disabled}/skinsdb/textures/character_4.png (100%) rename {mods => mods_disabled}/skinsdb/textures/readme.txt (100%) rename {mods => mods_disabled}/skinsdb/textures/skindb_mask_chest.png (100%) rename {mods => mods_disabled}/skinsdb/textures/skindb_mask_head.png (100%) rename {mods => mods_disabled}/skinsdb/textures/skindb_mask_rarm.png (100%) rename {mods => mods_disabled}/skinsdb/textures/skindb_mask_rleg.png (100%) rename {mods => mods_disabled}/skinsdb/textures/skindb_transform.png (100%) rename {mods => mods_disabled}/ts_doors/.gitignore (100%) rename {mods => mods_disabled}/ts_doors/LICENSE (100%) rename {mods => mods_disabled}/ts_doors/README.md (100%) rename {mods => mods_disabled}/ts_doors/depends.txt (100%) rename {mods => mods_disabled}/ts_doors/description.txt (100%) rename {mods => mods_disabled}/ts_doors/init.lua (100%) rename {mods => mods_disabled}/ts_doors/mod.conf (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_full.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_full_inv.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_full_locked.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_full_locked_inv.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_inv.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_locked.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_locked_inv.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_trapdoor.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_trapdoor_full.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_trapdoor_full_locked.png (100%) rename {mods => mods_disabled}/ts_doors/textures/ts_doors_base_trapdoor_locked.png (100%) create mode 100644 todo-list.txt diff --git a/README.md b/README.md index e560d4e..b6bfbd8 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,16 @@ +Sara's Simple Survival Game +========================== +Copyright (C) 2019-2020 FreeGamers.org +Thank you to everyone who has contributed to this project, mods, and the FreeGamers communitys. -The best game for Minetest. A project with the goal of enhancing minetest_game survival with new depth, mechanics, biomes, mobs and many essential additions. Has a focus on being fun, user-friendly, stable, and minimalist but featured. Join our cause: https://www.freegamers.org +Description +------------------------- +The best game for Minetest. A survival game with new depth, mechanics, biomes, mobs and many essential additions. Has a focus on being fun, user-friendly, stable, and minimalist but featured. Join our cause: https://www.freegamers.org +Currently, this game is quite stable and has been debugged on an online server environment with many players. There is active development so new bugs may come and go. -This project started with the goal to expand Minetest game to include additional features that would greatly enhance the gameplay to be more fun for players. -Currently, this game is quite stable and has been debugged on an online server environment with many players. +Minetest Engine Compatability +-------------------------- +Minetest engine version 5.2.0 or greater is currently recommended to run this game. +Minetest engine version 5.1.1 is compatabile but not all mods and function completely. -Thank you to everyone who has helped contribute to this project and mods. - -version 5.2.0 or greater is currently recommended to run this game. -version 5.1.1 will work but not all mod features will be compatible. diff --git a/mods/clothing/init.lua b/mods/clothing/init.lua index 3399125..3d73664 100644 --- a/mods/clothing/init.lua +++ b/mods/clothing/init.lua @@ -119,9 +119,6 @@ minetest.register_on_joinplayer(function(player) return count end, }, name) - if clothing.inv_mod == "inventory_plus" then - inventory_plus.register_button(player,"clothing", "Clothing") - end load_clothing_metadata(player, clothing_inv) minetest.after(1, function(name) diff --git a/mods/craftguide/init.lua b/mods/craftguide/init.lua index 6016875..02483fa 100644 --- a/mods/craftguide/init.lua +++ b/mods/craftguide/init.lua @@ -1757,7 +1757,7 @@ else core.register_craft{ output = "craftguide:sign", type = "shapeless", - recipe = {"default:sign_wall_wood"} + recipe = {"signs:sign"} } core.register_craft{ diff --git a/mods/default/aliases.lua b/mods/default/aliases.lua index 6db3fc8..2db6bd1 100644 --- a/mods/default/aliases.lua +++ b/mods/default/aliases.lua @@ -32,7 +32,6 @@ minetest.register_alias("water_source", "default:water_source") minetest.register_alias("lava_flowing", "default:lava_flowing") minetest.register_alias("lava_source", "default:lava_source") minetest.register_alias("torch", "default:torch") -minetest.register_alias("sign_wall", "default:sign_wall_wood") minetest.register_alias("furnace", "default:furnace") minetest.register_alias("chest", "default:chest") minetest.register_alias("locked_chest", "default:chest_locked") @@ -74,4 +73,3 @@ minetest.register_alias("default:pinetree", "default:pine_tree") minetest.register_alias("default:pinewood", "default:pine_wood") minetest.register_alias("default:ladder", "default:ladder_wood") -minetest.register_alias("default:sign_wall", "default:sign_wall_wood") diff --git a/mods/default/nodes.lua b/mods/default/nodes.lua index 0fcc07a..4324dc9 100644 --- a/mods/default/nodes.lua +++ b/mods/default/nodes.lua @@ -202,9 +202,6 @@ Tools / "Advanced" crafting / Non-"natural" default:bookshelf -default:sign_wall_wood -default:sign_wall_steel - default:ladder_wood default:ladder_steel diff --git a/mods/dfcaverns/df_caverns/dungeon_loot.lua b/mods/dfcaverns/df_caverns/dungeon_loot.lua index 1dcbcdc..0038d02 100644 --- a/mods/dfcaverns/df_caverns/dungeon_loot.lua +++ b/mods/dfcaverns/df_caverns/dungeon_loot.lua @@ -99,8 +99,8 @@ bones_loot.register_loot({ {name = "default:mese_crystal_fragment", chance = 0.4, count = {1,5}, types = {"underworld_warrior"}}, {name = "default:obsidian_shard", chance = 0.4, count = {1,3}, types = {"underworld_warrior"}}, {name = "default:flint", chance = 0.3, count = {1,1}, types = {"underworld_warrior"}}, - {name = "default:sign_wall_wood", chance = 0.1, count = {1,4}, types = {"underworld_warrior"}}, - {name = "default:sign_wall_steel", chance = 0.1, count = {1,2}, types = {"underworld_warrior"}}, + {name = "signs:sign", chance = 0.1, count = {1,4}, types = {"underworld_warrior"}}, + {name = "signs:sign", chance = 0.1, count = {1,2}, types = {"underworld_warrior"}}, {name = "default:ladder_wood", chance = 0.5, count = {1,10}, types = {"underworld_warrior"}}, {name = "default:ladder_steel", chance = 0.2, count = {1,5}, types = {"underworld_warrior"}}, {name = "default:meselamp", chance = 0.1, count = {1,2}, types = {"underworld_warrior"}}, @@ -114,4 +114,4 @@ if df_caverns.config.enable_lava_sea then bones_loot.register_loot({name = "df_mapitems:mese_crystal", chance = 0.25, count = {1, 2}, types = {"underworld_warrior"}}) end -end \ No newline at end of file +end diff --git a/mods/dynamic_liquid/init.lua b/mods/dynamic_liquid/init.lua index c70fe55..f5bcc7e 100644 --- a/mods/dynamic_liquid/init.lua +++ b/mods/dynamic_liquid/init.lua @@ -265,8 +265,6 @@ if flow_through then "default:dry_shrub", "default:bush_stem", "default:acacia_bush_stem", - "default:sign_wall_wood", - "default:sign_wall_steel", "default:ladder_wood", "default:ladder_steel", "default:fence_wood", @@ -289,6 +287,11 @@ if flow_through then add_flow_through("carts:powerrail") add_flow_through("carts:brakerail") end + + -- Add "signs" support. + if minetest.get_modpath("signs") then + add_flow_through("signs:sign") + end end @@ -564,4 +567,4 @@ if displace_liquid then end end) -end \ No newline at end of file +end diff --git a/mods/lootchests_modpack/lootchests_default/chests.lua b/mods/lootchests_modpack/lootchests_default/chests.lua index 160134e..a89a20b 100644 --- a/mods/lootchests_modpack/lootchests_default/chests.lua +++ b/mods/lootchests_modpack/lootchests_default/chests.lua @@ -7,8 +7,8 @@ lootchests.register_lootchest({ groups = {choppy = 2, oddly_breakable_by_hand = 2}, ymax = 5, ymin = -512, - spawn_in_rarity = 80, - spawn_on_rarity = 5000, + spawn_in_rarity = 160, + spawn_on_rarity = 10000, slot_spawn_chance = 75, slots = 32, }) @@ -26,7 +26,7 @@ lootchests.register_lootchest({ groups = {snappy = 2, oddly_breakable_by_hand = 2}, ymax = 0, ymin = -256, - spawn_on_rarity = 1400, + spawn_on_rarity = 2800, slot_spawn_chance = 35, slots = 24, }) @@ -44,7 +44,7 @@ lootchests.register_lootchest({ groups = {cracky = 2, oddly_breakable_by_hand = 2}, ymax = 0, ymin = -256, - spawn_on_rarity = 900, + spawn_on_rarity = 1800, slot_spawn_chance = 50, slots = 24, }) @@ -62,7 +62,7 @@ lootchests.register_lootchest({ groups = {choppy = 2, oddly_breakable_by_hand = 2}, ymax = 5, ymin = -32, - spawn_in_rarity = 70, + spawn_in_rarity = 140, slot_spawn_chance = 50, slots = 24, }) @@ -83,8 +83,8 @@ lootchests.register_lootchest({ groups = {cracky = 2}, ymax = -128, ymin = -4096, - spawn_in_rarity = 75, - spawn_on_rarity = 7500, + spawn_in_rarity = 125, + spawn_on_rarity = 12500, slot_spawn_chance = 75, slots = 32, }) diff --git a/mods/lootchests_modpack/lootchests_default/item_tables.lua b/mods/lootchests_modpack/lootchests_default/item_tables.lua index 6ac2713..4e8f606 100644 --- a/mods/lootchests_modpack/lootchests_default/item_tables.lua +++ b/mods/lootchests_modpack/lootchests_default/item_tables.lua @@ -26,7 +26,7 @@ lootchests.loot_table["lootchests_default:ocean_chest"] = { {"default:sword_bronze"}, {"default:sword_steel"}, {"default:bookshelf", 16}, - {"default:sign_wall_wood", 4}, + {"signs:sign", 4}, {"default:ladder_wood", 64}, {"default:ladder_steel", 48}, {"default:glass", 32}, @@ -101,7 +101,7 @@ lootchests.loot_table["lootchests_default:urn"] = { {"default:shovel_stone"}, {"default:axe_stone"}, {"default:sword_stone"}, - {"default:sign_wall_wood", 1}, + {"signs:sign", 1}, {"default:ladder_wood", 8}, {"vessels:glass_bottle", 4}, {"fire:flint_and_steel"}, @@ -162,4 +162,4 @@ lootchests.loot_table["lootchests_default:stone_chest"] = { {"carts:cart", 2}, {"bucket:bucket_empty", 8}, {"boats:boat", 2}, -} \ No newline at end of file +} diff --git a/mods/lootchests_modpack/lootchests_magic_materials/chests.lua b/mods/lootchests_modpack/lootchests_magic_materials/chests.lua index 1d872f3..72518e3 100644 --- a/mods/lootchests_modpack/lootchests_magic_materials/chests.lua +++ b/mods/lootchests_modpack/lootchests_magic_materials/chests.lua @@ -14,8 +14,8 @@ lootchests.register_lootchest({ groups = {cracky = 2, oddly_breakable_by_hand = 2}, ymax = -64, ymin = -16000, - spawn_in_rarity = 512, - spawn_on_rarity = 20000, + spawn_in_rarity = 1024, + spawn_on_rarity = 40000, slot_spawn_chance = 75, slots = 24, }) @@ -33,7 +33,7 @@ lootchests.register_lootchest({ groups = {cracky = 2, oddly_breakable_by_hand = 2}, ymax = -64, ymin = -1600, - spawn_on_rarity = 7200, + spawn_on_rarity = 14400, slot_spawn_chance = 50, slots = 24, }) diff --git a/mods/moreblocks/redefinitions.lua b/mods/moreblocks/redefinitions.lua index b05c2c0..5fda436 100644 --- a/mods/moreblocks/redefinitions.lua +++ b/mods/moreblocks/redefinitions.lua @@ -7,15 +7,6 @@ Licensed under the zlib license. See LICENSE.md for more information. -- Redefinitions of some default crafting recipes: -minetest.register_craft({ - output = "default:sign_wall 4", - recipe = { - {"default:wood", "default:wood", "default:wood"}, - {"default:wood", "default:wood", "default:wood"}, - {"", "default:stick", ""}, - } -}) - minetest.register_craft({ output = "default:ladder 4", recipe = { diff --git a/mods/skinsdb/textures/character_3.png b/mods/saras_world/textures/character.png similarity index 100% rename from mods/skinsdb/textures/character_3.png rename to mods/saras_world/textures/character.png diff --git a/mods/settlements_fantasy/settlements_medieval/init.lua b/mods/settlements_fantasy/settlements_medieval/init.lua index 42ffb03..6e17414 100644 --- a/mods/settlements_fantasy/settlements_medieval/init.lua +++ b/mods/settlements_fantasy/settlements_medieval/init.lua @@ -62,10 +62,9 @@ end local generate_books = minetest.settings:get_bool("settlements_generate_books", true) local initialize_node = function(pos, node, node_def, settlement_info) - if settlement_info.name and node.name == "default:sign_wall_steel" then + if settlement_info.name and node.name == "signs:sign" then local meta = minetest.get_meta(pos) meta:set_string("text", S("@1 Town Hall", settlement_info.name)) - meta:set_string("infotext", S("@1 Town Hall", settlement_info.name)) end -- when chest is found -> fill with stuff if node.name == "default:chest" then diff --git a/mods/settlements_fantasy/settlements_medieval/schematics/medieval_townhall.lua b/mods/settlements_fantasy/settlements_medieval/schematics/medieval_townhall.lua index 4964f8b..5dedfdb 100644 --- a/mods/settlements_fantasy/settlements_medieval/schematics/medieval_townhall.lua +++ b/mods/settlements_fantasy/settlements_medieval/schematics/medieval_townhall.lua @@ -24,7 +24,7 @@ local n23 = { name = "default:torch_wall", param2 = 4 } local n24 = { name = "doors:door_wood_a", param2 = 1 } local n25 = { name = "xpanes:pane_flat", param2 = 3 } local n26 = { name = "doors:hidden", param2 = 1 } -local n27 = { name = "default:sign_wall_steel", param2 = 3 } +local n27 = { name = "signs:sign", param2 = 3 } local n28 = { name = "default:tree", param2 = 18 } local n29 = { name = "stairs:stair_junglewood", param2 = 3 } local n30 = { name = "default:fence_wood" } diff --git a/mods/signs/README.md b/mods/signs/README.md index dc0d05d..a9dd289 100644 --- a/mods/signs/README.md +++ b/mods/signs/README.md @@ -1,4 +1,4 @@ -MultiCraft Game mod: signs +Sara's Simple Survival Game mod: signs ========================== License of source code diff --git a/mods/skinsdb/meta/character_10.txt b/mods/skinsdb/meta/character_10.txt deleted file mode 100644 index 256d98f..0000000 --- a/mods/skinsdb/meta/character_10.txt +++ /dev/null @@ -1,3 +0,0 @@ -Elite City Guardian -Rivanna16 -A member of an elite regiment of city guards. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_11.txt b/mods/skinsdb/meta/character_11.txt deleted file mode 100644 index 6f41069..0000000 --- a/mods/skinsdb/meta/character_11.txt +++ /dev/null @@ -1,3 +0,0 @@ -Wandering Mage -halucid -A magical being skilled in the elemental arts. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_12.txt b/mods/skinsdb/meta/character_12.txt deleted file mode 100644 index a949887..0000000 --- a/mods/skinsdb/meta/character_12.txt +++ /dev/null @@ -1,3 +0,0 @@ -Nature Mage -Rivanna16 -A magical being. She can channel energy from nature. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_13.txt b/mods/skinsdb/meta/character_13.txt deleted file mode 100644 index 39d456b..0000000 --- a/mods/skinsdb/meta/character_13.txt +++ /dev/null @@ -1,3 +0,0 @@ -Nightblade -Rakqoi -A master of shadows, darkness, and illusion. He conceals himself with the night. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_14.txt b/mods/skinsdb/meta/character_14.txt deleted file mode 100644 index 5675652..0000000 --- a/mods/skinsdb/meta/character_14.txt +++ /dev/null @@ -1,3 +0,0 @@ -Midnight Assassin -Rivanna16 -Spells to fool the mind, deadly poisons, and daggers; just a few tools in her arsenal. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_15.txt b/mods/skinsdb/meta/character_15.txt deleted file mode 100644 index a4c6edd..0000000 --- a/mods/skinsdb/meta/character_15.txt +++ /dev/null @@ -1,3 +0,0 @@ -Rogue -Rakqoi -An exile known for malicious acts. Skilled with cunning, deception, and agility. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_16.txt b/mods/skinsdb/meta/character_16.txt deleted file mode 100644 index dff227c..0000000 --- a/mods/skinsdb/meta/character_16.txt +++ /dev/null @@ -1,3 +0,0 @@ -Medieval Thief -Rivanna16 -She sat on the tavern roof, waiting. It was only a matter of time, now. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_5.txt b/mods/skinsdb/meta/character_5.txt deleted file mode 100644 index 90ce600..0000000 --- a/mods/skinsdb/meta/character_5.txt +++ /dev/null @@ -1,3 +0,0 @@ -Templar Knight -Rakqoi -Deus Vult! \ No newline at end of file diff --git a/mods/skinsdb/meta/character_6.txt b/mods/skinsdb/meta/character_6.txt deleted file mode 100644 index df39664..0000000 --- a/mods/skinsdb/meta/character_6.txt +++ /dev/null @@ -1,3 +0,0 @@ -Fantasy Knight -Rivanna16 -Honor and beauty. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_7.txt b/mods/skinsdb/meta/character_7.txt deleted file mode 100644 index 554aacd..0000000 --- a/mods/skinsdb/meta/character_7.txt +++ /dev/null @@ -1,3 +0,0 @@ -City Watch -Rakqoi -Guards tasked with watching over the town and keeping the peace. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_8.txt b/mods/skinsdb/meta/character_8.txt deleted file mode 100644 index 0b45604..0000000 --- a/mods/skinsdb/meta/character_8.txt +++ /dev/null @@ -1,3 +0,0 @@ -City Watch Guardian -Rivanna16 -They do their job to feed their families, which is all that matters in the end. \ No newline at end of file diff --git a/mods/skinsdb/meta/character_9.txt b/mods/skinsdb/meta/character_9.txt deleted file mode 100644 index 4ea5e26..0000000 --- a/mods/skinsdb/meta/character_9.txt +++ /dev/null @@ -1,3 +0,0 @@ -Elite City Warden -Rakqoi -A member of an elite regiment of city guards. \ No newline at end of file diff --git a/mods/skinsdb/textures/character_10.png b/mods/skinsdb/textures/character_10.png deleted file mode 100644 index cb6d29d8a8b853b02439ce9f94b30eaec7128ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 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 HlT-c+|E;Bm diff --git a/mods/skinsdb/textures/character_13.png b/mods/skinsdb/textures/character_13.png deleted file mode 100644 index e482203e50dd6c6ebc8ade1a9bece213266f9bf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 zcmds7X>3$g6h1S3Gi|5s3|)qn0;NzvY7u2m1OiHt)drOah!P^fs38H=NR-6jhWbMj z5{OZviGT|R`C%ZaD6$j-3WX?8C_-sVfjTWR1zOq;)cc(`=gpnzOk4b6t0(EZ%USN( z?z#82eRo#TloVICi-=ODO)Y#xwG-7(Zh}*NH+=l+o2p4%Hg(<$MDAkz*wz)edn*E( zR(SvHXB@WN-12f;dRk^{VqyZhTn2ePNi=eJKCSs^vrREG4Cp_o6&;~Lzo8*Ojg2?Z zWzcalCp2fv%Pd)f>rSoR5$~lIS8r<07(z|iL#Qq-uZ@0UV1_%1ac~yq01r(b#?FAj z`VSlgTz3cCSF4t_W@f}wk7PT!(+tYa&7k<9ORcCO19S(})?X($qVkfT4fp%~Y@^U% zAkjy^?sAPK3*+tv#>%yylEdCgjyN0jNKGbp3ieb8#4w4zw8#RY1Zr+>Vq$Y_@(C^^ zrTg~mZk5WZNr~iDhNmaQQJV7>y;yWF@B3(KBLn_VU>vTx*lvoN#V&zr$xMAQUeY{N z49!9cyx@ekJGaQ=+lE+K0K@-lVDF5=h%$_W;d7^th#KKgCQ#TB*%|p=Nn_K`c_@Mc z7A=KQ3=7BQ)A8NKR4{QI{ZL#QW~dZP$pYOWkSlofb@^R=Pv8uIasa91Xk`xbqI^!4 zo7~9`I<#{yJvDm_Pz-{{2_Z6~@#`muju$yy(OO#oii?7}Ay5i9r2cO|?PeWssI9(# z+fM7E(;hD~1V3_z(C50kZ?qQ)!QD4}AZ^{ajWSc?sphXHTCr#j;qr9o&&y$%5@{g# zu@!U&!C*KTrwZ;7T@8E+=nCptU@A$3)Gt<1pIbDGMh#D)Ih)F8(11J|rd}PW3xJMrA|jhG-#zomi(xB;CI;W(RQLa+}LRIYb;r3ykcUMul%Ir03Rdr;7D{`t0So zR8!kP&#(WUNiYU|<)wOdglwTuu~U)O*XPz|2n7i;x${s@blmPlG7Zo$+^?Vup?@ zB*tSNAav>J$y9dwOdFk;DEN`rsqo-63OVmDewdOH<7mc;_uA#xWuYG)7Bzu1t_T(| zA=V9$xmYb|^*e%2_sN!n)Fb%VT&HP&ExF1W&}oJsVH*da(CHw>Pdu*UqV=)w zUs+N_Qb<9A=q_JW#5Eyu3pkzemb01_?WmE%`6({jB(g@Bsc%LfvSs{_GXQ%YsRxKO z9&;zp)}XNfzeB`8QZEpQ<38qOU!oriK%bSB$>?bG$QC#Z@`0B<4+fnc^#V@vcswj? z($dY`f*v@@x=05yk@krjJfQC?87HaVr{bsO)=f2Kr$8Y3o)Y8XxSOhsK;d5LDMaeG zO5i(kqMD{mxQ8mLFVT_(h1AoVPCNDalV0?uW$ZqAY6&4`=}}9Ps<8N^bAIGl%8yAou}| zj^D9sU%RJ*E!q}9WIN*kp+TJhR9rL_g<=4?{FFAP@i9y7 z+DG3C+H{*PSPE^unv-e>qylQ8;_HntaK9 z8P!2UBh3YL@yo~^zqvu&R?yZafL}B8yNwp&G3?!pT;~4`#{dLrx&rKbbTrg z?`JyEN3Z%oR9rO0Aagdov)UZQ_!_bwk@As%==IH4(Hb|2;xC|zn;_{A-lpuaG+0Fx zz!6ogjEnair(!jpkkdlnmRup*wR(`z)w(m>8tHlLh>X5T!AvsKKYjFgwRO(P1CnX+ z5q+>7>Pru*8M9_Y%K-e9t21DTF^1#1Wq=+b2*KDHydWXk;(4FnAiv+t7SLHyRrG+X zrw(xY-8nCz6166qZ(>8Wj)rOq1RX+@YNa~TAC41Q5D-nDKu`~)y<`Arp&K$lw+HjF zfVTjc45XwtiRqlR#|VF6^;4#`_*J#nv6vVSLeultD4>i11cF5e5!MTn%hkxTkWCWB zONXne�j+zog1XIiAo_iPJ)4;g7k!Tgu6&wu!Efhl{1D59)^ibVO$Uq1hw2Xsz|v zVHgIb0s75Q(kmJ>=CGg?Pdz&#=aIG&$wam9GnBJs499p?F~qTlBNVMTS`3m*#hSoj ze%}WRFeJPKa21wz{IeS@nvRY^Tc6(jT4OCH^Snxo51ghuEYb;J6FI0QVl7q+ z%TK&)U0{S>mV~jo9E`WW^|+wvd`&a;$#hyR5Hpq>A3a&M1^8cpm7lW?9X;hA8@+T! TNnqzp@K2juRJiqlg|Gh&t3Zab diff --git a/mods/skinsdb/textures/character_14.png b/mods/skinsdb/textures/character_14.png deleted file mode 100644 index c76bbff49eacfb9d71f1d89625c421f42e9adc27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 zcmd6tO>9(E6vywBLTYI{GRjARmR4E?F?>jkB&8?@Vp#}E6k|dJHbyqYL}cN@g@}pB z!jPzm(I9GAU^GGum>@Ait1&h}pcSxav0{r=M{A2IsEqG-+W&Cp`KALb7*2BMo_Ef< z=bo?o@m}Vo2bbPoT0F7XIaj)*anbUizc*-AMWce>ciwvLg`m6Psm8~icCM_67JGF@ z*`z?gEm^ei;U`DNs;W9VVu8@Ga7T4z3W3&+P8Z-N>*L@4bT&P{q@={~{{H?n?ZSl% zIp;_V=K(3aoH?s1%U$x%em5pwYT^@bN;qhzJG(Q6`;KQYuH%P-T(;pjkSH6>ZaiL+ z#^EXJQF?~sMak!bR=8=?rqr1;XWX1QbKJndfLph2ot5n0$rEg(Azz}Br>(*_On^_!!=4)t0J zWFDL#z$+~+b)yq;SA63bS5#VJ4ICOg^yB=gQ>S9PcI}F-UAxxiShHqLYW@24d9R9e z1*rTtZ{BPM{`JT2<|z5VVFf~tDBTvVkXjKazF<#Wq#QJ4vM{%6CZQHik^5x4@ zJ9g}dvHwJkyOy+=&Us~&$>rRY8gg^61Oz%Y^vvCX;}humE$QDW^12M{801U`Wc00* zCOF?2aAlI-!B%{M3qan?v^qc=?8mi;yll7(6D}>=NG2uL^;8XS{as zg!pmrB7|ey4_t6DLWg91=LoLJ_{8e~PX{2%Km~-2@AJ1`ardl#$~C?AvSWj+Te>D) zG4ca>yD0TuS_(cd3KuP3eIeN*+j15|IO=d(G}dqJ1CP6|=3REo-8f@`*-PdDWPM250@>&UO6S@5;(28}FCzPrHj3FIt;7Z=S2HthDUI z1cxR-7GNwo(1lKP(|$Hfq!;JBxK~rRN66B}QjFS6kim zFqm5+`vB)Wz|vU!#Itsz)El9C6Bzo@96m4Kugm{Cg9%7&ZLOKCD>4Sl=v)RXpuXc_ z+}BUA1V4(y>bprVq=mr?v0dDMTGZ|p*gK;{N*Ag*oRCo z&H|$G8kcKNNiP8g_`tK4f=`F00Qhtt=ORSOe{=i;}7zD>&zJd z1_ht2Tth>HJ9zLQ^BEKs6*(FoF*LCzK)}ZbM-2Yz{b9--bKLCNvt3zPnTZ9Q5@mlgRkEzw~62FC!iB2!Jo|&*$S-0f!GC=Cf6Xqf+Jz3->1%jqD4$`~Ptx z0weg!gb|V_(6pweCW+?k`C5$*T31(>=>jJ?TC!m!avqtswze=khNuaN;u1+rjJ;P&ZMZv6Dvuuuzj*cjH2F(IMrf34ze@{%%31|QYXH#wh5kF*A zfWeeM-we=2U|Gw4fC-qKWgKG!KJLr-I5OF6)Oh4`o&rp|YSk)pUZ()r8$W)0#wO$M z0of+@9XNXQsB39yu}h0KGCu&4r6))N-$`gJMI1VG=#ZN_b*hPh^Q|H*D;;cnY=Dv% zJ*qF{XxhGgyGk^s<7LN}VO%x`q(i!~tGKv0T|wiKcP7a)+AZ@x?zuc#|%e&fw*+wGSuUb^VR`&K{yA4vupXaE2J diff --git a/mods/skinsdb/textures/character_15.png b/mods/skinsdb/textures/character_15.png deleted file mode 100644 index 86f6d2ad686c8bf0ee6363f34827e4f8734e0534..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 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 Bq2vGn diff --git a/mods/skinsdb/textures/character_7.png b/mods/skinsdb/textures/character_7.png deleted file mode 100644 index e951f210bfe28f5909ae2e1f5250cde9da10558e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 zcmdT~32@wH6@Qy|goM(N``Dw|?2#>q>-T$`_up?f$rc@* zgg3MQ_Z{!O|2x0qpFF;4<4rl1QVS8~Y`A&dW`%E5zsijH>iNQR5A9SabNkKpKOxF} z3qRAI>Rg8+pbhI*f8z(~rpn6hZqvgzRz=;HJ|dqlLL(C&lW*dm)DjvuDQ1Rxr#*^s zfuhWLOou+&9lpyvwaj`Iw*?EmE=$Jd5;ouS;!_kJ9H!8)hy1;6^7VUZ_2VxaI*L=Q znPzqlCg3C(s)IO5Fy_ERA)RXOwapiH9-v5XfG&9=?I39WBc5cIw0=0MUmgbzq<`uiwlfQqE!lPaad@w|=zEOJMp17`(;_;EVGsHP! zcvi7ZC*zDt7?^_{^M)Y#)(jdM2pMS)gT)DAyktg#usPN-*EMXVpg%w% z^@9@vem@=f?XL|r#aQeTFq$T@JwIL1WO15{q2K!2gUq-8x$TVgwZITK#~S7e+k9io zn@%?v9W#~^Ft$zs7`pe_*XV|t1%&Y(KiWdpK{sF=Vhs7cv%Nk<=RW#ykW|#wyG#D)D4FeG6Kc0P-YhLvG z@vEn4Pi-A{vDNLlwt;?nq*bPwA3VYbIRcVB@(vy2-Lnm5Q4kT9<1X$77?*YkAz{21$t?QYv$+l-@bGS6-I9bkDlM$3v13@2a=J4N#aKhGWY_-1t%NRz0` zq6VYoW+>6Y7@`NmWv>_KfF_v-7bGbIkuMnZMj0r_&o;pO_>%C7DDvX6YofRjmgi>j z&G4nm7b#Pnl_oxnsvlAJcsOOmt}e}r<`r0JtuK#d*t65=^x!z1`NHR^sHl{_c&v%# zihN+9LHpYsr&7uv@rI&3J#Id=?%%7n;_w*XW!lf4ViUZck(B&mr{FZzfbnp`v;d=h z!6>!6|FerdjJdY4g!1eDMOT;RQnn?FKIrb6_8qu}UkMNxK%vz_6%}^M%(jr*Gs0|^ zoE%!@s;1Jig;x?YWgZRy7#VCdhYvZ(c%1BoJsFWClPRGUVYl`+iqD4fc2I)1Rm<4w#V`=`T*0k!YF;q&>bb zjH&MnXjd+DQ7|0OA~@*3fl*(Wqy+vK8DRdoqb7=o1CqZ6A$q^MYdO#T<(VL3$|0r) zEmC`*b1|nkl!1|dJ2d?lpplV5UITDsLOC>p{-TR`d}Arm;Ug>``k>Kd^^@Q0qu1L; z326_2@t(2x)`^Ug%u36>O!lg!Jl`^=`+6Ua+eR{Hfl>PD0l2*0qswFNO80clAhlcv8X7D7xL{D#tFwz`K1F(HLRPBaVU(cC>QH){hgc3t%+BgFu zy+PxvGx#K8*R^%2@=#7!St!P19=wpTwYQ&|oKC7ZW7>jDzt=_v!S*IGhB!gD>w*xd@up zEO$m1*a}#IF^`uq`e-|AziupWk^#Vxfm0+jIPoQeER=V2w(u5;t#q?#=0nP9mzm!e zi+q%ghfFx^P(>kSWLXG@9qji2e8F}WmrXHVG7CXE@%Aywv{>lxCy%Cfz-MiiC=>*s z?f`Q1EiNhGbi_$e2b>Fprs1k8eadKWJ$EMIW9uE8S8-Y!1X{zI9Y1P6;;7~s$(G;Q z)nQB-0w=(5fPB7RR9R(|lNb;D&OhE}y7?Iy)YkG&Y6mRLwIo`{tg(k2fKZP!0cd1i z=;53fPV~~9n^qc`BGHAM>F9BPkgNi2j4n#^%2u!gxUW9j3nc&jLdJFcNgQC7Xo6AC z0KG3lbpvHyjEVJyGRmLX8~41)TNXy|{q9=BaG{FxM#oasxTv*DY3&R=qUE&b-! zX5vyw{CjGG*m8U9_Q`{jbQs$=S^o*ds)Mt?%@#Xoc|1eh*0GdLGGB6^?*gcCL?5Y( zy6@?Hk5^(uA|9n!Tlz>@&?kewqT?uy!w^8mQ_%~JV9+AE0%+rh^#Hd&q&R*69b+z| mF#So~F{|;v05dp|8MViQ4RzGHtMxF3Hmu*c?v*v$9{D%y`fW}C diff --git a/mods/skinsdb/textures/character_8.png b/mods/skinsdb/textures/character_8.png deleted file mode 100644 index 3442254aadf64f4a9b0c82696f8a0b4a5a10033e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 zcmdT~4RBP|6+XcYChPtrOG3;aNeD(sC`#y1Ac91(kO~S4VG?l)4RwHuO=~+9T4)+= ztRqlpYeg}jj5SrP!nEjQDq}0wc9_A^22&aziAAmsTg$v{wKb~cEys_aV(~_=F=20%5 z^Bs)VZP~@+D=p`vK1=3~gaXbBh(q8MxlXb6m7k$L^VmvIxu zXnKZ3;cb8zf1NYMz`-+nUSGt_+cfh=jwW4ZwDDm@K(Dubh@PQnLxh3^!}~4g!-g>%{K@IIiwr<;%lM?QF$maMLd`V5{lN|zY@oEIG=w<8^G zB8w5#Ugij0YKPn-T7;(K`O}w=>IQKN;7r$*!jXrc=low;e>u)zfE0s3#^J0-vC|EQUQk@$s9SEm%}^I}B7t}xa#Bko$&VDz zI0fJxvk_2QHU=#(QUZl7D={~$epo|1tqbWi9oJ<>1Gm7VW`*E=IqRVm!u@1J6IE`g zSovrFnhG>-u z{#-VGj4hFFDlVs4Gp5r^J2sLv{#si7Kn3&8dRtgtHcyJEtdEV*H&^&0Wo)SDa0)ZNeCa=kY>+1^*<7mT>Gx)*$ z2?LWSjH5C4tR?$9FVM8A-PGmvQirFLbuC@Ic*q>x2sBPG)*RkK!}kHa6Zq#YrL2Z} z`smE(RIuU4)c)dj`n1hU(O#MVdFli=W}?%S-X_{u{TOZj!S^X8XA)%=mqyf2*A=*N z3J4>~5l)N{lkKA(@0 zlU$)hu8KA!0zBQ9C^-S&*@!)a2Yr!%O#nER2jy9voq_ZcUZm$iAN(W*_S6OHRHQkP zcriPld3FH#2cw&(E}(ODFVM__RPxO$qrL;RgXTiU>4+m=@hZA7?ADG_Ue#qD;h>L2hr z^3os7QFzF%MS?7j5p%NC2t&d;^!)K(T7n$(2V9KSqoMJWCd#{EB8vhC%t(o+#QrYYy6;zfZ@yUjFHl_nWjY*`H}m!T zn1Z~#0qmyDW~0`&Hs)odr&G~_lE8)pr5#E}pj&yOt?^@)fA}Yxg=~y>6whTGVG2Mv z0uI0PE|2ERf>{~dZp#LsQNkN${oh+@+0E(n+P~U(6HrtE_S6ad%|UO#^fg^slejbW zojXJ0ZoWNo3P^Zi0Udv3&+~M#t4m+kz!MV^2%7}?P$vU&6=4d)ud`dJ*XQSa3?*wU zst|c+zy<&ykI!o>Z%tr>@S){uK)z8%nqwS;Jv}{!+@m#*bAhR>s4!?c0>eeV`Lkx7 zH3*kuN}8x}vNLWfFv1@TNF=a)K{_?|jU{_*ETsllAI?S$M+VFB21v2^&5L{a5%3(0 z+)*1i1`Jc9_iw-5g%q%4FG>PQ0tL;`47yL{2tXM0(^(|R8BbL;+eCcGh}5Xs^ay#pmxl1n1j~(uUnS)C>^Viov4Rc2rijPBw|NVF zbmG5%1%f<^Cl^igiotu#hvEA16-Ja$Q{0}3EDssX1q~@sS$mMv2dM-cP+zl#9{SFD z>g?|4d-KKRh^5K7$+U9&@9E&IA~So?Jx2hHIoEoYk2i49^#OFFnGn1{9>*j$Vw`us z&SJcoX7FZW0{{|Xp=80In3q6Jo-Ce&v_Z-g=QWbI<0y5|a^4u!5lJP?K@^1B0Pq01 zJQG4(EP8e4BT)(U^#fOl7a)XaqdB=G#>Lx{YzG%SLII9@Q`4INeRZ`_XE;|H-}F_5ufpfqWC@ z(&6dhxnbA_+49hab(~+jcLnkvoVyk+WChX82t2TArJzP=gCIv8D!&xH=PC}6RrMC@ zmLF2D$~M}&KY?2Jy`(%>E?RH?lbMo7mEo3Lb&n$d?AB_2-9r;qLK)AZPx<2xD^u>k)Iuys4(ok8^ky4Vo>mk&4oVx!f=FBc_u M-aY^I+gDZp2irCCumAu6 diff --git a/mods/skinsdb/textures/character_9.png b/mods/skinsdb/textures/character_9.png deleted file mode 100644 index f9a66416d262ed52c91635c245d679d357c47368..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8325 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 diff --git a/mods/skinsdb/textures/skins_button.png b/mods/skinsdb/textures/skins_button.png deleted file mode 100644 index f4c006c4e73828340e0605906a72e0588da5347a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2VGmzZ%#=aj&c?9@`xNbGIw^0=~R}wT+6f{u~ z(3jyeRS>XJ7P3+iHk9MHR2F)CV6m;5$iuz!?`)p@|Nnn8v)2!H&$+W{(w!|+?(dj+ zW@+2K?KAFdo+O^3Cj>N;u_VYZn8D%MjWi&Kv%n*=n1O*?7=#%aX3dcR3VM6GIEHXs z_dRPa#GuH-;_sT9+-|IgxHaj!@-+k1u1!ydTr>mdKI;Vst05e2Y$^ZZW diff --git a/mods/skinsdb/textures/ui_misc_form.png b/mods/skinsdb/textures/ui_misc_form.png deleted file mode 100644 index 2a7edb9d51f4cc3bfeb04861868b8a366ea56d60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6177 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 H^WDDyE1|wV diff --git a/mods/toolranks/init.lua b/mods/toolranks/init.lua index 0cb9d17..ff2d0a8 100644 --- a/mods/toolranks/init.lua +++ b/mods/toolranks/init.lua @@ -16,7 +16,7 @@ function toolranks.create_description(name, uses, level) .. toolranks.colors.grey .. "Used: " .. (uses or 0) .. " times" end - +-- This is where levels are defined. function toolranks.get_level(uses) if uses >= 3200 then diff --git a/mods_disabled/ethereal/README.md b/mods_disabled/ethereal/README.md new file mode 100644 index 0000000..da751c5 --- /dev/null +++ b/mods_disabled/ethereal/README.md @@ -0,0 +1,377 @@ +# ethereal + +Ethereal Mapgen mod for Minetest (works on all except v6) + +## Forum Topic +- https://forum.minetest.net/viewtopic.php?f=11&t=14638 + +## Lucky Blocks +42 + +## Changelog + +### 1.27 + + - Added Etherium ore and dust + - Added sparse decoration of dry grass and shrub to caves biome + - Added sponges that spawn near coral, dry sponge in furnace to soak up water + - Added new savanna dirt and decorations + - Use default grass abms + +### 1.26 + + - Added Sakura biome, pink sakura trees and saplings + - 1 in 10 chance of sakura sapling growing into white sakura + - Bamboo grows in higher elevation while sakura grows in lower + - Added sakura wood, stairs, fence, gate and door + - Added 5.0 checks to add new biomes and decorations + - Fixed water abm for dry dirt and added check for minetest 5.1 dry dirt also + +### 1.25 + + - Converted .mts files into schematic tables for easier editing + - Added firethorn shrub in glacier areas (can be crafted into jelly) + - Tweaked mapgen decorations + - Added more lucky blocks + - Added igloo to glacier biome + - 2x2 bamboo = bamboo floor, 3x3 bamboo or 2x bamboo floor = bamboo block, blocks can be made into sticks, bamboo stairs need blocks to craft + +### 1.24 + + - Updating code to newer functions, requires Minetest 0.4.16 and above + - Added food groups to be more compatible with other food mods + - Bonemeal removed (use Bonemeal mod to replace https://forum.minetest.net/viewtopic.php?f=9&t=16446 ) + - Crystal Ingot recipe requires a bucket of water, unless you are using builtin_item mod where you can mix ingredients by dropping in a pool of water instead + +### 1.23 + + - Added bonemeal support for bush sapling and acacia bush sapling + - Added support for [toolranks] mod if found + - Reworked Crystal Shovel so it acts more like a normal shovel with soft touch + +### 1.22 + + - Added coral and silver sand to mapgen (0.4.15 only) + - Replaced ethereal:green_dirt with default:dirt_with_grass for mortrees compatibility + - Mesa biomes are now topped with dirt with dry grass (redwood saplings grow on dry grass) + - Added bonemeal support for moretree's saplings + - Added settings.conf file example so that settings remain after mod update + - Added support for Real Torch so that torches near water drop an unlit torch + - Added support for new leafdecay functions (0.4.15 dev) + - Mapgen will use dirt_with_rainforest_litter for jungles if found + - Added bushes to mapgen + +### 1.21 + + - Saplings need clear space above to grow (depending on height of tree) + - Bonemeal changes to suit new sapling growth + - Fixes and tweaks + - Added default Abm overrides + - Added 4 new plants from baked clay mod to mapgen + - Added swamp biome to outskirts of bamboo areas + +### 1.20 + +- Tweaked Ethereal to work with new features and nodes in Minetest 0.4.14 +- Added bones found in dirt and bonemeal to make tree's and crops grow quicker +- Tree's follow default rules where saplings need light to grow +- Using default schematics for apple, pine, acacia and jungle tree's +- Tidied and split code into separate files +- Redid coloured grass spread function to run better +- Added support for moreblock's stairsplus feature + +### 1.19 + +- Added new biome routine to help restructure biomes +- Tweaked biome values so that they are more spread out (no more huge bamboo biome) +- Tweaked biome plant and tree decorations +- Fixed farming compatibility when using hoe on ethereal dirt +- Dirt with dry grass turns into green grass when near water +- Ice or snow above sea level melts into river water +- Disabling ethereal biomes no longer shows error messages +- Fire Flowers re-generate, can also be made into Fire Dust and both are fuel +- Optimize and tidy code + +### 1.18 + +- Added Birch tree, also stairs; fence and gate +- Added Fire flower to fiery biomes (careful, it hurts) +- Tweaked biomes and decoration slightly +- Added tree_tool for admin to quickly grow tree's +- Cobble to Mossycobble when near water has been toned down a bit + +### 1.17 + +- Added new Glacier biome filled with snow and ice +- Changed Mesa biome to have more coloured clay patterns +- Changed Bamboo biome to have tall tree-like stalks with leaves that give +- Bamboo sprouts are now saplings to grow new stalks +- Removed farmed mushrooms and replaced with default game mushrooms with spores + +### 1.16 + +- Added new tree schematics that change when placed with random leaves, fruit and height +- Changed frost dirt so that it no longer freezes water (saves lag) +- Torches cannot be placed next to water, otherwise they drop as items +- Added latest farming redo Bean Bushes to mapgen +- Code tidy (thanks HybridDog) and bug fix +- Banana, Orange and Apple fruits now drop when tree has been removed. + +### 1.15 + +- Added Staff of Light (thanks Xanthin), crafted from illumishrooms and can turn stone into glostone and back again +- Changed how Crystal Spikes reproduce +- Crystal Ingots now require 2x mese crystal and 2x crystal spikes to craft +- Removed obsidian brick & stairs now they are in default game, also removed pine wood stairs for same reason +- Tidied code and optimized a few routines + + +### 1.14 + +- Changed Ethereal to work with Minetest 0.4.11 update and new mapgen features +- Changed Pine tree's to use default pine wood +- Added pine wood fence, gate and stairs +- Crystal Spikes now re-generate in crystal biomes +- Removed layer mapgen, keeping spread as default + + +### 1.13 + +- Changed melting feature to work with 0.4.11 pre-release now that group:hot and group:melt have been removed + + +### 1.12 + +- Added ability to disable biomes in the init.lua file by setting to 1 (enable) or 0 (disable) +- Supports Framing Redo 1.10 foods + + +### 1.11 + +- Added Stairs for Ethereal wood types, mushroom, dry dirt, obsidian brick and clay +- Added Green Coral which can be used as green dye +- Craft 5x Ice in X pattern to give 5x Snow +- Added Snow and Ice Bricks with their own stairs and slabs which melt when near heat + + +### 1.10 + +- Added Stone Ladders (another use for cobble) +- Craft 5x Gravel in X pattern to give 5 dirt, and 5x dirt in X pattern for 5 sand +- Added Acacia tree's to desert biome (a nice pink wood to build with, thanks to VanessaE for textures) +- Added Acacia fences and gates +- Added Vines, craftable with 2x3 leaves + + +### 1.09 + +- Fixed Quicksand bug where player see's only black when sinking instead of yellow effect, note this will only work on new maps or newly generated areas of map containing quicksand +- Hot nodes will melt ice and snow in a better way +- Few spelling errors sorted for sapling and wood names + + +### 1.08 + +- Saplings produce better placed tree's when grown, routines have been redone +- Orange tree's now spawn in prairie biomes +- The usual code tidy and few bug fixes along the way + +### 1.07 + +- If Farming Redo mod detected then it's growing routines will be used for Ethereal plantlife instead of default +Leaftype and Mapstyle settings can be changed within init.lua file, new layered style maps are being tested +Changed crafting recipe for Fences, they tie in with Gates a little better + +### 1.06 + +- Added support for Farming Redo mod, all plants spawn on newly generated areas: + - https://forum.minetest.net/viewtopic.php?id=9019 + +### 1.05b + +- Added Gates for each of the fence types (thanks to Blockmen for gate model) +- Players can no longer jump over fences unless they wear crystal boots < REMOVED + +### 1.04 + +- Farming of Mushrooms, Wild Onions and Strawberries now use minetest 0.4.10 functions +- Strawberries can be grown by using actual fruit, seeds no longer needed +- Tree leaves are no longer walkable, player can go through them +- Saplings now fall if block underneath disturbed + +### 1.03 + +- Changed Fence recipe's so it doesn't interfere with 3d armor's wooden boots +- Tweaked textures to bring down file sizes +- Flowers, Sprouts and Ferns now spread over ALL grassland + +### 1.02 + +- Fences added for each type of wood in Ethereal +- Changes to biome settings, less artifacts + +### 1.01 + +- Quicksand generates throughout world near sandy water +- Bamboo as well as Papyrus now grow on dirt near water +- Fixed Coral textures and light + +### 1.00 + +- Seaweed now spawns in deep water and can grow up to 10 high +- Coral also spawns in deep water and glows slightly (orange, pink and blue) +- Above items can be crafted into dye, also Seaweed is edible +- So long as sand isn't disturbed under the ocean, sealife will re-generate +- Fixed Leaves inventory images and Mushroom selection box (thanks Wuzzy) + +### 0.0.9 +#### 0.0.9p + +- Willow Trees now spawn in grey biome instead of tiny grey trees (model by Phiwari123) +- Redwood Trees now spawn in Mesa biome (model by Wes42033) +- BakedClay mod no longer required for Mesa biome but used if found +- Paper Wall added + +#### 0.0.9o + +- Added Obsidian Brick craft for building +- Changed Illumishroom cave levels +- Changed *is_ground_content* to false for ethereal dirt so mapgen doesn't carve it up with caves + +#### 0.0.9n + +- New textures for farming mushrooms and spores +- Illumi-shrooms spawn in caves to brighten things up a little +- Crafting a wooden sign now gives 4 instead of 1 + +#### 0.0.9m + +- Changed Bamboo biome slightly, Bamboo Sprout has new image +- Abm timings changed and a few bugs fixed +- Crystal Gilly Staff has to be used (left-click) to replenish air while underwater +- Crystal Shovel now works with protection mods +- Tidied code and changed ladder recipe's to double output + +#### 0.0.9L + +- Scorched Tree's are now different sizes +- Crystal Shovel with soft touch can now be used to dig up sand and gravel +- Bamboo and Papyrus drop entire stalk when bottom node dug +- Crystal Spikes require steel pick or better to dig and fall when dirt below is removed +- Few changes to mapgen and water functions + +#### 0.0.9k + +- Fixed bug in charcoal lumps (no more placing as unknown nodes) +- Added Crystal Shovel with soft touch, can be used to dig up dirt with grass intact +- Fixed bug in Crystal Shovel, now works with dirt_with_snow and has sounds +- Tweaked Fiery Biomes slightly, smaller craters on outside, large in hotter areas + +#### 0.0.9i + +- Cleaned up mapgen_v7.lua file, maps now generate a little faster +- Removed cactus.mts, no longer required +- Removed mushroomtwo.mts, no longer required +- Removed bamboo.mts, no longer required +- Removed deadtree.mts, no longer required +- Few new textures added +- Papyrus also spawns on jungle dirt near water +- Replaced dead tree's with scorched tree's +- Each scorched tree trunk crafts into 2x charcoal Lumps (fixed) +- Torches can also be crafted from Charcoal + +#### 0.0.9h + +- Added Strawberry farming, Strawberry Seeds and new Textures +- Tidied up mapgen_v7.lua for better spawning of plants and trees +- Player can no longer walk through Bamboo Stalks + +#### 0.0.9g + +- Changed Ethereal's growing routine for Saplings, it now uses 1 single abm to grow all tree's + +#### 0.0.9f + +- Added Fishing to Ethereal, Fishing Rod, Worms, Fish and Cooked Fish (Left-click the water with a Baited Rod in the hope of landing your prize) + +#### 0.0.9e + +- Changed textures for Bowl, Mushroom Soup, Crystal Spike, Banana Loaf, Strawberry & Bush +- Added Hearty Stew Recipes +- If BakedClay mod is installed, Mesa Biome will be added to the mix + +#### 0.0.9d + +- Added Bamboo Grove and Bamboo Sprouts ) +- Craft Bamboo into Paper and Bamboo Flooring +- Cactus is now edible when crafted beside empty bucket + +#### 0.0.9c + +- Code re-worked so mod now uses sections for each function (easier to read and edit) +- New textures for Strawberry Bush and Crystal Spikes + +#### 0.0.9b + +- Pine Tree Leaves have new texture and sometimes give Pine Nuts +- Jungle Tree's now use default Jungle Wood as texture + +#### 0.0.9 + +- Prairie, Grove, Jungle and Snowy biomes have their own dirt +- Saplings will only grow in the biomes they were taken from +- Mapgen tweaks and code changes for new dirt added + +### 0.0.8 Changes +#### 0.0.8m + +- Added Banana Trunk and Wood +- Added Boston Ferns to Grove biome +- Added edible Fern Tubers +- Mushroom Biome now has different sized mushrooms +- Changed Pine Needles texture + +#### 0.0.8k + +- Added Desert Sand biome +- Added Alpine biome with Pine Trees and Snow +- Added Grove biome with Banana Tree's (saplings only grow in that temperate area) +- Added Bananas, Banana Dough and Banana Bread +- Changed biome generation to be more like real-world environs (e.g. shrooms like hot & humid so that's where they spawn) +- Tidied up code and removed redundant lines + +#### 0.0.8e + +- New Plains biome added between Fiery and Green areas to hopefully stop forest fires, these have dry dirt and dead trees +- Placing water near Dry Dirt turns it into normal dirt, cooking normal dirt changes it into Dry Dirt + +Note: if your Ethereal world does have a few forest fires appearing you can always add this line to your minetest.conf file: + +disable_fire = true + +#### 0.0.8 + +- Healing Tree (grows on high snowy peaks, leaves are edible and golden apples heal all hearts) +- Added some new images for Cooked Mushroom Soup, Mushroom Spores and Palm Trees +- 2D leaves or 3D leaves option, both wave in wind if enabled +- All new saplings can grow on their native dirt, and palm tree's on sand +- Crystal Spike or Crystal Dirt freezes nearby water, Heat can also melt ice +- Wild Mushrooms now give Spores, plant these to grow edible mushrooms +- Cobble in water turns mossy +- Palm Leaves can be cooked into Palm Wax and made into Candles + +### 0.0.7c + +- Gravel can be found under lake biomes (or craft 5 cobble in X pattern) +- Papyrus is found and grows on dirt near water (also craft 2x3 string for paper) +- Mushroom Heads have a chance of giving Mushroom Sapling (craft 1 head = 4x Mushrooms ready for Planting) +- Trees and Mushrooms have a chance of giving Saplings +- Frost Trunk and Mushroom Trunk are rotatable (craft 1 Mushroom Trunk = 4x White Dye) +- Desert areas have Dry Shrubs added +- Crystal Spikes added to Crystal Biome (watch out they hurt) +- Crystal Ingots added to make Sword and Pick +- New Pine Tree model added to snowy biome which adds Pine leaves and drops Pine Saplings +- Fixed GrassyTwo biome so that BigTree now spawns and grows from sapling +- Added Crystal Gilly Staff to allow breathing underwater (so long as it's in hand) +- Added Palm Trees, Trunk, Wood, Sapling, Coconuts, Coconut Slice (to eat) +- Thanks to VanessaE's for the Palm textures diff --git a/mods_disabled/ethereal/compatibility.lua b/mods_disabled/ethereal/compatibility.lua new file mode 100644 index 0000000..03bb972 --- /dev/null +++ b/mods_disabled/ethereal/compatibility.lua @@ -0,0 +1,46 @@ + +-- add compatibility for ethereal nodes already in default game or name changed +minetest.register_alias("ethereal:acacia_trunk", "default:acacia_tree") +minetest.register_alias("ethereal:acacia_wood", "default:acacia_wood") + +minetest.register_alias("ethereal:fence_acacia", "default:fence_acacia_wood") +minetest.register_alias("ethereal:fence_junglewood", "default:fence_junglewood") +minetest.register_alias("ethereal:fence_pine", "default:fence_pine_wood") + +minetest.register_alias("ethereal:acacia_leaves", "default:acacia_leaves") +minetest.register_alias("ethereal:pineleaves", "default:pine_needles") + +minetest.register_alias("ethereal:mushroom_craftingitem", "flowers:mushroom_brown") +minetest.register_alias("ethereal:mushroom_plant", "flowers:mushroom_brown") +minetest.register_alias("ethereal:mushroom_soup_cooked", "ethereal:mushroom_soup") +minetest.register_alias("ethereal:mushroom_1", "flowers:mushroom_brown") +minetest.register_alias("ethereal:mushroom_2", "flowers:mushroom_brown") +minetest.register_alias("ethereal:mushroom_3", "flowers:mushroom_brown") +minetest.register_alias("ethereal:mushroom_4", "flowers:mushroom_brown") + +minetest.register_alias("ethereal:strawberry_bush", "ethereal:strawberry_7") +minetest.register_alias("ethereal:seed_strawberry", "ethereal:strawberry") + +for i = 1, 5 do + minetest.register_alias("ethereal:wild_onion_"..i, "ethereal:onion_"..i) +end + +minetest.register_alias("ethereal:onion_7", "ethereal:onion_4") +minetest.register_alias("ethereal:onion_8", "ethereal:onion_5") +minetest.register_alias("ethereal:wild_onion_7", "ethereal:onion_4") +minetest.register_alias("ethereal:wild_onion_8", "ethereal:onion_5") +minetest.register_alias("ethereal:wild_onion_craftingitem", "ethereal:wild_onion_plant") + +minetest.register_alias("ethereal:hearty_stew_cooked", "ethereal:hearty_stew") + +minetest.register_alias("ethereal:obsidian_brick", "default:obsidianbrick") + +minetest.register_alias("ethereal:crystal_topped_dirt", "ethereal:crystal_dirt") +minetest.register_alias("ethereal:fiery_dirt_top", "ethereal:fiery_dirt") +minetest.register_alias("ethereal:gray_dirt_top", "ethereal:gray_dirt") +minetest.register_alias("ethereal:green_dirt_top", "default;dirt_with_grass") + +minetest.register_alias("ethereal:tree_sapling", "default:sapling") +minetest.register_alias("ethereal:jungle_tree_sapling", "default:junglesapling") +minetest.register_alias("ethereal:acacia_sapling", "default:acacia_sapling") +minetest.register_alias("ethereal:pine_tree_sapling", "default:pine_sapling") diff --git a/mods_disabled/ethereal/crystal.lua b/mods_disabled/ethereal/crystal.lua new file mode 100644 index 0000000..5254416 --- /dev/null +++ b/mods_disabled/ethereal/crystal.lua @@ -0,0 +1,311 @@ + +local S = ethereal.intllib + +-- Crystal Spike (Hurts if you touch it - thanks to ZonerDarkRevention for his DokuCraft DeviantArt crystal texture) +minetest.register_node("ethereal:crystal_spike", { + description = S("Crystal Spike"), + drawtype = "plantlike", + tiles = { "crystal_spike.png" }, + inventory_image = "crystal_spike.png", + wield_image = "crystal_spike.png", + paramtype = "light", + light_source = 7, + sunlight_propagates = true, + walkable = true, + damage_per_second = 1, + groups = {cracky = 1, falling_node = 1, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_glass_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0, 5 / 16}, + }, + node_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0, 5 / 16}, + }, +}) + +-- Crystal Ingot +minetest.register_craftitem("ethereal:crystal_ingot", { + description = S("Crystal Ingot"), + inventory_image = "crystal_ingot.png", + wield_image = "crystal_ingot.png", +}) + +if minetest.get_modpath("builtin_item") then + + minetest.override_item("ethereal:crystal_spike", { + + dropped_step = function(self, pos, dtime) + + self.ctimer = (self.ctimer or 0) + dtime + if self.ctimer < 5.0 then return end + self.ctimer = 0 + + if self.node_inside + and self.node_inside.name ~= "default:water_source" then + return + end + + local objs = core.get_objects_inside_radius(pos, 0.8) + + if not objs or #objs ~= 2 then return end + + local crystal, mese, ent = nil, nil, nil + + for k, obj in pairs(objs) do + + ent = obj:get_luaentity() + + if ent and ent.name == "__builtin:item" then + + if ent.itemstring == "default:mese_crystal 2" + and not mese then + + mese = obj + + elseif ent.itemstring == "ethereal:crystal_spike 2" + and not crystal then + + crystal = obj + end + end + end + + if mese and crystal then + + mese:remove() + crystal:remove() + + core.add_item(pos, "ethereal:crystal_ingot") + + return false + end + end + }) +end + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:crystal_ingot", + recipe = { + "default:mese_crystal", "ethereal:crystal_spike", + "ethereal:crystal_spike", "default:mese_crystal", "bucket:bucket_water" + }, + replacements = { {"bucket:bucket_water", "bucket:bucket_empty"} } +}) + +-- Crystal Block +minetest.register_node("ethereal:crystal_block", { + description = S("Crystal Block"), + tiles = {"crystal_block.png"}, + light_source = 9, + is_ground_content = false, + groups = {cracky = 1, level = 2, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:crystal_block", + recipe = { + {"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, + {"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, + {"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, + } +}) + +minetest.register_craft({ + output = "ethereal:crystal_ingot 9", + recipe = { + {"ethereal:crystal_block"}, + } +}) + +-- Crystal Sword (Powerful wee beastie) +minetest.register_tool("ethereal:sword_crystal", { + description = S("Crystal Sword"), + inventory_image = "crystal_sword.png", + wield_image = "crystal_sword.png", + tool_capabilities = { + full_punch_interval = 0.6, + max_drop_level = 1, + groupcaps = { + snappy = { + times = {[1] = 1.70, [2] = 0.70, [3] = 0.25}, + uses = 50, + maxlevel = 3 + }, + }, + damage_groups = {fleshy = 10}, + }, + groups = {sword = 1}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_craft({ + output = "ethereal:sword_crystal", + recipe = { + {"ethereal:crystal_ingot"}, + {"ethereal:crystal_ingot"}, + {"default:steel_ingot"}, + } +}) + +-- Crystal Axe +minetest.register_tool("ethereal:axe_crystal", { + description = S("Crystal Axe"), + inventory_image = "crystal_axe.png", + wield_image = "crystal_axe.png", + tool_capabilities = { + full_punch_interval = 0.8, + max_drop_level = 1, + groupcaps = { + choppy = { + times = {[1] = 2.00, [2] = 0.80, [3] = 0.40}, + uses = 40, + maxlevel = 3 + }, + }, + damage_groups = {fleshy = 7}, + }, + groups = {axe = 1}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_craft({ + output = "ethereal:axe_crystal", + recipe = { + {"ethereal:crystal_ingot", "ethereal:crystal_ingot"}, + {"ethereal:crystal_ingot", "default:steel_ingot"}, + {"", "default:steel_ingot"}, + } +}) + +minetest.register_craft({ + output = "ethereal:axe_crystal", + recipe = { + {"ethereal:crystal_ingot", "ethereal:crystal_ingot"}, + {"default:steel_ingot", "ethereal:crystal_ingot"}, + {"default:steel_ingot", ""}, + } +}) + +-- Crystal Pick (This will last a while) +minetest.register_tool("ethereal:pick_crystal", { + description = S("Crystal Pickaxe"), + inventory_image = "crystal_pick.png", + wield_image = "crystal_pick.png", + tool_capabilities = { + full_punch_interval = 0.7, + max_drop_level = 3, + groupcaps={ + cracky = { + times = {[1] = 1.8, [2] = 0.8, [3] = 0.40}, + uses = 40, + maxlevel = 3 + }, + }, + damage_groups = {fleshy = 6}, + }, + groups = {pickaxe = 1}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_craft({ + output = "ethereal:pick_crystal", + recipe = { + {"ethereal:crystal_ingot", "ethereal:crystal_ingot", "ethereal:crystal_ingot"}, + {"", "default:steel_ingot", ""}, + {"", "default:steel_ingot", ""}, + } +}) + +local old_handle_node_drops = minetest.handle_node_drops + +function minetest.handle_node_drops(pos, drops, digger) + + -- are we holding Crystal Shovel? + if digger:get_wielded_item():get_name() ~= "ethereal:shovel_crystal" then + return old_handle_node_drops(pos, drops, digger) + end + + local nn = minetest.get_node(pos).name + + if minetest.get_item_group(nn, "crumbly") == 0 then + return old_handle_node_drops(pos, drops, digger) + end + + return old_handle_node_drops(pos, {ItemStack(nn)}, digger) +end + + +minetest.register_tool("ethereal:shovel_crystal", { + description = "Crystal Shovel", + inventory_image = "crystal_shovel.png", + wield_image = "crystal_shovel.png^[transformR90", + tool_capabilities = { + full_punch_interval = 1.0, + max_drop_level = 1, + groupcaps = { + crumbly = { + times = {[1] = 1.10, [2] = 0.50, [3] = 0.30}, + uses = 30, + maxlevel = 3 + }, + }, + damage_groups = {fleshy = 4}, + }, + groups = {shovel = 1}, + sound = {breaks = "default_tool_breaks"}, +}) + +minetest.register_craft({ + output = "ethereal:shovel_crystal", + recipe = { + {"ethereal:crystal_ingot"}, + {"default:steel_ingot"}, + {"default:steel_ingot"}, + } +}) + +-- Crystal Gilly Staff (replenishes air supply when used) +minetest.register_tool("ethereal:crystal_gilly_staff", { + description = S("Crystal Gilly Staff"), + inventory_image = "crystal_gilly_staff.png", + wield_image = "crystal_gilly_staff.png", + + on_use = function(itemstack, user, pointed_thing) + if user:get_breath() < 10 then + user:set_breath(10) + end + end, +}) + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:crystal_gilly_staff", + recipe = { + "ethereal:green_moss", "ethereal:gray_moss", "ethereal:fiery_moss", + "ethereal:crystal_moss", "ethereal:crystal_ingot", "ethereal:mushroom_moss", + "ethereal:crystal_ingot" + }, +}) + +-- Add [toolranks] mod support if found +if minetest.get_modpath("toolranks") then + + -- Helper function + local function add_tool(name, desc, afteruse) + + minetest.override_item(name, { + original_description = desc, + description = toolranks.create_description(desc, 0, 1), + after_use = afteruse and toolranks.new_afteruse + }) + end + + add_tool("ethereal:pick_crystal", "Crystal Pickaxe", true) + add_tool("ethereal:axe_crystal", "Crystal Axe", true) + add_tool("ethereal:shovel_crystal", "Crystal Shovel", true) + add_tool("ethereal:sword_crystal", "Crystal Sword", true) +end diff --git a/mods_disabled/ethereal/depends.txt b/mods_disabled/ethereal/depends.txt new file mode 100644 index 0000000..da7e44b --- /dev/null +++ b/mods_disabled/ethereal/depends.txt @@ -0,0 +1,10 @@ +default +farming? +stairs +flowers +doors +bakedclay? +moreblocks? +intllib? +lucky_block? +toolranks? diff --git a/mods_disabled/ethereal/description.txt b/mods_disabled/ethereal/description.txt new file mode 100644 index 0000000..5338835 --- /dev/null +++ b/mods_disabled/ethereal/description.txt @@ -0,0 +1 @@ +Ethereal mod uses the v7 mapgen to add many new biomes to the world. \ No newline at end of file diff --git a/mods_disabled/ethereal/dirt.lua b/mods_disabled/ethereal/dirt.lua new file mode 100644 index 0000000..2ae5c47 --- /dev/null +++ b/mods_disabled/ethereal/dirt.lua @@ -0,0 +1,309 @@ + +local S = ethereal.intllib + +-- override default dirt (to stop caves cutting away dirt) +minetest.override_item("default:dirt", {is_ground_content = ethereal.cavedirt}) + +minetest.register_alias("ethereal:green_dirt", "default:dirt_with_grass") + +-- dry dirt +minetest.register_node("ethereal:dry_dirt", { + description = S("Dried Dirt"), + tiles = {"ethereal_dry_dirt.png"}, + is_ground_content = ethereal.cavedirt, + groups = {crumbly = 3}, + sounds = default.node_sound_dirt_defaults() +}) + +minetest.register_craft({ + type = "cooking", + output = "ethereal:dry_dirt", + recipe = "default:dirt", + cooktime = 3, +}) + +local dirts = { + "Bamboo", "Jungle", "Grove", "Prairie", "Cold", + "Crystal", "Mushroom", "Fiery", "Gray" +} + +for n = 1, #dirts do + + local desc = dirts[n] + local name = desc:lower() + + minetest.register_node("ethereal:"..name.."_dirt", { + description = S(desc.." Dirt"), + tiles = { + "ethereal_grass_"..name.."_top.png", + "default_dirt.png", + { + name = "default_dirt.png^ethereal_grass_" + .. name .."_side.png", + tileable_vertical = false + } + }, + is_ground_content = ethereal.cavedirt, + groups = {crumbly = 3, soil = 1, spreading_dirt_type = 1}, + soil = { + base = "ethereal:"..name.."_dirt", + dry = "farming:soil", + wet = "farming:soil_wet" + }, + drop = "default:dirt", + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.25}, + }), + }) + +end + + +-- flower spread, also crystal and fire flower regeneration +local flower_spread = function(pos, node) + + if (minetest.get_node_light(pos) or 0) < 13 then + return + end + + local pos0 = {x = pos.x - 4, y = pos.y - 2, z = pos.z - 4} + local pos1 = {x = pos.x + 4, y = pos.y + 2, z = pos.z + 4} + + local num = #minetest.find_nodes_in_area(pos0, pos1, "group:flora") + + -- stop flowers spreading too much just below top of map block + if minetest.find_node_near(pos, 2, "ignore") then + return + end + + if num > 3 + and node.name == "ethereal:crystalgrass" then + + local grass = minetest.find_nodes_in_area_under_air( + pos0, pos1, {"ethereal:crystalgrass"}) + + if #grass > 4 + and not minetest.find_node_near(pos, 4, {"ethereal:crystal_spike"}) then + + pos = grass[math.random(#grass)] + + pos.y = pos.y - 1 + + if minetest.get_node(pos).name == "ethereal:crystal_dirt" then + + pos.y = pos.y + 1 + + minetest.swap_node(pos, {name = "ethereal:crystal_spike"}) + end + end + + return + + elseif num > 3 + and node.name == "ethereal:dry_shrub" then + + local grass = minetest.find_nodes_in_area_under_air( + pos0, pos1, {"ethereal:dry_shrub"}) + + if #grass > 8 + and not minetest.find_node_near(pos, 4, {"ethereal:fire_flower"}) then + + pos = grass[math.random(#grass)] + + pos.y = pos.y - 1 + + if minetest.get_node(pos).name == "ethereal:fiery_dirt" then + + pos.y = pos.y + 1 + + minetest.swap_node(pos, {name = "ethereal:fire_flower"}) + end + end + + return + + elseif num > 3 then + return + end + + local seedling = minetest.find_nodes_in_area_under_air( + pos0, pos1, {"group:soil"}) + + if #seedling > 0 then + + pos = seedling[math.random(#seedling)] + + -- default farming has desert sand as soil, so dont spread on this + if minetest.get_node(pos).name == "default:desert_sand" then + return + end + + pos.y = pos.y + 1 + + if (minetest.get_node_light(pos) or 0) < 13 then + return + end + + minetest.swap_node(pos, {name = node.name}) + end +end + +-- grow papyrus up to 4 high and bamboo up to 8 high +local grow_papyrus = function(pos, node) + + local oripos = pos.y + local high = 4 + + pos.y = pos.y - 1 + + local nod = minetest.get_node_or_nil(pos) + + if not nod + or minetest.get_item_group(nod.name, "soil") < 1 + or minetest.find_node_near(pos, 3, {"group:water"}) == nil then + return + end + + if node.name == "ethereal:bamboo" then + high = 8 + end + + pos.y = pos.y + 1 + + local height = 0 + + while height < high + and minetest.get_node(pos).name == node.name do + height = height + 1 + pos.y = pos.y + 1 + end + + nod = minetest.get_node_or_nil(pos) + + if nod + and nod.name == "air" + and height < high then + + if node.name == "ethereal:bamboo" + and height == (high - 1) then + + ethereal.grow_bamboo_tree({x = pos.x, y = oripos, z = pos.z}) + else + minetest.swap_node(pos, {name = node.name}) + end + end + +end + +-- loop through active abm's +for _, ab in pairs(minetest.registered_abms) do + + local label = ab.label or "" + local node1 = ab.nodenames and ab.nodenames[1] or "" + local node2 = ab.nodenames and ab.nodenames[2] or "" + local neigh = ab.neighbors and ab.neighbors[1] or "" + + if label == "Flower spread" + or node1 == "group:flora" then + + --ab.interval = 1 + --ab.chance = 1 + ab.nodenames = {"group:flora"} + ab.neighbors = {"group:soil"} + ab.action = flower_spread + + -- find grow papyrus abm and change to grow_papyrus function + elseif label == "Grow papyrus" + or node1 == "default:papyrus" then + + --ab.interval = 2 + --ab.chance = 1 + ab.nodenames = {"default:papyrus", "ethereal:bamboo"} + ab.neighbors = {"group:soil"} + ab.action = grow_papyrus + end +end + +-- If Baked Clay mod not active, make Red, Orange and Grey nodes +if not minetest.get_modpath("bakedclay") then + + minetest.register_node(":bakedclay:red", { + description = S("Red Baked Clay"), + tiles = {"baked_clay_red.png"}, + groups = {cracky = 3}, + is_ground_content = ethereal.cavedirt, + sounds = default.node_sound_stone_defaults(), + }) + + minetest.register_node(":bakedclay:orange", { + description = S("Orange Baked Clay"), + tiles = {"baked_clay_orange.png"}, + groups = {cracky = 3}, + is_ground_content = ethereal.cavedirt, + sounds = default.node_sound_stone_defaults(), + }) + + minetest.register_node(":bakedclay:grey", { + description = S("Grey Baked Clay"), + tiles = {"baked_clay_grey.png"}, + groups = {cracky = 3}, + is_ground_content = ethereal.cavedirt, + sounds = default.node_sound_stone_defaults(), + }) + +end + +-- Quicksand (old style, sinking inside shows black instead of yellow effect, +-- works ok with noclip enabled though) +minetest.register_node("ethereal:quicksand", { + description = S("Quicksand"), + tiles = {"default_sand.png"}, + drop = "default:sand", + liquid_viscosity = 15, + liquidtype = "source", + liquid_alternative_flowing = "ethereal:quicksand", + liquid_alternative_source = "ethereal:quicksand", + liquid_renewable = false, + liquid_range = 0, + drowning = 1, + walkable = false, + climbable = false, + post_effect_color = {r = 230, g = 210, b = 160, a = 245}, + groups = {crumbly = 3, sand = 1, liquid = 3, disable_jump = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +-- Quicksand (new style, sinking inside shows yellow effect with or without noclip, +-- but old quicksand is shown as black until block placed nearby to update light) +minetest.register_node("ethereal:quicksand2", { + description = S("Quicksand"), + tiles = {"default_sand.png"}, + drawtype = "glasslike", + paramtype = "light", + drop = "default:sand", + liquid_viscosity = 15, + liquidtype = "source", + liquid_alternative_flowing = "ethereal:quicksand2", + liquid_alternative_source = "ethereal:quicksand2", + liquid_renewable = false, + liquid_range = 0, + drowning = 1, + walkable = false, + climbable = false, + post_effect_color = {r = 230, g = 210, b = 160, a = 245}, + groups = {crumbly = 3, sand = 1, liquid = 3, disable_jump = 1}, + sounds = default.node_sound_sand_defaults(), +}) + +-- craft quicksand +minetest.register_craft({ + output = "ethereal:quicksand2", + recipe = { + {"group:sand", "group:sand", "group:sand"}, + {"group:sand", "bucket:bucket_water", "group:sand"}, + {"group:sand", "group:sand", "group:sand"}, + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty"} + } +}) diff --git a/mods_disabled/ethereal/extra.lua b/mods_disabled/ethereal/extra.lua new file mode 100644 index 0000000..f299fb4 --- /dev/null +++ b/mods_disabled/ethereal/extra.lua @@ -0,0 +1,353 @@ + +local S = ethereal.intllib + +-- Etherium Dust +minetest.register_craftitem("ethereal:etherium_dust", { + description = S("Etherium Dust"), + inventory_image = "ethereal_etherium_dust.png", + wield_image = "ethereal_etherium_dust.png", +}) + +-- Ethereium Ore +minetest.register_node("ethereal:etherium_ore", { + description = S("Etherium Ore"), + tiles = {"default_desert_stone.png^ethereal_etherium_ore.png"}, + groups = {cracky = 3}, + drop = "ethereal:etherium_dust", + sounds = default.node_sound_stone_defaults(), +}) + +-- Bamboo Flooring +minetest.register_node("ethereal:bamboo_floor", { + description = S("Bamboo Floor"), + drawtype = "nodebox", + tiles = { "bamboo_floor.png" }, + wield_image = "bamboo_floor.png", + inventory_image = "bamboo_floor.png", + paramtype = "light", + paramtype2 = "wallmounted", + walkable = true, + node_box = { + type = "wallmounted", + wall_top = {-0.5, 0.4375, -0.5, 0.5, 0.5, 0.5}, + wall_bottom = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, + wall_side = {-0.5, -0.5, -0.5, -0.4375, 0.5, 0.5}, + }, + selection_box = {type = "wallmounted"}, + groups = {snappy = 3, choppy = 3 , flammable = 2}, + sounds = default.node_sound_wood_defaults(), +}) + +-- Craft Bamboo into Bamboo Flooring +minetest.register_craft({ + output = "ethereal:bamboo_floor 2", + recipe = { + {"ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo"}, + } +}) + +minetest.register_craft({ + output = "ethereal:bamboo_block", + recipe = { + {"ethereal:bamboo_floor"}, + {"ethereal:bamboo_floor"}, + } +}) + +-- Bamboo Block +minetest.register_node("ethereal:bamboo_block", { + description = S("Bamboo Block"), + tiles = { "bamboo_floor.png" }, + paramtype = "light", + groups = {snappy = 3, choppy = 3 , flammable = 2, wood = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:bamboo_block", + recipe = { + {"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo", "ethereal:bamboo"}, + } +}) + +-- Craft Bamboo into Paper +minetest.register_craft({ + output = "default:paper 6", + recipe = { + {"ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo"}, + } +}) + +if ethereal.xcraft == true then + +-- X pattern craft recipes (5x 'a' in X pattern gives 5 of 'b') +local cheat = { + {"default:cobble", "default:gravel", 5}, + {"default:gravel", "default:dirt", 5}, + {"default:dirt", "default:sand", 5}, + {"default:ice", "default:snow", 20}, + {"ethereal:dry_dirt", "default:desert_sand", 5}, +} + +for n = 1, #cheat do + + minetest.register_craft({ + output = cheat[n][2] .. " " .. cheat[n][3], + recipe = { + {cheat[n][1], "", cheat[n][1]}, + {"", cheat[n][1], ""}, + {cheat[n][1], "", cheat[n][1]}, + } + }) +end + +end -- END if + +-- Paper (2x3 string = 4 paper) +minetest.register_craft({ + output = "default:paper 4", + recipe = { + {"farming:string", "farming:string"}, + {"farming:string", "farming:string"}, + {"farming:string", "farming:string"}, + } +}) + +-- Palm Wax +minetest.register_craftitem("ethereal:palm_wax", { + description = S("Palm Wax"), + inventory_image = "palm_wax.png", + wield_image = "palm_wax.png", +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "ethereal:palm_wax", + recipe = "ethereal:palmleaves" +}) + +-- Candle from Wax and String/Cotton +minetest.register_node("ethereal:candle", { + description = S("Candle"), + drawtype = "plantlike", + inventory_image = "candle_static.png", + wield_image = "candle_static.png", + tiles = { + { + name = "candle.png", + animation={ + type="vertical_frames", + aspect_w = 32, + aspect_h = 32, + length = 1.0 + } + }, + }, + paramtype = "light", + light_source = 11, + sunlight_propagates = true, + walkable = false, + groups = {dig_immediate = 3, attached_node = 1}, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = { -0.15, -0.5, -0.15, 0.15, 0, 0.15 } + }, +}) + +minetest.register_craft({ + output = "ethereal:candle 2", + recipe = { + {"farming:cotton"}, + {"ethereal:palm_wax"}, + {"ethereal:palm_wax"}, + } +}) + +-- Wooden Bowl +minetest.register_craftitem("ethereal:bowl", { + description = S("Bowl"), + inventory_image = "bowl.png", + groups = {food_bowl = 1, flammable = 2}, +}) + +-- use farming redo's recipe if found +if not minetest.registered_items["farming:bowl"] then + + minetest.register_craft({ + output = "ethereal:bowl 4", + recipe = { + {"group:wood", "", "group:wood"}, + {"", "group:wood", ""}, + } + }) +end + +-- stone Ladder +minetest.register_node("ethereal:stone_ladder", { + description = S("Stone Ladder"), + drawtype = "signlike", + tiles = {"stone_ladder.png"}, + inventory_image = "stone_ladder.png", + wield_image = "stone_ladder.png", + paramtype = "light", + sunlight_propagates = true, + paramtype2 = "wallmounted", + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + }, + groups = {cracky = 3, oddly_breakable_by_hand = 1}, + legacy_wallmounted = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:stone_ladder 4", + recipe = { + {"group:stone", "", "group:stone"}, + {"group:stone", "group:stone", "group:stone"}, + {"group:stone", "", "group:stone"}, + } +}) + +-- Paper Wall +minetest.register_node("ethereal:paper_wall", { + drawtype = "nodebox", + description = S("Paper Wall"), + tiles = {"paper_wall.png"}, + inventory_image_image = "paper_wall.png", + wield_image = "paper_wall.png", + paramtype = "light", + groups = {snappy = 3}, + sounds = default.node_sound_wood_defaults(), + walkable = true, + is_ground_content = false, + sunlight_propagates = true, + paramtype2 = "facedir", + selection_box = { + type = "fixed", + fixed = { -0.5, -0.5, 5/11, 0.5, 0.5, 8/16 } + }, + node_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, 5/11, 0.5, 0.5, 8/16 } + } + }, +}) + +minetest.register_craft({ + output = "ethereal:paper_wall", + recipe = { + {"group:stick", "default:paper", "group:stick"}, + {"group:stick", "default:paper", "group:stick"}, + {"group:stick", "default:paper", "group:stick"}, + } +}) + +-- Glostone (A little bit of light decoration) +minetest.register_node("ethereal:glostone", { + description = S("Glo Stone"), + tiles = {"glostone.png"}, + groups = {cracky = 3}, + light_source = 13, + drop = "ethereal:glostone", + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:glostone", + recipe = {"default:torch", "default:stone", "dye:yellow"} +}) + +-- Charcoal Lump +minetest.register_craftitem("ethereal:charcoal_lump", { + description = S("Lump of Charcoal"), + inventory_image = "charcoal_lump.png", +}) + +minetest.register_craft({ + output = "ethereal:charcoal_lump 2", + recipe = { + {"ethereal:scorched_tree"} + } +}) + +minetest.register_craft({ + output = "ethereal:charcoal_lump 2", + type = "cooking", + recipe = "group:tree", + cooktime = 4 +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:charcoal_lump", + burntime = 10, +}) + +-- Make Torch from Charcoal Lump +minetest.register_craft({ + output = "default:torch 4", + recipe = { + {"ethereal:charcoal_lump"}, + {"default:stick"}, + } +}) + +-- Staff of Light (by Xanthin) +minetest.register_tool("ethereal:light_staff", { + description = S("Staff of Light"), + inventory_image = "light_staff.png", + wield_image = "light_staff.png", + sound = {breaks = "default_tool_breaks"}, + stack_max = 1, + on_use = function(itemstack, user, pointed_thing) + + if pointed_thing.type ~= "node" then + return + end + + local pos = pointed_thing.under + local pname = user:get_player_name() + + if minetest.is_protected(pos, pname) then + minetest.record_protection_violation(pos, pname) + return + end + + local node = minetest.get_node(pos).name + + if node == "default:stone" + or node == "default:desert_stone" then + + minetest.swap_node(pos, {name = "ethereal:glostone"}) + + if not ethereal.check_creative(user:get_player_name()) then + itemstack:add_wear(65535 / 149) -- 150 uses + end + + return itemstack + end + + end, +}) + +minetest.register_craft({ + output = "ethereal:light_staff", + recipe = { + {"ethereal:illumishroom", "default:mese_crystal", "ethereal:illumishroom"}, + {"ethereal:illumishroom2", "default:steel_ingot", "ethereal:illumishroom2"}, + {"ethereal:illumishroom3", "default:steel_ingot", "ethereal:illumishroom3"} + } +}) diff --git a/mods_disabled/ethereal/fences.lua b/mods_disabled/ethereal/fences.lua new file mode 100644 index 0000000..c560c11 --- /dev/null +++ b/mods_disabled/ethereal/fences.lua @@ -0,0 +1,82 @@ + +local S = ethereal.intllib + +default.register_fence("ethereal:fence_scorched", { + description = S("Scorched Fence"), + texture = "scorched_tree.png", + material = "ethereal:scorched_tree", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_frostwood", { + description = S("Frost Fence"), + texture = "frost_wood.png", + material = "ethereal:frost_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_redwood", { + description = S("Redwood Fence"), + texture = "redwood_wood.png", + material = "ethereal:redwood_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_willow", { + description = S("Willow Fence"), + texture = "willow_wood.png", + material = "ethereal:willow_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_yellowwood", { + description = S("Healing Wood Fence"), + texture = "yellow_wood.png", + material = "ethereal:yellow_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_palm", { + description = S("Palm Fence"), + texture = "moretrees_palm_wood.png", + material = "ethereal:palm_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_banana", { + description = S("Banana Wood Fence"), + texture = "banana_wood.png", + material = "ethereal:banana_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_mushroom", { + description = S("Mushroom Fence"), + texture = "mushroom_trunk.png", + material = "ethereal:mushroom_trunk", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_birch", { + description = S("Birch Fence"), + texture = "moretrees_birch_wood.png", + material = "ethereal:birch_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) + +default.register_fence("ethereal:fence_sakura", { + description = S("Sakura Fence"), + texture = "ethereal_sakura_wood.png", + material = "ethereal:sakura_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() +}) diff --git a/mods_disabled/ethereal/fishing.lua b/mods_disabled/ethereal/fishing.lua new file mode 100644 index 0000000..c262d98 --- /dev/null +++ b/mods_disabled/ethereal/fishing.lua @@ -0,0 +1,167 @@ + +local S = ethereal.intllib + +-- Raw Fish (Thanks to Altairas for her Fish image on DeviantArt) +minetest.register_craftitem("ethereal:fish_raw", { + description = S("Raw Fish"), + inventory_image = "fish_raw.png", + wield_image = "fish_raw.png", + groups = {food_fish_raw = 1, flammable = 3}, + on_use = minetest.item_eat(2), +}) + +-- Cooked Fish +minetest.register_craftitem("ethereal:fish_cooked", { + description = S("Cooked Fish"), + inventory_image = "fish_cooked.png", + wield_image = "fish_cooked.png", + groups = {food_fish = 1, flammable = 3}, + on_use = minetest.item_eat(5), +}) + +minetest.register_craft({ + type = "cooking", + output = "ethereal:fish_cooked", + recipe = "ethereal:fish_raw", + cooktime = 2, +}) + +-- Sashimi (Thanks to Natalia Grosner for letting me use the sashimi image) +minetest.register_craftitem("ethereal:sashimi", { + description = S("Sashimi"), + inventory_image = "sashimi.png", + wield_image = "sashimi.png", + on_use = minetest.item_eat(4), +}) + +minetest.register_craft({ + output = "ethereal:sashimi 2", + recipe = { + {"group:food_seaweed", "group:food_fish_raw", "group:food_seaweed"}, + } +}) + +-- Worm +minetest.register_craftitem("ethereal:worm", { + description = S("Worm"), + inventory_image = "worm.png", + wield_image = "worm.png", +}) + +-- Used when right-clicking with fishing rod to check for worm and bait rod +local rod_use = function(itemstack, placer, pointed_thing) + + local inv = placer:get_inventory() + + if inv:contains_item("main", "ethereal:worm") then + + inv:remove_item("main", "ethereal:worm") + + return ItemStack("ethereal:fishing_rod_baited") + end +end + +-- Fishing Rod +minetest.register_craftitem("ethereal:fishing_rod", { + description = S("Fishing Rod (Right-Click with rod to bait with worm from inventory)"), + inventory_image = "fishing_rod.png", + wield_image = "fishing_rod.png", + stack_max = 1, + + on_place = rod_use, + on_secondary_use = rod_use +}) + +minetest.register_craft({ + output = "ethereal:fishing_rod", + recipe = { + {"","","group:stick"}, + {"", "group:stick", "farming:string"}, + {"group:stick", "", "farming:string"}, + } +}) + +-- Sift through 2 Dirt Blocks to find Worm +minetest.register_craft({ + output = "ethereal:worm", + recipe = { + {"default:dirt","default:dirt"}, + } +}) + +-- default ethereal fish +ethereal.fish = { + {"ethereal:fish_raw"}, +} + +-- xanadu server additional fish +if minetest.get_modpath("xanadu") then + ethereal.fish[2] = {"mobs:clownfish_raw"} + ethereal.fish[3] = {"mobs:bluefish_raw"} +end + +-- Fishing Rod (Baited) +minetest.register_craftitem("ethereal:fishing_rod_baited", { + description = S("Baited Fishing Rod"), + inventory_image = "fishing_rod_baited.png", + wield_image = "fishing_rod_wield.png", + stack_max = 1, + liquids_pointable = true, + + on_use = function (itemstack, user, pointed_thing) + + if pointed_thing.type ~= "node" then + return + end + + local pos = pointed_thing.under + local node = minetest.get_node(pos).name + + if (node == "default:water_source" + or node == "default:river_water_source") + and math.random(1, 100) < 5 then + + local type = ethereal.fish[math.random(1, #ethereal.fish)][1] + local inv = user:get_inventory() + + if inv:room_for_item("main", {name = type}) then + + inv:add_item("main", {name = type}) + + minetest.sound_play("default_water_footstep", {pos = pos}) + + pos.y = pos.y + 0.5 + + minetest.add_particlespawner({ + amount = 5, + time = .3, + minpos = pos, + maxpos = pos, + minvel = {x = 2, y = .5, z = 2}, + maxvel = {x = 2, y = .5, z = 2}, + minacc = {x = 1, y = .1, z = 1}, + maxacc = {x = 1, y = .1, z = 1}, + minexptime = .3, + maxexptime = .5, + minsize = .5, + maxsize = 1, + collisiondetection = false, + vertical = false, + texture = "bubble.png", + playername = "singleplayer" + }) + + return ItemStack("ethereal:fishing_rod") + else + minetest.chat_send_player(user:get_player_name(), + S("Inventory full, Fish Got Away!")) + end + end + end, +}) + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:fishing_rod_baited", + recipe = {"ethereal:fishing_rod", "ethereal:worm"}, +}) diff --git a/mods_disabled/ethereal/food.lua b/mods_disabled/ethereal/food.lua new file mode 100644 index 0000000..102f988 --- /dev/null +++ b/mods_disabled/ethereal/food.lua @@ -0,0 +1,232 @@ + +local S = ethereal.intllib + +-- Banana (Heals one heart when eaten) +minetest.register_node("ethereal:banana", { + description = S("Banana"), + drawtype = "torchlike", + tiles = {"banana_single.png"}, + inventory_image = "banana_single.png", + wield_image = "banana_single.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.31, -0.5, -0.31, 0.31, 0.5, 0.31} + }, + groups = { + food_banana = 1, fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 1, leafdecay_drop = 1 + }, + drop = "ethereal:banana", + on_use = minetest.item_eat(2), + sounds = default.node_sound_leaves_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:banana", param2 = 1}) + end + end, +}) + +-- Banana Dough +minetest.register_craftitem("ethereal:banana_dough", { + description = S("Banana Dough"), + inventory_image = "banana_dough.png", +}) + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:banana_dough", + recipe = {"group:food_flour", "group:food_banana"} +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 14, + output = "ethereal:banana_bread", + recipe = "ethereal:banana_dough" +}) + +-- Orange (Heals 2 hearts when eaten) +minetest.register_node("ethereal:orange", { + description = S("Orange"), + drawtype = "plantlike", + tiles = {"farming_orange.png"}, + inventory_image = "farming_orange.png", + wield_image = "farming_orange.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.27, -0.37, -0.27, 0.27, 0.44, 0.27} + }, + groups = { + food_orange = 1, fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1 + }, + drop = "ethereal:orange", + on_use = minetest.item_eat(4), + sounds = default.node_sound_leaves_defaults(), + after_place_node = function(pos, placer) + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:orange", param2 = 1}) + end + end, +}) + +-- Pine Nuts (Heals 1/2 heart when eaten) +minetest.register_craftitem("ethereal:pine_nuts", { + description = S("Pine Nuts"), + inventory_image = "pine_nuts.png", + wield_image = "pine_nuts.png", + groups = {food_pine_nuts = 1, flammable = 2}, + on_use = minetest.item_eat(1), +}) + +-- Banana Loaf (Heals 3 hearts when eaten) +minetest.register_craftitem("ethereal:banana_bread", { + description = S("Banana Loaf"), + inventory_image = "banana_bread.png", + wield_image = "banana_bread.png", + groups = {food_bread = 1, flammable = 3}, + on_use = minetest.item_eat(6), +}) + +-- Coconut (Gives 4 coconut slices, each heal 1/2 heart) +minetest.register_node("ethereal:coconut", { + description = S("Coconut"), + drawtype = "plantlike", + walkable = false, + paramtype = "light", + sunlight_propagates = true, + tiles = {"moretrees_coconut.png"}, + inventory_image = "moretrees_coconut.png", + wield_image = "moretrees_coconut.png", + selection_box = { + type = "fixed", + fixed = {-0.31, -0.43, -0.31, 0.31, 0.44, 0.31} + }, + groups = { + food_coconut = 1, snappy = 1, oddly_breakable_by_hand = 1, cracky = 1, + choppy = 1, flammable = 1, leafdecay = 3, leafdecay_drop = 1 + }, + drop = "ethereal:coconut_slice 4", + sounds = default.node_sound_wood_defaults(), +}) + +-- Coconut Slice (Heals half heart when eaten) +minetest.register_craftitem("ethereal:coconut_slice", { + description = S("Coconut Slice"), + inventory_image = "moretrees_coconut_slice.png", + wield_image = "moretrees_coconut_slice.png", + groups = {food_coconut_slice = 1, flammable = 1}, + on_use = minetest.item_eat(1), +}) + +-- Golden Apple (Found on Healing Tree, heals all 10 hearts) +minetest.register_node("ethereal:golden_apple", { + description = S("Golden Apple"), + drawtype = "plantlike", + tiles = {"default_apple_gold.png"}, + inventory_image = "default_apple_gold.png", + wield_image = "default_apple_gold.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.2, -0.37, -0.2, 0.2, 0.31, 0.2} + }, + groups = { + fleshy = 3, dig_immediate = 3, + leafdecay = 3,leafdecay_drop = 1 + }, + drop = "ethereal:golden_apple", +-- on_use = minetest.item_eat(20), + on_use = function(itemstack, user, pointed_thing) + if user then + user:set_hp(20) + return minetest.do_item_eat(2, nil, itemstack, user, pointed_thing) + end + end, + sounds = default.node_sound_leaves_defaults(), + after_place_node = function(pos, placer, itemstack) + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:golden_apple", param2 = 1}) + end + end, +}) + +-- Hearty Stew (Heals 5 hearts - thanks to ZonerDarkRevention for his DokuCraft DeviantArt bowl texture) +minetest.register_craftitem("ethereal:hearty_stew", { + description = S("Hearty Stew"), + inventory_image = "hearty_stew.png", + wield_image = "hearty_stew.png", + on_use = minetest.item_eat(10, "ethereal:bowl"), +}) + +minetest.register_craft({ + output = "ethereal:hearty_stew", + recipe = { + {"group:food_onion","flowers:mushroom_brown", "group:food_tuber"}, + {"","flowers:mushroom_brown", ""}, + {"","group:food_bowl", ""}, + } +}) + +-- Extra recipe for hearty stew +if farming and farming.mod and farming.mod == "redo" then +minetest.register_craft({ + output = "ethereal:hearty_stew", + recipe = { + {"group:food_onion","flowers:mushroom_brown", "group:food_beans"}, + {"","flowers:mushroom_brown", ""}, + {"","group:food_bowl", ""}, + } +}) +end + +-- Bucket of Cactus Pulp +minetest.register_craftitem("ethereal:bucket_cactus", { + description = S("Bucket of Cactus Pulp"), + inventory_image = "bucket_cactus.png", + wield_image = "bucket_cactus.png", + stack_max = 1, + on_use = minetest.item_eat(2, "bucket:bucket_empty"), +}) + +minetest.register_craft({ + output = "ethereal:bucket_cactus", + recipe = { + {"bucket:bucket_empty","default:cactus"}, + } +}) + + +-- firethorn jelly +minetest.register_craftitem("ethereal:firethorn_jelly", { + description = S("Firethorn Jelly"), + inventory_image = "ethereal_firethorn_jelly.png", + wield_image = "ethereal_firethorn_jelly.png", + on_use = minetest.item_eat(2, "vessels:glass_bottle"), + groups = {vessel = 1}, +}) + +if minetest.registered_items["farming:bowl"] then + +minetest.register_craft({ + type = "shapeless", + output = "ethereal:firethorn_jelly", + recipe = { + "farming:mortar_pestle","vessels:glass_bottle", + "ethereal:firethorn", "ethereal:firethorn", "ethereal:firethorn", + "bucket:bucket_water", "bucket:bucket_water", "bucket:bucket_water", + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty 3"}, + {"farming:mortar_pestle", "farming:mortar_pestle"}, + }, +}) +end diff --git a/mods_disabled/ethereal/gates.lua b/mods_disabled/ethereal/gates.lua new file mode 100644 index 0000000..d98c568 --- /dev/null +++ b/mods_disabled/ethereal/gates.lua @@ -0,0 +1,111 @@ + +local S = ethereal.intllib + +-- register Ethereal wood type gates + +doors.register_fencegate("ethereal:fencegate_scorched", { + description = S("Scorched Wood Fence Gate"), + texture = "scorched_tree.png", + material = "ethereal:scorched_tree", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_frostwood", { + description = S("Frost Wood Fence Gate"), + texture = "frost_wood.png", + material = "ethereal:frost_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_redwood", { + description = S("Redwood Fence Gate"), + texture = "redwood_wood.png", + material = "ethereal:redwood_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_willow", { + description = S("Willow Wood Fence Gate"), + texture = "willow_wood.png", + material = "ethereal:willow_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_yellowwood", { + description = S("Healing Wood Fence Gate"), + texture = "yellow_wood.png", + material = "ethereal:yellow_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_palm", { + description = S("Palm Wood Fence Gate"), + texture = "moretrees_palm_wood.png", + material = "ethereal:palm_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_banana", { + description = S("Banana Wood Fence Gate"), + texture = "banana_wood.png", + material = "ethereal:banana_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_mushroom", { + description = S("Mushroom Trunk Fence Gate"), + texture = "mushroom_trunk.png", + material = "ethereal:mushroom_trunk", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_birch", { + description = S("Birch Wood Fence Gate"), + texture = "moretrees_birch_wood.png", + material = "ethereal:birch_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +doors.register_fencegate("ethereal:fencegate_sakura", { + description = S("Sakura Wood Fence Gate"), + texture = "ethereal_sakura_wood.png", + material = "ethereal:sakura_wood", + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} +}) + +-- add compatibility for ethereal's to default wooden gates +minetest.register_alias("ethereal:fencegate_wood_open", "doors:gate_wood_open") +minetest.register_alias("ethereal:fencegate_wood_closed", "doors:gate_wood_closed") + +minetest.register_alias("ethereal:fencegate_acacia_open", "doors:gate_acacia_wood_open") +minetest.register_alias("ethereal:fencegate_acacia_closed", "doors:gate_acacia_wood_closed") + +minetest.register_alias("ethereal:fencegate_junglewood_open", "doors:gate_junglewood_open") +minetest.register_alias("ethereal:fencegate_junglewood_closed", "doors:gate_junglewood_closed") + +minetest.register_alias("ethereal:fencegate_pine_open", "doors:gate_pine_wood_open") +minetest.register_alias("ethereal:fencegate_pine_closed", "doors:gate_pine_wood_closed") + +-- sakura door +doors.register_door("ethereal:door_sakura", { + tiles = { + {name = "ethereal_sakura_door.png", backface_culling = true} + }, + description = S("Sakura Wood Door"), + inventory_image = "ethereal_sakura_door_inv.png", + groups = { + snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, + flammable = 2 + }, + sound_open = "doors_glass_door_open", + sound_close = "doors_glass_door_close", + recipe = { + {"group:stick", "default:paper"}, + {"default:paper", "group:stick"}, + {"ethereal:sakura_wood", "ethereal:sakura_wood"} + } +}) + +minetest.register_alias("ethereal:sakura_door", "ethereal:door_sakura") +minetest.register_alias("ethereal:sakura_door_a", "ethereal:door_sakura_a") +minetest.register_alias("ethereal:sakura_door_b", "ethereal:door_sakura_b") diff --git a/mods_disabled/ethereal/init.lua b/mods_disabled/ethereal/init.lua new file mode 100644 index 0000000..f87bc2f --- /dev/null +++ b/mods_disabled/ethereal/init.lua @@ -0,0 +1,120 @@ +--[[ + + Minetest Ethereal Mod + + Created by ChinChow + + Updated by TenPlus1 + +]] + + -- DO NOT change settings below, use the settings.conf file instead +ethereal = { + + version = "1.27", + leaftype = 0, -- 0 for 2D plantlike, 1 for 3D allfaces + leafwalk = false, -- true for walkable leaves, false to fall through + cavedirt = true, -- caves chop through dirt when true + torchdrop = true, -- torches drop when touching water + papyruswalk = true, -- papyrus can be walked on + lilywalk = true, -- waterlilies can be walked on + xcraft = true, -- allow cheat crafts for cobble->gravel->dirt->sand, ice->snow, dry dirt->desert sand + glacier = 1, -- Ice glaciers with snow + bamboo = 1, -- Bamboo with sprouts + mesa = 1, -- Mesa red and orange clay with giant redwood + alpine = 1, -- Snowy grass + healing = 1, -- Snowy peaks with healing trees + snowy = 1, -- Cold grass with pine trees and snow spots + frost = 1, -- Blue dirt with blue/pink frost trees + grassy = 1, -- Green grass with flowers and trees + caves = 1, -- Desert stone ares with huge caverns underneath + grayness = 1, -- Grey grass with willow trees + grassytwo = 1, -- Sparse trees with old trees and flowers + prairie = 1, -- Flowery grass with many plants and flowers + jumble = 1, -- Green grass with trees and jungle grass + junglee = 1, -- Jungle grass with tall jungle trees + desert = 1, -- Desert sand with cactus + grove = 1, -- Banana groves and ferns + mushroom = 1, -- Purple grass with giant mushrooms + sandstone = 1, -- Sandstone with smaller cactus + quicksand = 1, -- Quicksand banks + plains = 1, -- Dry dirt with scorched trees + savanna = 1, -- Dry yellow grass with acacia tree's + fiery = 1, -- Red grass with lava craters + sandclay = 1, -- Sand areas with clay underneath + swamp = 1, -- Swamp areas with vines on tree's, mushrooms, lilly's and clay sand + sealife = 1, -- Enable coral and seaweed + reefs = 1, -- Enable new 0.4.15 coral reefs in default + sakura = 1, -- Enable sakura biome with trees + tundra = 1, -- Enable tuntra biome with permafrost +} + +local path = minetest.get_modpath("ethereal") + +-- Load new settings if found +local input = io.open(path.."/settings.conf", "r") +if input then + dofile(path .. "/settings.conf") + input:close() + input = nil +end + +-- Intllib +local S +if minetest.global_exists("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + S = intllib.make_gettext_pair() + else + -- Old method using text files. + S = intllib.Getter() + end +else + S = function(s) return s end +end +ethereal.intllib = S + +-- Falling node function +ethereal.check_falling = minetest.check_for_falling or nodeupdate + +-- creative check +local creative_mode_cache = minetest.settings:get_bool("creative_mode") +function ethereal.check_creative(name) + return creative_mode_cache or minetest.check_player_privs(name, {creative = true}) +end + +dofile(path .. "/plantlife.lua") +dofile(path .. "/mushroom.lua") +dofile(path .. "/onion.lua") +dofile(path .. "/crystal.lua") +dofile(path .. "/water.lua") +dofile(path .. "/dirt.lua") +dofile(path .. "/food.lua") +dofile(path .. "/wood.lua") +dofile(path .. "/leaves.lua") +dofile(path .. "/sapling.lua") +dofile(path .. "/strawberry.lua") +dofile(path .. "/fishing.lua") +dofile(path .. "/extra.lua") +dofile(path .. "/sealife.lua") +dofile(path .. "/fences.lua") +dofile(path .. "/gates.lua") +dofile(path .. "/mapgen.lua") +dofile(path .. "/compatibility.lua") +dofile(path .. "/stairs.lua") +dofile(path .. "/lucky_block.lua") + +-- Set bonemeal aliases +if minetest.get_modpath("bonemeal") then + minetest.register_alias("ethereal:bone", "bonemeal:bone") + minetest.register_alias("ethereal:bonemeal", "bonemeal:bonemeal") +else -- or return to where it came from + minetest.register_alias("ethereal:bone", "default:dirt") + minetest.register_alias("ethereal:bonemeal", "default:dirt") +end + +if minetest.get_modpath("xanadu") then + dofile(path .. "/plantpack.lua") +end + +print (S("[MOD] Ethereal loaded")) diff --git a/mods_disabled/ethereal/leaves.lua b/mods_disabled/ethereal/leaves.lua new file mode 100644 index 0000000..1c7e38b --- /dev/null +++ b/mods_disabled/ethereal/leaves.lua @@ -0,0 +1,505 @@ + +local S = ethereal.intllib + +-- set leaftype (value inside init.lua) +local leaftype = "plantlike" + +if ethereal.leaftype ~= 0 then + leaftype = "allfaces_optional" +end + +-- default apple tree leaves +minetest.override_item("default:leaves", { + drawtype = leaftype, + visual_scale = 1.4, + inventory_image = "default_leaves.png", + wield_image = "default_leaves.png", + walkable = ethereal.leafwalk, +}) + +-- ability to craft big tree sapling +minetest.register_craft({ + recipe = {{"default:sapling", "default:sapling", "default:sapling"}}, + output = "ethereal:big_tree_sapling" +}) + +-- default jungle tree leaves +minetest.override_item("default:jungleleaves", { + drawtype = leaftype, + visual_scale = 1.4, + inventory_image = "default_jungleleaves.png", + wield_image = "default_jungleleaves.png", + walkable = ethereal.leafwalk, +}) + +-- default pine tree leaves +minetest.override_item("default:pine_needles", { + drawtype = leaftype, + visual_scale = 1.4, + inventory_image = "default_pine_needles.png", + wield_image = "default_pine_needles.png", + walkable = ethereal.leafwalk, + drop = { + max_items = 1, + items = { + {items = {"default:pine_sapling"}, rarity = 20}, + {items = {"ethereal:pine_nuts"}, rarity = 5}, + {items = {"default:pine_needles"}} + } + }, +}) + +-- default acacia tree leaves +minetest.override_item("default:acacia_leaves", { + drawtype = leaftype, + inventory_image = "default_acacia_leaves.png", + wield_image = "default_acacia_leaves.png", + visual_scale = 1.4, + walkable = ethereal.leafwalk, +}) + +-- default aspen tree leaves +minetest.override_item("default:aspen_leaves", { + drawtype = leaftype, + inventory_image = "default_aspen_leaves.png", + wield_image = "default_aspen_leaves.png", + visual_scale = 1.4, + walkable = ethereal.leafwalk, +}) + +-- willow twig +minetest.register_node("ethereal:willow_twig", { + description = S("Willow Twig"), + drawtype = "plantlike", + tiles = {"willow_twig.png"}, + inventory_image = "willow_twig.png", + wield_image = "willow_twig.png", + paramtype = "light", + walkable = ethereal.leafwalk, + visual_scale = 1.4, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:willow_sapling"}, rarity = 50}, + {items = {"ethereal:willow_twig"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- redwood leaves +minetest.register_node("ethereal:redwood_leaves", { + description = S("Redwood Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"redwood_leaves.png"}, + inventory_image = "redwood_leaves.png", + wield_image = "redwood_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:redwood_sapling"}, rarity = 50}, + {items = {"ethereal:redwood_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- orange tree leaves +minetest.register_node("ethereal:orange_leaves", { + description = S("Orange Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"orange_leaves.png"}, + inventory_image = "orange_leaves.png", + wield_image = "orange_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:orange_tree_sapling"}, rarity = 15}, + {items = {"ethereal:orange_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- banana tree leaves +minetest.register_node("ethereal:bananaleaves", { + description = S("Banana Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"banana_leaf.png"}, + inventory_image = "banana_leaf.png", + wield_image = "banana_leaf.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:banana_tree_sapling"}, rarity = 10}, + {items = {"ethereal:bananaleaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- healing tree leaves +minetest.register_node("ethereal:yellowleaves", { + description = S("Healing Tree Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"yellow_leaves.png"}, + inventory_image = "yellow_leaves.png", + wield_image = "yellow_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:yellow_tree_sapling"}, rarity = 50}, + {items = {"ethereal:yellowleaves"}} + } + }, + -- one leaf heals half a heart when eaten + on_use = minetest.item_eat(1), + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, + light_source = 9, +}) + +-- palm tree leaves +minetest.register_node("ethereal:palmleaves", { + description = S("Palm Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"moretrees_palm_leaves.png"}, + inventory_image = "moretrees_palm_leaves.png", + wield_image = "moretrees_palm_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:palm_sapling"}, rarity = 10}, + {items = {"ethereal:palmleaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- birch tree leaves +minetest.register_node("ethereal:birch_leaves", { + description = S("Birch Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"moretrees_birch_leaves.png"}, + inventory_image = "moretrees_birch_leaves.png", + wield_image = "moretrees_birch_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:birch_sapling"}, rarity = 20}, + {items = {"ethereal:birch_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- frost tree leaves +minetest.register_node("ethereal:frost_leaves", { + description = S("Frost Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"ethereal_frost_leaves.png"}, + inventory_image = "ethereal_frost_leaves.png", + wield_image = "ethereal_frost_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, puts_out_fire = 1}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:frost_tree_sapling"}, rarity = 15}, + {items = {"ethereal:frost_leaves"}} + } + }, + light_source = 9, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- bamboo stalk leaves +minetest.register_node("ethereal:bamboo_leaves", { + description = S("Bamboo Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"bamboo_leaves.png"}, + inventory_image = "bamboo_leaves.png", + wield_image = "bamboo_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:bamboo_sprout"}, rarity = 10}, + {items = {"ethereal:bamboo_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- sakura leaves +minetest.register_node("ethereal:sakura_leaves", { + description = S("Sakura Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"ethereal_sakura_leaves.png"}, + inventory_image = "ethereal_sakura_leaves.png", + wield_image = "ethereal_sakura_leaves.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:sakura_sapling"}, rarity = 30}, + {items = {"ethereal:sakura_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +minetest.register_node("ethereal:sakura_leaves2", { + description = S("Sakura Leaves"), + drawtype = leaftype, + visual_scale = 1.4, + tiles = {"ethereal_sakura_leaves2.png"}, + inventory_image = "ethereal_sakura_leaves2.png", + wield_image = "ethereal_sakura_leaves2.png", + paramtype = "light", + walkable = ethereal.leafwalk, + waving = 1, + groups = {snappy = 3, leafdecay = 3, leaves = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:sakura_sapling"}, rarity = 30}, + {items = {"ethereal:sakura_leaves2"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves, +}) + +-- mushroom tops +minetest.register_node("ethereal:mushroom", { + description = S("Mushroom Cap"), + tiles = {"mushroom_block.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:mushroom_sapling"}, rarity = 20}, + {items = {"ethereal:mushroom"}} + } + }, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:mushroom", + burntime = 10, +}) + +-- mushroom pore (spongelike material found inside giant shrooms) +minetest.register_node("ethereal:mushroom_pore", { + description = S("Mushroom Pore"), + tiles = {"mushroom_pore.png"}, + groups = { + snappy = 3, cracky = 3, choppy = 3, oddly_breakable_by_hand = 3, + flammable = 2, disable_jump = 1, fall_damage_add_percent = -100 + }, + sounds = default.node_sound_dirt_defaults(), +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:mushroom_pore", + burntime = 3, +}) + +-- hedge block +minetest.register_node("ethereal:bush", { + description = S("Bush"), + tiles = {"ethereal_bush.png"}, + walkable = true, + groups = {snappy = 3, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:bush", + recipe = { + {"group:leaves", "group:leaves", "group:leaves"}, + {"group:leaves", "ethereal:bamboo_leaves", "group:leaves"}, + {"group:leaves", "group:leaves", "group:leaves"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:bush", + burntime = 1, +}) + +-- bush block #2 +minetest.register_node("ethereal:bush2", { + drawtype = "allfaces_optional", + description = S("Bush #2"), + tiles = {"default_aspen_leaves.png"}, + paramtype = "light", + walkable = true, + groups = {snappy = 3, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:bush2", + recipe = { + {"group:leaves", "group:leaves", "group:leaves"}, + {"group:leaves", "default:aspen_leaves", "group:leaves"}, + {"group:leaves", "group:leaves", "group:leaves"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:bush2", + burntime = 1, +}) + +-- bush block #3 +minetest.register_node("ethereal:bush3", { + drawtype = "allfaces_optional", + description = S("Bush #3"), + tiles = {"default_pine_needles.png"}, + paramtype = "light", + walkable = true, + groups = {snappy = 3, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:bush3", + recipe = { + {"group:leaves", "group:leaves", "group:leaves"}, + {"group:leaves", "default:pine_needles", "group:leaves"}, + {"group:leaves", "group:leaves", "group:leaves"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:bush3", + burntime = 1, +}) + +-- compatibility check for new mt version with leafdecay function +if minetest.registered_nodes["default:dirt_with_rainforest_litter"] then + +default.register_leafdecay({ + trunks = {"default:tree"}, + leaves = { + "default:apple", "default:leaves", "ethereal:orange", + "ethereal:orange_leaves", "ethereal:vine"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:willow_trunk"}, + leaves = {"ethereal:willow_twig"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:redwood_trunk"}, + leaves = {"ethereal:redwood_leaves"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:frost_tree"}, + leaves = {"ethereal:frost_leaves"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:yellow_trunk"}, + leaves = {"ethereal:yellowleaves", "ethereal:golden_apple"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:palm_trunk"}, + leaves = {"ethereal:palmleaves", "ethereal:coconut"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:banana_trunk"}, + leaves = {"ethereal:bananaleaves", "ethereal:banana"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:birch_trunk"}, + leaves = {"ethereal:birch_leaves"}, + radius = 3 +}) + +default.register_leafdecay({ + trunks = {"ethereal:bamboo"}, + leaves = {"ethereal:bamboo_leaves"}, + radius = 2 +}) + +default.register_leafdecay({ + trunks = {"ethereal:sakura_trunk"}, + leaves = {"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}, + radius = 3 +}) + +end diff --git a/mods_disabled/ethereal/license.txt b/mods_disabled/ethereal/license.txt new file mode 100644 index 0000000..fec6f6a --- /dev/null +++ b/mods_disabled/ethereal/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 TenPlus1 + +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. diff --git a/mods_disabled/ethereal/locale/de.txt b/mods_disabled/ethereal/locale/de.txt new file mode 100644 index 0000000..9c9c9d7 --- /dev/null +++ b/mods_disabled/ethereal/locale/de.txt @@ -0,0 +1,220 @@ +# German Translation for ethereal mod +# Deutsche Übersetzung der ethereal Mod +# last update: 2016/May/25 +# Author: Xanthin + +#bonemeal.lua +Bone = Knochen +Bone Meal = Knochenmehl + +#crystal.lua +Crystal Spike = Kristallnadel +Crystal Ingot = Kristallbarren +Crystal Block = Kristallblock +Crystal Sword = Kristallschwert +Crystal Axe = Kristallaxt +Crystal Pickaxe = Kristallspitzhacke +Crystal (soft touch) Shovel = Kristallschaufel (Behutsamkeit) +Crystal Gilly Staff = Kristallener Gilly-Stab + +#dirt.lua +Green Dirt = Grüne Erde +Dried Dirt = Vertrocknete Erde +Bamboo Dirt = Bambuserde +Jungle Dirt = Tropenerde +Grove Dirt = Hainerde +Prairie Dirt = Prärieerde +Cold Dirt = Kalte Erde +Crystal Dirt = Kristallerde +Mushroom Dirt = Pilzerde +Fiery Dirt = Feuerrote Erde +Gray Dirt = Graue Erde +Red Baked Clay = Roter gebrannter Ton +Orange Baked Clay = Oranger gebrannter Ton +Grey Baked Clay = Grauer gebrannter Ton +Quicksand = Treibsand + +#extra.lua +Bamboo Floor = Bambusboden +Palm Wax = Palmwachs +Candle = Kerze +Bowl = Schale +Stone Ladder = Steinleiter +Paper Wall = Papierwand +Glo Stone = Leuchtstein +Lump of Charcoal = Holzkohlestück +Staff of Light = Stab des Lichts + +#fences.lua +Scorched Fence = Verbrannter Zaun +Frost Fence = Frostzaun +Redwood Fence = Mammutbaumzaun +Willow Fence = Weidenzaun +Healing Wood Fence = Lebensholzzaun +Palm Fence = Palmzaun +Banana Wood Fence = Bananenholzzaun +Mushroom Fence = Pilzzaun +Birch Fence = Birkenzaun + +#fishing.lua +Raw Fish = Roher Fisch +Cooked Fish = Gekochter Fisch +Sashimi = Sashimi +Worm = Wurm +Fishing Rod = Angelrute +Baited Fishing Rod = Angelrute mit Köder +Inventory full, Fish Got Away! = Inventar voll, Fisch entkam! + +#food.lua +Banana = Banane +Banana Dough = Bananenteig +Orange = Orange +Pine Nuts = Pinienkerne +Banana Loaf = Bananenbrot +Coconut = Kokosnuss +Coconut Slice = Kokosscheibe +Golden Apple = Goldener Apfel +Hearty Stew = Deftiger Eintopf +Bucket of Cactus Pulp = Eimer Kaktusmark + +#gates.lua +Scorched Wood Fence Gate = Verbranntes Holzzauntor +Frost Wood Fence Gate = Frostholzzauntor +Redwood Fence Gate = Mammutbaumzauntor +Willow Wood Fence Gate = Weidenholztor +Healing Wood Fence Gate = Lebensholzzauntor +Palm Wood Fence Gate = Palmholzzauntor +Banana Wood Fence Gate = Bananenholzzauntor +Mushroom Trunk Fence Gate = Pilzstammzauntor +Birch Wood Fence Gate = Birkenholzzauntor + +#init.lua +[MOD] Ethereal loaded = [MOD] Ethereal geladen + +#leaves.lua +Willow Twig = Weidenrute +Redwood Leaves = Mammutbaumlaub +Orange Leaves = Orangenlaub +Banana Leaves = Bananenblätter +Healing Tree Leaves = Lebensbaumlaub +Palm Leaves = Palmenblätter +Birch Leaves = Birkenlaub +Frost Leaves = Frostlaub +Bamboo Leaves = Bambuslaub +Mushroom Cap = Pilzkappe +Mushroom Pore = Pilzpore +Bush = Busch +Bush #2 = Busch #2 +Bush #3 = Busch #3 + +#mushroom.lua +Mushroom Soup = Pilzsuppe + +#onion.lua +Wild Onion = Wilde Zwiebel + +#plantlife.lua +Fire Flower = Feuerblume +Fire Dust = Feuerstaub +Vine = Weinrebe +Light String Vine = Leuchtschnurrebe +Fern = Farn +Fern Tubers = Farnsporenkapseln +Fiery Dry Shrub = Feuerroter vertrockneter Strauch +Snowy Grass = Verschneites Gras +Crystal Grass = Kristallgras +Crystal Moss = Kristallmoos +Mushroom Moss = Pilzmoos +Fiery Moss = Feuerrotes Moos +Gray Moss = Graues Moos +Green Moss = Grünes Moos +Red Illumishroom = Roter Leuchtpilz +Green Illumishroom = Grüner Leuchtpilz +Cyan Illumishroom = Türkiser Leuchtpilz + +#sapling.lua +Bamboo Sprout = Bambussprosse +Willow Tree Sapling = Weidenbaumsetzling +Healing Tree Sapling = Lebensbaumsetzling +Apple Tree Sapling = Apfelbaumsetzling +Jungle Tree Sapling = Tropenbaumsetzling +Pine Tree Sapling = Piniensetzling +Big Tree Sapling = Großer-Baum-Setzling +Banana Tree Sapling = Bananensetzling +Frost Tree Sapling = Frostbaumsetzling +Mushroom Tree Sapling = Pilzbaumsetzling +Palm Tree Sapling = Palmensetzling +Redwood Tree Sapling = Mammutbaumsetzling +Orange Tree Sapling = Orangenbaumsetzling +Acacia Tree Sapling = Akaziensetzling +Birch Tree Sapling = Birkensetzling +Schematic not found = Schema nicht gefunden + +#sealife.lua +Seaweed = Seetang +Blue Coral = Blaue Koralle +Orange Coral = Orange Koralle +Pink Coral = Rosa Koralle +Green Coral = Grüne Koralle +Sandy = Sandy + +#stairs.lua +Crystal Block Stair = Kristallblocktreppe +Crystal Block Slab = Kristallblockplatte +Ice Brick Stair = Eisziegeltreppe +Ice Brick Slab = Eisziegelplatte +Snow Brick Stair = Schneeziegeltreppe +Snow Brick Slab = Schneeziegelplatte +Dry Dirt Stair = Vertrocknete Erdtreppe +Dry Dirt Slab = vertrocknete Erdplatte +Mushroom Trunk Stair = Pilzstammtreppe +Mushroom Trunk Slab = Pilzstammplatte +Mushroom Top Stair = Pilzkappentreppe +Mushroom Top Slab = Pilzkappenplatte +Frost Wood Stair = Frostholztreppe +Frost Wood Slab = Frostholzplatte +Healing Wood Stair = Lebensholztreppe +Healing Wood Slab = Lebensholzplatte +Palm Wood Stair = Palmholztreppe +Palm Wood Slab = Palmholzplatte +Birch Wood Stair = Birkenholztreppe +Birch Wood Slab = Birkenholzplatte +Banana Wood Stair = Bananenholztreppe +Banana Wood Slab = Bananenholzplatte +Willow Wood Stair = Weidenholztreppe +Willow Wood Slab = Weidenholzplatte +Redwood Stair = Mammutbaumtreppe +Redwood Slab = Mammutbaumplatte +Bamboo Stair = Bambustreppe +Bamboo Slab = Bambusplatte +Dry Dirt = Vertrocknete Erde +Mushroom Trunk = Pilzstamm +Mushroom Top = Pilzkappe +Healing Wood = Lebensholz +Redwood = Mammutbaum + +#strawberry.lua +Strawberry = Erdbeere + +#water.lua +Ice Brick = Eisziegel +Snow Brick = Schneeziegel + +#wood.lua +Willow Trunk = Weidenstamm +Willow Wood = Weidenholz +Redwood Trunk = Mammutbaumstamm +Redwood Wood = Mammutbaumholz +Frost Tree = Frostbaum +Frost Wood = Frostholz +Healing Tree Trunk = Lebensbaumstamm +Healing Tree Wood = Lebensbaumholz +Palm Trunk = Palmstamm +Palm Wood = Palmholz +Banana Trunk = Bananenstamm +Banana Wood = Bananenholz +Scorched Tree = Verbrannter Baum +Mushroom = Pilz +Birch Trunk = Birkenstamm +Birch Wood = Birkenholz +Bamboo = Bambus \ No newline at end of file diff --git a/mods_disabled/ethereal/locale/ru.txt b/mods_disabled/ethereal/locale/ru.txt new file mode 100644 index 0000000..81ddb53 --- /dev/null +++ b/mods_disabled/ethereal/locale/ru.txt @@ -0,0 +1,220 @@ +# Russian Translation for ethereal mod +# Русский перевод мода ethereal +# last update: 2017/Aug/15 +# Author: Inpos + +#bonemeal.lua +Bone = Кость +Bone Meal = Косятная мука + +#crystal.lua +Crystal Spike = Хрустальный шип +Crystal Ingot = Хрустальный слиток +Crystal Block = Хрустальный блок +Crystal Sword = Хрустальный меч +Crystal Axe = Хрустальный топор +Crystal Pickaxe = Хрустальная кирка +Crystal (soft touch) Shovel = Хрустальная лопата (хрупкая) +Crystal Gilly Staff = Хрустальный посох Джилли + +#dirt.lua +Green Dirt = Зелёная земля +Dried Dirt = Высушенная земля +Bamboo Dirt = Бамбуковая земля +Jungle Dirt = Земля джунглей +Grove Dirt = Лесная земля +Prairie Dirt = Земля прерий +Cold Dirt = Холодная земля +Crystal Dirt = Хрустальная земля +Mushroom Dirt = Грибная земля +Fiery Dirt = Огненная земля +Gray Dirt = Серая земля +Red Baked Clay = Красная обожжёная глина +Orange Baked Clay = Оранжевая обожжёная глина +Grey Baked Clay = Серая обожжёная глина +Quicksand = Зыбучий песок + +#extra.lua +Bamboo Floor = Бамбуковый пол +Palm Wax = Пальмовый воск +Candle = Свеча +Bowl = Чашка +Stone Ladder = Каменная лестница +Paper Wall = Обои +Glo Stone = Светящийся камень +Lump of Charcoal = Кусок угля +Staff of Light = Световой посох + +#fences.lua +Scorched Fence = Обожжёный забор +Frost Fence = Замороженный забор +Redwood Fence = Забор из секвойи +Willow Fence = Ивовый забор +Healing Wood Fence = Забор из лечащего дерева +Palm Fence = Пальмовый забор +Banana Wood Fence = Забор из бананового дерева +Mushroom Fence = Грибной забор +Birch Fence = Берёзовый забор + +#fishing.lua +Raw Fish = Сырая рыба +Cooked Fish = Свареная рыба +Sashimi = Сашими +Worm = Червь +Fishing Rod = Удочка +Baited Fishing Rod = Удочка с приманкой +Inventory full, Fish Got Away! = Инвентарь заполнен, рыба сбежала! + +#food.lua +Banana = Банан +Banana Dough = Банановое тесто +Orange = Апельсин +Pine Nuts = Кедровые орехи +Banana Loaf = Банадовый хлеб +Coconut = Кокос +Coconut Slice = Кокосовый ломтик +Golden Apple = Золотое яблоко +Hearty Stew = Сытное рагу +Bucket of Cactus Pulp = Ведро с мякотью кактуса + +#gates.lua +Scorched Wood Fence Gate = Обожжёные деревянные ворота для забора +Frost Wood Fence Gate = Замороженные деревянные ворота для забора +Redwood Fence Gate = Ворота из секвойи для забора +Willow Wood Fence Gate = Ивовые ворота для забора +Healing Wood Fence Gate = Ворота из лечащего дерева для забора +Palm Wood Fence Gate = Ворота из пальмого дерева для забора +Banana Wood Fence Gate = Ворота из бананового дерева для забора +Mushroom Trunk Fence Gate = Ворота из грибного ствола для забора +Birch Wood Fence Gate = Берёзовые ворота для забора + +#init.lua +[MOD] Ethereal loaded = [MOD] Ethereal загружен + +#leaves.lua +Willow Twig = Ивовый прут +Redwood Leaves = Листва секвойи +Orange Leaves = Листва апельсина +Banana Leaves = Листва банана +Healing Tree Leaves = Листва лечащего дерева +Palm Leaves = Пальмовая листва +Birch Leaves = Берёзовая листва +Frost Leaves = Замороженная листва +Bamboo Leaves = Бамбуковая листва +Mushroom Cap = Шляпка гриба +Mushroom Pore = Грибные поры +Bush = Куст +Bush #2 = Куст #2 +Bush #3 = Куст #3 + +#mushroom.lua +Mushroom Soup = Грибной суп + +#onion.lua +Wild Onion = Дикий лук + +#plantlife.lua +Fire Flower = Огненый цветок +Fire Dust = Огненая пыль +Vine = Виноградная лоза +Light String Vine = Светящаяся виноградная лоза +Fern = Папоротник +Fern Tubers = Клубни папоротника +Fiery Dry Shrub = Огненный сухой кустарник +Snowy Grass = Заснеженная трава +Crystal Grass = Хрустальная трава +Crystal Moss = Хрустальный мох +Mushroom Moss = Грибной мох +Fiery Moss = Огненный мох +Gray Moss = Серый мох +Green Moss = Зелёный мох +Red Illumishroom = Красный светящийся гриб +Green Illumishroom = Зелёный светящийся гриб +Cyan Illumishroom = Голубой светящийся гриб + +#sapling.lua +Bamboo Sprout = Росток бамбука +Willow Tree Sapling = Саженец ивы +Healing Tree Sapling = Саженец лечебного дерева +Apple Tree Sapling = Саженец яблони +Jungle Tree Sapling = Саженец дерева джунглей +Pine Tree Sapling = Саженец сосны +Big Tree Sapling = Саженец большого дерева +Banana Tree Sapling = Саженец бананового дерева +Frost Tree Sapling = Саженец морозного дерева +Mushroom Tree Sapling = Саженец грибного дерева +Palm Tree Sapling = Саженец пальмы +Redwood Tree Sapling = Саженец секвойи +Orange Tree Sapling = Саженец апельсинового дерева +Acacia Tree Sapling = Саженец акации +Birch Tree Sapling = Саженец берёзы +Schematic not found = Схема не найдена + +#sealife.lua +Seaweed = Водоросли +Blue Coral = Синий коралл +Orange Coral = Оранжевый коралл +Pink Coral = Розовый коралл +Green Coral = Залёный коралл +Sandy = Песочный + +#stairs.lua +Crystal Block Stair = Ступенька из хрустального блока +Crystal Block Slab = Плита из хрустального блока +Ice Brick Stair = Ступенька из ледяного кирпича +Ice Brick Slab = Плита из ледяного кирпича +Snow Brick Stair = Ступенька из снежного кирпича +Snow Brick Slab = Плита из снежного кирпича +Dry Dirt Stair = Ступенька из сухой земли +Dry Dirt Slab = Плита из сухой земли +Mushroom Trunk Stair = Ступенька из ствола гриба +Mushroom Trunk Slab = Плита из ствола гриба +Mushroom Top Stair = Ступенька из шляпки гриба +Mushroom Top Slab = Плита из шляпки гриба +Frost Wood Stair = Ступенька из замороженных досок +Frost Wood Slab = Плита из замороженных досок +Healing Wood Stair = Ступенька из лечебного дерева +Healing Wood Slab = Плита из лечебного дерева +Palm Wood Stair = Ступенька из пальмовых досок +Palm Wood Slab = Плита из пальмовых досок +Birch Wood Stair = Ступенька из берёзовых досок +Birch Wood Slab = Плита из берёзовых досок +Banana Wood Stair = Ступенька из банановых досок +Banana Wood Slab = Плита из банановых досок +Willow Wood Stair = Ступенька из ивовых досок +Willow Wood Slab = Плита из ивовых досок +Redwood Stair = Ступенька из секвойи +Redwood Slab = Плита из секвойи +Bamboo Stair = Ступенька из бамбука +Bamboo Slab = Плита из бамбука +Dry Dirt = Сухая земля +Mushroom Trunk = Ствол гриба +Mushroom Top = Шляпка гриба +Healing Wood = лечебная древесина +Redwood = Секвойя + +#strawberry.lua +Strawberry = Клубника + +#water.lua +Ice Brick = Ледяной кирпич +Snow Brick = Снежный кирпич + +#wood.lua +Willow Trunk = Ствол ивы +Willow Wood = Доски ивы +Redwood Trunk = Ствол секвойи +Redwood Wood = Доски секвойи +Frost Tree = Морозное дерево +Frost Wood = Доски +Healing Tree Trunk = Ствол лечебного дерева +Healing Tree Wood = Доски лечебного дерева +Palm Trunk = Ствол пальмы +Palm Wood = Доски пальмы +Banana Trunk = Ствол бананового дерева +Banana Wood = Доски банавого дерева +Scorched Tree = Обожжёное дерево +Mushroom = Гриб +Birch Trunk = Ствол берёзы +Birch Wood = Доски берёзы +Bamboo = Бамбук \ No newline at end of file diff --git a/mods_disabled/ethereal/locale/template.txt b/mods_disabled/ethereal/locale/template.txt new file mode 100644 index 0000000..d9a795e --- /dev/null +++ b/mods_disabled/ethereal/locale/template.txt @@ -0,0 +1,218 @@ +# Template for translations of ethereal mod +# last update: 2016/May/25 + +#bonemeal.lua +Bone = +Bone Meal = + +#crystal.lua +Crystal Spike = +Crystal Ingot = +Crystal Block = +Crystal Sword = +Crystal Axe = +Crystal Pickaxe = +Crystal (soft touch) Shovel = +Crystal Gilly Staff = + +#dirt.lua +Green Dirt = +Dried Dirt = +Bamboo Dirt = +Jungle Dirt = +Grove Dirt = +Prairie Dirt = +Cold Dirt = +Crystal Dirt = +Mushroom Dirt = +Fiery Dirt = +Gray Dirt = +Red Baked Clay = +Orange Baked Clay = +Grey Baked Clay = +Quicksand = + +#extra.lua +Bamboo Floor = +Palm Wax = +Candle = +Bowl = +Stone Ladder = +Paper Wall = +Glo Stone = +Lump of Charcoal = +Staff of Light = + +#fences.lua +Scorched Fence = +Frost Fence = +Redwood Fence = +Willow Fence = +Healing Wood Fence = +Palm Fence = +Banana Wood Fence = +Mushroom Fence = +Birch Fence = + +#fishing.lua +Raw Fish = +Cooked Fish = +Sashimi = +Worm = +Fishing Rod = +Baited Fishing Rod = +Inventory full, Fish Got Away! = + +#food.lua +Banana = +Banana Dough = +Orange = +Pine Nuts = +Banana Loaf = +Coconut = +Coconut Slice = +Golden Apple = +Hearty Stew = +Bucket of Cactus Pulp = + +#gates.lua +Scorched Wood Fence Gate = +Frost Wood Fence Gate = +Redwood Fence Gate = +Willow Wood Fence Gate = +Healing Wood Fence Gate = +Palm Wood Fence Gate = +Banana Wood Fence Gate = +Mushroom Trunk Fence Gate = +Birch Wood Fence Gate = + +#init.lua +[MOD] Ethereal loaded = + +#leaves.lua +Willow Twig = +Redwood Leaves = +Orange Leaves = +Banana Leaves = +Healing Tree Leaves = +Palm Leaves = +Birch Leaves = +Frost Leaves = +Bamboo Leaves = +Mushroom Cap = +Mushroom Pore = +Bush = +Bush #2 = +Bush #3 = + +#mushroom.lua +Mushroom Soup = + +#onion.lua +Wild Onion = + +#plantlife.lua +Fire Flower = +Fire Dust = +Vine = +Light String Vine = +Fern = +Fern Tubers = +Fiery Dry Shrub = +Snowy Grass = +Crystal Grass = +Crystal Moss = +Mushroom Moss = +Fiery Moss = +Gray Moss = +Green Moss = +Red Illumishroom = +Green Illumishroom = +Cyan Illumishroom = + +#sapling.lua +Bamboo Sprout = +Willow Tree Sapling = +Healing Tree Sapling = +Apple Tree Sapling = +Jungle Tree Sapling = +Pine Tree Sapling = +Big Tree Sapling = +Banana Tree Sapling = +Frost Tree Sapling = +Mushroom Tree Sapling = +Palm Tree Sapling = +Redwood Tree Sapling = +Orange Tree Sapling = +Acacia Tree Sapling = +Birch Tree Sapling = +Schematic not found = + +#sealife.lua +Seaweed = +Blue Coral = +Orange Coral = +Pink Coral = +Green Coral = +Sandy = + +#stairs.lua +Crystal Block Stair = +Crystal Block Slab = +Ice Brick Stair = +Ice Brick Slab = +Snow Brick Stair = +Snow Brick Slab = +Dry Dirt Stair = +Dry Dirt Slab = +Mushroom Trunk Stair = +Mushroom Trunk Slab = +Mushroom Top Stair = +Mushroom Top Slab = +Frost Wood Stair = +Frost Wood Slab = +Healing Wood Stair = +Healing Wood Slab = +Palm Wood Stair = +Palm Wood Slab = +Birch Wood Stair = +Birch Wood Slab = +Banana Wood Stair = +Banana Wood Slab = +Willow Wood Stair = +Willow Wood Slab = +Redwood Stair = +Redwood Slab = +Bamboo Stair = +Bamboo Slab = +Dry Dirt = +Mushroom Trunk = +Mushroom Top = +Healing Wood = +Redwood = + +#strawberry.lua +Strawberry = + +#water.lua +Ice Brick = +Snow Brick = + +#wood.lua +Willow Trunk = +Willow Wood = +Redwood Trunk = +Redwood Wood = +Frost Tree = +Frost Wood = +Healing Tree Trunk = +Healing Tree Wood = +Palm Trunk = +Palm Wood = +Banana Trunk = +Banana Wood = +Scorched Tree = +Mushroom = +Birch Trunk = +Birch Wood = +Bamboo = \ No newline at end of file diff --git a/mods_disabled/ethereal/lucky_block.lua b/mods_disabled/ethereal/lucky_block.lua new file mode 100644 index 0000000..af79b73 --- /dev/null +++ b/mods_disabled/ethereal/lucky_block.lua @@ -0,0 +1,89 @@ + +-- add lucky blocks + +if minetest.get_modpath("lucky_block") then + +local epath = minetest.get_modpath("ethereal") .. "/schematics/" + +lucky_block:add_schematics({ + {"pinetree", ethereal.pinetree, {x = 3, y = 0, z = 3}}, + {"palmtree", ethereal.palmtree, {x = 4, y = 0, z = 4}}, + {"bananatree", ethereal.bananatree, {x = 3, y = 0, z = 3}}, + {"orangetree", ethereal.orangetree, {x = 1, y = 0, z = 1}}, + {"birchtree", ethereal.birchtree, {x = 2, y = 0, z = 2}}, +}) + +lucky_block:add_blocks({ + {"dro", {"ethereal:firethorn"}, 3}, + {"dro", {"ethereal:firethorn_jelly"}, 3}, + {"nod", "ethereal:crystal_spike", 1}, + {"sch", "pinetree", 0, false}, + {"dro", {"ethereal:orange"}, 10}, + {"sch", "appletree", 0, false}, + {"dro", {"ethereal:strawberry"}, 10}, + {"sch", "bananatree", 0, false}, + {"sch", "orangetree", 0, false}, + {"dro", {"ethereal:banana"}, 10}, + {"sch", "acaciatree", 0, false}, + {"dro", {"ethereal:golden_apple"}, 3}, + {"sch", "palmtree", 0, false}, + {"dro", {"ethereal:tree_sapling"}, 5}, + {"dro", {"ethereal:orange_tree_sapling"}, 5}, + {"dro", {"ethereal:banana_tree_sapling"}, 5}, + {"dro", {"ethereal:willow_sapling"} ,5}, + {"dro", {"ethereal:mushroom_sapling"} ,5}, + {"dro", {"ethereal:palm_sapling"} ,5}, + {"dro", {"ethereal:birch_sapling"} ,5}, + {"dro", {"ethereal:redwood_sapling"} ,1}, + {"dro", {"ethereal:prairie_dirt"}, 10}, + {"dro", {"ethereal:grove_dirt"}, 10}, + {"fal", {"default:lava_source", "default:lava_source", "default:lava_source", + "default:lava_source", "default:lava_source"}, 1, true, 4}, + {"dro", {"ethereal:cold_dirt"}, 10}, + {"dro", {"ethereal:mushroom_dirt"}, 10}, + {"dro", {"ethereal:fiery_dirt"}, 10}, + {"dro", {"ethereal:axe_crystal"}}, + {"nod", "ethereal:fire_flower", 1}, + {"dro", {"ethereal:sword_crystal"}}, + {"dro", {"ethereal:pick_crystal"}}, + {"sch", "birchtree", 0, false}, + {"dro", {"ethereal:fish_raw"}}, + {"dro", {"ethereal:shovel_crystal"}}, + {"dro", {"ethereal:fishing_rod_baited"}}, + {"exp"}, + {"dro", {"ethereal:fire_dust"}, 2}, + {"exp", 4}, + {"dro", {"ethereal:crystal_gilly_staff"}}, + {"dro", {"ethereal:light_staff"}}, + {"nod", "default:chest", 0, { + {name = "ethereal:birch_sapling", max = 10}, + {name = "ethereal:palm_sapling", max = 10}, + {name = "ethereal:orange_tree_sapling", max = 10}, + {name = "ethereal:redwood_sapling", max = 10}, + {name = "ethereal:bamboo_sprout", max = 10}, + {name = "ethereal:banana_tree_sapling", max = 10}, + {name = "ethereal:mushroom_sapling", max = 10}, + {name = "ethereal:frost_tree_sapling", max = 10}, + {name = "ethereal:sakura_sapling", max = 10}, + {name = "ethereal:willow_sapling", max = 10}, + }}, +}) + +if minetest.get_modpath("3d_armor") then +lucky_block:add_blocks({ + {"dro", {"3d_armor:helmet_crystal"}}, + {"dro", {"3d_armor:chestplate_crystal"}}, + {"dro", {"3d_armor:leggings_crystal"}}, + {"dro", {"3d_armor:boots_crystal"}}, + {"lig"}, +}) +end + +if minetest.get_modpath("shields") then +lucky_block:add_blocks({ + {"dro", {"shields:shield_crystal"}}, + {"exp"}, +}) +end + +end -- END IF diff --git a/mods_disabled/ethereal/mapgen.lua b/mods_disabled/ethereal/mapgen.lua new file mode 100644 index 0000000..9057d81 --- /dev/null +++ b/mods_disabled/ethereal/mapgen.lua @@ -0,0 +1,1271 @@ + +-- clear default mapgen biomes, decorations and ores +--minetest.clear_registered_biomes() +--minetest.clear_registered_decorations() +--minetest.clear_registered_ores() + +local path = minetest.get_modpath("ethereal") + +dofile(path .. "/ores.lua") + +path = path .. "/schematics/" + +local dpath = minetest.get_modpath("default") .. "/schematics/" + +-- tree schematics +dofile(path .. "orange_tree.lua") +dofile(path .. "banana_tree.lua") +dofile(path .. "bamboo_tree.lua") +dofile(path .. "birch_tree.lua") +dofile(path .. "bush.lua") +dofile(path .. "waterlily.lua") +dofile(path .. "volcanom.lua") +dofile(path .. "volcanol.lua") +dofile(path .. "frosttrees.lua") +dofile(path .. "palmtree.lua") +dofile(path .. "pinetree.lua") +dofile(path .. "yellowtree.lua") +dofile(path .. "mushroomone.lua") +dofile(path .. "willow.lua") +dofile(path .. "bigtree.lua") +dofile(path .. "redwood_tree.lua") +dofile(path .. "vinetree.lua") +dofile(path .. "sakura.lua") +dofile(path .. "igloo.lua") + +--= Biomes + +local add_biome = function(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) + + if p ~= 1 then return end + + minetest.register_biome({ + name = a, + node_dust = b, + node_top = c, + depth_top = d, + node_filler = e, + depth_filler = f, + node_stone = g, + node_water_top = h, + depth_water_top = i, + node_water = j, + node_river_water = k, + y_min = l, + y_max = m, + heat_point = n, + humidity_point = o, + }) +end + +add_biome("underground", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, + -31000, -192, 50, 50, 1) + +add_biome("mountain", nil, "default:snow", 1, "default:snowblock", 2, + nil, nil, nil, nil, nil, 140, 31000, 50, 50, 1) + +add_biome("desert", nil, "default:desert_sand", 1, "default:desert_sand", 3, + "default:desert_stone", nil, nil, nil, nil, 3, 23, 35, 20, ethereal.desert) + +add_biome("desert_ocean", nil, "default:sand", 1, "default:sand", 2, + "default:desert_stone", nil, nil, nil, nil, -192, 3, 35, 20, ethereal.desert) + +if ethereal.glacier == 1 then + + minetest.register_biome({ + name = "glacier", + node_dust = "default:snowblock", + node_top = "default:snowblock", + depth_top = 1, + node_filler = "default:snowblock", + depth_filler = 3, + node_stone = "default:ice", + node_water_top = "default:ice", + depth_water_top = 10, + --node_water = "", + node_river_water = "default:ice", + node_riverbed = "default:gravel", + depth_riverbed = 2, + y_min = -8, + y_max = 31000, + heat_point = 0, + humidity_point = 50, + }) + + minetest.register_biome({ + name = "glacier_ocean", + node_dust = "default:snowblock", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + --node_stone = "", + --node_water_top = "", + --depth_water_top = , + --node_water = "", + --node_river_water = "", + y_min = -112, + y_max = -9, + heat_point = 0, + humidity_point = 50, + }) +end + +add_biome("clearing", nil, "default:dirt_with_grass", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 71, 45, 65, 1) -- ADDED + +add_biome("bamboo", nil, "ethereal:bamboo_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 25, 70, 45, 75, ethereal.bamboo) + +--add_biome("bamboo_ocean", nil, "default:sand", 1, "default:sand", 2, + --nil, nil, nil, nil, nil, -192, 2, 45, 75, ethereal.bamboo) + +add_biome("sakura", nil, "ethereal:bamboo_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 25, 45, 75, ethereal.sakura) + +add_biome("sakura_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 2, 45, 75, ethereal.sakura) + +add_biome("mesa", nil, "default:dirt_with_dry_grass", 1, "bakedclay:orange", 15, + nil, nil, nil, nil, nil, 1, 71, 25, 28, ethereal.mesa) + +add_biome("mesa_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 25, 28, ethereal.mesa) + +add_biome("alpine", nil, "default:dirt_with_snow", 1, "default:dirt", 2, + nil, nil, nil, nil, nil, 40, 140, 10, 40, ethereal.alpine) + +if minetest.registered_nodes["default:dirt_with_coniferous_litter"] then +add_biome("snowy", nil, "default:dirt_with_coniferous_litter", 1, "default:dirt", + 2, nil, nil, nil, nil, nil, 4, 40, 10, 40, ethereal.snowy) +else +add_biome("snowy", nil, "ethereal:cold_dirt", 1, "default:dirt", 2, + nil, nil, nil, nil, nil, 4, 40, 10, 40, ethereal.snowy) +end + +add_biome("frost", nil, "ethereal:crystal_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 1, 71, 10, 40, ethereal.frost) + +add_biome("frost_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 10, 40, ethereal.frost) + +add_biome("grassy", nil, "default:dirt_with_grass", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 91, 13, 40, ethereal.grassy) + +add_biome("grassy_ocean", nil, "default:sand", 2, "default:gravel", 1, + nil, nil, nil, nil, nil, -31000, 3, 13, 40, ethereal.grassy) + +add_biome("caves", nil, "default:desert_stone", 3, "air", 8, + nil, nil, nil, nil, nil, 4, 41, 15, 25, ethereal.caves) + +add_biome("grayness", nil, "ethereal:gray_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 2, 41, 15, 30, ethereal.grayness) + +if minetest.registered_nodes["default:silver_sand"] then + add_biome("grayness_ocean", nil, "default:silver_sand", 2, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 15, 30, ethereal.grayness) +else + add_biome("grayness_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 15, 30, ethereal.grayness) +end + +add_biome("grassytwo", nil, "default:dirt_with_grass", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 1, 91, 15, 40, ethereal.grassytwo) + +add_biome("grassytwo_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 15, 40, ethereal.grassytwo) + +add_biome("prairie", nil, "ethereal:prairie_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 26, 20, 40, ethereal.prairie) + +add_biome("prairie_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 20, 40, ethereal.prairie) + +add_biome("jumble", nil, "default:dirt_with_grass", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 1, 71, 25, 50, ethereal.jumble) + +add_biome("jumble_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 25, 50, ethereal.jumble) + +if minetest.registered_nodes["default:dirt_with_rainforest_litter"] then + add_biome("junglee", nil, "default:dirt_with_rainforest_litter", 1, + "default:dirt", 3, nil, nil, nil, nil, nil, 1, 71, 30, 60, ethereal.junglee) +else + add_biome("junglee", nil, "ethereal:jungle_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 1, 71, 30, 60, ethereal.junglee) +end + +add_biome("junglee_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 30, 60, ethereal.junglee) + +add_biome("grove", nil, "ethereal:grove_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 23, 45, 35, ethereal.grove) + +add_biome("grove_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 2, 45, 35, ethereal.grove) + +add_biome("mushroom", nil, "ethereal:mushroom_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 50, 45, 55, ethereal.mushroom) + +add_biome("mushroom_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 2, 45, 55, ethereal.mushroom) + +add_biome("sandstone", nil, "default:sandstone", 1, "default:sandstone", 1, + "default:sandstone", nil, nil, nil, nil, 3, 23, 50, 20, ethereal.sandstone) + +add_biome("sandstone_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 2, 50, 20, ethereal.sandstone) + +add_biome("quicksand", nil, "ethereal:quicksand2", 3, "default:gravel", 1, + nil, nil, nil, nil, nil, 1, 1, 50, 38, ethereal.quicksand) + +add_biome("plains", nil, "ethereal:dry_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 3, 25, 65, 25, ethereal.plains) + +add_biome("plains_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 2, 55, 25, ethereal.plains) + +if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then + add_biome("savanna", nil, "default:dry_dirt_with_dry_grass", 1, + "default:dry_dirt", 3, nil, nil, nil, nil, nil, 3, 50, 55, 25, + ethereal.savanna) +else + add_biome("savanna", nil, "default:dirt_with_dry_grass", 1, "default:dirt", + 3, nil, nil, nil, nil, nil, 3, 50, 55, 25, ethereal.savanna) +end + +add_biome("savanna_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 1, 55, 25, ethereal.savanna) + +add_biome("fiery", nil, "ethereal:fiery_dirt", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 5, 20, 75, 10, ethereal.fiery) + +add_biome("fiery_ocean", nil, "default:sand", 1, "default:sand", 2, + nil, nil, nil, nil, nil, -192, 4, 75, 10, ethereal.fiery) + +add_biome("sandclay", nil, "default:sand", 3, "default:clay", 2, + nil, nil, nil, nil, nil, 1, 11, 65, 2, ethereal.sandclay) + +add_biome("swamp", nil, "default:dirt_with_grass", 1, "default:dirt", 3, + nil, nil, nil, nil, nil, 1, 7, 80, 90, ethereal.swamp) + +add_biome("swamp_ocean", nil, "default:sand", 2, "default:clay", 2, + nil, nil, nil, nil, nil, -192, 1, 80, 90, ethereal.swamp) + +--= schematic decorations + +local add_schem = function(a, b, c, d, e, f, g, h) + + if g ~= 1 then return end + + minetest.register_decoration({ + deco_type = "schematic", + place_on = a, + sidelen = 80, + fill_ratio = b, + biomes = c, + y_min = d, + y_max = e, + schematic = f, + flags = "place_center_x, place_center_z", + replacements = h, + }) +end + +if ethereal.glacier then + + -- igloo + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:snowblock"}, + sidelen = 80, + fill_ratio = 0.001, + biomes = {"glacier"}, + y_min = 3, + y_max = 50, + schematic = ethereal.igloo, + flags = "place_center_x, place_center_z", + spawn_by = "default:snowblock", + num_spawn_by = 8, + rotation = "random", + }) +end + +--sakura tree +add_schem({"ethereal:bamboo_dirt"}, 0.01, {"sakura"}, 7, 100, ethereal.sakura_tree, ethereal.sakura) + +-- redwood tree +add_schem({"default:dirt_with_dry_grass"}, 0.0025, {"mesa"}, 1, 100, ethereal.redwood_tree, ethereal.mesa) + +-- banana tree +add_schem({"ethereal:grove_dirt"}, 0.015, {"grove"}, 1, 100, ethereal.bananatree, ethereal.grove) + +-- healing tree +add_schem({"default:dirt_with_snow"}, 0.01, {"alpine"}, 120, 140, ethereal.yellowtree, ethereal.alpine) + +-- crystal frost tree +add_schem({"ethereal:crystal_dirt"}, 0.01, {"frost"}, 1, 100, ethereal.frosttrees, ethereal.frost) + +if ethereal.mushroom then + + -- giant shroom + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"ethereal:mushroom_dirt"}, + sidelen = 80, + fill_ratio = 0.02, + biomes = {"mushroom"}, + y_min = 1, + y_max = 100, + schematic = ethereal.mushroomone, + flags = "place_center_x, place_center_z", + spawn_by = "ethereal:mushroom_dirt", + num_spawn_by = 6, + }) +end + +if ethereal.fiery then + + -- small lava crater + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"ethereal:fiery_dirt"}, + sidelen = 80, + fill_ratio = 0.01, + biomes = {"fiery"}, + y_min = 1, + y_max = 100, + schematic = ethereal.volcanom, + flags = "place_center_x, place_center_z", + spawn_by = "ethereal:fiery_dirt", + num_spawn_by = 8, + }) + + -- large lava crater + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"ethereal:fiery_dirt"}, + sidelen = 80, + fill_ratio = 0.003, + biomes = {"fiery"}, + y_min = 1, + y_max = 100, + schematic = ethereal.volcanol, + flags = "place_center_x, place_center_z", + spawn_by = "ethereal:fiery_dirt", + num_spawn_by = 8, + rotation = "random", + }) +end + +-- default jungle tree +add_schem({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, 0.08, {"junglee"}, 1, 100, dpath .. "jungle_tree.mts", ethereal.junglee) + +-- willow tree +add_schem({"ethereal:gray_dirt"}, 0.02, {"grayness"}, 1, 100, ethereal.willow, ethereal.grayness) + +-- pine tree (default for lower elevation and ethereal for higher) +add_schem({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, 0.025, {"snowy"}, 10, 40, ethereal.pinetree, ethereal.snowy) +add_schem({"default:dirt_with_snow"}, 0.025, {"alpine"}, 40, 140, ethereal.pinetree, ethereal.alpine) + +-- default apple tree +add_schem({"default:dirt_with_grass"}, 0.02, {"jumble"}, 1, 100, dpath .. "apple_tree.mts", ethereal.grassy) +add_schem({"default:dirt_with_grass"}, 0.03, {"grassy"}, 1, 100, dpath .. "apple_tree.mts", ethereal.grassy) + +-- big old tree +add_schem({"default:dirt_with_grass"}, 0.001, {"jumble"}, 1, 100, ethereal.bigtree, ethereal.jumble) + +-- aspen tree +add_schem({"default:dirt_with_grass"}, 0.02, {"grassytwo"}, 1, 50, dpath .. "aspen_tree.mts", ethereal.jumble) + +-- birch tree +add_schem({"default:dirt_with_grass"}, 0.02, {"grassytwo"}, 50, 100, ethereal.birchtree, ethereal.grassytwo) + +-- orange tree +add_schem({"ethereal:prairie_dirt"}, 0.01, {"prairie"}, 1, 100, ethereal.orangetree, ethereal.prairie) + +-- default acacia tree +if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then + add_schem({"default:dry_dirt_with_dry_grass"}, 0.004, {"savanna"}, 1, 100, + dpath .. "acacia_tree.mts", ethereal.savanna) +else + add_schem({"default:dirt_with_dry_grass"}, 0.004, {"savanna"}, 1, 100, + dpath .. "acacia_tree.mts", ethereal.savanna) +end + +-- large cactus (by Paramat) +if ethereal.desert == 1 then +minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:desert_sand"}, + sidelen = 80, + noise_params = { + offset = -0.0005, + scale = 0.0015, + spread = {x = 200, y = 200, z = 200}, + seed = 230, + octaves = 3, + persist = 0.6 + }, + biomes = {"desert"}, + y_min = 5, + y_max = 31000, + schematic = dpath .. "large_cactus.mts", + flags = "place_center_x", --, place_center_z", + rotation = "random", +}) +end + +-- palm tree +add_schem({"default:sand"}, 0.0025, {"desert_ocean"}, 1, 1, ethereal.palmtree, ethereal.desert) +add_schem({"default:sand"}, 0.0025, {"plains_ocean"}, 1, 1, ethereal.palmtree, ethereal.plains) +add_schem({"default:sand"}, 0.0025, {"sandclay"}, 1, 1, ethereal.palmtree, ethereal.sandclay) +add_schem({"default:sand"}, 0.0025, {"sandstone_ocean"}, 1, 1, ethereal.palmtree, ethereal.sandstone) +add_schem({"default:sand"}, 0.0025, {"mesa_ocean"}, 1, 1, ethereal.palmtree, ethereal.mesa) +add_schem({"default:sand"}, 0.0025, {"grove_ocean"}, 1, 1, ethereal.palmtree, ethereal.grove) +add_schem({"default:sand"}, 0.0025, {"grassy_ocean"}, 1, 1, ethereal.palmtree, ethereal.grassy) + +-- bamboo tree +add_schem({"ethereal:bamboo_dirt"}, 0.025, {"bamboo"}, 1, 100, ethereal.bambootree, ethereal.bamboo) + +-- bush +add_schem({"ethereal:bamboo_dirt"}, 0.08, {"bamboo"}, 1, 100, ethereal.bush, ethereal.bamboo) + +-- vine tree +add_schem({"default:dirt_with_grass"}, 0.02, {"swamp"}, 1, 100, ethereal.vinetree, ethereal.swamp) + +-- water pools in swamp areas if 5.0 detected +if minetest.registered_nodes["default:permafrost"] then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + place_offset_y = -1, + sidelen = 16, + fill_ratio = 0.01, + biomes = {"swamp"}, + y_max = 2, + y_min = 1, + flags = "force_placement", + decoration = "default:water_source", + spawn_by = "default:dirt_with_grass", + num_spawn_by = 8, +}) +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass"}, + place_offset_y = -1, + sidelen = 16, + fill_ratio = 0.1, + biomes = {"swamp"}, + y_max = 2, + y_min = 1, + flags = "force_placement", + decoration = "default:water_source", + spawn_by = {"default:dirt_with_grass", "default:water_source"}, + num_spawn_by = 8, +}) +end + +if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 4, + noise_params = { + offset = -1.5, + scale = -1.5, + spread = {x = 200, y = 200, z = 200}, + seed = 329, + octaves = 4, + persist = 1.0 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "default:dry_dirt", + place_offset_y = -1, + flags = "force_placement", + }) +end + +-- bush +minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_grass", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"grassy", "grassytwo", "jumble"}, + y_min = 1, + y_max = 31000, + schematic = dpath .. "bush.mts", + flags = "place_center_x, place_center_z", +}) + +-- Acacia bush +minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:dirt_with_dry_grass", "default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 90155, + octaves = 3, + persist = 0.7, + }, + biomes = {"savanna", "mesa"}, + y_min = 1, + y_max = 31000, + schematic = dpath .. "acacia_bush.mts", + flags = "place_center_x, place_center_z", +}) + +-- Pine bush +if minetest.registered_nodes["default:pine_bush"] then + minetest.register_decoration({ + name = "default:pine_bush", + deco_type = "schematic", + place_on = {"default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 137, + octaves = 3, + persist = 0.7, + }, + biomes = {"alpine"}, + y_max = 31000, + y_min = 4, + schematic = dpath .. "pine_bush.mts", + flags = "place_center_x, place_center_z", + }) +end + +--= simple decorations + +local add_node = function(a, b, c, d, e, f, g, h, i, j) + + if j ~= 1 then return end + + minetest.register_decoration({ + deco_type = "simple", + place_on = a, + sidelen = 80, + fill_ratio = b, + biomes = c, + y_min = d, + y_max = e, + decoration = f, + height_max = g, + spawn_by = h, + num_spawn_by = i, + }) +end + +--firethorn shrub +add_node({"default:snowblock"}, 0.001, {"glacier"}, 1, 30, {"ethereal:firethorn"}, nil, nil, nil, ethereal.glacier) + +-- scorched tree +add_node({"ethereal:dry_dirt"}, 0.006, {"plains"}, 1, 100, {"ethereal:scorched_tree"}, 6, nil, nil, ethereal.plains) + +-- dry shrub +add_node({"ethereal:dry_dirt"}, 0.015, {"plains"}, 1, 100, {"default:dry_shrub"}, nil, nil, nil, ethereal.plains) +add_node({"default:sand"}, 0.015, {"grassy_ocean"}, 1, 100, {"default:dry_shrub"}, nil, nil, nil, ethereal.grassy) +add_node({"default:desert_sand"}, 0.015, {"desert"}, 1, 100, {"default:dry_shrub"}, nil, nil, nil, ethereal.desert) +add_node({"default:sandstone"}, 0.015, {"sandstone"}, 1, 100, {"default:dry_shrub"}, nil, nil, nil, ethereal.sandstone) +add_node({"bakedclay:red", "bakedclay:orange"}, 0.015, {"mesa"}, 1, 100, {"default:dry_shrub"}, nil, nil, nil, ethereal.mesa) + +-- dry grass +if minetest.registered_nodes["default:dry_dirt_with_dry_grass"] then + add_node({"default:dry_dirt_with_dry_grass"}, 0.25, {"savanna"}, 1, 100, + {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4", + "default:dry_grass_5"}, nil, nil, nil, ethereal.savanna) +else + add_node({"default:dirt_with_dry_grass"}, 0.25, {"savanna"}, 1, 100, + {"default:dry_grass_2", "default:dry_grass_3", "default:dry_grass_4", + "default:dry_grass_5"}, nil, nil, nil, ethereal.savanna) +end + +add_node({"default:dirt_with_dry_grass"}, 0.10, {"mesa"}, 1, 100, {"default:dry_grass_2", + "default:dry_grass_3", "default:dry_grass_4", "default:dry_grass_5"}, nil, nil, nil, ethereal.mesa) +add_node({"default:desert_stone"}, 0.005, {"caves"}, 5, 40, {"default:dry_grass_2", + "default:dry_grass_3", "default:dry_shrub"}, nil, nil, nil, ethereal.caves) + +-- flowers & strawberry +add_node({"default:dirt_with_grass"}, 0.025, {"grassy"}, 1, 100, {"flowers:dandelion_white", + "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", + "flowers:viola", "ethereal:strawberry_7"}, nil, nil, nil, ethereal.grassy) +add_node({"default:dirt_with_grass"}, 0.025, {"grassytwo"}, 1, 100, {"flowers:dandelion_white", + "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", + "flowers:viola", "ethereal:strawberry_7"}, nil, nil, nil, ethereal.grassytwo) + +-- prairie flowers & strawberry +add_node({"ethereal:prairie_dirt"}, 0.035, {"prairie"}, 1, 100, {"flowers:dandelion_white", + "flowers:dandelion_yellow", "flowers:geranium", "flowers:rose", "flowers:tulip", + "flowers:viola", "ethereal:strawberry_7", "flowers:chrysanthemum_green", "flowers:tulip_black"}, nil, nil, nil, ethereal.prairie) + +-- crystal spike & crystal grass +add_node({"ethereal:crystal_dirt"}, 0.02, {"frost"}, 1, 100, {"ethereal:crystal_spike", + "ethereal:crystalgrass"}, nil, nil, nil, ethereal.frost) + +-- red shrub +add_node({"ethereal:fiery_dirt"}, 0.10, {"fiery"}, 1, 100, {"ethereal:dry_shrub"}, nil, nil, nil, ethereal.fiery) + +-- fire flower +--add_node({"ethereal:fiery_dirt"}, 0.02, {"fiery"}, 1, 100, {"ethereal:fire_flower"}, nil, nil, nil, ethereal.fiery) + +-- snowy grass +add_node({"ethereal:gray_dirt"}, 0.05, {"grayness"}, 1, 100, {"ethereal:snowygrass"}, nil, nil, nil, ethereal.grayness) +add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, 0.05, {"snowy"}, 1, 100, {"ethereal:snowygrass"}, nil, nil, nil, ethereal.snowy) + +-- cactus +add_node({"default:sandstone"}, 0.0025, {"sandstone"}, 1, 100, {"default:cactus"}, 3, nil, nil, ethereal.sandstone) +add_node({"default:desert_sand"}, 0.005, {"desert"}, 1, 100, {"default:cactus"}, 4, nil, nil, ethereal.desert) + +-- wild red mushroom +add_node({"ethereal:mushroom_dirt"}, 0.01, {"mushroom"}, 1, 100, {"flowers:mushroom_fertile_red"}, nil, nil, nil, ethereal.mushroom) + +local list = { + {"junglee", {"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, ethereal.junglee}, + {"grassy", {"default:dirt_with_grass"}, ethereal.grassy}, + {"grassytwo", {"default:dirt_with_grass"}, ethereal.grassytwo}, + {"prairie", {"ethereal:prairie_dirt"}, ethereal.prairie}, + {"mushroom", {"ethereal:mushroom_dirt"}, ethereal.mushroom}, + {"swamp", {"default:dirt_with_grass"}, ethereal.swamp}, +} + +-- wild red and brown mushrooms +for _, row in pairs(list) do + +if row[3] == 1 then +minetest.register_decoration({ + deco_type = "simple", + place_on = row[2], + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.009, + spread = {x = 200, y = 200, z = 200}, + seed = 2, + octaves = 3, + persist = 0.66 + }, + biomes = {row[1]}, + y_min = 1, + y_max = 120, + decoration = {"flowers:mushroom_brown", "flowers:mushroom_red"}, +}) +end + +end + +-- jungle grass +add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, 0.10, {"junglee"}, 1, 100, {"default:junglegrass"}, nil, nil, nil, ethereal.junglee) +add_node({"default:dirt_with_grass"}, 0.15, {"jumble"}, 1, 100, {"default:junglegrass"}, nil, nil, nil, ethereal.jumble) +add_node({"default:dirt_with_grass"}, 0.25, {"swamp"}, 1, 100, {"default:junglegrass"}, nil, nil, nil, ethereal.swamp) + +-- grass +add_node({"default:dirt_with_grass"}, 0.35, {"grassy"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.grassy) +add_node({"default:dirt_with_grass"}, 0.35, {"grassytwo"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.grassytwo) +add_node({"default:dirt_with_grass"}, 0.35, {"jumble"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.jumble) +add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, 0.35, {"junglee"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.junglee) +add_node({"ethereal:prairie_dirt"}, 0.35, {"prairie"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.prairie) +add_node({"ethereal:grove_dirt"}, 0.35, {"grove"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.grove) +add_node({"ethereal:bamboo_dirt"}, 0.35, {"bamboo"}, 1, 100, {"default:grass_2", "default:grass_3", + "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.bamboo) +add_node({"default:dirt_with_grass"}, 0.35, {"clearing", "swamp"}, 1, 100, {"default:grass_3", + "default:grass_4"}, nil, nil, nil, 1) +add_node({"ethereal:bamboo_dirt"}, 0.35, {"sakura"}, 1, 100, {"default:grass_2", "default:grass_3", "default:grass_4", "default:grass_5"}, nil, nil, nil, ethereal.sakura) + +-- grass on sand (and maybe blueberry bush) +if minetest.registered_nodes["default:marram_grass_1"] then + +add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:marram_grass_1", + "default:marram_grass_2", "default:marram_grass_3"}, nil, nil, nil, ethereal.sandclay) + +-- Blueberry bush +minetest.register_decoration({ + name = "default:blueberry_bush", + deco_type = "schematic", + place_on = {"default:dirt_with_coniferous_litter", "default:dirt_with_snow"}, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 697, + octaves = 3, + persist = 0.7, + }, + biomes = {"snowy", "alpine"}, + y_max = 31000, + y_min = 1, + place_offset_y = 1, + schematic = dpath .. "blueberry_bush.mts", + flags = "place_center_x, place_center_z", +}) +else +add_node({"default:sand"}, 0.25, {"sandclay"}, 3, 4, {"default:grass_2", "default:grass_3"}, nil, nil, nil, ethereal.sandclay) +end + +-- ferns +add_node({"ethereal:grove_dirt"}, 0.2, {"grove"}, 1, 100, {"ethereal:fern"}, nil, nil, nil, ethereal.grove) +add_node({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 100, {"ethereal:fern"}, nil, nil, nil, ethereal.swamp) + +-- snow +add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, 0.8, {"snowy"}, 4, 40, {"default:snow"}, nil, nil, nil, ethereal.snowy) +add_node({"default:dirt_with_snow"}, 0.8, {"alpine"}, 40, 140, {"default:snow"}, nil, nil, nil, ethereal.alpine) + +-- wild onion +add_node({"default:dirt_with_grass"}, 0.25, {"grassy"}, 1, 100, {"ethereal:onion_4"}, nil, nil, nil, ethereal.grassy) +add_node({"default:dirt_with_grass"}, 0.25, {"grassytwo"}, 1, 100, {"ethereal:onion_4"}, nil, nil, nil, ethereal.grassytwo) +add_node({"default:dirt_with_grass"}, 0.25, {"jumble"}, 1, 100, {"ethereal:onion_4"}, nil, nil, nil, ethereal.jumble) +add_node({"ethereal:prairie_dirt"}, 0.25, {"prairie"}, 1, 100, {"ethereal:onion_4"}, nil, nil, nil, ethereal.prairie) + +-- papyrus +add_node({"default:dirt_with_grass"}, 0.1, {"grassy"}, 1, 1, {"default:papyrus"}, 4, "default:water_source", 1, ethereal.grassy) +add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, 0.1, {"junglee"}, 1, 1, {"default:papyrus"}, 4, "default:water_source", 1, ethereal.junglee) +add_node({"default:dirt_with_grass"}, 0.1, {"swamp"}, 1, 1, {"default:papyrus"}, 4, "default:water_source", 1, ethereal.swamp) + +--= Farming Redo plants + +if farming and farming.mod and farming.mod == "redo" then + +print ("[MOD] Ethereal - Farming Redo detected and in use") + +-- potato +add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, 0.035, {"junglee"}, 1, 100, {"farming:potato_3"}, nil, nil, nil, ethereal.junglee) + +-- carrot, cucumber, potato, tomato, corn, coffee, raspberry, rhubarb +add_node({"default:dirt_with_grass"}, 0.05, {"grassytwo"}, 1, 100, {"farming:carrot_7", "farming:cucumber_4", + "farming:potato_3", "farming:tomato_7", "farming:corn_8", "farming:coffee_5", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4"}, nil, nil, nil, ethereal.grassytwo) +add_node({"default:dirt_with_grass"}, 0.05, {"grassy"}, 1, 100, {"farming:carrot_7", "farming:cucumber_4", + "farming:potato_3", "farming:tomato_7", "farming:corn_8", "farming:coffee_5", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4", + "farming:beetroot_5"}, nil, nil, nil, ethereal.grassy) +add_node({"default:dirt_with_grass"}, 0.05, {"jumble"}, 1, 100, {"farming:carrot_7", "farming:cucumber_4", + "farming:potato_3", "farming:tomato_7", "farming:corn_8", "farming:coffee_5", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4"}, nil, nil, nil, ethereal.jumble) +add_node({"ethereal:prairie_dirt"}, 0.05, {"prairie"}, 1, 100, {"farming:carrot_7", "farming:cucumber_4", + "farming:potato_3", "farming:tomato_7", "farming:corn_8", "farming:coffee_5", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4", + "farming:pea_5", "farming:beetroot_5"}, nil, nil, nil, ethereal.prairie) + +-- melon and pumpkin +add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, 0.015, {"junglee"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", 1, ethereal.junglee) +add_node({"default:dirt_with_grass"}, 0.015, {"grassy"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", 1, ethereal.grassy) +add_node({"default:dirt_with_grass"}, 0.015, {"grassytwo"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", 1, ethereal.grassytwo) +add_node({"default:dirt_with_grass"}, 0.015, {"jumble"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", 1, ethereal.jumble) + +-- green beans +add_node({"default:dirt_with_grass"}, 0.035, {"grassytwo"}, 1, 100, {"farming:beanbush"}, nil, nil, nil, ethereal.grassytwo) + +-- grape bushel +add_node({"default:dirt_with_grass"}, 0.025, {"grassytwo"}, 1, 100, {"farming:grapebush"}, nil, nil, nil, ethereal.grassytwo) +add_node({"default:dirt_with_grass"}, 0.025, {"grassy"}, 1, 100, {"farming:grapebush"}, nil, nil, nil, ethereal.grassy) +add_node({"ethereal:prairie_dirt"}, 0.025, {"prairie"}, 1, 100, {"farming:grapebush"}, nil, nil, nil, ethereal.prairie) + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:dirt_with_grass", "ethereal:prairie_dirt", + "default:dirt_with_rainforest_litter", + }, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 420, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = "farming:hemp_7", + spawn_by = "group:tree", + num_spawn_by = 1, +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.09, + spread = {x = 100, y = 100, z = 100}, + seed = 760, + octaves = 3, + persist = 0.6 + }, + y_min = 5, + y_max = 35, + decoration = {"farming:chili_8", "farming:garlic_5", "farming:pepper_5", "farming:onion_5"}, + spawn_by = "group:tree", + num_spawn_by = 1, +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.06, + spread = {x = 100, y = 100, z = 100}, + seed = 917, + octaves = 3, + persist = 0.6 + }, + y_min = 18, + y_max = 30, + decoration = {"farming:pineapple_8"}, +}) +end + +-- place waterlily in beach areas +local list = { + {"desert_ocean", ethereal.desert}, + {"plains_ocean", ethereal.plains}, + {"sandclay", ethereal.sandclay}, + {"sandstone_ocean", ethereal.sandstone}, + {"mesa_ocean", ethereal.mesa}, + {"grove_ocean", ethereal.grove}, + {"grassy_ocean", ethereal.grassy}, + {"swamp_ocean", ethereal.swamp}, +} + +for _, row in pairs(list) do + + if row[2] == 1 then + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:sand"}, + sidelen = 16, + noise_params = { + offset = -0.12, + scale = 0.3, + spread = {x = 200, y = 200, z = 200}, + seed = 33, + octaves = 3, + persist = 0.7 + }, + biomes = {row[1]}, + y_min = 0, + y_max = 0, + schematic = ethereal.waterlily, + rotation = "random", + }) + + end + +end + +local random = math.random + +-- Generate Illumishroom in caves next to coal +minetest.register_on_generated(function(minp, maxp) + + if minp.y > -30 or maxp.y < -3000 then + return + end + + local bpos + local coal = minetest.find_nodes_in_area_under_air( + minp, maxp, "default:stone_with_coal") + + for n = 1, #coal do + + if random(1, 2) == 1 then + + bpos = {x = coal[n].x, y = coal[n].y + 1, z = coal[n].z } + + if bpos.y > -3000 and bpos.y < -2000 then + minetest.swap_node(bpos, {name = "ethereal:illumishroom3"}) + + elseif bpos.y > -2000 and bpos.y < -1000 then + minetest.swap_node(bpos, {name = "ethereal:illumishroom2"}) + + elseif bpos.y > -1000 and bpos.y < -30 then + minetest.swap_node(bpos, {name = "ethereal:illumishroom"}) + end + end + end +end) + +-- coral reef (0.4.15 only) +if ethereal.reefs == 1 then + +-- override corals so crystal shovel can pick them up intact +minetest.override_item("default:coral_skeleton", {groups = {crumbly = 3}}) +minetest.override_item("default:coral_orange", {groups = {crumbly = 3}}) +minetest.override_item("default:coral_brown", {groups = {crumbly = 3}}) + + minetest.register_decoration({ + deco_type = "schematic", + place_on = {"default:sand"}, + noise_params = { + offset = -0.15, + scale = 0.1, + spread = {x = 100, y = 100, z = 100}, + seed = 7013, + octaves = 3, + persist = 1, + }, + biomes = { + "desert_ocean", + "grove_ocean", + }, + y_min = -8, + y_max = -2, + schematic = path .. "corals.mts", + flags = "place_center_x, place_center_z", + rotation = "random", + }) +end + + +-- is baked clay mod active? add new flowers if so +if minetest.get_modpath("bakedclay") then + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt" + }, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.004, + spread = {x = 100, y = 100, z = 100}, + seed = 7133, + octaves = 3, + persist = 0.6 + }, + y_min = 10, + y_max = 90, + decoration = "bakedclay:delphinium", +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt", "ethereal:bamboo_dirt" + }, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.004, + spread = {x = 100, y = 100, z = 100}, + seed = 7134, + octaves = 3, + persist = 0.6 + }, + y_min = 15, + y_max = 90, + decoration = "bakedclay:thistle", +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.01, + spread = {x = 100, y = 100, z = 100}, + seed = 7135, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 90, + decoration = "bakedclay:lazarus", + spawn_by = "default:jungletree", + num_spawn_by = 1, +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:dirt_with_grass", "default:sand"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.009, + spread = {x = 100, y = 100, z = 100}, + seed = 7136, + octaves = 3, + persist = 0.6 + }, + y_min = 1, + y_max = 15, + decoration = "bakedclay:mannagrass", + spawn_by = "group:water", + num_spawn_by = 1, +}) + +end + +if ethereal.desert and minetest.get_modpath("wine") then +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand"}, + sidelen = 16, + fill_ratio = 0.001, + biomes = {"desert"}, + decoration = {"wine:blue_agave"}, +}) +end + +if ethereal.snowy and minetest.registered_nodes["default:fern_1"] then +local function register_fern_decoration(seed, length) + minetest.register_decoration({ + name = "default:fern_" .. length, + deco_type = "simple", + place_on = { + "ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.2, + spread = {x = 100, y = 100, z = 100}, + seed = seed, + octaves = 3, + persist = 0.7 + }, + y_max = 31000, + y_min = 6, + decoration = "default:fern_" .. length, + }) +end + +register_fern_decoration(14936, 3) +register_fern_decoration(801, 2) +register_fern_decoration(5, 1) +end + +if ethereal.tundra and minetest.registered_nodes["default:permafrost"] then + minetest.register_biome({ + name = "tundra_highland", + node_dust = "default:snow", + node_riverbed = "default:gravel", + depth_riverbed = 2, + y_max = 180, + y_min = 47, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra", + node_top = "default:permafrost_with_stones", + depth_top = 1, + node_filler = "default:permafrost", + depth_filler = 1, + node_riverbed = "default:gravel", + depth_riverbed = 2, + vertical_blend = 4, + y_max = 46, + y_min = 2, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_beach", + node_top = "default:gravel", + depth_top = 1, + node_filler = "default:gravel", + depth_filler = 2, + node_riverbed = "default:gravel", + depth_riverbed = 2, + vertical_blend = 1, + y_max = 1, + y_min = -3, + heat_point = 0, + humidity_point = 40, + }) + + minetest.register_biome({ + name = "tundra_ocean", + node_top = "default:sand", + depth_top = 1, + node_filler = "default:sand", + depth_filler = 3, + node_riverbed = "default:gravel", + depth_riverbed = 2, + vertical_blend = 1, + y_max = -4, + y_min = -112, + heat_point = 0, + humidity_point = 40, + }) + + -- Tundra moss + + minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:permafrost_with_stones"}, + sidelen = 4, + noise_params = { + offset = -0.8, + scale = 2.0, + spread = {x = 100, y = 100, z = 100}, + seed = 53995, + octaves = 3, + persist = 1.0 + }, + biomes = {"tundra"}, + y_max = 50, + y_min = 2, + decoration = "default:permafrost_with_moss", + place_offset_y = -1, + flags = "force_placement", + }) + + -- Tundra patchy snow + + minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:permafrost_with_moss", + "default:permafrost_with_stones", + "default:stone", + "default:gravel" + }, + sidelen = 4, + noise_params = { + offset = 0, + scale = 1.0, + spread = {x = 100, y = 100, z = 100}, + seed = 172555, + octaves = 3, + persist = 1.0 + }, + biomes = {"tundra", "tundra_beach"}, + y_max = 50, + y_min = 1, + decoration = "default:snow", + }) +end + +if minetest.get_modpath("butterflies") then +minetest.register_decoration({ + name = "butterflies:butterfly", + deco_type = "simple", + place_on = {"default:dirt_with_grass", "ethereal:prairie_dirt"}, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.005, + biomes = {"grassy", "grassytwo", "prairie", "jumble"}, + y_max = 31000, + y_min = 1, + decoration = { + "butterflies:butterfly_white", + "butterflies:butterfly_red", + "butterflies:butterfly_violet" + }, + spawn_by = "group:flower", + num_spawn_by = 1 +}) +end + +if minetest.get_modpath("fireflies") then + minetest.register_decoration({ + name = "fireflies:firefly_low", + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + "default:dirt_with_coniferous_litter", + "default:dirt_with_rainforest_litter", + "default:dirt", + "ethereal:cold_dirt", + }, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.0005, + biomes = {"grassy", "grassytwo", "snowy", "junglee", "swamp"}, + y_max = 31000, + y_min = -1, + decoration = "fireflies:hidden_firefly", + }) +end + +-- Coral Reef (Minetest 5.0) +if minetest.registered_nodes["default:coral_green"] then + minetest.register_decoration({ + name = "default:corals", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 4, + noise_params = { + offset = -4, + scale = 4, + spread = {x = 50, y = 50, z = 50}, + seed = 7013, + octaves = 3, + persist = 0.7, + }, + biomes = { + "desert_ocean", + "savanna_ocean", + "junglee_ocean", + }, + y_max = -2, + y_min = -8, + flags = "force_placement", + decoration = { + "default:coral_green", "default:coral_pink", + "default:coral_cyan", "default:coral_brown", + "default:coral_orange", "default:coral_skeleton", + }, + }) + + -- Kelp + + minetest.register_decoration({ + name = "default:kelp", + deco_type = "simple", + place_on = {"default:sand"}, + place_offset_y = -1, + sidelen = 16, + noise_params = { + offset = -0.04, + scale = 0.1, + spread = {x = 200, y = 200, z = 200}, + seed = 87112, + octaves = 3, + persist = 0.7 + }, + biomes = { + "frost_ocean", "grassy_ocean", "sandstone_ocean", "swamp_ocean"}, + y_max = -5, + y_min = -10, + flags = "force_placement", + decoration = "default:sand_with_kelp", + param2 = 48, + param2_max = 96, + }) +end diff --git a/mods_disabled/ethereal/mod.conf b/mods_disabled/ethereal/mod.conf new file mode 100644 index 0000000..e001f90 --- /dev/null +++ b/mods_disabled/ethereal/mod.conf @@ -0,0 +1 @@ +name = ethereal \ No newline at end of file diff --git a/mods_disabled/ethereal/mushroom.lua b/mods_disabled/ethereal/mushroom.lua new file mode 100644 index 0000000..f89b2e8 --- /dev/null +++ b/mods_disabled/ethereal/mushroom.lua @@ -0,0 +1,27 @@ + +local S = ethereal.intllib + +-- mushroom soup (Heals 1 heart) +minetest.register_craftitem("ethereal:mushroom_soup", { + description = S("Mushroom Soup"), + inventory_image = "mushroom_soup.png", + on_use = minetest.item_eat(5, "ethereal:bowl"), +}) + +minetest.register_craft({ + output = "ethereal:mushroom_soup", + recipe = { + {"flowers:mushroom_brown"}, + {"flowers:mushroom_brown"}, + {"group:food_bowl"}, + } +}) + +-- 4x red mushrooms make mushroom block +minetest.register_craft({ + output = "ethereal:mushroom", + recipe = { + {"flowers:mushroom_red", "flowers:mushroom_red"}, + {"flowers:mushroom_red", "flowers:mushroom_red"}, + } +}) \ No newline at end of file diff --git a/mods_disabled/ethereal/onion.lua b/mods_disabled/ethereal/onion.lua new file mode 100644 index 0000000..69671c3 --- /dev/null +++ b/mods_disabled/ethereal/onion.lua @@ -0,0 +1,104 @@ + +local S = ethereal.intllib + +-- wild onion +minetest.register_craftitem("ethereal:wild_onion_plant", { + description = S("Wild Onion"), + inventory_image = "wild_onion.png", + wield_image = "wild_onion.png", + groups = {food_onion = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:wild_onion_1") + end, + on_use = minetest.item_eat(2), +}) + +-- Define Onion growth stages +local crop_def = { + drawtype = "plantlike", + tiles = {"ethereal_wild_onion_1.png"}, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + buildable_to = true, + drop = "", + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} + }, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + growing = 1, not_in_creative_inventory = 1 + }, + sounds = default.node_sound_leaves_defaults(), +} + +--stage 1 +minetest.register_node("ethereal:onion_1", table.copy(crop_def)) + +--stage 2 +crop_def.tiles = {"ethereal_wild_onion_2.png"} +minetest.register_node("ethereal:onion_2", table.copy(crop_def)) + +--stage 3 +crop_def.tiles = {"ethereal_wild_onion_3.png"} +minetest.register_node("ethereal:onion_3", table.copy(crop_def)) + +--stage 4 +crop_def.tiles = {"ethereal_wild_onion_4.png"} +crop_def.drop = { + items = { + {items = {"ethereal:wild_onion_plant"}, rarity = 1}, + {items = {"ethereal:wild_onion_plant 2"}, rarity = 3}, + } +} +minetest.register_node("ethereal:onion_4", table.copy(crop_def)) + +--stage 5 +crop_def.tiles = {"ethereal_wild_onion_5.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {"ethereal:wild_onion_plant 2"}, rarity = 1}, + {items = {"ethereal:wild_onion_plant 3"}, rarity = 2}, + } +} +minetest.register_node("ethereal:onion_5", table.copy(crop_def)) + +-- growing routine if farming redo isn't present +if not farming or not farming.mod or farming.mod ~= "redo" then + +minetest.register_abm({ + label = "Ethereal grow onion", + nodenames = {"ethereal:onion_1", "ethereal:onion_2", "ethereal:onion_3", "ethereal:onion_4"}, + neighbors = {"farming:soil_wet"}, + interval = 9, + chance = 20, + catch_up = false, + action = function(pos, node) + + -- are we on wet soil? + pos.y = pos.y - 1 + if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then + return + end + pos.y = pos.y + 1 + + -- do we have enough light? + local light = minetest.get_node_light(pos) + + if not light + or light < 13 then + return + end + + -- grow to next stage + local num = node.name:split("_")[2] + + node.name = "ethereal:onion_" .. tonumber(num + 1) + + minetest.swap_node(pos, node) + end +}) + +end -- END IF diff --git a/mods_disabled/ethereal/ores.lua b/mods_disabled/ethereal/ores.lua new file mode 100644 index 0000000..27daa3f --- /dev/null +++ b/mods_disabled/ethereal/ores.lua @@ -0,0 +1,91 @@ + +-- Baked Clay + +minetest.register_ore({ + ore_type = "blob", + ore = "bakedclay:red", + wherein = {"bakedclay:orange"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.5 + }, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "bakedclay:grey", + wherein = {"bakedclay:orange"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -613, + octaves = 1, + persist = 0.5 + }, +}) + +local add_ore = function(a, b, c, d, e, f, g) + + minetest.register_ore({ + ore_type = "scatter", + ore = a, + wherein = b, + clust_scarcity = c, + clust_num_ores = d, + clust_size = e, + y_min = f, + y_max = g, + }) +end + +-- Coal +add_ore("default:stone_with_coal", "default:desert_stone", 24*24*24, 27, 6, -31000, -16) + +-- Iron +add_ore("default:stone_with_iron", "default:desert_stone", 9*9*9, 5, 3, -63, -16) +add_ore("default:stone_with_iron", "default:desert_stone", 24*24*24, 27, 6, -31000, -64) + +--Mese +add_ore("default:stone_with_mese", "default:desert_stone", 14*14*14, 5, 3, -31000, -256) + +-- Gold +add_ore("default:stone_with_gold", "default:desert_stone", 15*15*15, 3, 2, -255, -64) +add_ore("default:stone_with_gold", "default:desert_stone", 13*13*13, 5, 3, -31000, -256) + +-- Diamond +add_ore("default:stone_with_diamond", "default:desert_stone", 17*17*17, 4, 3, -255, -128) +add_ore("default:stone_with_diamond", "default:desert_stone", 15*15*15, 4, 3, -31000, -256) + +-- Copper +add_ore("default:stone_with_copper", "default:desert_stone", 9*9*9, 5, 3, -31000, -64) + +-- Coral Sand +add_ore("ethereal:sandy", "default:sand", 10*10*10, 24, 4, -100, -10) + +-- Etherium +minetest.register_ore({ + ore_type = "scatter", + ore = "ethereal:etherium_ore", + wherein = "default:desert_stone", + clust_scarcity = 10*10*10, + clust_num_ores = 1, + clust_size = 1, + y_min = 5, + y_max = 40, + biomes = {"caves"}, +}) diff --git a/mods_disabled/ethereal/plantlife.lua b/mods_disabled/ethereal/plantlife.lua new file mode 100644 index 0000000..eb989f3 --- /dev/null +++ b/mods_disabled/ethereal/plantlife.lua @@ -0,0 +1,312 @@ + +local S = ethereal.intllib + +-- Firethorn (poisonous when eaten raw, must be crushed and washed in flowing water 1st) +minetest.register_node("ethereal:firethorn", { + description = S("Firethorn Shrub"), + drawtype = "plantlike", + tiles = {"ethereal_firethorn.png"}, + inventory_image = "ethereal_firethorn.png", + wield_image = "ethereal_firethorn.png", + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}, + }, +}) + +-- Fire Flower +minetest.register_node("ethereal:fire_flower", { + description = S("Fire Flower"), + drawtype = "plantlike", + tiles = { "ethereal_fire_flower.png" }, + inventory_image = "ethereal_fire_flower.png", + wield_image = "ethereal_fire_flower.png", + paramtype = "light", + light_source = 5, + sunlight_propagates = true, + walkable = false, + buildable_to = true, + damage_per_second = 2, + groups = {snappy = 1, oddly_breakable_by_hand = 3, igniter = 2}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 1 / 2, 5 / 16}, + }, + + on_punch = function(pos, node, puncher) + + puncher:punch(puncher, 1.0, { + full_punch_interval = 1.0, + damage_groups = {fleshy = 2} + }, nil) + end, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:fire_flower", + burntime = 20, +}) + +-- Fire Dust +minetest.register_craftitem("ethereal:fire_dust", { + description = S("Fire Dust"), + inventory_image = "fire_dust.png", +}) + +minetest.register_craft({ + output = "ethereal:fire_dust 2", + recipe = { + {"ethereal:fire_flower"}, + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:fire_dust", + burntime = 10, +}) + +-- vines +minetest.register_node("ethereal:vine", { + description = S("Vine"), + drawtype = "signlike", + tiles = {"vine.png"}, + inventory_image = "vine.png", + wield_image = "vine.png", + paramtype = "light", + paramtype2 = "wallmounted", + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + }, + groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2}, + legacy_wallmounted = true, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:vine 2", + recipe = { + {"group:leaves", "", "group:leaves"}, + {"", "group:leaves", ""}, + {"group:leaves", "", "group:leaves"}, + } +}) + +-- light strings (glowing vine) +minetest.register_node("ethereal:lightstring", { + description = S("Light String Vine"), + drawtype = "signlike", + tiles = {"lightstring.png"}, + inventory_image = "lightstring.png", + wield_image = "lightstring.png", + paramtype = "light", + paramtype2 = "wallmounted", + light_source = 10, + walkable = false, + climbable = true, + is_ground_content = false, + selection_box = { + type = "wallmounted", + }, + groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2}, + legacy_wallmounted = true, + sounds = default.node_sound_leaves_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:lightstring 8", + recipe = { + {"ethereal:vine", "ethereal:vine", "ethereal:vine"}, + {"ethereal:vine", "ethereal:fire_dust", "ethereal:vine"}, + {"ethereal:vine", "ethereal:vine", "ethereal:vine"}, + }, +}) + +-- Fern (boston) +minetest.register_node("ethereal:fern", { + description = S("Fern"), + drawtype = "plantlike", + visual_scale = 1.4, + tiles = {"fern.png"}, + inventory_image = "fern.png", + wield_image = "fern.png", + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = { + max_items = 1, + items = { + {items = {"ethereal:fern_tubers"}, rarity = 6}, + {items = {"ethereal:fern"}} + } + }, + groups = {snappy = 3, flora = 1, attached_node = 1, flammable = 2}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 0.67, 5 / 16}, + }, +}) + +-- Boston Ferns sometimes drop edible Tubers (heals 1/2 heart when eaten) +minetest.register_craftitem("ethereal:fern_tubers", { + description = S("Fern Tubers"), + inventory_image = "fern_tubers.png", + groups = {food_tuber = 1, flammable = 2}, + on_use = minetest.item_eat(1), +}) + +-- Red Shrub (not flammable) +minetest.register_node("ethereal:dry_shrub", { + description = S("Fiery Dry Shrub"), + drawtype = "plantlike", + tiles = {"ethereal_dry_shrub.png"}, + inventory_image = "ethereal_dry_shrub.png", + wield_image = "ethereal_dry_shrub.png", + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 4 / 16, 5 / 16}, + }, +}) + +-- Grey Shrub (not Flammable - too cold to burn) +minetest.register_node("ethereal:snowygrass", { + description = S("Snowy Grass"), + drawtype = "plantlike", + visual_scale = 0.9, + tiles = {"ethereal_snowygrass.png"}, + inventory_image = "ethereal_snowygrass.png", + wield_image = "ethereal_snowygrass.png", + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 5 / 16, 5 / 16}, + }, +}) + +-- Crystal Shrub (not Flammable - too cold to burn) +minetest.register_node("ethereal:crystalgrass", { + description = S("Crystal Grass"), + drawtype = "plantlike", + visual_scale = 0.9, + tiles = {"ethereal_crystalgrass.png"}, + inventory_image = "ethereal_crystalgrass.png", + wield_image = "ethereal_crystalgrass.png", + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + groups = {snappy = 3, flora = 1, attached_node = 1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-5 / 16, -0.5, -5 / 16, 5 / 16, 5 / 16, 5 / 16}, + }, +}) + +-- Define Moss Types (Has grass textures on all sides) +local add_moss = function(typ, descr, texture, receipe_item) + + minetest.register_node("ethereal:" .. typ .. "_moss", { + description = S(descr .. " Moss"), + tiles = {texture}, + groups = {crumbly = 3}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_grass_footstep", gain = 0.4}}) + }) + + minetest.register_craft({ + type = "shapeless", + output = "ethereal:"..typ.."_moss", + recipe = {"default:dirt", receipe_item } + }) +end + +add_moss( "crystal", "Crystal", "ethereal_grass_crystal_top.png", "ethereal:frost_leaves") +add_moss( "mushroom", "Mushroom", "ethereal_grass_mushroom_top.png", "ethereal:mushroom") +add_moss( "fiery", "Fiery", "ethereal_grass_fiery_top.png", "ethereal:dry_shrub") +add_moss( "gray", "Gray", "ethereal_grass_gray_top.png", "ethereal:snowygrass") +add_moss( "green", "Green", "default_grass.png", "default:jungleleaves") + +-- Illuminated Cave Shrooms (Red, Green and Blue) +minetest.register_node("ethereal:illumishroom", { + description = S("Red Illumishroom"), + drawtype = "plantlike", + tiles = { "illumishroom.png" }, + inventory_image = "illumishroom.png", + wield_image = "illumishroom.png", + paramtype = "light", + light_source = 5, + sunlight_propagates = true, + walkable = false, + groups = {dig_immediate = 3, attached_node = 1, flammable = 3}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.47, 6 / 16}, + }, +}) + +minetest.register_node("ethereal:illumishroom2", { + description = S("Green Illumishroom"), + drawtype = "plantlike", + tiles = { "illumishroom2.png" }, + inventory_image = "illumishroom2.png", + wield_image = "illumishroom2.png", + paramtype = "light", + light_source = 5, + sunlight_propagates = true, + walkable = false, + groups = {dig_immediate = 3, attached_node = 1, flammable = 3}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.47, 6 / 16}, + }, +}) + +minetest.register_node("ethereal:illumishroom3", { + description = S("Cyan Illumishroom"), + drawtype = "plantlike", + tiles = { "illumishroom3.png" }, + inventory_image = "illumishroom3.png", + wield_image = "illumishroom3.png", + paramtype = "light", + light_source = 5, + sunlight_propagates = true, + walkable = false, + groups = {dig_immediate = 3, attached_node = 1, flammable = 3}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 0.47, 6 / 16}, + }, +}) diff --git a/mods_disabled/ethereal/plantpack.lua b/mods_disabled/ethereal/plantpack.lua new file mode 100644 index 0000000..51d7aaa --- /dev/null +++ b/mods_disabled/ethereal/plantpack.lua @@ -0,0 +1,193 @@ + +--= Register Biome Decoration Using Plants Mega Pack Lite + +--= Desert Biome + +-- Cactus +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", "default:sandstone"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"desert", "sandstone"}, + decoration = { + "xanadu:cactus_echinocereus", "xanadu:cactus_matucana", + "xanadu:cactus_baseball", "xanadu:cactus_golden" + }, +}) + +-- Desert Plants +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:desert_sand", "default:sandstone", "default:sand"}, + sidelen = 16, + fill_ratio = 0.004, + biomes = {"desert", "sandstone"}, + decoration = { + "xanadu:desert_kangaroo", "xanadu:desert_brittle", + "xanadu:desert_ocotillo", "xanadu:desert_whitesage" + }, +}) + +--= Prairie Biome + +-- Grass +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:prairie_dirt", "default:dirt_with_grass"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "grassy", "grassytwo"}, + decoration = { + "xanadu:grass_prairie", "xanadu:grass_cord", + "xanadu:grass_wheatgrass", "xanadu:desert_whitesage" + }, +}) + +-- Flowers +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt", "ethereal:bamboo_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "grassy", "grassytwo", "bamboo"}, + decoration = { + "xanadu:flower_jacobsladder", "xanadu:flower_thistle", + "xanadu:flower_wildcarrot" + }, +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "grassy", "grassytwo", "grove"}, + decoration = { + "xanadu:flower_delphinium", "xanadu:flower_celosia", + "xanadu:flower_daisy", "xanadu:flower_bluerose" + }, +}) + +-- Shrubs +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_grass", "default:dirt_with_grass", + "ethereal:grove_dirt", "ethereal:jungle_grass", + "ethereal:gray_dirt", "default:dirt_with_rainforest_litter" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = { + "prairie", "grassy", "grassytwo", "grove", "junglee", + "grayness", "jumble" + }, + decoration = {"xanadu:shrub_kerria", "xanadu:shrub_spicebush"}, +}) + +--= Jungle Biome + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:jungle_dirt", "default:dirt_with_grass", "default:dirt_with_rainforest_litter"}, + sidelen = 16, + fill_ratio = 0.007, + biomes = {"junglee", "jumble"}, + decoration = { + "xanadu:rainforest_guzmania", "xanadu:rainforest_devil", + "xanadu:rainforest_lazarus", "xanadu:rainforest_lollipop", + "xanadu:mushroom_woolly" + }, +}) + +--= Cold Biomes + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:dirt_with_snow", "ethereal:cold_dirt", + "ethereal:gray_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"snowy", "alpine", "grayness"}, + decoration = { + "xanadu:mountain_edelweiss", "xanadu:mountain_armeria", + "xanadu:mountain_bellflower", "xanadu:mountain_willowherb", + "xanadu:mountain_bistort" + }, + +}) + +--= Mushroom Biome + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:mushroom_dirt"}, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"mushroom"}, + decoration = { + "xanadu:mushroom_powderpuff", "xanadu:mushroom_chanterelle", + "xanadu:mushroom_parasol" + }, +}) + +--= Lakeside + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"default:sand", "default:dirt_with_grass"}, + sidelen = 16, + fill_ratio = 0.015, + biomes = {"sandclay", "grassy_ocean", "grassy", "grassytwo", "jumble", "swamp"}, + decoration = { + "xanadu:wetlands_cattails", "xanadu:wetlands_pickerel", + "xanadu:wetlands_mannagrass", "xanadu:wetlands_turtle" + }, + spawn_by = "default:water_source", + num_spawn_by = 1, +}) + +--= Harsh Biomes + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:mushroom_dirt", "default:dirt_with_grass", + "ethereal:gray_dirt", "ethereal:cold_dirt", + "ethereal:dirt_with_snow", "ethereal:jungle_dirt", + "ethereal:prairie_dirt", "ethereal:grove_dirt", + "ethereal:dry_dirt", "ethereal:fiery_dirt", "default:sand", + "default:desert_sand", "xanadu:red", "ethereal:bamboo_dirt", + "default:dirt_with_rainforest_litter" + }, + sidelen = 16, + fill_ratio = 0.004, + biomes = { + "mushroom", "prairie", "grayness", "plains", "desert", + "junglee", "grassy", "grassytwo", "jumble", "snowy", "alpine", + "fiery", "mesa", "bamboo" + }, + decoration = {"xanadu:spooky_thornbush", "xanadu:spooky_baneberry"}, +}) + +--= Poppy's growing in Clearing Biome in memory of RealBadAngel + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "default:dirt_with_grass", + }, + sidelen = 16, + fill_ratio = 0.004, + biomes = {"clearing"}, + decoration = {"xanadu:poppy"}, +}) diff --git a/mods_disabled/ethereal/sapling.lua b/mods_disabled/ethereal/sapling.lua new file mode 100644 index 0000000..92990c2 --- /dev/null +++ b/mods_disabled/ethereal/sapling.lua @@ -0,0 +1,235 @@ + +local S = ethereal.intllib + +-- Bamboo Sprout +minetest.register_node("ethereal:bamboo_sprout", { + description = S("Bamboo Sprout"), + drawtype = "plantlike", + tiles = {"bamboo_sprout.png"}, + inventory_image = "bamboo_sprout.png", + wield_image = "bamboo_sprout.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + groups = { + food_bamboo_sprout = 1, snappy = 3, attached_node = 1, flammable = 2, + dig_immediate = 3, ethereal_sapling = 1, sapling = 1, + }, + sounds = default.node_sound_defaults(), + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 0, 4 / 16} + }, + on_use = minetest.item_eat(2), + grown_height = 11, +}) + +-- Register Saplings +local register_sapling = function(name, desc, texture, height) + + minetest.register_node(name .. "_sapling", { + description = S(desc .. " Tree Sapling"), + drawtype = "plantlike", + tiles = {texture .. ".png"}, + inventory_image = texture .. ".png", + wield_image = texture .. ".png", + paramtype = "light", + sunlight_propagates = true, + is_ground_content = false, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} + }, + groups = { + snappy = 2, dig_immediate = 3, flammable = 2, + ethereal_sapling = 1, attached_node = 1, sapling = 1 + }, + sounds = default.node_sound_leaves_defaults(), + grown_height = height, + }) +end + +register_sapling("ethereal:willow", "Willow", "willow_sapling", 14) +register_sapling("ethereal:yellow_tree", "Healing", "yellow_tree_sapling", 19) +register_sapling("ethereal:big_tree", "Big", "ethereal_big_tree_sapling", 7) +register_sapling("ethereal:banana_tree", "Banana", "banana_tree_sapling", 8) +register_sapling("ethereal:frost_tree", "Frost", "ethereal_frost_tree_sapling", 19) +register_sapling("ethereal:mushroom", "Mushroom", "ethereal_mushroom_sapling", 11) +register_sapling("ethereal:palm", "Palm", "moretrees_palm_sapling", 9) +register_sapling("ethereal:redwood", "Redwood", "redwood_sapling", 31) +register_sapling("ethereal:orange_tree", "Orange", "orange_tree_sapling", 6) +register_sapling("ethereal:birch", "Birch", "moretrees_birch_sapling", 7) +register_sapling("ethereal:sakura", "Sakura", "ethereal_sakura_sapling", 10) + +local add_tree = function (pos, ofx, ofy, ofz, schem, replace) + -- check for schematic + if not schem then + print (S("Schematic not found")) + return + end + -- remove sapling and place schematic + minetest.swap_node(pos, {name = "air"}) + minetest.place_schematic( + {x = pos.x - ofx, y = pos.y - ofy, z = pos.z - ofz}, + schem, 0, replace, false) +end + +local path = minetest.get_modpath("ethereal") .. "/schematics/" + +-- grow tree functions +function ethereal.grow_yellow_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.yellowtree) +end + +function ethereal.grow_big_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.bigtree) +end + +function ethereal.grow_banana_tree(pos) + add_tree(pos, 3, 0, 3, ethereal.bananatree) +end + +function ethereal.grow_frost_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.frosttrees) +end + +function ethereal.grow_mushroom_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.mushroomone) +end + +function ethereal.grow_palm_tree(pos) + add_tree(pos, 4, 0, 4, ethereal.palmtree) +end + +function ethereal.grow_willow_tree(pos) + add_tree(pos, 5, 0, 5, ethereal.willow) +end + +function ethereal.grow_redwood_tree(pos) + add_tree(pos, 7, 0, 7, ethereal.redwood_tree) +end + +function ethereal.grow_orange_tree(pos) + add_tree(pos, 1, 0, 1, ethereal.orangetree) +end + +function ethereal.grow_bamboo_tree(pos) + add_tree(pos, 1, 0, 1, ethereal.bambootree) +end + +function ethereal.grow_birch_tree(pos) + add_tree(pos, 2, 0, 2, ethereal.birchtree) +end + +function ethereal.grow_sakura_tree(pos) + if math.random(10) == 1 then + add_tree(pos, 4, 0, 3, ethereal.sakura_tree, + {{"ethereal:sakura_leaves", "ethereal:sakura_leaves2"}}) + else + add_tree(pos, 4, 0, 3, ethereal.sakura_tree) + end +end + +-- check if sapling has enough height room to grow +local enough_height = function(pos, height) + + local nod = minetest.line_of_sight( + {x = pos.x, y = pos.y + 1, z = pos.z}, + {x = pos.x, y = pos.y + height, z = pos.z}) + + if not nod then + return false -- obstructed + else + return true -- can grow + end +end + +local grow_sapling = function(pos, node) + + local under = minetest.get_node({ + x = pos.x, + y = pos.y - 1, + z = pos.z + }).name + + if not minetest.registered_nodes[node.name] then + return + end + + local height = minetest.registered_nodes[node.name].grown_height + + -- do we have enough height to grow sapling into tree? + if not height or not enough_height(pos, height) then + return + end + + -- Check if Ethereal Sapling is growing on correct substrate + if node.name == "ethereal:yellow_tree_sapling" + and minetest.get_item_group(under, "soil") > 0 then + ethereal.grow_yellow_tree(pos) + + elseif node.name == "ethereal:big_tree_sapling" + and under == "default:dirt_with_grass" then + ethereal.grow_big_tree(pos) + + elseif node.name == "ethereal:banana_tree_sapling" + and under == "ethereal:grove_dirt" then + ethereal.grow_banana_tree(pos) + + elseif node.name == "ethereal:frost_tree_sapling" + and under == "ethereal:crystal_dirt" then + ethereal.grow_frost_tree(pos) + + elseif node.name == "ethereal:mushroom_sapling" + and under == "ethereal:mushroom_dirt" then + ethereal.grow_mushroom_tree(pos) + + elseif node.name == "ethereal:palm_sapling" + and under == "default:sand" then + ethereal.grow_palm_tree(pos) + + elseif node.name == "ethereal:willow_sapling" + and under == "ethereal:gray_dirt" then + ethereal.grow_willow_tree(pos) + + elseif node.name == "ethereal:redwood_sapling" + and under == "default:dirt_with_dry_grass" then + ethereal.grow_redwood_tree(pos) + + elseif node.name == "ethereal:orange_tree_sapling" + and under == "ethereal:prairie_dirt" then + ethereal.grow_orange_tree(pos) + + elseif node.name == "ethereal:bamboo_sprout" + and under == "ethereal:bamboo_dirt" then + ethereal.grow_bamboo_tree(pos) + + elseif node.name == "ethereal:birch_sapling" + and under == "default:dirt_with_grass" then + ethereal.grow_birch_tree(pos) + + elseif node.name == "ethereal:sakura_sapling" + and under == "ethereal:bamboo_dirt" then + ethereal.grow_sakura_tree(pos) + end +end + +-- Grow saplings +minetest.register_abm({ + label = "Ethereal grow sapling", + nodenames = {"group:ethereal_sapling"}, + interval = 10, + chance = 50, + catch_up = false, + action = function(pos, node) + + local light_level = minetest.get_node_light(pos) or 0 + + if light_level < 13 then + return + end + + grow_sapling(pos, node) + end, +}) diff --git a/mods_disabled/ethereal/schematics/bamboo_tree.lua b/mods_disabled/ethereal/schematics/bamboo_tree.lua new file mode 100644 index 0000000..b61f045 --- /dev/null +++ b/mods_disabled/ethereal/schematics/bamboo_tree.lua @@ -0,0 +1,85 @@ + +local _ = {name = "air", param1 = 000} +local B = {name = "ethereal:bamboo", param1 = 255} +local L = {name = "ethereal:bamboo_leaves", param1 = 255} +local l = {name = "ethereal:bamboo_leaves", param1 = 100} + +ethereal.bambootree = { + + size = {x = 3, y = 18, z = 3}, + + yslice_prob = { + {ypos = 0, prob = 127}, + {ypos = 1, prob = 127}, + {ypos = 2, prob = 127}, + }, + + data = { + + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + l,L,l, + _,L,_, + _,_,_, + + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + l,L,l, + _,L,_, + _,l,_, + + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + l,L,l, + _,L,_, + _,_,_, + + } +} + +if ethereal.papyruswalk == true then + + minetest.override_item("default:papyrus", { + walkable = true, + sunlight_propagates = true + }) +end diff --git a/mods_disabled/ethereal/schematics/banana_tree.lua b/mods_disabled/ethereal/schematics/banana_tree.lua new file mode 100644 index 0000000..3a8e303 --- /dev/null +++ b/mods_disabled/ethereal/schematics/banana_tree.lua @@ -0,0 +1,83 @@ + +local _ = {name = "air", param1 = 0} +local T = {name = "ethereal:banana_trunk", param1 = 255} +local L = {name = "ethereal:bananaleaves", param1 = 255} +local l = {name = "ethereal:bananaleaves", param1 = 180} +local B = {name = "ethereal:banana", param1 = 255} +local b = {name = "ethereal:banana", param1 = 070} + +ethereal.bananatree = { + + size = {x = 7, y = 8, z = 7}, + + yslice_prob = { + {ypos = 0, prob = 127}, + }, + + data = { + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,l,_,_,_, + _,_,_,L,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,b,_,_,_, + _,_,_,B,_,_,_, + _,_,_,L,_,_,_, + _,_,_,_,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,b,T,b,_,_, + _,_,B,L,B,_,_, + _,L,L,L,L,L,_, + L,l,_,L,_,l,L, + + _,_,_,T,_,_,_, + _,_,_,T,_,_,_, + _,_,_,T,_,_,_, + _,_,_,T,_,_,_, + _,_,_,b,_,_,_, + _,_,_,B,_,_,_, + _,_,_,L,_,_,_, + _,_,_,_,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,L,_,_,_, + _,_,_,l,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,L,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + + } +} diff --git a/mods_disabled/ethereal/schematics/bigtree.lua b/mods_disabled/ethereal/schematics/bigtree.lua new file mode 100644 index 0000000..2ee6605 --- /dev/null +++ b/mods_disabled/ethereal/schematics/bigtree.lua @@ -0,0 +1,100 @@ + +local _ = {name = "air", prob = 0} +local L = {name = "default:leaves", prob = 255} +local T = {name = "default:tree", prob = 255} +local t = {name = "default:tree", prob = 127} + +ethereal.bigtree = { + + size = {x = 9, y = 8, z = 9}, + + yslice_prob = { + {ypos = 0, prob = 127}, + {ypos = 1, prob = 127}, + }, + + data = { + + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,L,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,_,t,t,_,t,t,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,L,L,L,_,_,_, + _,_,_,_,L,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,t,t,t,t,t,t,t,_, + _,_,_,t,_,t,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,L,L,L,L,L,_,_, + _,_,_,L,L,L,_,_,_, + _,_,_,_,L,_,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,t,t,t,T,t,t,t,_, + _,_,t,t,T,t,t,_,_, + _,_,_,_,T,_,_,_,_, + _,_,_,_,T,_,_,_,_, + _,L,L,L,T,L,L,L,_, + _,_,L,L,L,L,L,_,_, + _,_,_,L,L,L,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,_,t,T,T,T,t,_,_, + _,_,_,T,T,T,_,_,_, + _,_,_,T,T,T,_,_,_, + _,_,_,T,T,T,_,_,_, + L,L,L,L,T,L,L,L,L, + _,L,L,L,T,L,L,L,_, + _,_,L,L,L,L,L,_,_, + _,_,_,_,_,_,_,_,_, + + _,t,t,t,T,t,t,t,_, + _,_,t,t,T,t,t,_,_, + _,_,_,_,T,_,_,_,_, + _,_,_,_,T,_,_,_,_, + _,L,L,L,T,L,L,L,_, + _,_,L,L,L,L,L,_,_, + _,_,_,L,L,L,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,t,t,t,t,t,t,t,_, + _,_,_,t,_,t,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,L,L,L,L,L,_,_, + _,_,_,L,L,L,_,_,_, + _,_,_,_,L,_,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,_,t,t,_,t,t,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,L,L,L,_,_,_, + _,_,_,_,L,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,L,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + _,_,_,_,_,_,_,_,_, + + } +} diff --git a/mods_disabled/ethereal/schematics/birch_tree.lua b/mods_disabled/ethereal/schematics/birch_tree.lua new file mode 100644 index 0000000..afd190b --- /dev/null +++ b/mods_disabled/ethereal/schematics/birch_tree.lua @@ -0,0 +1,59 @@ + +local _ = {name = "air", param1 = 0} +local T = {name = "ethereal:birch_trunk", param1 = 255} +local L = {name = "ethereal:birch_leaves", param1 = 255} +local l = {name = "ethereal:birch_leaves", param1 = 150} + +ethereal.birchtree = { + + size = {x = 5, y = 7, z = 5}, + + yslice_prob = { + {ypos = 0, prob = 127}, + {ypos = 3, prob = 127}, + }, + + data = { + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + l,L,L,L,l, + l,L,L,L,l, + _,_,_,_,_, + _,_,_,_,_, + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + L,L,L,L,L, + L,L,L,L,L, + _,l,L,l,_, + _,_,L,_,_, + + _,_,T,_,_, + _,_,T,_,_, + _,_,T,_,_, + L,L,T,L,L, + L,L,T,L,L, + _,L,T,L,_, + _,L,L,L,_, + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + L,L,L,L,L, + L,L,L,L,L, + _,l,L,l,_, + _,_,L,_,_, + + _,_,_,_,_, + _,_,_,_,_, + _,_,_,_,_, + l,L,L,L,l, + l,L,L,L,l, + _,_,_,_,_, + _,_,_,_,_, + + } +} diff --git a/mods_disabled/ethereal/schematics/bush.lua b/mods_disabled/ethereal/schematics/bush.lua new file mode 100644 index 0000000..d0a0ed3 --- /dev/null +++ b/mods_disabled/ethereal/schematics/bush.lua @@ -0,0 +1,38 @@ + +local _ = {name = "air", param1 = 0} +local B = {name = "ethereal:bush", param1 = 255} +local b = {name = "ethereal:bush", param1 = 100} + +ethereal.bush = { + + size = {x = 5, y = 3, z = 5}, + + yslice_prob = { + {ypos = 0, prob = 127}, + {ypos = 2, prob = 127}, + }, + + data = { + + b,B,B,B,b, + _,_,_,_,_, + _,_,_,_,_, + + B,B,B,B,B, + _,b,B,b,_, + _,_,_,_,_, + + B,B,B,B,B, + _,B,B,B,_, + _,_,b,_,_, + + B,B,B,B,B, + _,b,B,b,_, + _,_,_,_,_, + + b,B,B,B,b, + _,_,_,_,_, + _,_,_,_,_, + + } +} diff --git a/mods_disabled/ethereal/schematics/corals.mts b/mods_disabled/ethereal/schematics/corals.mts new file mode 100644 index 0000000000000000000000000000000000000000..e1bd7ded6c202e4ca9f308164806f53117606728 GIT binary patch literal 171 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

J88F|V-V04@hP$^+v9aFC+6HaEK&_Bfv1oFVz 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 1 then + + minetest.swap_node(pos, {name = "ethereal:coral" .. sel}) + + return + end + + if nod == "ethereal:seaweed" + or sel == 1 then + + local height = 0 + local high = 14 + + while height < high + and minetest.get_node(pos).name == "ethereal:seaweed" do + height = height + 1 + pos.y = pos.y + 1 + end + + if pos.y < 1 + and height < high + and minetest.get_node(pos).name == "default:water_source" then + + minetest.swap_node(pos, {name = "ethereal:seaweed"}) + end + + end + + end, +}) +end + +-- sponges + +minetest.register_node("ethereal:sponge_air", { + drawtype = "airlike", + paramtype = "light", + walkable = false, + buildable_to = true, + sunlight_propagates = true, + pointable = false, + drop = "", + groups = {not_in_creative_inventory = 1}, +}) + + +minetest.register_node("ethereal:sponge", { + description = S("Sponge"), + tiles = {"ethereal_sponge.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults(), + + after_place_node = function(pos, placer, itemstack, pointed_thing) + + -- get player name + local name = placer:get_player_name() + + -- is area protected + if minetest.is_protected(pos, name) then + return + end + + -- get water nodes within range + local num = minetest.find_nodes_in_area( + {x = pos.x - 3, y = pos.y - 3, z = pos.z - 3}, + {x = pos.x + 3, y = pos.y + 3, z = pos.z + 3}, + {"group:water"}) + + -- no water + if #num == 0 then return end + + -- replace water nodes with sponge air + for _, w in pairs(num) do + + if not minetest.is_protected(pos, name) then + minetest.swap_node(w, {name = "ethereal:sponge_air"}) + end + end + + -- replace dry sponge with wet sponge + minetest.swap_node(pos, {name="ethereal:sponge_wet"}) + end +}) + + +minetest.register_node("ethereal:sponge_wet", { + description = S("Wet sponge"), + tiles = {"ethereal_sponge_wet.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults(), +}) + +-- cook wet sponge into dry sponge +minetest.register_craft({ + type = "cooking", + recipe = "ethereal:sponge_wet", + output = "ethereal:sponge", + cooktime = 3, +}) + +-- use leaf decay to remove sponge air nodes +default.register_leafdecay({ + trunks = {"ethereal:sponge_wet"}, + leaves = {"ethereal:sponge_air"}, + radius = 3 +}) + +-- dry sponges can be used as fuel +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:sponge", + burntime = 5, +}) diff --git a/mods_disabled/ethereal/settings.conf_example b/mods_disabled/ethereal/settings.conf_example new file mode 100644 index 0000000..6b74a2a --- /dev/null +++ b/mods_disabled/ethereal/settings.conf_example @@ -0,0 +1,42 @@ + +--[[ + Ethereal Settings can be changed here and kept even after the mod + has been updated +--]] + +ethereal.leaftype = 0 -- 0 for 2D plantlike, 1 for 3D allfaces +ethereal.leafwalk = false -- true for walkable leaves, false to fall through +ethereal.cavedirt = true -- caves chop through dirt when true +ethereal.torchdrop = true -- torches drop when touching water +ethereal.papyruswalk = true -- papyrus can be walked on +ethereal.lilywalk = true -- waterlilies can be walked on +ethereal.xcraft = true -- allow cheat crafts for cobble->gravel->dirt->sand, ice->snow, dry dirt->desert sand + +-- Set following to 1 to enable biome or false to disable +ethereal.glacier = 1 -- Ice glaciers with snow +ethereal.bamboo = 1 -- Bamboo with sprouts +ethereal.mesa = 1 -- Mesa red and orange clay with giant redwood +ethereal.alpine = 1 -- Snowy grass +ethereal.healing = 1 -- Snowy peaks with healing trees +ethereal.snowy = 1 -- Cold grass with pine trees and snow spots +ethereal.frost = 1 -- Blue dirt with blue/pink frost trees +ethereal.grassy = 1 -- Green grass with flowers and trees +ethereal.caves = 1 -- Desert stone ares with huge caverns underneath +ethereal.grayness = 1 -- Grey grass with willow trees +ethereal.grassytwo = 1 -- Sparse trees with old trees and flowers +ethereal.prairie = 1 -- Flowery grass with many plants and flowers +ethereal.jumble = 1 -- Green grass with trees and jungle grass +ethereal.junglee = 1 -- Jungle grass with tall jungle trees +ethereal.desert = 1 -- Desert sand with cactus +ethereal.grove = 1 -- Banana groves and ferns +ethereal.mushroom = 1 -- Purple grass with giant mushrooms +ethereal.sandstone = 1 -- Sandstone with smaller cactus +ethereal.quicksand = 1 -- Quicksand banks +ethereal.plains = 1 -- Dry dirt with scorched trees +ethereal.savanna = 1 -- Dry yellow grass with acacia tree's +ethereal.fiery = 1 -- Red grass with lava craters +ethereal.sandclay = 1 -- Sand areas with clay underneath +ethereal.swamp = 1 -- Swamp areas with vines on tree's, mushrooms, lilly's and clay sand +ethereal.sealife = 1 -- Enable coral and seaweed +ethereal.reefs = 1 -- Enable new coral reefs in default +ethereal.sakura = 1 -- Enable sakura biomes with trees diff --git a/mods_disabled/ethereal/stairs.lua b/mods_disabled/ethereal/stairs.lua new file mode 100644 index 0000000..6b4f7bb --- /dev/null +++ b/mods_disabled/ethereal/stairs.lua @@ -0,0 +1,338 @@ + +local S = ethereal.intllib + +-- Stairs Redo +if stairs and stairs.mod and stairs.mod == "redo" then + +stairs.register_all("crystal_block", "ethereal:crystal_block", + {cracky = 1, level = 2, puts_out_fire = 1, cools_lava = 1}, + {"crystal_block.png"}, + S("Crystal Block Stair"), + S("Crystal Block Slab"), + default.node_sound_glass_defaults()) + +stairs.register_all("icebrick", "ethereal:icebrick", + {cracky = 3, puts_out_fire = 1, cools_lava = 1}, + {"brick_ice.png"}, + S("Ice Brick Stair"), + S("Ice Brick Slab"), + default.node_sound_glass_defaults()) + +stairs.register_all("snowbrick", "ethereal:snowbrick", + {crumbly = 3, puts_out_fire = 1, cools_lava = 1}, + {"brick_snow.png"}, + S("Snow Brick Stair"), + S("Snow Brick Slab"), + default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.25}, + dug = {name = "default_snow_footstep", gain = 0.75}, + })) + +stairs.register_all("dry_dirt", "ethereal:dry_dirt", + {crumbly = 3}, + {"ethereal_dry_dirt.png"}, + S("Dried Dirt Stair"), + S("Dried Dirt Slab"), + default.node_sound_dirt_defaults()) + +stairs.register_all("mushroom_trunk", "ethereal:mushroom_trunk", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"mushroom_trunk.png"}, + S("Mushroom Trunk Stair"), + S("Mushroom Trunk Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("mushroom", "ethereal:mushroom", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"mushroom_block.png"}, + S("Mushroom Top Stair"), + S("Mushroom Top Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("frost_wood", "ethereal:frost_wood", + {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + {"frost_wood.png"}, + S("Frost Wood Stair"), + S("Frost Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("yellow_wood", "ethereal:yellow_wood", + {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + {"yellow_wood.png"}, + S("Healing Wood Stair"), + S("Healing Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("palm_wood", "ethereal:palm_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"moretrees_palm_wood.png"}, + S("Palm Wood Stair"), + S("Palm Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("birch_wood", "ethereal:birch_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"moretrees_birch_wood.png"}, + S("Birch Wood Stair"), + S("Birch Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("banana_wood", "ethereal:banana_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"banana_wood.png"}, + S("Banana Wood Stair"), + S("Banana Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("willow_wood", "ethereal:willow_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"willow_wood.png"}, + S("Willow Wood Stair"), + S("Willow Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("redwood_wood", "ethereal:redwood_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"redwood_wood.png"}, + S("Redwood stair"), + S("Redwood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("bamboo_wood", "ethereal:bamboo_block", + {snappy = 3, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"bamboo_floor.png"}, + S("Bamboo stair"), + S("Bamboo Slab"), + default.node_sound_wood_defaults()) + +stairs.register_all("sakura_wood", "ethereal:sakura_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_sakura_wood.png"}, + S("Sakura Wood stair"), + S("Sakura Wood Slab"), + default.node_sound_wood_defaults()) + +-- Stairs Plus (in More Blocks) +elseif minetest.global_exists("stairsplus") then + +stairsplus:register_all("ethereal", "crystal_block", "ethereal:crystal_block", { + description = S("Crystal block"), + tiles = {"crystal_block.png"}, + groups = {cracky = 1, falling_node = 1, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +stairsplus:register_all("ethereal", "icebrick", "ethereal:icebrick", { + description = S("Ice Brick"), + tiles = {"brick_ice.png"}, + groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_glass_defaults(), +}) + +stairsplus:register_all("ethereal", "snowbrick", "ethereal:snowbrick", { + description = S("Snow Brick"), + tiles = {"brick_snow.png"}, + groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.25}, + dug = {name = "default_snow_footstep", gain = 0.75}, + }) +}) + +stairsplus:register_all("ethereal", "dry_dirt", "ethereal:dry_dirt", { + description = S("Dried Dirt"), + tiles = {"ethereal_dry_dirt.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_dirt_defaults(), +}) + +stairsplus:register_all("ethereal", "mushroom_trunk", "ethereal:mushroom_trunk", { + description = S("Mushroom Trunk"), + tiles = {"mushroom_trunk.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "mushroom", "ethereal:mushroom", { + description = S("Mushroom Top"), + tiles = {"mushroom_block.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "frost_wood", "ethereal:frost_wood", { + description = S("Frost Wood"), + tiles = {"frost_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "yellow_wood", "ethereal:yellow_wood", { + description = S("Healing Wood"), + tiles = {"yellow_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "palm_wood", "ethereal:palm_wood", { + description = S("Palm Wood"), + tiles = {"moretrees_palm_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "birch_wood", "ethereal:birch_wood", { + description = S("Birch Wood"), + tiles = {"moretrees_birch_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "banana_wood", "ethereal:banana_wood", { + description = S("Banana Wood"), + tiles = {"banana_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "willow_wood", "ethereal:willow_wood", { + description = S("Willow Wood"), + tiles = {"willow_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "redwood_wood", "ethereal:redwood_wood", { + description = S("Redwood"), + tiles = {"redwood_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "bamboo_wood", "ethereal:bamboo_block", { + description = S("Bamboo"), + tiles = {"bamboo_floor.png"}, + groups = {snappy = 3, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +stairsplus:register_all("ethereal", "sakura_wood", "ethereal:sakura_wood", { + description = S("Sakura"), + tiles = {"ethereal_sakura_wood.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +-- Default Stairs +else + +stairs.register_stair_and_slab("crystal_block", "ethereal:crystal_block", + {cracky = 1, level = 2, puts_out_fire = 1, cools_lava = 1}, + {"crystal_block.png"}, + S("Crystal Block Stair"), + S("Crystal Block Slab"), + default.node_sound_glass_defaults()) + +stairs.register_stair_and_slab("icebrick", "ethereal:icebrick", + {cracky = 3, puts_out_fire = 1, cools_lava = 1}, + {"brick_ice.png"}, + S("Ice Brick Stair"), + S("Ice Brick Slab"), + default.node_sound_glass_defaults()) + +stairs.register_stair_and_slab("snowbrick", "ethereal:snowbrick", + {crumbly = 3, puts_out_fire = 1, cools_lava = 1}, + {"brick_snow.png"}, + S("Snow Brick Stair"), + S("Snow Brick Slab"), + default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.15}, + dug = {name = "default_snow_footstep", gain = 0.2}, + dig = {name = "default_snow_footstep", gain = 0.2} + })) + +stairs.register_stair_and_slab("dry_dirt", "ethereal:dry_dirt", + {crumbly = 3}, + {"ethereal_dry_dirt.png"}, + S("Dried Dirt Stair"), + S("Dried Dirt Slab"), + default.node_sound_dirt_defaults()) + +stairs.register_stair_and_slab("mushroom_trunk", "ethereal:mushroom_trunk", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"mushroom_trunk.png"}, + S("Mushroom Trunk Stair"), + S("Mushroom Trunk Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("mushroom", "ethereal:mushroom", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"mushroom_block.png"}, + S("Mushroom Top Stair"), + S("Mushroom Top Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("frost_wood", "ethereal:frost_wood", + {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + {"frost_wood.png"}, + S("Frost Wood Stair"), + S("Frost Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("yellow_wood", "ethereal:yellow_wood", + {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + {"yellow_wood.png"}, + S("Healing Wood Stair"), + S("Healing Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("palm_wood", "ethereal:palm_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"moretrees_palm_wood.png"}, + S("Palm Wood Stair"), + S("Palm Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("birch_wood", "ethereal:birch_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"moretrees_birch_wood.png"}, + "Birch Wood Stair", + "Birch Wood Slab", + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("banana_wood", "ethereal:banana_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"banana_wood.png"}, + S("Banana Wood Stair"), + S("Banana Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("willow_wood", "ethereal:willow_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"willow_wood.png"}, + S("Willow Wood Stair"), + S("Willow Wood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("redwood_wood", "ethereal:redwood_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"redwood_wood.png"}, + S("Redwood stair"), + S("Redwood Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("bamboo_wood", "ethereal:bamboo_block", + {snappy = 3, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"bamboo_floor.png"}, + S("Bamboo stair"), + S("Bamboo Slab"), + default.node_sound_wood_defaults()) + +stairs.register_stair_and_slab("sakura_wood", "ethereal:sakura_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_sakura_wood.png"}, + S("Sakura Wood Stair"), + S("Sakura Wood Slab"), + default.node_sound_wood_defaults()) + +end diff --git a/mods_disabled/ethereal/strawberry.lua b/mods_disabled/ethereal/strawberry.lua new file mode 100644 index 0000000..3fe3fa7 --- /dev/null +++ b/mods_disabled/ethereal/strawberry.lua @@ -0,0 +1,127 @@ + +local S = ethereal.intllib + +-- Strawberry (can also be planted as seed) +minetest.register_craftitem("ethereal:strawberry", { + description = S("Strawberry"), + inventory_image = "strawberry.png", + wield_image = "strawberry.png", + groups = {food_strawberry = 1, food_berry = 1, flammable = 2}, + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:strawberry_1") + end, + on_use = minetest.item_eat(1), +}) + +-- Define Strawberry Bush growth stages +local crop_def = { + drawtype = "plantlike", + tiles = {"strawberry_1.png"}, + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + drop = "", + selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5} + }, + groups = { + snappy = 3, flammable = 2, plant = 1, attached_node = 1, + not_in_creative_inventory = 1, growing = 1 + }, + sounds = default.node_sound_leaves_defaults(), +} + +--stage 1 +minetest.register_node("ethereal:strawberry_1", table.copy(crop_def)) + +-- stage 2 +crop_def.tiles = {"strawberry_2.png"} +minetest.register_node("ethereal:strawberry_2", table.copy(crop_def)) + +-- stage 3 +crop_def.tiles = {"strawberry_3.png"} +minetest.register_node("ethereal:strawberry_3", table.copy(crop_def)) + +-- stage 4 +crop_def.tiles = {"strawberry_4.png"} +minetest.register_node("ethereal:strawberry_4", table.copy(crop_def)) + +-- stage 5 +crop_def.tiles = {"strawberry_5.png"} +minetest.register_node("ethereal:strawberry_5", table.copy(crop_def)) + +-- stage 6 +crop_def.tiles = {"strawberry_6.png"} +crop_def.drop = { + items = { + {items = {"ethereal:strawberry 1"},rarity = 2}, + {items = {"ethereal:strawberry 2"},rarity = 3}, + } +} +minetest.register_node("ethereal:strawberry_6", table.copy(crop_def)) + +-- stage 7 +crop_def.tiles = {"strawberry_7.png"} +crop_def.drop = { + items = { + {items = {"ethereal:strawberry 1"},rarity = 1}, + {items = {"ethereal:strawberry 2"},rarity = 3}, + } +} +minetest.register_node("ethereal:strawberry_7", table.copy(crop_def)) + +-- stage 8 +crop_def.tiles = {"strawberry_8.png"} +crop_def.groups.growing = 0 +crop_def.drop = { + items = { + {items = {"ethereal:strawberry 2"},rarity = 1}, + {items = {"ethereal:strawberry 3"},rarity = 3}, + } +} +minetest.register_node("ethereal:strawberry_8", table.copy(crop_def)) + +-- growing routine if farming redo isn't present +if not farming or not farming.mod or farming.mod ~= "redo" then + +minetest.register_abm({ + label = "Ethereal grow strawberry", + nodenames = { + "ethereal:strawberry_1", "ethereal:strawberry_2", "ethereal:strawberry_3", + "ethereal:strawberry_4", "ethereal:strawberry_5", "ethereal:strawberry_6", + "ethereal:strawberry_7" + }, + neighbors = {"farming:soil_wet"}, + interval = 9, + chance = 20, + catch_up = false, + action = function(pos, node) + + -- are we on wet soil? + pos.y = pos.y - 1 + if minetest.get_item_group(minetest.get_node(pos).name, "soil") < 3 then + return + end + pos.y = pos.y + 1 + + -- do we have enough light? + local light = minetest.get_node_light(pos) + + if not light + or light < 13 then + return + end + + -- grow to next stage + local num = node.name:split("_")[2] + + node.name = "ethereal:strawberry_" .. tonumber(num + 1) + + minetest.swap_node(pos, node) + end +}) + +end -- END IF diff --git a/mods_disabled/ethereal/textures/baked_clay_grey.png b/mods_disabled/ethereal/textures/baked_clay_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..deecb6a5e0347f1c0613ecb7a7266ca3de892261 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Xn;?M>$E9Tr%#FEg6%J?j(KrFSvzSL4lp3fMnkW?ZqPdrAP%5e%NL KelF{r5}E)zPf!W~ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/baked_clay_orange.png b/mods_disabled/ethereal/textures/baked_clay_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..847b793255ac0feb9bc10614e2b5a6f7d16aa56f GIT binary patch literal 421 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfv;dzF*I6ZAvrB#ElzPuB@tjrS zJ*UifW{LNVBF`BhuIKDh?>VKuv&;Nvm-sBG2$);uH=`IR=ryOzXKtDAjAEa8<^D5@ zz2=nq%r5boSME2f)O&UrP>bJ8ps^)Dw(ra$@0o?(GmCwv7kbYs^PFAmJFnD#RJox#2>Se5mG%5C8PjzdfI0YuwP$xUuh%;4Fp<6AtEGIm*6qt@@PyT(7&r z#sA+}-A%f1=8S-jm!{LfyzfTuf^B3Hf@fJMf3Vp6ZcFO*aQnE$`z9_H{j~R!*xnVt zE?#tXVy}kt)*h!qI)>h z&(`fV`sc!0_y5nfJYA2X&A)j<9p?5Tr4n zg9=>=#RS~ZKF6`VxUw8F*GeGD6#q+`tQEN5o!1}leeXDwUywoeF8MlRUao4kn<#%l z1{#1+Abz6!f(|lwH?SqNT}*pP??f_xgsl}e$_)Zz|%DGC3q{KAF|5_e@r6$MHdR3 zC%Z@fm`3=A-T@fCb)L1qsdsq#Q>}RDLV?>-*^JE=M_Y` zg5nqw;l_D@7=OL5jRH2cBHY@%1c>&^S|?z_n&I&IvI0Lw%UZX`1P*by_7VXU%GvI5 zt!0JSTW`Q@awkE8QLZt_Z(;c&OtYEl#+4~QckqoK&6JCb^0000=RhJI>Tz4rxs8FV@Z%-FoVOh8)-mJiKmNW2*-8ZZbLpMLjh)W#enx*F7*ePEn3-K zHoPnj>YLT}=RcEa3LtwYp%8;ZnopzJedV^Mm#e7*g z1#tpd)r~_`}l5vv8A~X%L`Bo>S7(@x!pO1~d zmJS@9cZ=`JXs_dJ_U7KdJT9YO8DRW$TmZa3m`a=NTzvN7_VoEjj}NJqXmfhAOius+ N002ovPDHLkV1lL3o_hcQ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_bread.png b/mods_disabled/ethereal/textures/banana_bread.png new file mode 100644 index 0000000000000000000000000000000000000000..d309ff8039809e734662e75897f734be282cc797 GIT binary patch literal 385 zcmV-{0e=38P))@R z{7;E(E6^owJ>B`YnX>FMdT%|P zef!ChM^BbLe!lMMt6hEtMVUZlj3q&S!3+-1ZlnP@A)YRdAsp9}6ArM?h>hhvP*UNs zi?c&;-o1$z-yJw`Kq@dWE>7;*frOx2Tq#?Z8O>Pcw#9wRbT;D|OWJlV+ifjvB(ZzP pjwM#syA2F9B&D?_wG9QB8CKZ{=N#$t*8!T(;OXk;vd$@?2>`z_Naz3n literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_leaf.png b/mods_disabled/ethereal/textures/banana_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..5800cbfc8b898eeaccaa89a86bb1ac34ea775541 GIT binary patch literal 421 zcmV;W0b2fvP)hl@Ve zE_6Dem*Z_Mr(iu6sBtNWP?FWgW~})TX3@~i2>NlG@KTx^cB7PC&~=u7R7OI@Hrn}L P00000NkvXXu0mjfjc>EG literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_leaf_old.png b/mods_disabled/ethereal/textures/banana_leaf_old.png new file mode 100644 index 0000000000000000000000000000000000000000..0d744ec0690e9225f1069c50625aaaef31626d46 GIT binary patch literal 444 zcmV;t0YmZaGkcC1;CPp0tNcsLSF20004WQchCjpt)=kw~vBKT%9H zeJ4`s+B6KG$m&>hq-T)=h<>x+5YAFwMB3O$rxsj__sxrDnVF#vMCUGZy;#tO0O)Tz zTqMGMer^nLZ4DQF)f0REu!mB2sP3!SThe(s1vP1Nh56F$ACneQ1L4|z;4=w z^;HdE!6w|Mi%oGupu5l~Fuy$ugf`>a*yJoB4ncURp7AJ>3>=q6}hXINd!Cd{&R m(7_hB2uE#xt^uju1^Nf|n^>FCz$z9100007`wUv literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_single.png b/mods_disabled/ethereal/textures/banana_single.png new file mode 100644 index 0000000000000000000000000000000000000000..b15ed2fa270a525be476f37959a93f66316bc7b3 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=1EO-0r%3VdjG6d9v-b zitCnW@7tn(?TqPzs}^5g*j{97$OkH7ED7=pW^j0RBMrz2^>lFz;kcfhz`*Rr$Z=MI zC)GgGXo0bdj6%u5axJ_$%~>L6=H*77Wm~qa2^Dov^?9~>n*VtQ sBZ;Hh+SWmiS`p6HRtsi1J2$d0bRHL~pM1&O5oiH}r>mdKI;Vst01O2_SO5S3 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_tree_sapling.png b/mods_disabled/ethereal/textures/banana_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..1c3c826dbce6c53ba76f1e056e58df5d2fea1612 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXJyRh2f?QMNbIbTm>8 za4<41)t=tP>#^F*a?8{kKxK?2L4Lsu4$p3+0XZ(7E{-7_*OL<*m}Csxn0qcVCOb*W zu*&erD2TZ;yE|7iMYJt;m37&yzSMcjCgTokhponj3ydY06Lgq0&I)l&4q_Byc($37 V#eDsbO+fP)JYD@<);T3K0RSEmExP~! literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_trunk.png b/mods_disabled/ethereal/textures/banana_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..12888ca1f5724dd9a9235366faef62fed58e4ae7 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUb#+z`4$un;Gm45fOh`1( z%Cavha%!yeOx}LvB2Z1Or;B3<$92)3ja-KeL|o5jFIktlv3g34gKATDz$SN>-EBg* zw@$wQzIa!G#diU>k3Tmt7^O_^EO}wJGQi*EmdKI;Vst00Y5WX#fBK literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/banana_trunk_top.png b/mods_disabled/ethereal/textures/banana_trunk_top.png new file mode 100644 index 0000000000000000000000000000000000000000..77679627c57c09c609483aa0a2a9f8e0c61698fd GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU^|aFr_tZ}hH?PZfncEh! zadzH;wH>E+%w+z|@&>4;*we)^gyXtw-$CBP1{|*Y-?FZl#CVJMlK1(kUPg|SbrKR9 zZ>@=cR9ZbGCH)`YCPQ z_aW76=aC*;MRmTj?pyhTShJ(f{+@jJf^n3O)BVNU9se?RNhwXd9kV?Q=l}*!S3j3^ HP6wm%Av$IuxWsixijAMJ)71+NrB_aO%(p=qosM5**uIDB|c?6huph zBqUOEsWG%m4ULhK_)qt6?sv|A?zymoYUMPwavFfWUEtz@;>EEj@a1uqTq@2)U-J64 z*v-MFA{UtGOD?YRG;a$4B*KE7c7;YgPk%56;Q7UfR$#4?ngn1!mxw-sraJ)G(v7}_ z&yRC7-NBYF-LA&n{W!dXPP+oYXeTb&B;(oNRBZi0uA7BGvQf`_=l)=h5Q@*f z&%x8oDHH&W|)c%-900000NkvXXu0mjf DxBR0T literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/bowl.png b/mods_disabled/ethereal/textures/bowl.png new file mode 100644 index 0000000000000000000000000000000000000000..486bd7bbcb2c2580016fe07e122ea89cf96a9a94 GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvg8-ipR}T$l8BsnfUF8fz7EcRx zF9*SBH=agMwv0f7x+KdvNo8!Fis)p>1Ntl=B$zZ$5Qu_VYZn8D%MjWi%< zho_5Uh{pM|6Ak&A4R~Cgk1{SudJ&<-7c_xg=_`XR|EUKaE1a(??&IecdL$xi^^~X7 z$EE+mzPI*~|N0hPv7g9X{4;Hbo;Qd74dY6eC59@KC+}x}_V$I&p)VeS48JEdzEqhx z@4_sLq8VOZ%S>HGlLDWsE>SFnGH9 KxvXQ{_gG4|Nido0L;~9A?Su~$pGq?onX{x?uY=TjrKv`+N#+Aw(r++ z{-(~`0C#?9#O7w+s{nVFWQNH}sp|kD5hEjEL_|UW-|zqHx~i<>0Q&67W_49YV*vZ@ zw`X)jc0d6B%y)NXW_CaT?Z;`jNoIC)0Ow|$y+mhbK>+HOUDiZLW^w>#F(N_{5CSk} W5K2ND58ns?0000;X literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/brick_ice.png_old b/mods_disabled/ethereal/textures/brick_ice.png_old new file mode 100644 index 0000000000000000000000000000000000000000..d893299a502f17ae4f2c690105a24f83c0f85f46 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMV?VtK%^2|T8rvI5Y>;L@O z|7XtozhM5~jhp^%+4}#~+3)8r{=R(ezXyl?F`#Yh7ML)4&r0n zXhM?ioDI6S6=o_H78M=37FKNB783ZbB{%1&8c*iR*}P`OyO$a)QC;pRa+rbPs=xk6 U{*(0=fKFiWboFyt=akR{0LzVN5dZ)H literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/brick_snow.png b/mods_disabled/ethereal/textures/brick_snow.png new file mode 100644 index 0000000000000000000000000000000000000000..4d76e0537998582b44d74fc8c3fa6d106c913c1d GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|u6OVMfB)e>5Jc_WaU3Yf znB?v5!qCAg>j6?x;1OBOz`!jG!i)^F=12eq*-JcqUD@w(Npj2T-(H#d9w?;j>Eal| zaXmR=Yt~h+wv`JPD(>Jkh}fERRjcj7gp~_-a02aCbCWQP|FumJsGPym)z4*}Q$iB} DmeMfa literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/bucket_cactus.png b/mods_disabled/ethereal/textures/bucket_cactus.png new file mode 100644 index 0000000000000000000000000000000000000000..7d5fd0bfab239f4e9090b1f1b265bb106abb8a2d GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs{;drf`UR~Vq#NM(}W2V z=FgwMY}vA1yLPR-5_bOi^84TSAHF?#&Dogk=j(yw@t4KN?$6rMyUZ7;ov|dyFPOpM z*^M+1C&}C0g`tC0)&t1lEbxddW?26;^Z3<^wOo ze2xe|1%ZVu9bZZ Pw1vUb)z4*}Q$iB}@w;Y< literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/bucket_cactus.png_hd b/mods_disabled/ethereal/textures/bucket_cactus.png_hd new file mode 100644 index 0000000000000000000000000000000000000000..696277b2d74164fafb9db219b80aa712d7a93eda GIT binary patch literal 421 zcmV;W0b2fvP)x;R&<0I2>}HJpaQp7bOi4R1PUlZ1@;03niY*r zf()Sot5RF4!H4 zst~6$FjheXj1-~a%ozR`;!-16C=0~{{o-P5tcZvfptFq?1<_)PfouQ(d~0lynlFjR P00000NkvXXu0mjf>@B8L literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/candle.png b/mods_disabled/ethereal/textures/candle.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed21b4c6ba03c7ca7dfd549c141949fbf50c34c GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3P9Yz!VDy5c$8@ZDY*cj5LX64AdBH*XV!zoMSHe& z{J+@$^xnGvcWVCMS@r$X*_n-MB0y=zk|4ie28U-i(tw;&PZ!4!kK@S+608x9%!-WH zxJ($AC73X#F_###1nkt&)6>&n$}>*)D|Qh4;3DqfD4gK=*~ih;#F#ZUVHWqS17}1^ zvV$*(EVyaJbs<^aS%ty&TldAw?iRbmE?@j&nB&Nx*m&_%@)m}J;rk7yFM6#Z*Y=W` YVZl<5AJg~z+6Z#3r>mdKI;Vst0Kf@R6aWAK literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/candle_static.png b/mods_disabled/ethereal/textures/candle_static.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c7157f4c1332b4b9ca26030d5821b296f5bd14 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvxd5LKR|ZWWi{WBt)`P`Gd$x7_ zzu5ou-n##HYX09@_5IV?^wOdqKxxL3AirP+hi5m^fE;g67sn8d^T`PktPzgPij3E| zOc<9Xm@uX>ml(4I?9|cI)6-zeGfwv_b`bpFBJSZRoZ$J{$I;Zpm^C(G7Wb?JXGBV} fgD;32$YEqqyC5{vIDh_kkQ+Q*{an^LB{Ts5B{Mva literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/charcoal_lump.png b/mods_disabled/ethereal/textures/charcoal_lump.png new file mode 100644 index 0000000000000000000000000000000000000000..44caf80645f23e87de58d2ae629d45b9f43fd36a GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRbXJSwl;Qgw(<6I4hi;& zj0i}K3rtT5&&!T$7P@NyRK{2mmskLub?XcBpz* zoBUb+q?YT)qK`(dyK^oI#4Y?TR`TP(mNzdo9lx|2Wv183nl0b`h(B+YxJk_apiZE* N44$rjF6*2UngCbET5A9R literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/coral5.png b/mods_disabled/ethereal/textures/coral5.png new file mode 100644 index 0000000000000000000000000000000000000000..c602bcebb0133f60ec910f55c7a4b4f2f4894f64 GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Uw}`DE0CV?d&a_jv2%8YP2Uo- zU{~_Io$iF}&ze}U@NcwEu-0iB`AB5ZbC9G!|2v>1>Jxk(}$e%vvu1>?!X&JLawH!`v zt;|iByV>BEWX{sP^)A2VoWxlQ??1NAwkom%2Dv}9k3WKMspUXO@geCxY%9`~6 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/crystal_axe.png b/mods_disabled/ethereal/textures/crystal_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..747ead42ef98808aef58c3ffc4f76d6b7fe95606 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b)ns7sbXE`cGl&QcO^7nf zNV3Z;S=Zg*)zREMZ(?xIw37{+k8D`8X5G6R7C$~L7%)uqP|O|z)YpVQK-VXqFU6yg7MCEr|kWfQZ-@tcYxbgqej=UdXs517Mi{f;sR236;6q>Nj+*K$GCp2AgbO z0^r{-zLuAJuzwLScISjIW_KD;r;&KLoC4>4r-m{+KfVnU;B%IE5&!@I07*qoM6N<$ Eg4kw#$p8QV literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/crystal_gilly_staff.png b/mods_disabled/ethereal/textures/crystal_gilly_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..33841c509daf733ab7ae518c59d628784cfd4498 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VWFVdQ&MBb@02+rn5&!@I literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/crystal_ingot.png b/mods_disabled/ethereal/textures/crystal_ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..ce14a10408152253a74144125fc6839b0d3415cc GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs|5pto1y~}TCA#)f<+~(rd$?St5WUMrOl?l^j`X+Db?($!EG+*MVE!~ dxZ2n4VbHwA!V|wvp#x|ggQu&X%Q~loCIGBmS3Cd! literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/crystal_pick.png b/mods_disabled/ethereal/textures/crystal_pick.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebd7e761a827e11bd5928577282db23956e9f50 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMV1=60*>cM^n5uu?8QDzxQ zc9|vXI+~m3O$zRrcCumfkqv9sRETc?8N^r;4oe-1aJ5u}ZT~;F!))0ak&tb2SvS7?N_#69O1J3&f2L8eAKg vc%+yF7}?wwh#U!7kl4K-%!t!q0TaWe6h0%{C*QMxHZXX)`njxgN@xNA(fU7& literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/crystal_shovel.png b/mods_disabled/ethereal/textures/crystal_shovel.png new file mode 100644 index 0000000000000000000000000000000000000000..3448deb3e262bda24e11fd63c53bf63aeedba62d GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMV1=60*>cM^n5uu?ONp_hf z>$)4fI+~m3O$zRrcCumfkqv9s7+tDs0IFjw3GxeOaCmkj4ajlwba4#fxSpKgz_@Us zz^uZs6owfK1+BQxBxHS@!zn0u@mdKI;Vst0OmP9jsO4v literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/crystal_spike.png b/mods_disabled/ethereal/textures/crystal_spike.png new file mode 100644 index 0000000000000000000000000000000000000000..61b4d88e87cc82f2d941c4dd1c8ba28ccee4a406 GIT binary patch literal 380 zcmV-?0fYXDP)p&ndfgay^(bkIS3*iTTO4{8XzNi8w)+4k^s!~TT?LQ!HeY7`P8$UO zKIBgwDUvUsvS!&+9qh0GYV5cKWyg8QN~lpTfom~?sDMVx?eER^#SXM&)Wlxv> zZ5W%E8VUCJ<{`%Febb=~9z28?(#&+z;2C0sl&aU}48aA8p-!(qe;{0Mphl3+et9Ak aJNO1b(n@L{QB1%90000RC*=0^HOpBTxCMdN$o2kWX_%?-MF=NEruoa~O cdO{2gE>rm`L(2{GfF?0`y85}Sb4q9e0RIy?=>Px# literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/default_apple_gold.png b/mods_disabled/ethereal/textures/default_apple_gold.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd32247a3169344de2844b88e282463fef16e63 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUZE2Nsb(aeWP>cxINJ`|Z ztTb(G5^HJ}U$u&T>t?ncTNzFrWw?Bn;lsP^Z=ZXA{l36r@x>FUm$4+sFPOpM*^M+H z$HCLZF@)oKa>4;_mIR()30)q+BvBzDZHCP^{@;z|OS|%a|8Cx67Hnx({_ft*dS=Dm o>S`{RkF&(sI~-N{B6L|8m~RPjzS;1Q5oi{Jr>mdKI;Vst036jqGXMYp literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/default_ice.png b/mods_disabled/ethereal/textures/default_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..2664b7b696d151e1de80c9b7c2ab774bb9bbc690 GIT binary patch literal 272 zcmV+r0q_2aP)QL`2)0yc9tU00Mp2eU@p$!~p!6oS7HjB0vDyE9|N*{ALLNBuv?* zRn&W60FY^&rDh~2*#HTOYGq**mOucRs-`j_5hj!Xp1YJq5fCIz0IkS0WdJ2YsQ}xx zHDVM+DoOy$RA@qCMn$OrR7twfB2*$;0G1)lKmal(MF4jc!~kj55flIvbO1)3krqtl Wr!(@(jripN0000s01P69Lhcgz89vd1tR;oHEz2^+bxazgw!n;^L to}ATTmIemvZgWmK!E~~VP2nXQL+MVgKR=6Cegm4o;OXk;vd$@?2>_^aF8crg literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_big_tree_sapling.png b/mods_disabled/ethereal/textures/ethereal_big_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca62104a133ea8f0cb4153e1681d17ab44a6b1b GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF zY>l*Sjdko?w183p_Qna7rrw#}^MFd3OM?7@8Q8e3|LwW}C*|0C@ zVT}oBoVr=TX^!_|wT6s!tY_G46vUqETw~Q1Z)lmO7rT{vP1&n;S0@Tw4Lci99KpPx wXR%=b+jhn&ih&%dZ{m0t&YU(w)4+g%;a0kc-vl?ocAymup00i_>zopr076AqrT_o{ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_bush.png b/mods_disabled/ethereal/textures/ethereal_bush.png new file mode 100644 index 0000000000000000000000000000000000000000..f55c05081757deebb44d156517613ff8ce7919af GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUl{6I5i&isD*YTh26t>bM zb$eLe?u63)85bVUp8!--@9E+g!f{=+*O2d!frxXw(~bJfqcIW|3`<@yUP{yBIit8J zwO8xN&!1nDyw6XoY`Js);Nq-(pVOwZ%>A8Mn<>&8@pQF>cZJmDvTld`_McZ8-OTeA zAJH*+KP$%Fyj3H_V2#Wc0~MEPi`c^xpK}}T^uL<5xUSPYuW`@(Ge5=p>!Xhd8^7x3 Rm;!VPgQu&X%Q~loCIG1uRUQBU literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_crystalgrass.png b/mods_disabled/ethereal/textures/ethereal_crystalgrass.png new file mode 100644 index 0000000000000000000000000000000000000000..c38397cc5523b08a921ad977c9d7002c81beb459 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b6=YyAid}4xvDK&gc;U25 z5pxfH14=QL1o;IsI6S+N2IORVx;Tb#T$k;+D0tX_!&!7TV^Lz02wO)k?}4i~>z6sz zw@fJEFJK6|#QftLGt`GpO6dRq literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_dry_dirt.png b/mods_disabled/ethereal/textures/ethereal_dry_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..626e7ef9ddb44e2a4ed9b61026140c344bc6641b GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUEedtYU zkncFH)MH_N!0J}-jr~za7i1k>m~vui;>9&Nx3?8PKTtL4`h{aay|X=C978y+GfrU0 z|Igq#DRZHa^lnFnjVfu1vp3CL$>8g_+~wA`loAHbnLq(Lsii9>b;YebTX6(G1Qi}lxs2w`hC+ZWf2r&c+dMWYxZ7v_|$JO9hh+@ekO9k-b=4f&lc^8+elF{r5}E)$)nX_B literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_etherium_dust.png b/mods_disabled/ethereal/textures/ethereal_etherium_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..65a3e08028894cf8acb9456de5433711e86fc06b GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=3MjGpeV(IDGT}%Wwa~ zBJxCmLX0Ire!&b5&u*jvIUb%ajv*Y^lM@bbORz5BNpxS)&@JrZapb6rpwfd!Dl9@m zWrjszjGUb_c1UP8NjT}9I_0InwzzBJ1fz)A3noocIHKU_xJHbLVTU5y>JNdRG=XL^ Nc)I$ztaD0e0sum+HM9T# literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_etherium_ore.png b/mods_disabled/ethereal/textures/ethereal_etherium_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..19ab81bbe43d4bc13a6873e7a3430f10b97dbd8a GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=1~3PflHOasBQ)S8lzL zSg?K#P>8W4$S;_|;n|HeAjiei#W95AdU8Sov#3O~Uk0zDZFG55oa(ISs=m0lEA~?0*2S zrJY5_^IIbrr0D*TxLxV`U zM)O(TQwbVPhAkH)m<-yK7ONd*5m@Y*!E~KTpm}jIqqs|7@*y38qh}HflARbjQV-m@ td4?geK%znN%(A(R%Mx}bJWgO^V>p<_^Wkk!*$bc@44$rjF6*2UngCidK@|W1 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_firethorn.png b/mods_disabled/ethereal/textures/ethereal_firethorn.png new file mode 100644 index 0000000000000000000000000000000000000000..d051e901facf50ca3874892e69eb6ac154b62b19 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uBp1|uR8;(cNI=~-PXQ& zeK}B^u_VYZn8D%MjWi&~+SA1`gyVX0f&xQ?goK2=fwh4}1c$l7o9|DP6D*1<+L@ad xe|)OX!()_RDj_k$oWsDtK$daU)4Br;3=*@sH{R!5GZAPEgQu&X%Q~loCIBXNEbssT literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_firethorn_jelly.png b/mods_disabled/ethereal/textures/ethereal_firethorn_jelly.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac90b2badb0eac12a277a312f05e54f783e6ac3 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aRb*i3$c^4!89Kcw_jPB$ z#;vEf?>>F-@a6LtZy(vQK?A6au_VYZn8D%MjWi&~%G1R$gyVX0f&!lbw?oFazCJdN z)sakEq6ZjLTXr~Sn2Aqk3UTY`?w0OZ$d+oc(($T>;}rv!5(Z9&PiweD?S;-A0h+?# M>FVdQ&MBb@01d)6`~Uy| literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_frost_leaves.png b/mods_disabled/ethereal/textures/ethereal_frost_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..57e8d8a1df4b4d612e100297edb51c289bfd74ea GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF3Zz4nq7)^Rjit>46vN_dpYi~O zm`Z~Df*F3t{CTzp$cy)MaSY**Wj)Bq%VNmEaFExPLz6?{15-uN|5kRk|yrtW*1{on|z@o*U1hEcJ}F|8kkP=1r#RCw-jHW~f_RRLqlOVaa5E(ij}D hT5*@>RJKb$8MjLE*UtLZITL6VgQu&X%Q~loCIFzyS}gzo literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_frost_tree.png b/mods_disabled/ethereal/textures/ethereal_frost_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..fb25466fb5191157b3e0504b40db726faadadc93 GIT binary patch literal 670 zcmV;P0%84$P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^RW3N2bPDNB8b~7$DE-^7j^FlWO00H_*L_t&- z83n<~avMnu1;7W?-c3@{#N2%J|9_b6m>7vv*ABp$^zq|o2tFTo?|n=q9YvO;;D7!3 z{m0Nc2p&vJjjSjEPyxA%|d z*K_p&Af>qW%*P{@3{xh69YvpSkN13@L<-eS%oOCV4Izy?b(?$vWH%t+;oIWY6=*KvCgJBXxI z7~Y79*fTLP8{mCNr4Vx|cU?v)&NhN~dv5?fMO7oiU)P>%BJay}^Z)<=07*qoM6N<$ Ef>)O>m;e9( literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_frost_tree_sapling.png b/mods_disabled/ethereal/textures/ethereal_frost_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..793b226197a869ff07ee73b0d63f2edeb07c341a GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF(@}xQ1}KIF*c&e}b_ThTtt7}Vn1Pv%gTLIny}J}B;^*n&7{U>qoZ!H;$KV^I z#ABAjtQ?<3oS8cw?Kp7k0Q01$nGYfh7<5Yd($6vpoW1>(ZP{w6W%Ie!inxy@)H9@R n%xN;JxaTO*^RSplLV{uMcfrsty~pK%CNp@t`njxgN@xNAaOqdZ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_frost_tree_top.png b/mods_disabled/ethereal/textures/ethereal_frost_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..84f19f021e3116f19459ca3b1a586ca69c4dfb4b GIT binary patch literal 797 zcmV+&1LFLNP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^RW3>6G5 z9b7EKvH$=88gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^7j^FlWO00MbQL_t(2 zQ$5m4jvGY)2H?LQU0vPNevHQ+j~5vp(I^@r0a+)?iUmi=I(tsR5jX?~$chCU*aX1> zO%yT$O#(#8*!a^iCDmV*(WkU8w zJi>kQ@ay#-zm}KxtHDelj!y1$u8S@zwYt5zB1pPfZr{A3T9l3 zMp$txO(r^Fl#*&=g{i2@#%R!mh zENo24C+pI6Q(v48HrA=N&kNpl{?q9ZB>>=p0l-PdiHiYg7j)e+6K$3aKA-d`!J^hn z>zme75bt1|_FB>8{L%5GKG+jlPO3@>p{)Pu&)e7Yc6o5hI6}ywi!O!!=|=#lvnC+9 zpf`s_qbyJSU9EkHFWxQo2dzv1pskN7@Eay^^ zPWy=He1afcmK@2O-I_Dvl6NlbO)QzW$!qAXR`*6T>(jy82`in}05~G5@g3`;@ku-X zaWx+DrCzuB&C+j_0`E7Sh9{jWBr zlx&n|+j^PzhU|EH-nA=J@c!AQ^?oSwN(f3A=WLkEX;~JGQ_5b>Z(jcV)U^!+;RFDey%7N2tTxxbf5^--@u9cbHvrzB bm%Y*d0y%amR&LqO00000NkvXXu0mjfG6QXc literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_bamboo_side.png b/mods_disabled/ethereal/textures/ethereal_grass_bamboo_side.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2548c2241f2f4307de89398174f69696e31011 GIT binary patch literal 578 zcmV-I0=@l-P)~G^qdp0nbT9 zK~y-)?U220(@+?OpBy`}Mhhk>LlLo62$&)H!8r2i|MSoI1pvOlQ0bmF QIRF3v07*qoM6N<$g7FROTL1t6 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_bamboo_top.png b/mods_disabled/ethereal/textures/ethereal_grass_bamboo_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2360d39852bb82dca55bbd650b2200988095a2fd GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{ocYf^_v)&%SHDRvoC?ek~b z70-7pUFclA)V_OOaNC05@)b^Gx;ARw zs)V*}9@E#yv~KgCwJEM+S8&Ik=m~pb_0y{k0Igt5@^*J&=wOxg0CG4BJR*x37`TN& zn2}-D90{Nxdx@v7EBgZ;0XAlV+B}n$K%uRkE{-7*mqpJi#?{QuexDbK~v)o6S7pg>NQ4epT-8GVS@_ itYdC0 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_cold_side.png b/mods_disabled/ethereal/textures/ethereal_grass_cold_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a92e3a603b2b031c8f16d3d4e0031c0a439ce6a5 GIT binary patch literal 557 zcmV+|0@D47P)~G^qdp0lG;< zK~y-)?U2206G0S4&+LqM$GhG&c5p%wBpRM0^eJgjIwTjA)D*C3BBi0G2xSnDk*9z% z2+2ahvAzBo?|65|Lt#JyrKjOYSGv;o-Qphc>fJN{=pp+u%Y5Yc@(texCWWw5dvMi-y%filaMj~Z{poMml?m^7x`i4%F zvct1pmjuP4qLu+}ZSkt1HV$JpEN+*?S`a3Z-hRevWqu#)#4#VQFvbu7eEB>j?YF6A zKt+Qvg3du3fZ5!#7*A=rEdW6T1R8*(*FhycO)riyw#Kau5 zl_ZfSQ&1=cl}E93R4K$^oAzEGJ6}@FEp}`uM9ATT7zPQ(SmLOSF&3``Nl#;l(q; zE2hU5&5Wy>5m7!Tx_nVg{rr@s1qro_5~`LZH!e%*SeDwpDzRy8a{HRhzBSoh8*=+L zW=!3fIbmy2-_E=#JMw04&!4roWX7RlFYVJifL1UjdAqwXbg;^L06Clm9+AZi4BWyX z%*Zfnjs#GUy~NYkmHh#a02{MFZJx1%-OtrXN&*-ORLiN zE!TP6(7vqQ@n%xv6tR0sJ3ZY+99HB$b$^}}DSKV7x$$=Y&1N3)!Z#Bizbf~4nfCne i*5^^|{ZHQhVt;m8uTSGvm~{oxQnmsmTj**0 zXp3#Z+cq6S*Fgn>!Q>WB`&4#=SywFQb41W5h!qVLvGOp5!7WpC2+}inp>R}1gRvXl zzj&HR6iP+_*xF;A{=^gp5%l@+=6NDe)V?6!!gz9b_ra&PM@i^905tgqWP|k-!*Rgp zcP|s=D~5w10A(v^%!>1qS+YnoS002ovPDHLkV1m#1_xAt* literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_crystal_top.png b/mods_disabled/ethereal/textures/ethereal_grass_crystal_top.png new file mode 100644 index 0000000000000000000000000000000000000000..78a737205a55154a7060cbc5b1f5c248d68f7138 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{octBgaasz;)-Z<1O-hFU}k+er%pmY>8e{g<)cyX;O)KVx?YMnNeDeMQXWuR-<)xjag2YbzZAQ zQJ;NLr)6ooOIe?N%_Pt2$*%SN-G@refmSdkdAqwXbg;^L06Clm9+AZi4BWyX%*Zfn zjs#GUy~NYkmHh#a02{MFZJx1%-OtrXN&*-ORLiNE!TP6 z(7vqQ@n%xv6tR0sJ3ZY+99HB$b$^}}DSKV7x$$=Y&1N3)!Z#Bizbf~4nfCne*5^^| e{ZHQhVt;m~G^qdp0i;Pp zK~y-)?T*cA)KCD0zx$J$nUBVT@-)m-i;p|IB+#wq}E{LNGCMuq;S&> z(&RKlkG7fNK?3i45V|9Zj=8q1!vGP2@x(^4H9eW>*a(=Zl03jcs*z>lx!O)V)j4x4 z08w<*lj3G@0NBFuI4Ri#ctlAqKx2@6J*dc@QeBFAyo;Y9C)pDpgh=C8|z}vVX zrD2ZcVUltAsjk`x@A@rI#EfH|A?r!;{F|#%YXFcYr`M5%DzMv(%O%xHj5NdTBO!Z& z@tj?4sxLvIOEm$!dbVs%0bFRvWWo8et}YH$^?L@ejvX&ooB}^bPxzCQzr-E+UH(7+ ZjPGAS#djAgYMlT8002ovPDHLkV1hY9>lpw5 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_fiery_top.png b/mods_disabled/ethereal/textures/ethereal_grass_fiery_top.png new file mode 100644 index 0000000000000000000000000000000000000000..671830059d6f95c1d8a6c597b9337a054ac0f046 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?b&5>ko7UHZGW2=y4ZIWQD zmSO0Y=5LYX>6T;Yk>!{s!@odQV3q>s{{(X_pccj?Z+91l4pvzYAcwQSBeIx*fm;}a z85w5HkpK#^mw5WRvOnMvU}F}j%`;gE6q@bn;uyklopAy~{(lDH?#*55(^HBWax6Q; z0zJakFdW+5!4$D|)iDOPi5)AZd!F!MSfEmqU0T*I$)F{*VRj|k>QIJ2MHklYvZOr> z?1iNZ)vczQGelK~3oMxmw7=bQ@#)!fR5KXbmS$LV?w)SVux)!qQgxETNrs%2vsznM z&nROk57F4r>`~G^qdp0k26! zK~y-)?U6x>;!qStPy9ccsL_N3L_|kUT|?CdT!JHU;z)Op9k>GbQcDnY17dWP=*OtR zA3|!-tG2q6TU&4wTda9x)qNyzgY(=_kFb1NYC?#q6n=uuImDzl;ZJtAf==%ON0<_bF0hC!BP zD5W@^PE@N^9LJ&G?{m3a-sXC}&hdEUdc9Hs*lxFYo`(>E=krOHWef%b0M6$#Q4~=W z1pu{L4bwCM@H`Lc`#$Y<8?80>`yBw&G_h?P+qTKFj5v-d%Mz_Mj^og1G_Wj-q9~}` zZa1WqG#U+t!y&HglIJ;b9JAl=v2B|m2q=mI$8k_fkt7Me?<0hu(rh+K(-f^W2v_lT9c+Ji^U>591h6e<$O&hlTUyoNeF^~#bObz*Xt1Yn$2dPuh;p$&+GR2d;;*n kpM3l!e%Svs|L33a4P!O8`@R}xqW}N^07*qoM6N<$f;J}X_W%F@ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_gray_top.png b/mods_disabled/ethereal/textures/ethereal_grass_gray_top.png new file mode 100644 index 0000000000000000000000000000000000000000..10f5ecfd67edd89360058cf6c0a22de5d7d54b55 GIT binary patch literal 390 zcmV;10eSw3P)sxV*f)zrVj;OxPs=0004EOGiWihy@);00009 za7bBm000XU000XU0RWnu7ytkO2XskIMF-#v5C#JfeQq?V0002BNkl1r;P)~G^qdp0nSN8 zK~y-)?U27~6JZ?2KktwG@y5GeQ~f>R6*(P;s?I)!1H{E=Mj%KZ&$bOv=P$q`NLNlt3H0H z86^T{7CeV+kYjv7)bZHgOYlO6dQ&sYC3?9Pa(X46uz z7^BIQB0ZTzm0_uNN)~6QCN-+`lP)I6S=&6_%0SwqLiZF zEm*q|EH-%cWG8lXao#z_^E{N+w67UnKl>OPU$D}00kGDR4RW?NcH{2h5Pd$*_KOGa z?*XLWENV@&wXqvNeRDSkwl^OyJb-#r^DCQM3BWpkvi{d`fq#+y&p+cQcv7}QwRDqh P00000NkvXXu0mjf-!b@F literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_grove_top.png b/mods_disabled/ethereal/textures/ethereal_grass_grove_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2351a0adda2b399155b14b18786e0fb3592c23 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{ocYe2R}WU*FcrCv<6W>TYG zO0!{Ft8rSFerBI>?nJY^$rkxjEQ_a^l+83Ro@-e;-@0spP1R!ankAO?D{LB9*)^|m zXj$vnw86S{vt7qFr|zAueS6&d_XV80TNDDcf-%Y4-G!lpRn`N@;VkfoEM{Qf76xHP zhFNnYfP(BLp1!W^4|oLFm<4L{OjZJgwtBiahDcl%Js&ykkO7ZNAghl_#VW2DJYW7@ zzjqpk)be2obJ`VMwQ+hI@ixTx$opR)T zeBH-r``-N}vR|I{epdR`kQH>?JYo5V2La~as?>^gn{I7S{q<+g=H)wE{P$m4mA-Ge z&f|vmW$lhPlNzUp-Ba4>=`P~1BKN8L^Q=hO>w3+NxBG84^N1I|nfUlsxxdS_=YO|8 gk7DnC^7a?|v)jCkr#}Sb06oCq>FVdQ&MBb@0JJ-q4gdfE literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_jungle_side.png b/mods_disabled/ethereal/textures/ethereal_grass_jungle_side.png new file mode 100644 index 0000000000000000000000000000000000000000..f772f6545a2d9427085ef9066d3c23df1fe77c3b GIT binary patch literal 527 zcmV+q0`UEbP)o1U~=(0h~!h zK~y-)?U6le6j2n0pL6Ga%w%?5G^Dbyv9hxllE(iv|Hv|h7E2JUL_v~56j=yXNi@6J znYkZxuSMK|lHSG#4jg#j_Z07uXD^w{TpX zuQ9HoZXG#gbUm|duRT+oaIFC#jEOiVR3(&B5RtpEYi>ON!AF$u10q876Cy$i3Eu~{ zKSwH4VQbCoVT13}UD(u`%~en66AIw!`l6DFwikGMmc*-v?}C`0)Bm zCn88Cj9bs*puO$j)AC!l3yn7cRSBYC{%DW0x2sN@ie_d3$T<^+$mz+dyZJGof0wg- zfBgAqcc6J-IXzi*&tE?6faS+GUypXLt6Rs;JEaW3A%AlC*Km)1-~OL}#xKLOz9X{0 R408Yg002ovPDHLkV1g;OkH}&M25w;xW@MN( zM*=9wUgGKN%Km^yfQ?y@E0e_@D74kn#W6(UvgrB9X@?AWTmo5rOe$7!&EWa+@A}Pi z`~B{!U%WrR$i4NtvgB-rrIQ1zWHg)9++07hCa1Gpa`thk7oF0R5nYt1zv`4D@8jz} zM%(x9FOmK7toO6huZFCkugd*hrak|=^?4L~ d|C6`B*q`0zWjy^MAP49H22WQ%mvv4FO#tPlgRlSq literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_mushroom_side.png b/mods_disabled/ethereal/textures/ethereal_grass_mushroom_side.png new file mode 100644 index 0000000000000000000000000000000000000000..94973e702ac9f81d292638dec3d68b89d7629777 GIT binary patch literal 561 zcmV-10?z%3P)o1U~=(0lrB@ zK~y-)?U2oi(@+3~zuw$?lY7%PZ3@*z-^4}dMFcl4e2c&!BSjHrp$p%^%`BXapbs*P zpaWy4P4m-f(j-k>h=a=P-T1+Q0|yR=(|b05+G#Y#`Z&e~V7rbn)~A&Yo9&9e8xZs~ zX;&erC~MG4(-sBN8pF_p#PJPdBqa@F8xU6ss*@O@D2tRz8V1^9S2cJ_;wXi0`pBUP z`IcNUojjxlC>lx{vNA`t9!4kvJH|0CdAi240RX;q$%+_pxx8TL8dPy0USIQzX*grz zjS2OLeb&;wnKHp~$lp zjey13NtC21zBlGe_LV$ctlrC`TOH2DYnR=Hvstb`uyb)z@gsZD9hsPBzp4b zarAoz5LXGOAKx4SccpXwWd4`9C%@1C=b!Nd+-JDP;UZd=00000NkvXXu0mjf&B^$y literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_mushroom_top.png b/mods_disabled/ethereal/textures/ethereal_grass_mushroom_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2365901397b25d72ba5245593d79eba874ac776f GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv5AX?bO|Xv5v`JZPzz&{x4R2N2dk_Hki%Kv5n0T@z%2~I zj105pNB{-dOFVsD*&px-urUjAWwO`+V#kW?QgeSe0ugA)eMHVr5P5TyQf<-Y};OuRGp-7k|Ag1tk%}m zGs+msLo_xtJ5*{jSWI`3_DI|o$}oGfNcVJS(TtgA&D{^)$zKU{CWEJ|pUXO@geCyW CHDtm7 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_prairie_side.png b/mods_disabled/ethereal/textures/ethereal_grass_prairie_side.png new file mode 100644 index 0000000000000000000000000000000000000000..731b08f7812bdc7c590c991ee24ab7581eefc9ff GIT binary patch literal 606 zcmV-k0-^nhP)o1U~=(0qaRb zK~y-)?T^1}6LA2=Kli=wx8J*X*O;1=w6#m6;v$Mj#i`oOK@df7ad5FX6ro~qlA9cY zi$9?VMo%6fX?2*ZR*0eqp;NSP<9ibA+q7FPI-wzsV=f-OiQ_tGUty92vE39XX>fZL z2M>GXOCD(?`2MBC>cwvE`APuXf%M6uxRg%^Qk zSqPm1U`)*F@&;i&!_D_FcKmXX*XNmEddx=6Ff{5R03J?N10~Jw=Mb$mwv?1dT%OFl z3tY#dufGR?xtI58H@nPEF9x-hO{7T_z{0(&ug(C3Ut{bc$?WuEaO>&m09dF@?qmRk slH^yn8w&u&`IGU##2)!x{y+bWpUPdkF$y(h&Hw-a07*qoM6N<$g0|rbSpWb4 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_grass_prairie_top.png b/mods_disabled/ethereal/textures/ethereal_grass_prairie_top.png new file mode 100644 index 0000000000000000000000000000000000000000..2ceecaacaa2db2c57e4a796752a501df19d8a77a GIT binary patch literal 461 zcmV;;0W$uHP)GiHh}X^t~(kv49VIB%3WbCxuAnKyHtIdz{qcAz|Zqc?n{ zIe(};fvP@(tU!dVL4vS5g|j}0wnB@!MUK2jtF%^+zEG^TSF^xcy1b*jzNERwUB1Dk zzrv-##-_r@r^Cpn#L1||%BaT6sm9Ey%FwIJ(W}nYu12k`g8%>k0b)x>L;#2d9Y_EG z010qNS#tmY3ljhU3ljkVnw%H_000McNliru;0zE30}%>o1U~=(0LDo~K~xyi6^~bT z!axuNM|fevrfHc)D>>i*HaOk?cozTts;Y?}o*0v7*W81kkb8OuELH2l3_^nM$5$P^ zO)&GYAt68MHhGF}WeiHFiJ8&BCf9=qMT}G3@~%ODj#sP;tIe4Ms~GE5eqMWul4%c@49OaCznZCa|9txk8*xUl!6_BfUkfT!zbv^Exa_d!mHP60 z_GO|5b1hKAc=6~;q&``+rQUkXBHi6yYs|T!2QAA#_mK|%|9Dzb00000NkvXXu0mjf DC{4oM literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_gray_tree_sapling.png b/mods_disabled/ethereal/textures/ethereal_gray_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..e46f05b432411db8a2a629f9c63ed3873a938799 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85p>QK$!8;-MT+OLG}_)Usv|qJfeKeI;@3qr+`9IC9V-A!TD(= z<%vb93;~Imc_n&&t|1C##(JiDhKBB+oy>u%Hha1_hFJI~FVOT@Ve*$hbrPRU@0AnR zd6*QK-^6Tr&^Fj)$udTbdzwZJEDjerc(_0DGX9z`FT$t5>|w^Tgi)kHL43j+t{J@> frgT_aNlGxBG7QT}i9P58bUuTptDnm{r-UW|4sdO1 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_jungle_tree_sapling.png b/mods_disabled/ethereal/textures/ethereal_jungle_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..c70615f7fb6fb035b9b7875c2f315e0a4f802680 GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_o{+5N5n|x9$&6kiEpy*OmP?k0>9r4r`&@DWH&4iEBhjaDG}z zd16s2LqK9?UWuNcYluRbv7V`(p`rU{Cv%`Gn*g5>S0HVsqhjZxsEw1o?rS4g_rMJpAv!E5wFx0&?O#T^vIs zBv}t~GBr5}FmLGCerclK|NpBw9kygMPB5OC$#`kY86E{&i>0hf4m&b$Yk#wlHO4$M zi2cCVZ*NN&?rcB3nvr4NekO+boD2ni3=F@y7(V<{Wtgx|ltHCh>I3`5#Vi|6I)B;@ Ove?tr&t;ucLK6T16JmD& literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_mushroom_sapling.png b/mods_disabled/ethereal/textures/ethereal_mushroom_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..5d21922527b0c14f1d33cf13ebcc3f3178024dd9 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy#sNMdt_}cm=kz@Kj2O zu8>t;W^9(@YZw}0dCbIoaz$ciQ_7FGn?AKc5!HO&QTXDkWw3ubV5 zb|VeQsq}Pl46!)wqh;tZ!Ae3o@_oEkbK@`sP0#+D27?zQ!DUb8zopr02Xjz A>i_@% literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_pine_tree_sapling.png b/mods_disabled/ethereal/textures/ethereal_pine_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6c0c1bb0d0793076044dfe601eb96f380e5b76 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ1=6<0I*vwa5M-vUtSF(Z zlIy9bDhFhn>8LC z?J@YqDDl|hFe}Gr5ogAZr2Pku9blgHRP#Y(0fSCSU;0@lfwR$H*_N%AUN)awt%&>B rg9?V!jX6z5755w^dIXDkBqSJCuM$+9BldSC&}0TrS3j3^P6*TuynK?tSdfB>R6ee4p7qL|c#Qu%{U$V-{vHm+aM4MS@p0K*`4e9uNL5(r>*ZSC&uyIGb`CRU06x5PfRO;*>?an0|( z|M|(po{)b^V$aUH-R^-%-S+1Cot?c8KmJzU%=YGbl4YOY*b-^{S(9J0Jde^!iI=XWW1-KV^To~l=PHV#h1h zR`TLgiqnog?by?f{U3JhG;Vwu#(AUNs>gBmo6!^8=t%vrg-y>rLrtF-QMj!Jb&Q~fTpZD=iJbvFll>^ z(Qslr`@0WDL8in%H-AC6R$f~Yf^i_sAs$+3SZp4+nE|ZWJce zvXX-cTvSF4fI|o3PNzjFsS2$w(4ig{A2Mq64i;Ia-9NM00000NkvXXu0mjf DcJ1et literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_sakura_door_inv.png b/mods_disabled/ethereal/textures/ethereal_sakura_door_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..c6920cee5da7eae24a48205bf7412604ee81399a GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!aez;Vs{;c=OS)xihDleheNUd% zq!RmS6<#x|edafK&u;Qw)Df_}Jz)FHq#bkO_AN@@w>azjtJf>Mg?fS78B2ovf*Bm1 z-ADs+!aZFaLnJP5?e*kqFyL^tPK=)L@ZWOXSrMJp^%1uJCQMrG+&bsBNB@BvK0W3y zd>6X7f8IWy?SWvQpuVn@(%0x;m%C#4ZZ^2I&OFaMVFH`dUWVrl$@dZ%w_jj&xf0lP Q3}^*|r>mdKI;Vst06>~jeE8urYEXv!W5}#{U@5u+(JSBE4CNrcg7;7w1f-t_oWQN$WO#J}m z2XM_(Qk%IcX^9fqF`RFAO#Sf8eyY4?x5^(Y?`_}@(EsV(p;B8^62=#3x49_^0JOUr zcGhBvl7k^SYeir6I*RgFhHX&^{&Wxg%D>-(lY+S^!Hy*u>&?bwhR(M;OlBw;Yf{6h eAE5l}J$L|~wZpDnU79@r0000>0AT7&P)tlXsrGRWAF%Ih*T+ z(BAETczS$01K;tahDavNe3txh$EMAK+%*>cPG1)s(fIa$SHw*7DT1l_H?rL7ZZ+#o h&;Rzo>*rRvoZ>Q@X}R_)|A8)H@O1TaS?83{1OSjOM`r*4 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_sakura_sapling.png b/mods_disabled/ethereal/textures/ethereal_sakura_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..f514b67cd55e4bafd672974b54e396f9b9838daf GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZ%`eI|3-&1CR&^>bP0l+XkKT=g$a literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_sakura_trunk.png b/mods_disabled/ethereal/textures/ethereal_sakura_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..82d19bd12edddc939f0d2eafe05fcc0b1264fdcd GIT binary patch literal 564 zcmV-40?Yl0P)cn3Tu_QzSb<|9{@u?!6`zFu@010>R^czVve9+0D7`mJy^nQt)i3Fi8e?k zV#al7mky>itca#Zy0$XTT2UpBxkGb(=SY3q|EKr<_x|^Q*;*7rY{?J!H+qEsK&k91 zKSE$aG)0ujYs4XUm)g+r7Q`FGbTrW^IL;Eh^cI@ihv}A7dz(>JeFEk@X$tG(>%y7&>PwqN>tPmf7cf70(e)N-GYZpMA=8K6 zj;!MLd zs|602KONQ-a>s&AryarBXU10Phv?O;7$ZWmPM4!+cH~2 z>5t}WT2xS7mpvx7-)l|ByrU8GFhBolSH>eV%l`qri22cfcE48u0000VWuujijVi#a0005o zNklBjE6vrQ-bm-=Mg7l=cYtadtZbA2uaFVIurK`*t;SK>CnNo@VwW=7ikd?@zkUXP&(%@J^SBqM9A8I)HcK<95mRuBu{05$WZhqZBWsON*?SSkOQi0m|e8%;v zil1T&soFxn0b7IGf%_8^Sr{p?n>cD9eTKwQLR3Pby2f|{5#1)CssU}hb`9mH?+lrc zI)Q+%K3;!`XBC+J8hVnUif6V0J=}t%@p?TdE3kjN#`-FX$bGvTW=pWk5gH%+SGmjY zME3^l1LDX>oaAm1_71toBCUSzJwHo(w@XKatBhqpTdL2 zq4s*RpU+$GMCYEtG%wb_n!kA4YCl3ze-uyT`F!ug8!if)8G0%Ck;i*S(7FE)Kg%k` T7h==O00000NkvXXu0mjf9s&6m literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_snowygrass.png b/mods_disabled/ethereal/textures/ethereal_snowygrass.png new file mode 100644 index 0000000000000000000000000000000000000000..10374fb4d4f64f75395ae195785ede3cbbd9cc90 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHVEbxddW?wc6x=<11Hv2m#DR*0 z0(?STfpl_mazQ~sOH0eVdGr4N{~w`d)&LY`ED7=pW^j0RBMrn!@^*J&{gMCjIFOU# z>Eal|A|b`5ThD-f+XL1$Y#bW5jB*dW-qPDR z-D1LvOA#t7R?MEOQqE&toA|{#jMc(x$$wXZg`mdKI;Vst0Nub|RR910 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_sponge.png b/mods_disabled/ethereal/textures/ethereal_sponge.png new file mode 100644 index 0000000000000000000000000000000000000000..e739ec4c80fbf710b4e112a85f36e253435b722f GIT binary patch literal 272 zcmV+r0q_2aP)Q>zJl})J^X10PWkftwu!M;sDysySs%;u_6GV8w$JJ-O@e)6RQD8 ztK8l00IItbc$=^hEdYTU$BVVuV@?1Uceb=?%xB&JCwtx4yS=>K05yu;ip$;IeE>V$t={ed088E7Xx;AK69C(*-JRa;?)Cuax!c|D?*ISt WuTuxrm$BRc0000bZsHyoTw(knYK$n@h2S0001+ zNklQ_%yU!;x6z10RFnNj3Xk)VF1~?tEy8vaS{NK8wk7H%;GKp0g4hO zi`>rc0GYcZGd#j09sqF~vpd7pLM{Li60@>4%vJ6H5*p3KWv+If01+s>HE7Q5UH~Y& z%x9d&+{^&Hm&}~*hHlLO6eg|Be((MO02a>8W|{w=MF8A+?0Jp$fAs+NWy{L$|NsBI WAV)CsdvE6e0000_RelF{r5}E+vk~{YR literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_wild_onion_1.png b/mods_disabled/ethereal/textures/ethereal_wild_onion_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0132e799abe5e8f250cb01883f125b240fe281eb GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;V{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}c0*}aI1_r*vAk26?e?NS%G}c0*}aI1_r*vAk26?e?NS%G}c0*}aI1_r*vAk26?e?NS%G}c0*}aI1_r*vAk26?e?iq h8E_aGuy8R5GBA5FTs;)#?EqB3;OXk;vd$@?2>@&8Fx3D6 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/ethereal_wild_onion_5.png b/mods_disabled/ethereal/textures/ethereal_wild_onion_5.png new file mode 100644 index 0000000000000000000000000000000000000000..5f60e095a0903acb40252e77406df0424c510939 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b6=YzrURM*hsjvI+>NOV+ zc5Mo61WGZM1o;IsI6S+N2IMGux;Tb#Tu)9|pefK0)ML;ksB?@Xso{tKj~bgWvl<&4 Z1FtH>*2yIkjsq1lc)I$ztaD0e0sw^_ft=UF~G==1gE ziQ*Dj{R=D_tCnpKXw>XkDAS;5y4dvDO9s=H8IGcs2d|lxNIj_(SGY5mSH)c6`-~}5 hc3t0_x@>+Vp?wsOMq4~c)I$ztaD0e0sw5wQ{w;t literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/fern.png b/mods_disabled/ethereal/textures/fern.png new file mode 100644 index 0000000000000000000000000000000000000000..4db4f88c0e28bf0207d37b37ab87c186aa59a2e5 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a&0t{Ab=5TTP%{qDwU08i zi8t{mu#IT*E@<ON-*RK{2mO>4_;kl^!L*(s>N=AKdIDLmugl1VRCF{EtR);3+M zF_b-%!_~yVz=UljLU#6!tcfniAA#l0|jp8FbEp3PK^G;Ukx;i!PC{xWt~$( F696XAE${#U literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/fish_cooked.png b/mods_disabled/ethereal/textures/fish_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..2a330ea02c283c12cd39fd1924941aa7c94bfb72 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*t3?v(r4=o2$1_3@HuK)l42Qu~5M4U{eLtK=T z0yGPv^~)2DnzGE>b1f!U*ez>w-8{)>>y&`~i!+X|uelNNECZ;4u_VYZn8D%MjWi(V znx~6nh{WaO1cwH89*qa0THj^0%HJ}H=v`+K(KD`Fr>zx!m9bO&z#6Hh2d*;Pel|R4 z{U-6fhUt=*z&*pq^Zq;X@c1k=R{yXr>Q3UF&(B#pq~8cxR&Q_pJJbHTa!KC|>_}%Rl%G6llAwTwro-LW*1?{f=MobV nIBT086($+l2_xYdX&!G|Ns9bLa}84 z0004WQchCR5P<`wVIagu4=4p02;V#cT~hodxzI;EACJ1CfJK9 zqQ!Lee3}5ITk8=RVQWeQ4FP$mgQ~7;I#(2&kVP0xHMhf<<;)#xOF~*9n??VYs?6sh z4U+INTy$A*UBXwAuMJQNXgkxu9V_OC9Uckyi@yVJM#*zdee!c!GXikCTtAM^$D9O;|=R{zov2+2AUk#7J1 N002ovPDHLkV1i^@n~(qi literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/fishing_rod.png b/mods_disabled/ethereal/textures/fishing_rod.png new file mode 100644 index 0000000000000000000000000000000000000000..371561d546fb4c2dde78b3bbb9cfbdb5bed982a6 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*t3?v(r4=o2$`~f~8u7V5<0ruJj!N%RG)}LS8 znbTYU0Vu^-666=m;PC858jzFV>Eak7ak+NFMcxJj4%XQR7%ZCl0>l&kuk5*Tt=w?p z{?maP>rGc0PkF=e%~n%*6QlD-xhXG1*XVNoO!8b_^6$JNt8?KUBlhU8dT$O?mOJsy oxuiL_)AGsZFT&6LuWi$ejgjJ7Yy8^y5YR3LPgg&ebxsLQ0ES;hYXATM literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/fishing_rod_baited.png b/mods_disabled/ethereal/textures/fishing_rod_baited.png new file mode 100644 index 0000000000000000000000000000000000000000..22989f3a613480fc45a8dc490ee26f13a146740b GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*t3?v(r4=o2$q5(c3t_%#C0ruJj!N%RG)`$9f zo~>T-`Nf^D_0Hlz1&k#@e!&b5&u*jvIr*M0jv*44b0_TPZ7|?rRi3$nPx$~xA|uy} z;Ff#5zt=Z(Jo+%NW%uQu@=QmjO-NBa)4kDTQlo+5zTTc9#@iywKNBaP3aYeM<(wh# zTlZc>)Vl*dFUqA)_UTPsx@b?=F{2clbGsi|FW=?-^!@r&wT-`Nf?BJNY<)3K&a*{DK)Ap4~_Tatb_M977~7Z|!m9YB1no*}mZ3ZS^hk8ee$t zRe!n@{O^B@T5p%2puV0;;>^1Yf&cx)l3u`2X z3anV~w&g*R`d,$rjF6*2U FngCvrRP_J= literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/glostone.png b/mods_disabled/ethereal/textures/glostone.png new file mode 100644 index 0000000000000000000000000000000000000000..c4e4c28d4cdf509d49f86c6cf4b8197e64a245b9 GIT binary patch literal 524 zcmV+n0`vWeP)nxRO~Xou$)OYqRFBaZtGtn?m`?3#BQ!Y zcY4Ln<0|9&-InyHts6SSZhjmfK91ep6aWAoSC&o2g=jK!g~##es)|RLfjGi4n??0> zI*sl3pWh;x@4g=C_parKgLv(Gb)%6H3=r}7v~@Jn*K7K%YlQ`f&CJb-DBRJlb8h4G zEAxd#Gv0i?`ukUi#;3iiN>tt4%^F~xgJ`g5W%zncdnM7d0P%5HRS{D}=+FitQbEK* z;m`1IY5#Qh$M?SPKm%~|G1ZrMb$9Dj?TXB!)2sW34S<;4OjUh(gqu4N>9RGC2Rf>r zAK&lKXGE&1o2yEgueIDmM5~ekbY;~u5Bsn`y9iYciwJiQ7Rd+z`ncV>OGJp}+x?yy zr}H_?d8nHm>oE5@hPeX`kVeLTw>tn3l*l6+K)3A+Kvxk_WD+yF0sIeYSb;tHCg;)s O00008}}0%{~) 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 Ae*gdg literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/illumishroom3.png b/mods_disabled/ethereal/textures/illumishroom3.png new file mode 100644 index 0000000000000000000000000000000000000000..afc5311b25a2f3d2a4acd2335b7d68cab86ceb73 GIT binary patch literal 2426 zcmV-=35E8FP)<@8MHGx? zQlg2ChEde1&R^4U43ii&L^2QQXn+bQoU_k3OLX+vvZF9ci&ROmSukXJ&tpX+Sl)q;&We9 z{=(sd0M&X0L${~m9_+s;E@LnfV7(9*iy4w@9u=Vc6f}p-UECQ=Qf7BcYa?7 z$%FZApY6OJ0J-w&zr{HRD0*sEhpHm#P!v?zcgOnzoFa{SlV<&1ti2Umf-N6rytP*1 z=#zj4Kwh9({xmDy>$6+$UOFcOs;^+{G#S+g9nmsc;!C@=QRZfLkr!8JmRGDe_mFrV z_#PND+SNmhxm?HWBim-y-So`Tv9mMqw(ZvemCjWpMO9HPL6!Y?-Q3jDI%$v1$%eI$ zVatng4xECukXy7UkcqJhz^UKT49#*l*?({L4|n|JYyeCZOh#I}N`G~TDpJXz5{6A# zKl?+Bxwv}EfD!P02z;bgL%Tf)YOmP&G#ejy_spiVGGMBVOPo5Y{M|?gW#3)5)B#^M zt$Ro&+S@CPu6m$iz?NuHKtHLdpJ+opsvaX?%(h=X^b!Ac7*KRne5V9gDkjYN=iLbW zqYj6H?~StZU!A43)!a|Osgh;|P-2Y5nDZr$uRM1Vs*Vb8RD24e0uV6Xx|h|SaC~Ky zl|dSHPO+iAJ`@GyMFq^cAL!A=&&x!6lGWa-cDgCnuAajO9EyPI>9c zxP>KTW)g`bbeL8_qY%;z()^T1pwGXE`rc2o_kZdbaO^KJB2&fESDiP2KtWoK_vj$0 zj!V0Rte<82!Y#<`G$cbfIY5W$L7AC+lr-;ar;9GHKFMD(d_7(Ldd8B0&3?q*mloD= zeB~InL>EtlB&L7jPw?#}7*qh(+ zWf%VB+s*jdpWhVj+OhR@8TkJ@-{-431@z*Fce@G@JTt!sZr@{1EewDD{Q)OBg)S`z zvSF?SEP$37z>KO3Fy=t?iyz)A8`j>1(@E-48SdKgp!WLr=O6!qo}~yW0WNv?-*x_} z|2?~9)@n|jrlffTH=@cpizi^r2J!+~Kl@=O$3mQZmsB5QQRf^wr=y zUzvJM0DE5}aJXwn81CBf=5W`J_ORLp<14q37s<$u zCoAXkmV-wg^mS?FGCJL^Y(8(V#L?A&r$td^U$tz+^RKCW;nTDDo=0A!h}!58<4}mL++yredIcS*9i?HOt!C=^k>AKY5dT_WAp9 zs#2?E5iXqG(zY$462aZUgyVd$S`;Qg1rmH#y6W?k-7fy1)ubc1B1t^YBc zW?Gg5$%}DSrxFES^5PQG%mYHE$9L$_#kbpoheSNzV&sUH@{Pl8xkrp&n05 zt9c#Htz)$Z>t`DnGa*SjB&bd4n9C*cTG(=yI7+o1ZIL8>`ium=KUv)mK(lP5pM{{7 z5QX2BM*TC`a*ud^h%Gk*Dsj94xKM{F(x{IS)FK_GLu?6o(Zjg_BXc-6l=j$WX*I9K z_Y8TlS8BC7QMlza1DAa0tIzGf?*m(9X6kw!Br(3fpa%|pPnT9id;L2}bCHSmhqSbT zz($-ZzBf(j&EOP_lsMPrWWR+m5QPD0W|?fy%0zoDNs3yF(0sS+_I5K&4-?eZ$k}`+ z_}2X*?XmyRPWJ|y^-o~rAbIi6+BrF8Hm)=7#bbDvzpK}|`sr*Uq+{IB2410{KJ0Ou~ixs#;%susmDjxPR; zmF`72{V3zDNsg~<0rK+s7w4qi60>bl2u;mbI1*bhA(V}SJT%o0HW6Q^{`qq!1-E+rn=L5fzzIR*~ zPrM75(_TN)-e3i%j>+~Gl3^F83!3HoIN6`qVLI=Vq$hMZ41qV`dpT+Lq%JN$3UsyC zU%-}Z+xesPw`FZ^so-o|HhUB((IW(0Xd5|xf6w-Jpcdz07*qoM6N<$f-u0-H~;_u literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/light_staff.png b/mods_disabled/ethereal/textures/light_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..983a3dcfcdab5308df534a8a7d188b72ee0be519 GIT binary patch literal 361 zcmV-v0ha!WP)s27;B1>4fdYGL8NKtp&j}7TZL&65&vg)8Y^$3t}3Hh1Z#gzaVy3*`!k} z0|$~O7AHzyw22ldfZ}Z`G)zgooogo z!?A5;kKN}5N_Tk<&0JES%@V&A#;iAs1OS{uvzUD1NP}9{=PI}sr4$e0HmxuQ;5}b) zemdHt6V$3c)mmMYQbbXdf_^JE3GQ~g&baZC1fJ&s5ClPHIN8KPq3~zeb=~0zT5Cze zT5Bikg5``cVyz_&`@Wz3nv5~hXf&kX?~5@;raDPu%+&BVj>(5I=>epq00000NkvXX Hu0mjf%<7$a literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/lightstring.png b/mods_disabled/ethereal/textures/lightstring.png new file mode 100644 index 0000000000000000000000000000000000000000..285b5abeb5341a2a569c6ec7b4cd537f7916c782 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bO)b&gv}NOgL;J5>yY%AK zbN8j9g+M9Bk|4ie28U-i(tw-{PZ!4!j_b0$2YC-0@EmzDnLVI~Z@~`910CWXx8K+Y zKegd|(EOnB$O*^rxkei6s&i}`&n@J3`JiR2$XBy-%VVkA2{)75^f}Dq4Q7YeJOAz2 xwLEwEkDaL}d@jyQinCk(UGK8Fyqx;OXk;vd$@?2>=d7PPPC5 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_acacia_leaves.png b/mods_disabled/ethereal/textures/moretrees_acacia_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..08cf3998c0c8d47ae63ddcf51878b725faec497e GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPggK7CvSv7MGoE(}6-)JY5_^EKaYT zq$|{HAkZp5w`r}@W3A+()`T67MU&?&INtG?!?b|aN0qPlkkCfaxvjEY%GsaHZ~p!E z_O#UcjJZW$-cFEQzH*K7Gd=e}*AKQX63bWSx1V8iWhgj&bO&R@nG@-ecP)I6_ZLr3 zmJAkH6TB}~XH`e)9ZiOYlNGjEMROm_2y}Zas;e9j^6`Cdsh2V9%#VM6<+!Zj&n|JB z*ml6e*Gxm}b;YgaA^SgeEzw^mY*JUQ@ICYJ`Yzrsl~&#^x%0J7o*eJ?B(l$A{eC`g e>b@O5A6QpKmzL{@-S7eWkHOQ`&t;ucLK6V4LxIx( literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_birch_leaves.png b/mods_disabled/ethereal/textures/moretrees_birch_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..547f133b13bf38d28f501bca5b37d162851bfe3c GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf%mAMdS9UW7hGGUeeQ8bu21Y#w zaZPbfD+VnOErwtQX)OtcG6n`626ht$8Er{rDAeKjXFhI|HfS9OM528KumhIj^sSO$g?2E711b!T-=cTI+H2E$N84L1#jXa+4W zErvt}hHM5MKOG$(9c^!IhExWIbOv32U4~=^hD@O27>um;$p9(ik|4j}|0Dy3!g+i9 zfZEr2x;TbNTxLDkn#kXE?yRt?y!QO9@WRWs{87;}<2Ud%ipjmG`EX;EJktT; z2Mx+fKjb_Ph%<6my;={=ivP4^ zaJWunj?qqd{ZHF`hw*}Ce>+@R6yheXkveAoK>nG!rtC8F-aViI@O1TaS?83{1OSM3 Bs3-sc literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_birch_sapling.png b/mods_disabled/ethereal/textures/moretrees_birch_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..afb03f3b0796cf32a8fa8a37c7705f83bcb1385a GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=4EOJpcdy7vlvn3}y(t zdGqGWmoJk93l;p?@lCIHXxUHx3vIVCg!0DAXR AYybcN literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_birch_trunk.png b/mods_disabled/ethereal/textures/moretrees_birch_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..2b222f7b728fbdd6ff2433ab3043585327270062 GIT binary patch literal 975 zcmV;=12FuFP)bpwg3C_f^k`HOgV^dT(g~!xUr!B z{`d3i*6K`0nDEcw&NMN&olmf@xOS(8Y*%V~%D`;@8S{( z#m%~|+tJ6}(Z|upxR8KrQ$R23;@SWI{*!J~|M%?w`S8)ix44^yvzUPY`trA=m4ISQ z$GE2d{`JMWuEDdZ-`Uad=-&VO^YiWG&d0aJx2D|D#IdHG+tI}G>f)M-eY2#Hx~!YJ ztE8rymE6n%B+5-qpylq?*pbx6#G8x2c%Y$G*C(q|Lvx zwWgZ0q?@3QfZ^4|kb-Wmpp&|*nxK$hodytBx>uEDpgq?3ZHo0XuGfQ58oteu#z zq=}e?am2W(lY(x+v!chmteS~?f@@H>uAAxM*=98_+0etwv!=DIqO6#R|Mu+J)5x`{ zox`)Fx2vF8IVkh$;P7$n0T4+yESgjvhOH;tYfNdRYk;aTx>W=(a@*=gykRa9U1^nRUCEw7zTA z_9^?PPh`-R6yV>&ehO%2YF+oF{yv6n>p8f%8Q26x6fAdd>78(f;k42wKHjrug%q`P zJ+tb2&M+9MEAudM3Ip|c1Sap@+r@C&L`{WJR9;iZEjTH!vb~dGPq?wF##yjK6Eh1B zwKC*qYzherJ>?#h5Wl;isilTt&(s-{n{!hF?0jQ$4mH;9Vwg5(!TgSFe|uYN@3@NU xq9Y7PmMoiB?q}oZ&c&v%iEz-)u*9N?&A*?ZgKopFk#SQ-$Fi5qx}Kzqa?s1L zzNe1R%&^bJr@yC-$+ekuS4qUGjH-xnly6(m%dWqthtt%+sgQTj$gI)Mwb$3r%ea}) z#H_}!mRL!TEG(skZAdvWLN+ka%&gJUwm~;9)6>1pzMsCQh{djvO+GQu$*ixCbY;)YQbz!lcZ*oY>gd(bBj* zG%Zd)GD0{ov)2r500037NkliF5LSp{=DdEh!}{`qxx%?VsvnSqK>JGUXP!6-Austz$t1LQH&iL36jw zI_(i9mp_3fE-zo}ncTYc>cwEcKmtvUR%dsZkKaFSEJOteyhrMiHcxIpzV8=1jR6P; zyYk$&EU#N+=|O4_<-na+`$wm%V@nRxt8u;qft-)mXB!i`VUO2qzgr-nr$gSmp1|*aYW*Th@2Do{sA`1YQX=^ymtTq002ovPDHLkV1iSzsYU<* literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_birch_wood.png b/mods_disabled/ethereal/textures/moretrees_birch_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..621f8eec9ce18d07d035e6be2d642ae5dd631b70 GIT binary patch literal 1075 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 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_palm_sapling.png b/mods_disabled/ethereal/textures/moretrees_palm_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..48b8cd2317ff61e787e5fa0421490333dbb65a50 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)1FsQVcB0ej;0eBAf*t zk;M!Q+`=Ht$S`Y;1W=H@#M9T6{VpdbkC~c7da4^xNV3E=qQp5rH#aq}gu%HeHL)Z$ zMWH;iBtya7(>EZzkxv|`DBIJ;F~s6@a)Lz0fezmQtC?TzjsCy9bHB$$x?$bS35q^1 zW=$0Rl>49mde7+up4o|8mWiCMf0=Uazk$^B*E0$vEB@Y;ck6PF2=02if0+n(+;U^V xY=KBNfycaRUVA<5nG0H(9ho^=44BaoP(gh5nH$=SF|l(pebi% zm|SDDQkW%gfC+n%zf6L&aD)wihNrlrCad7YyQ_gF&+&9|43W63+y7SVumXqk&0Sw_ zuL^D1^S@hf-M@hIyh2SgBmL?fk-}^|S5d+F#2y z+1{}&`ZvcT)xfsmZO;2WdF&}&7B3#2s5W2 zxqo~d!!?Xgiytb}TWnj?VIop561M)>ezopvjWI2&xyAOL_%D<4n^Ck`I~&@kd()R&!U5SUanj*M&e3#fj9)3T*+GlP`r5*Lqd>sl5XbsJZ|Lg)0=yk{G!nTvm`< zj+z$|mSv5&>DT{pGuv(CpLsuz7eq9Z#2Fo7smJ=0ES>0bBPaZ6D+v QPyhe`07*qoM6N<$g3K$h=>Px# literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/moretrees_palm_wood.png b/mods_disabled/ethereal/textures/moretrees_palm_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c0ed64188e43022639390c5790c1977f9865fe GIT binary patch literal 598 zcmV-c0;&CpP)hL>#DRDveent!yuSO&?h{7Q2sSPcRc2 z5C=pm5t?5oNh}hHR3n&OCP^(5yOCFDWXR~`qw0%mjb2_wtOt5r4xQbr2fKRuF zS+|H=QZf{>dPTN{SGkH`xQSe~gHyDBPHs-10{{R3@JU2LR2b6*!2^QBP!s^bx3;a? zc9J%2Y~%C(2iY0utkj)4Rp*nIC|;bm>Og#!(RXtj%-WYCVHn8pBh_)dS9ppo!`I3s_d56kDy_Cunq?!TB9WTj5P2_5&DGEg5}yft%q-PoiZl1LN0qmYWh8xtqwEzGB07*qoM6N<$f-a{2&;S4c literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/mushroom_block.png b/mods_disabled/ethereal/textures/mushroom_block.png new file mode 100644 index 0000000000000000000000000000000000000000..709c2fee53594fd035c2432ad7ea6588f9d260c4 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDUP32>Z=jY0obQQp1p5s$HhHsUfewP;mzG&|K6Q`2XAn zqksF81VplgL|*@_pX|8db?D-RBR4sDnzH|!adqu7U?{yCz%pA|W04Zawx&PdBvr6%&T|CrFF=ucZ#xUV*mgEg-Jv~ zR2b7Oj#(B2Aqd2R3ezs#_do6wDjz%*QU@& zLGcm&;ANI3rmqAMYWe=!&1SG*-MDDP;LJ`h>u7i-x*~IRSND+2)Q{K9cb`Hw7_=pX xPpj`%oki~>9*=|Qwz5m;OMIr8nLHhr>>o`g0=*K6A%Fk?002ovPDHLkV1n{sXoCO% literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/mushroom_soup.png b/mods_disabled/ethereal/textures/mushroom_soup.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4a5b3518b08d9e688ff029662a28317d365187 GIT binary patch literal 312 zcmV-80muG{P){>I!q`701TTOa8NTFiLM&}0000< KMNUMnLSTY8BzDLE literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/mushroom_trunk.png b/mods_disabled/ethereal/textures/mushroom_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..16859bebfc103f0cffb4676214a332cd8c2f6840 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|Kvg^eJ|V7`FJHcW`}U(pkDfk#S}3pc8z`>f>Eal|5uN-cFWl;6hsy?Y w+ZKU1+5S2u!34wfd(&Jv7z5jviF+_Gte2H-EGh1`2kK$)boFyt=akR{0FvZBqW}N^ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/mushroom_trunk_top.png b/mods_disabled/ethereal/textures/mushroom_trunk_top.png new file mode 100644 index 0000000000000000000000000000000000000000..c580203d3642ca7abcbaf5f04254da15ef33bcbd GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL8%hgh?3y^w370~qEv=}#LT=BJwMkFg)(D3 zQ$0gN_s>q|KvgZCE{-7<{%iX;3Na*9D#ySlJx^Kl7w8($G^iTiFf{OvO zrmV@*Ox1WhbxQv(B_yN+BdE(OpH0 z`Y_J)zp|Wt%}FF?E=o0>V5<-1%<<6Lj06%@=@d~syyoqZj78PnHD;bV5RV2qnpi1L zX}2pr=2R0=p;T&Q;qr#JDOnuTdKK7^LF(;`(bRQ!Bivm}ay2(E87<~mlmw_P(gBn; zDm%Vs8wm+(k^r=DiwZ)1O4+W)`JH`WjK0B~b=gUg_%LWeNwLhFFQmIMs^u&ItwxHB z`@VO&(_hSF;35sz5@7;s?O7+I&W4}q7VS7IZhU; zUG%s=@+$x}V!pJ;a1Cbo5#WQ?jOLh|waAE)M{c6g;QZsiEx>C7TCE25 z()K7n1e(D&!67kR7!Mqv;ggF=wGdqt3cw`fr@7UdFmYxRcntxiEe~4M8qbi3=UgB{ zVBl^4e53%T9!EF{_NQslu{Y)C3IVY#+>r8G6Lg9OQmbE8HtD<8dQm-oK@PDu(Bnjo z1mJ+_)y2c?TQ)iv&L0}b0V+sSJ9B;2zHK5G9z$a*AF=oP1N%!6VVzbQ`2YX_07*qo IM6N<$g76dwGynhq literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/orange_tree_sapling.png b/mods_disabled/ethereal/textures/orange_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..76cb043b062c9aa99b758bd8be3769afc056d62c GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1~M7tG-B>_!@pW8vxI7{YNqIYB{KLsPRc^I1EgwUIgbeV`tqJ-;9R+@ZC9ISgNu`sbF3qenxn#jY#j#WNt~+8T6Yfu&0z3! L^>bP0l+XkKtlv5` literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/paper_wall.png b/mods_disabled/ethereal/textures/paper_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..1908e4878eea240d2657f17634ca42c04a298ea9 GIT binary patch literal 325 zcmV-L0lNN)P)Nkl3`7?ZrPN-ifkIR0|No_-sN?vM^RSaSyKo~p<%yJ5gYnMcer?-E4rm&n z)1bDLZ7SvDMwn4bssRgm#z?{D7(#DvgR!PMkmnzVzR2TJ9YT(9BF!~8n9qPil?s`l zq=oGfBq2MD&k&TCmVT#C%X{g*e3$O0^jI1(;7_W%jWaQ?YofH~31lcn@>)NfGLG~M XjXx6p1~y5|00000NkvXXu0mjfUFD8z literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/pine_leaves.png b/mods_disabled/ethereal/textures/pine_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..a15ebf978c2078764109f88df671bbf071684881 GIT binary patch literal 982 zcmV;{11bE8P)Nkl`7#Kz&=- zQdA@Yox!eC64)GJ?w_83%34;h7MCSC7-Kq3OQQZv21Pn-9BOt%tR5R5?x_6nzyyNU zQ8FS2V@zx2u$;Mujm^j6l}jVsGZGPPv26%*!OKL+<0h{Z7tj`9wp?Q8^jeFvwGz7Tbn6aShVd?|H9TgU zQO5}hl;w47DJt$|HXsn6WIGE7pzYTPSp1zH-}q-;u`-J0Y4!wVt(n8_r=p)Xx0Uz1 z29Cc60AC>DA|rQant29tFlG{gP8{y+E%~P>p!%RNCZ7x~p&SYEYPNt!w*~+R#3vb8 zJgn{4ivH;d*u1d_4!_T2wFdQ1Pr&Y-jGcB!bwm{Y2DU5B+s}T>s{jB107*qoM6N<$ Ef^neVJpcdz literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/pine_nuts.png b/mods_disabled/ethereal/textures/pine_nuts.png new file mode 100644 index 0000000000000000000000000000000000000000..090687ef963b6b3ba75b15d768b66ca6aea03d99 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-t{`r(cy7G!o_ zpRpv!FPOpM*^M+HN6*v6F@)oKa)JZ1f5VJQ&d)4t`#5VH4jnwjsFA=q`6;uog5m;| h0L6}k9Suul86?cvb_yp=Qv&K_@O1TaS?83{1OS9HBkKSF literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/purple_leaves.png b/mods_disabled/ethereal/textures/purple_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..06160b1ea9870fd0604ee565397e89d22b33fb4f GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF3Z$DDd~|qJeHqMZ89eWp*gppf zF_i@Q1vC7P`SWZIkQeXi;uyjq%X*NJm&K5S;UKRohbD)@2d0Xk|FiPiE(g8j{y&B9 z{PEj6t8`aLS*P|@JI!c*JvW|1S?U>U|K&1o&6`ZsPx?5Y%}}?tsF)|m!jj4Sq%k;P hwc;+%sce^iGH#XRubuU+b0*L#22WQ%mvv4FO#t}hTGIdk literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/redwood_leaves.png b/mods_disabled/ethereal/textures/redwood_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb0799d95abd38657051d0f86aa6a686bd83c8c GIT binary patch literal 969 zcmV;)12+7LP)9!DC>$2;n>u$R$!j>k@K@e}!lLyNR?!|+6^B^vY zhXtwi>R!AEf@B-h;zC&>*cLTPmS8rUGv8+$)*}OEG_JhFY3PhlDax#EMuKf;o+zoF^5shr?Ev>ry9mZ0N zu4_AMu5Eu~b^3-J4sxx!OO)v4E)bMN^`TVR&>)&CS4hc+%0ztd?&1MTk=K{lU zVwTI{Ajru8^fz^D$@fUw>P>O;R0lZ{Qag?Pnm=^O@un2g%I%;xDuP{`b>(CLOSkSJ zc`5{qTpPO0U!`1oGUH7tVD`$$9rrK0N=D;^)1r74dyU|Y?*RTy8o+9YOq zgwx0Y0)QHP$pZtey<%irFt&Dsp9wX4W&CK-B3r#Fo($E^!=HASJ)uB;ptXZIzH~K0 z1bW0Bx1!hgr#lZBJgvn6V4idSCIGxr&*oo^-&x`PP2I9+K|0QKVKnWB{|!S<2Jp$o zHd1$t>!m6NugD;{lh3l!t$V1%RUWxH3;j*qu4nTi4$nvse$5B$Q9MEf`UB_uqD2c5 zHD4GIO1A5{pVLZQ<>#iy0RYs4%!Aq)A?MsCL3Q30XRdL<>lt#GJqZBNt1w`#j)at? z;&)cKUaBI4-;i5QC6>ParA;2A(a_MM1&J694V!nX;M(?ktkoHD28{a7OVHRWqS4UM z$h9GwTwuqUE||?00hiwlM6P@`oH#~xxm2X(`K_(3$3bfvR(w= rc*J3?4h^lU(E0u!nGQ*9L=^r5OitZ}7|R8I00000NkvXXu0mjfHV4`- literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/redwood_sapling.png b/mods_disabled/ethereal/textures/redwood_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..90396d9fc62158c39cfe54df476b3a45abe013c0 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUO)OwAkl=Sz68F-SaWqm3 zFjlp5(MqT^t>ewD0;*vw3GxeOaCmkj4a7 z7dj>uLnRbICmBj9978MSvTXk)=X@EMVG?2lvrdb57t%2wNTfZ*sJa(s z4B=JyNZGnOj=%SFdJ>iR6%QSTTtkR2vRaJxQc;xEYf($183_U9kW!S{fMqvbgV|&i z99bw68Dt1P&6dUT*j2}pwd!Kf3rnTTfSLnAh6H4hO3yX^rlF*aFiZt^4G@EN0&J92 z3_i=1$&8@W+&(VE7=;_F_3@aC(yi?~13OH*2l>b-q;ACf|szHueb zA<7{%#7otojfg`KT)`8R7+k`?gs1naYGWLzLK88-MpKGEJ9x-&cd7Fj*Mo^KB#1;u zSs=vh0F@(H%{EsXK!Sr}qeu0R0{{k47f9B%q&^Vq>BO&`2g{AVW44sAC2QSmDui)n4!qI4Sp1Ug1*taEbm?Y#;VVsUv31S&ws!TqgJ#uTibkg^Rz~$7vQnwKuTZ2 zlvM#~yTZEG@|P5W_TZn!MY7%V+fDen#7mo3@&7IPb7${lOx5eF4W*w)X?xuU76@=i tK~i{yh<(E*xx^Ns1Jb%H6h$r={{eOWI7Z{islEUJ002ovPDHLkV1fw3Xh;A6 literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/redwood_trunk_top.png b/mods_disabled/ethereal/textures/redwood_trunk_top.png new file mode 100644 index 0000000000000000000000000000000000000000..40ca89e4a2de1fda9fcc327c0737d96707e0cf65 GIT binary patch literal 822 zcmV-61Ihe}P)IYm6bL&P1wj`ILl^`w9TPno5I`FQNf-z~91TYt2}d0RO&kt5A{j~_ z4p1HnO(6+DB^XvD5LqS+R3{NjFCkwn5?n18VJsMCEFWn#A7VWxeOX(D00001VoOIv z0Eh)0NB{r;32;bRa{vGf6951U69E94oEQKA00(qQO+^RZ2L%v2AIyTfU;qFDTuDSh zR5;5$RDrVMAPnU7*#bg=LK>oQ_5c6!HudJP!&I{*yV;;I=J9$R$Lqv)oagy^EXR2) z#^Ckzzuo|lbk&^dx>~GlOGGJC4bFQ29<}6_GZk{1b#39W|xPtgL;b+4O~IWSZ_`1}Wm$TNqt zJ7hvAzAzfhZ@Fc{yHsh+QKQ|_D%YmQIRo&uyHlei)y*N%x`{A10i<_AiG)VLIH_|C zAvnzSYkgz5jtu1{(Ikz}XTmp~=_*2_$rPCN1u*VOnxD^w2?oQ9WC&*B2HeK$=|GrE&AK+yD$1=2(LW ze*s;*U(AnL{PB9=@}Kw*IQ+|dyge4^m;c6$Yc^?0y!6e#d{wbd|16-vHHr9P<~mK z6k_m+BYS3<-=N^(y@ZeuCNgg<@cth`SmcD1B>Wn-D1sR439Ao|kb-N6*KEYTv5(Ci z9JM63nu=eu;GKgw1+v!8FZY_~`6UlXjMoeEJZrF&abS!&mkY- zy#5cJQUW8-;rJ?qEdejldaW==uDr=-k`3fSQa5%;ZEP zL&&gveT>FD9)x)U`aHQWS*Is#`l0m0koh0q({pOxS}Ubmgcb~pR>tDfYVlWU9JPMX zwrv3;^$VBk+b~&&c1vZ^ho2v*KFZ4t(iAiRbwE`QA3;c0xm~Ba?%V_s73~)GOY~7* z0k?&s1m^DQK4$DvN)XhOIp+;zioA&x2Dv1-jVV&S%!06{6~xLcoA0@UEb8VOCJRDq zYqcW5h)O9E;*HsgKtnJN!$8B>1lqP*Hj$Qs4%DGW2vAk6#a<=Yh#!C;@}+bK1V;Qp o{tW;TDW%n0fzx3h6n!xK0Sfgz3oLATr2qf`07*qoM6N<$f<`wCC;$Ke literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/sashimi.png b/mods_disabled/ethereal/textures/sashimi.png new file mode 100644 index 0000000000000000000000000000000000000000..5263e7b23bc44267be9b70e692f4b6aea2025498 GIT binary patch literal 485 zcmV^|uyUsbv#d5cB-Bm~b0MKp5=3R9v2v&KU zZuH4Kr-B(8x}W05K!I`Qj`iM=b4*w^t6H^+DJ+K2a-7~gRBO#OXGRASUPnQg4qKmY z*=ilx(EuPlXP|CAS*LqcNYVmwN`n z+I?51U9Vl(s$D+Lkm!-{ItLQ$dj&-M|N0}41O|uOL=wq)f=FnkfoPBj$s*+Rr=*l{ zTOk2~7o9ExJ_N9pR%8LE{0C9Cwr%YmKoopjHY9ATqOFFD+gzagdcCJV=Uf@|nSMaN bxxdsOG_DThf1g+@00000NkvXXu0mjfXB@tm literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/scorched_tree.png b/mods_disabled/ethereal/textures/scorched_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..d4028ed462b345aacdc302f60ad8d053340a10de GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU*V56{(bd+|*EKXYaN4)26{vT%r;B3<$92XD4Eg^V z1QP}CC(2wDVh}W!J})SHO^89OH=>= literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/scorched_tree_top.png b/mods_disabled/ethereal/textures/scorched_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea751cfb9ceb70e9b2645cf7770888f24f3bcfc GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFP2=EDU6%r9tR8mk=SJl?lHnT8u zc5(9c_X!IRjZ28l&dsW*DsO12@9yoIJay9C`EypRTJEBg;sew>+tbA{gyTBn1cvzopr0Gt?VNB{r; literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/seaweed.png b/mods_disabled/ethereal/textures/seaweed.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e58bf1b93e9d52c573aea21cc1dc296ddb2bb7 GIT binary patch literal 506 zcmVRoymDn=`zQ3!Ye2eFfj;2?;2b#e+KB1H-=3WZK0j!p$3vztS?#Yv2) z&>^KmJ82b!yCL0-l4#*nZ1AqbJLBbY_JiYnyzhPg|NH*$e*jEXrcm-(Kl}lNa{#ko z(uiPJ0Vpn?`a~k!_!x#^Jmtt-08ILm?1?=9^lhEYbOuK_4G_;Nizr~IQl>kQ7 z!0B>ir2s60lFx=N8Xulj76KbmnH1OWUqug#M*z<%3xLtD!<5E;0+2jO;tskfd){7wjc;S0(LqBRB%JU!|U`WA2(1b4AECj}WIp$81d`1~jPw$G{OV2OI$B zGLL(Ss0M9PdQf(C?e+$Yta5(<7VV909~aHs#f3wWi|VMAJ}q9UTTf4YWfdm z!9cJJm{Rl9T8i468Z0)0#A)#I-EVO_?*|(AF#c$G!a(eS!FuE z=v>X*(ep{+>cb1_-|8sOIj)7>hRz>402iM$(r{4=;PCZj5r2N&o-=07*qoM6N<$f^k&c$^ZZW literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/stone_ladder.png b/mods_disabled/ethereal/textures/stone_ladder.png new file mode 100644 index 0000000000000000000000000000000000000000..215c1180a6b6d2bbd53c23697fe1d53b2b11167b GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY<>loyH`B7R)N^+;4-a)s zOZH1k_0P|XC@zTZ>L{H&u}LCU3Z$5^B*-tA!Qt7BG$6;x)5S4_<9c#J1LL|-W0nIv ze%}Q+nmum@FzB7#nbpSF68MTsFxAXuk{iRisRpf@2E{zBtP_?lytZSS!xckr<(bS3 YLc&}PzDu|80!?G^boFyt=akR{0KMEaw*UYD literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry.png b/mods_disabled/ethereal/textures/strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..5b43e6bc99bc21663a9e91440fcc97a2320b5adf GIT binary patch literal 382 zcmV-^0fGLBP)U1tMAsC~XQXdKo#37T$6IK&m1K!cZOn z0004WQchC^n!~IR0GvPyIJQwW;ofr5@vS_Kk7&-n<{r4R7rea`}dn-usvKah|<3eHx&}k07WI z`e^tbA;t*d0!DATge86gx><#a56X$J{usBwLD+9@5O}LQAv0evdU2--{q|!1v(hB0g#UjTEfK8F8}}l07*qoM6N<$f~dNbB>(^b literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry_1.png b/mods_disabled/ethereal/textures/strawberry_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3fa21edc5a73cff8a86f367ab663d9748427e6bb GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T(`YgAKzr5#Q)p?D8g70 zKHs- L{an^LB{Ts52<05a literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry_2.png b/mods_disabled/ethereal/textures/strawberry_2.png new file mode 100644 index 0000000000000000000000000000000000000000..751115e9876d20ce7264a801486428c48f93640d GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@&H$ef*R`Ai@l6*0|Nnn`Y>5z1 zkg+7lFPOpM*^M+HN6*v6F+}2Wa)LxlgDJx)fsO_vsgMOid;U#F1){khtTJ h1S7A-Re=NshV%DWZ#dh_tpn<0@O1TaS?83{1OO8ICRYFe literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry_3.png b/mods_disabled/ethereal/textures/strawberry_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7a7b8c0b24eb4b9ed1b13d7a32af01bfc850a4 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^S0EkVWbq#a7|wSV_X7Eh zB|(0{3=Yq3qyahho-U3d5|@(`7VszVHW;}mD@H&jT;+>O^7y>6A;z%_} xNY-$WTxY$Yhk^A@*TNnLjpk0#`6nYJ8M0(JUs}{0Jqa|5!PC{xWt~$(69D26Fcbg) literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry_4.png b/mods_disabled/ethereal/textures/strawberry_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dcf001753c0770e613b6b5b551349f958886bd22 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4S0EkVWbq#a7`AQ8JvQ~) zF`y7*NswPKgTu2MX+Tbar;B5V#`(MFHu5$Y@UR>(KgIB0kh$ST11Hm|f5w6uI_xfv z-PZHtw>8R7IkL_?laJT&^lIm64n6ZWq_TDHvP?N7CDLw|HKE3JmG}eM0KW;#{;l7# zUe@5MoukMdg)0e0Q4Oh0CniXq(|&mQd0&131IHnDf#!9p++dMnYy*H10g>_g(pKiq+|M*?o-WC78H+75Uf?UQD-oL+& b-2cF+)xpi>{&|5G&_xWMu6{1-oD!M<02*B^ literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry_6.png b/mods_disabled/ethereal/textures/strawberry_6.png new file mode 100644 index 0000000000000000000000000000000000000000..a4d0d603fc091f7ead1faa645646ba09e305e3d9 GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{S0EkVWbq#a82;zx-oEY0 z&L*=GD9Tt8I9474ezNrP=8{z3;zN`o{YNk%ZJ(Erp-=)mD6xY+$^6WyXqFuE5#r8GN4IDq#ue zzqoEfMsdZui4Mo*w#4!^D0gH(_-VI2??UC9)X@C5@-IL2?%Pwg@tp(HdoF{e&83XH i*1X=5@TdAXqg~50?wf6EcW(i@i^0>?&t;ucLK6UGzF^M) literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/strawberry_7.png b/mods_disabled/ethereal/textures/strawberry_7.png new file mode 100644 index 0000000000000000000000000000000000000000..ace223cd88a0cd46bf55c2eda7c3d7d1646b8439 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iS0EkVWbq#a7@jzq-M;Pl zKR5T*s@x8s1Y=2%UoeBivm0qZ&TLN?#}JM4XD3+mF&Xl(=4vkbwprk-+fGLHh%iro z!NB0B|J)BuJaErdrXl3yiTRa^zrG*-#M+my!Es~rB*_yO^FdP8W62jemm=(T}r zFeG1>!TUf|yhe8Ev`4lHJPb!gL!Pm$n5X!z<5Nv~-zCQ4dC@l)Z{5f2_V%Lfas{hh ztJQ8?ym(LLwmy5zS3AaoI_DSgEGlNI?05gq;Pg}UdcEP_NcV3@VIIiM_RvF#3e>cU>0onYKMg^3eU`;gj)t)smEB literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/willow_trunk.png b/mods_disabled/ethereal/textures/willow_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e1517411f727fe5d3c6168f137ab7f2ffdf244 GIT binary patch literal 656 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 HQ$iB}=|wdn literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/yellow_leaves.png b/mods_disabled/ethereal/textures/yellow_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..47084f40745710718b212e873f94bc925cade906 GIT binary patch literal 300 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPF3Zy3{Gw4gPhgdRn$1}X&y~qS8 z#8eXG7tHWG=FhV=KwiA3i(?3fEbBo=UKT?RhJ(DW9GV;oADAkF{?E#5yBzeA`~MWa z^T%)RtkPW}Wu4kr?KGqL_1t(4WvOSZ{g=zUHE%LiKk4IqHbdRoqGFyL3ri;Rlg8kH i)rz}3r?Or8$+%ULzjoHQ&Y3`~7(8A5T-G@yGywog99v`n literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/yellow_tree.png b/mods_disabled/ethereal/textures/yellow_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9fae99df1f7af7677227c09f46848318045c31 GIT binary patch literal 674 zcmV;T0$u%yP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^RW3N2bPDNB8b~7$DE-^7j^FlWO00I6M1$36TxL8G`wc&^y0U;U?&DIyQDLeApZC|2lWM(23Qvv`M zVG&j!RR}43UcKz4^{JpKxRTTRRe7wG(*0gWo%gSEuy_Ijv}N{uevWfP0yP_Te*b=Z zzTSN-00=S3V6bcBNe;e*Kuy6jaH{~IOh`PSjzEre%>vnxZUz- zJo_X9QZo@Ay{YOPgO>oJnU&%ZvA406v?hayhyehZS&nHm&ZRh@ea|UGB5Kz>?>jkU zhO%YwL07*qo IM6N<$g2-wj8vp;Hq%jY zG*YuQ)(NmT_VZw$+Qla$?hZ17u_VYZn8D%MjWi&~!_&nvgyVX0f&PYpDK b6&M*7aB@m0Pp?u2n#thl>gTe~DWM4fsedng literal 0 HcmV?d00001 diff --git a/mods_disabled/ethereal/textures/yellow_tree_top.png b/mods_disabled/ethereal/textures/yellow_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..e423cdb2267b4b062e91f573cde1bc06a2a6497b GIT binary patch literal 800 zcmV+*1K<3KP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5&!@T5&_cPe*6Fc00(qQO+^RW3>6G5 z9b7EKvH$=88gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^7j^FlWO00MkTL_t&- z86CmTZW~1$2k`IA{C0MC9A|AOwOgRzNJXhC4sZbV#tjLHC*TQq0iJ*hkHVD;NFZ@5 z?SULBq|i!)e~nVvvDfz6J3Bjnk^1?t$Dchgdsh_XBfRzAMv@$WQiM0O_TEMSBzZL{ z2rhm8#r(Ht^(P;f<9h=i^4WXipiLjbVWnR@U$Dd$OLO&SQx^HIHsm7?JNNaskLC1H zaGeV~#&RwOG5S2qKmAfNuBz

hGVw`RY3t69JeE`r_^fy{`5C73C)hEe|(f!jN)0 z&qU5kK7IG${QZ*`mn#Y($$}%2+rJuB=ah{JJSL~II~iBRDW!DNJd^D7;fK@z{@Icc zZ1K7WtWU{ByWd`(ROimEw_Yoeo6wEa1I`41Xe|Je1RFV0h^Fay9c?d;v*W=>f{C5E z>D{vPbz&^QTVu8MWIax&%D7EZr)oH}``6y<>&-7}cotLZUCS7=p_L(jXMPNT+ui{_ zXxlC}UB5|0jkyld-!6V{P2-~m;6sNPO~?Uo0N4NSso=vq!(1w-YtFeStMTc)Aeo_X zp+k&5xspREqTteI-Gd2u8-ug4;X%P$YmD!9gV}jVeY6Lmrfuf{Pz3JXAH-;V>aEvB zb;c7D<r1#ygeW9R^~YC?>{<t_LeLLSvf8RE2Fi2G`34IiNi|&`eZFR13=ZJ0I*t`i;IX0Xzjg?B)L+AH=3;l eK#~KfCdL1#P<3K>(DDfY0000%n2JCA2Vvnb5FVR&)D>XoFI$Kgv|PPJ~=B-yX97UKG9s6Zlu&y=&(9S zdg`TA>HY6gw6<$1#7(KcHEYVB1#eV$M^5@vD%hWVME>APQDw80*3W^~FnGH9xvX 2 then + water_node = "default:river_water" + end + + if node.name == "default:ice" + or node.name == "default:snowblock" + or node.name == "ethereal:icebrick" + or node.name == "ethereal:snowbrick" then + minetest.swap_node(pos, {name = water_node.."_source"}) + + elseif node.name == "default:snow" then + minetest.swap_node(pos, {name = water_node.."_flowing"}) + + elseif node.name == "default:dirt_with_snow" then + minetest.swap_node(pos, {name = "default:dirt_with_grass"}) + end + + ethereal.check_falling(pos) + end, +}) + +-- If Water Source near Dry Dirt, change to normal Dirt +minetest.register_abm({ + label = "Ethereal wet dry dirt", + nodenames = { + "ethereal:dry_dirt", "default:dirt_with_dry_grass", + "default:dry_dirt", "default:dry_dirt_with_dry_grass" + }, + neighbors = {"group:water"}, + interval = 15, + chance = 2, + catch_up = false, + action = function(pos, node) + + if node.name == "ethereal:dry_dirt" + or node.name == "default:dry_dirt" then + minetest.swap_node(pos, {name = "default:dirt"}) + else + minetest.swap_node(pos, {name = "default:dirt_with_dry_grass"}) + end + end, +}) + +-- If torch touching water then drop as item (when enabled) +if ethereal.torchdrop == true then + +local torch_drop = "default:torch" +local drop_sound = "fire_extinguish_flame" + +if minetest.get_modpath("real_torch") then + torch_drop = "real_torch:torch" + drop_sound = "real_torch_extinguish" +end + +minetest.register_abm({ + label = "Ethereal drop torch", + nodenames = {"default:torch", "default:torch_wall", "default:torch_ceiling", + "real_torch:torch", "real_torch:torch_wall", "real_torch:torch_ceiling"}, + neighbors = {"group:water"}, + interval = 5, + chance = 1, + catch_up = false, + action = function(pos, node) + + local num = #minetest.find_nodes_in_area( + {x = pos.x - 1, y = pos.y, z = pos.z}, + {x = pos.x + 1, y = pos.y, z = pos.z}, + {"group:water"}) + + if num == 0 then + num = num + #minetest.find_nodes_in_area( + {x = pos.x, y = pos.y, z = pos.z - 1}, + {x = pos.x, y = pos.y, z = pos.z + 1}, + {"group:water"}) + end + + if num == 0 then + num = num + #minetest.find_nodes_in_area( + {x = pos.x, y = pos.y + 1, z = pos.z}, + {x = pos.x, y = pos.y + 1, z = pos.z}, + {"group:water"}) + end + + if num > 0 then + + minetest.set_node(pos, {name = "air"}) + + minetest.sound_play({name = drop_sound, gain = 0.2}, + {pos = pos, max_hear_distance = 10}) + + minetest.add_item(pos, {name = torch_drop}) + end + end, +}) + +end diff --git a/mods_disabled/ethereal/wood.lua b/mods_disabled/ethereal/wood.lua new file mode 100644 index 0000000..e955ade --- /dev/null +++ b/mods_disabled/ethereal/wood.lua @@ -0,0 +1,290 @@ + +local S = ethereal.intllib + +-- sakura trunk +minetest.register_node("ethereal:sakura_trunk", { + description = S("Sakura Trunk"), + tiles = { + "ethereal_sakura_trunk_top.png", + "ethereal_sakura_trunk_top.png", + "ethereal_sakura_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- sakura wood +minetest.register_node("ethereal:sakura_wood", { + description = S("Sakura Wood"), + tiles = {"ethereal_sakura_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:sakura_wood 4", + recipe = {{"ethereal:sakura_trunk"}} +}) + +-- willow trunk +minetest.register_node("ethereal:willow_trunk", { + description = S("Willow Trunk"), + tiles = { + "willow_trunk_top.png", + "willow_trunk_top.png", + "willow_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- willow wood +minetest.register_node("ethereal:willow_wood", { + description = S("Willow Wood"), + tiles = {"willow_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:willow_wood 4", + recipe = {{"ethereal:willow_trunk"}} +}) + +-- redwood trunk +minetest.register_node("ethereal:redwood_trunk", { + description = S("Redwood Trunk"), + tiles = { + "redwood_trunk_top.png", + "redwood_trunk_top.png", + "redwood_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- redwood wood +minetest.register_node("ethereal:redwood_wood", { + description = S("Redwood Wood"), + tiles = {"redwood_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:redwood_wood 4", + recipe = {{"ethereal:redwood_trunk"}}, +}) + +-- frost trunk +minetest.register_node("ethereal:frost_tree", { + description = S("Frost Tree"), + tiles = { + "ethereal_frost_tree_top.png", + "ethereal_frost_tree_top.png", + "ethereal_frost_tree.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- frost wood +minetest.register_node("ethereal:frost_wood", { + description = S("Frost Wood"), + tiles = {"frost_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:frost_wood 4", + recipe = {{"ethereal:frost_tree"}} +}) + +-- healing trunk +minetest.register_node("ethereal:yellow_trunk", { + description = S("Healing Tree Trunk"), + tiles = { + "yellow_tree_top.png", + "yellow_tree_top.png", + "yellow_tree.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- healing wood +minetest.register_node("ethereal:yellow_wood", { + description = S("Healing Tree Wood"), + tiles = {"yellow_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:yellow_wood 4", + recipe = {{"ethereal:yellow_trunk"}} +}) + +-- palm trunk (thanks to VanessaE for palm textures) +minetest.register_node("ethereal:palm_trunk", { + description = S("Palm Trunk"), + tiles = { + "moretrees_palm_trunk_top.png", + "moretrees_palm_trunk_top.png", + "moretrees_palm_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- palm wood +minetest.register_node("ethereal:palm_wood", { + description = S("Palm Wood"), + tiles = {"moretrees_palm_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:palm_wood 4", + recipe = {{"ethereal:palm_trunk"}} +}) + +-- banana trunk +minetest.register_node("ethereal:banana_trunk", { + description = S("Banana Trunk"), + tiles = { + "banana_trunk_top.png", + "banana_trunk_top.png", + "banana_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- banana wood +minetest.register_node("ethereal:banana_wood", { + description = S("Banana Wood"), + tiles = {"banana_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:banana_wood 4", + recipe = {{"ethereal:banana_trunk"}} +}) + +-- scorched trunk +minetest.register_node("ethereal:scorched_tree", { + description = S("Scorched Tree"), + tiles = { + "scorched_tree_top.png", + "scorched_tree_top.png", + "scorched_tree.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 1}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +minetest.register_craft({ + output = "ethereal:scorched_tree 8", + recipe = { + {"group:tree", "group:tree", "group:tree"}, + {"group:tree", "default:torch", "group:tree"}, + {"group:tree", "group:tree", "group:tree"}, + } +}) + +-- mushroom trunk +minetest.register_node("ethereal:mushroom_trunk", { + description = S("Mushroom"), + tiles = { + "mushroom_trunk_top.png", + "mushroom_trunk_top.png", + "mushroom_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- birch trunk (thanks to VanessaE for birch textures) +minetest.register_node("ethereal:birch_trunk", { + description = S("Birch Trunk"), + tiles = { + "moretrees_birch_trunk_top.png", + "moretrees_birch_trunk_top.png", + "moretrees_birch_trunk.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node, +}) + +-- birch wood +minetest.register_node("ethereal:birch_wood", { + description = S("Birch Wood"), + tiles = {"moretrees_birch_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), +}) + +minetest.register_craft({ + output = "ethereal:birch_wood 4", + recipe = {{"ethereal:birch_trunk"}} +}) + +-- Bamboo (thanks to Nelo-slay on DeviantArt for the free Bamboo base image) +minetest.register_node("ethereal:bamboo", { + description = S("Bamboo"), + drawtype = "plantlike", + tiles = {"bamboo.png"}, + inventory_image = "bamboo.png", + wield_image = "bamboo.png", + paramtype = "light", + sunlight_propagates = true, + walkable = true, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2},--tree = 1 + sounds = default.node_sound_leaves_defaults(), + after_dig_node = function(pos, node, metadata, digger) + default.dig_up(pos, node, digger) + end, +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:bamboo", + burntime = 1, +}) diff --git a/mods/goodie_bags/README.md b/mods_disabled/goodie_bags/README.md similarity index 100% rename from mods/goodie_bags/README.md rename to mods_disabled/goodie_bags/README.md diff --git a/mods/goodie_bags/craftitems.lua b/mods_disabled/goodie_bags/craftitems.lua similarity index 100% rename from mods/goodie_bags/craftitems.lua rename to mods_disabled/goodie_bags/craftitems.lua diff --git a/mods/goodie_bags/depends.txt b/mods_disabled/goodie_bags/depends.txt similarity index 100% rename from mods/goodie_bags/depends.txt rename to mods_disabled/goodie_bags/depends.txt diff --git a/mods/goodie_bags/description.txt b/mods_disabled/goodie_bags/description.txt similarity index 100% rename from mods/goodie_bags/description.txt rename to mods_disabled/goodie_bags/description.txt diff --git a/mods/goodie_bags/ff_goodie_bags.conf b/mods_disabled/goodie_bags/ff_goodie_bags.conf similarity index 100% rename from mods/goodie_bags/ff_goodie_bags.conf rename to mods_disabled/goodie_bags/ff_goodie_bags.conf diff --git a/mods/goodie_bags/functions.lua b/mods_disabled/goodie_bags/functions.lua similarity index 100% rename from mods/goodie_bags/functions.lua rename to mods_disabled/goodie_bags/functions.lua diff --git a/mods/goodie_bags/init.lua b/mods_disabled/goodie_bags/init.lua similarity index 100% rename from mods/goodie_bags/init.lua rename to mods_disabled/goodie_bags/init.lua diff --git a/mods/goodie_bags/item_lists.lua b/mods_disabled/goodie_bags/item_lists.lua similarity index 97% rename from mods/goodie_bags/item_lists.lua rename to mods_disabled/goodie_bags/item_lists.lua index 196558e..535b576 100644 --- a/mods/goodie_bags/item_lists.lua +++ b/mods_disabled/goodie_bags/item_lists.lua @@ -126,8 +126,6 @@ if settings:get("ff_goodie_bags_default") and minetest.get_modpath("default") th table.insert(ff_goodie_bags.orange_item_pool, "default:coral_orange") table.insert(ff_goodie_bags.general_item_pool, "default:chest") table.insert(ff_goodie_bags.general_item_pool, "default:bookshelf") - table.insert(ff_goodie_bags.general_item_pool, "default:sign_wall_wood") - table.insert(ff_goodie_bags.general_item_pool, "default:sign_wall_steel") table.insert(ff_goodie_bags.general_item_pool, "default:ladder_wood") table.insert(ff_goodie_bags.general_item_pool, "default:ladder_steel") table.insert(ff_goodie_bags.general_item_pool, "default:fence_wood") diff --git a/mods/goodie_bags/license.txt b/mods_disabled/goodie_bags/license.txt similarity index 100% rename from mods/goodie_bags/license.txt rename to mods_disabled/goodie_bags/license.txt diff --git a/mods/goodie_bags/mod.conf b/mods_disabled/goodie_bags/mod.conf similarity index 100% rename from mods/goodie_bags/mod.conf rename to mods_disabled/goodie_bags/mod.conf diff --git a/mods/goodie_bags/sounds/ff_goodie_bags_Coin01.ogg b/mods_disabled/goodie_bags/sounds/ff_goodie_bags_Coin01.ogg similarity index 100% rename from mods/goodie_bags/sounds/ff_goodie_bags_Coin01.ogg rename to mods_disabled/goodie_bags/sounds/ff_goodie_bags_Coin01.ogg diff --git a/mods/goodie_bags/textures/ff_goodie_bags_blue_goodie_bag.png b/mods_disabled/goodie_bags/textures/ff_goodie_bags_blue_goodie_bag.png similarity index 100% rename from mods/goodie_bags/textures/ff_goodie_bags_blue_goodie_bag.png rename to mods_disabled/goodie_bags/textures/ff_goodie_bags_blue_goodie_bag.png diff --git a/mods/goodie_bags/textures/ff_goodie_bags_goodie_bag_contents.png b/mods_disabled/goodie_bags/textures/ff_goodie_bags_goodie_bag_contents.png similarity index 100% rename from mods/goodie_bags/textures/ff_goodie_bags_goodie_bag_contents.png rename to mods_disabled/goodie_bags/textures/ff_goodie_bags_goodie_bag_contents.png diff --git a/mods/goodie_bags/textures/ff_goodie_bags_green_goodie_bag.png b/mods_disabled/goodie_bags/textures/ff_goodie_bags_green_goodie_bag.png similarity index 100% rename from mods/goodie_bags/textures/ff_goodie_bags_green_goodie_bag.png rename to mods_disabled/goodie_bags/textures/ff_goodie_bags_green_goodie_bag.png diff --git a/mods/goodie_bags/textures/ff_goodie_bags_orange_goodie_bag.png b/mods_disabled/goodie_bags/textures/ff_goodie_bags_orange_goodie_bag.png similarity index 100% rename from mods/goodie_bags/textures/ff_goodie_bags_orange_goodie_bag.png rename to mods_disabled/goodie_bags/textures/ff_goodie_bags_orange_goodie_bag.png diff --git a/mods/goodie_bags/textures/ff_goodie_bags_red_goodie_bag.png b/mods_disabled/goodie_bags/textures/ff_goodie_bags_red_goodie_bag.png similarity index 100% rename from mods/goodie_bags/textures/ff_goodie_bags_red_goodie_bag.png rename to mods_disabled/goodie_bags/textures/ff_goodie_bags_red_goodie_bag.png diff --git a/mods/helicopter/LICENSE b/mods_disabled/helicopter/LICENSE similarity index 100% rename from mods/helicopter/LICENSE rename to mods_disabled/helicopter/LICENSE diff --git a/mods/helicopter/README.md b/mods_disabled/helicopter/README.md similarity index 100% rename from mods/helicopter/README.md rename to mods_disabled/helicopter/README.md diff --git a/mods/helicopter/depends.txt b/mods_disabled/helicopter/depends.txt similarity index 100% rename from mods/helicopter/depends.txt rename to mods_disabled/helicopter/depends.txt diff --git a/mods/helicopter/init.lua b/mods_disabled/helicopter/init.lua similarity index 100% rename from mods/helicopter/init.lua rename to mods_disabled/helicopter/init.lua diff --git a/mods/helicopter/matrix.lua b/mods_disabled/helicopter/matrix.lua similarity index 100% rename from mods/helicopter/matrix.lua rename to mods_disabled/helicopter/matrix.lua diff --git a/mods/helicopter/mod.conf b/mods_disabled/helicopter/mod.conf similarity index 100% rename from mods/helicopter/mod.conf rename to mods_disabled/helicopter/mod.conf diff --git a/mods/helicopter/models/helicopter_heli.x b/mods_disabled/helicopter/models/helicopter_heli.x similarity index 100% rename from mods/helicopter/models/helicopter_heli.x rename to mods_disabled/helicopter/models/helicopter_heli.x diff --git a/mods/helicopter/sounds/helicopter_motor.ogg b/mods_disabled/helicopter/sounds/helicopter_motor.ogg similarity index 100% rename from mods/helicopter/sounds/helicopter_motor.ogg rename to mods_disabled/helicopter/sounds/helicopter_motor.ogg diff --git a/mods/helicopter/textures/helicopter_blades.png b/mods_disabled/helicopter/textures/helicopter_blades.png similarity index 100% rename from mods/helicopter/textures/helicopter_blades.png rename to mods_disabled/helicopter/textures/helicopter_blades.png diff --git a/mods/helicopter/textures/helicopter_blades_inv.png b/mods_disabled/helicopter/textures/helicopter_blades_inv.png similarity index 100% rename from mods/helicopter/textures/helicopter_blades_inv.png rename to mods_disabled/helicopter/textures/helicopter_blades_inv.png diff --git a/mods/helicopter/textures/helicopter_cabin_inv.png b/mods_disabled/helicopter/textures/helicopter_cabin_inv.png similarity index 100% rename from mods/helicopter/textures/helicopter_cabin_inv.png rename to mods_disabled/helicopter/textures/helicopter_cabin_inv.png diff --git a/mods/helicopter/textures/helicopter_glass.png b/mods_disabled/helicopter/textures/helicopter_glass.png similarity index 100% rename from mods/helicopter/textures/helicopter_glass.png rename to mods_disabled/helicopter/textures/helicopter_glass.png diff --git a/mods/helicopter/textures/helicopter_heli.png b/mods_disabled/helicopter/textures/helicopter_heli.png similarity index 100% rename from mods/helicopter/textures/helicopter_heli.png rename to mods_disabled/helicopter/textures/helicopter_heli.png diff --git a/mods/helicopter/textures/helicopter_heli_inv.png b/mods_disabled/helicopter/textures/helicopter_heli_inv.png similarity index 100% rename from mods/helicopter/textures/helicopter_heli_inv.png rename to mods_disabled/helicopter/textures/helicopter_heli_inv.png diff --git a/mods/helicopter/textures/helicopter_water_driblet.png b/mods_disabled/helicopter/textures/helicopter_water_driblet.png similarity index 100% rename from mods/helicopter/textures/helicopter_water_driblet.png rename to mods_disabled/helicopter/textures/helicopter_water_driblet.png diff --git a/mods_disabled/jumpdrive/.github/workflows/integration-test.yml b/mods_disabled/jumpdrive/.github/workflows/integration-test.yml new file mode 100644 index 0000000..4bea2fa --- /dev/null +++ b/mods_disabled/jumpdrive/.github/workflows/integration-test.yml @@ -0,0 +1,14 @@ +name: integration-test + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + + - name: integration-test + run: ./integration-test.sh diff --git a/mods_disabled/jumpdrive/.github/workflows/luacheck.yml b/mods_disabled/jumpdrive/.github/workflows/luacheck.yml new file mode 100644 index 0000000..d00f53a --- /dev/null +++ b/mods_disabled/jumpdrive/.github/workflows/luacheck.yml @@ -0,0 +1,17 @@ +name: luacheck + +on: [push, pull_request] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: apt + run: sudo apt-get install -y luarocks + - name: luacheck install + run: luarocks install --local luacheck + - name: luacheck run + run: $HOME/.luarocks/bin/luacheck ./ diff --git a/mods_disabled/jumpdrive/.luacheckrc b/mods_disabled/jumpdrive/.luacheckrc new file mode 100644 index 0000000..3a50c67 --- /dev/null +++ b/mods_disabled/jumpdrive/.luacheckrc @@ -0,0 +1,39 @@ +unused_args = false +allow_defined_top = true + +ignore = {"512"} + +globals = { + "jumpdrive", + + -- write + "travelnet", + "pipeworks", + "beds" +} + +read_globals = { + -- Stdlib + string = {fields = {"split"}}, + table = {fields = {"copy", "getn"}}, + "VoxelManip", + + -- Minetest + "minetest", + "vector", "ItemStack", + "dump", "VoxelArea", + + -- Deps + "unified_inventory", "default", "monitoring", + "digilines", + "mesecons", + "mesecon", + "technic", + "locator", + "display_api", + "areas", + "ropes", + "sethome", + "drawers", + "player_monoids" +} diff --git a/mods_disabled/jumpdrive/backbone.lua b/mods_disabled/jumpdrive/backbone.lua new file mode 100644 index 0000000..68fd306 --- /dev/null +++ b/mods_disabled/jumpdrive/backbone.lua @@ -0,0 +1,10 @@ + + +minetest.register_node("jumpdrive:backbone", { + description = "Jumpdrive Backbone", + + tiles = {"jumpdrive_backbone.png"}, + groups = {cracky=3,oddly_breakable_by_hand=3}, + sounds = default.node_sound_glass_defaults(), + light_source = 13 +}) diff --git a/mods_disabled/jumpdrive/blacklist.lua b/mods_disabled/jumpdrive/blacklist.lua new file mode 100644 index 0000000..b67e9c1 --- /dev/null +++ b/mods_disabled/jumpdrive/blacklist.lua @@ -0,0 +1,6 @@ + +if minetest.get_modpath("technic") then + table.insert(jumpdrive.blacklist, "technic:forcefield_emitter_on") +end + +-- TODO bedrock, advtrains tracks diff --git a/mods_disabled/jumpdrive/bookmark.lua b/mods_disabled/jumpdrive/bookmark.lua new file mode 100644 index 0000000..8b963fe --- /dev/null +++ b/mods_disabled/jumpdrive/bookmark.lua @@ -0,0 +1,107 @@ + + +jumpdrive.write_to_book = function(pos, sender) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + if inv:contains_item("main", {name="default:book", count=1}) then + local stack = inv:remove_item("main", {name="default:book", count=1}) + + local new_stack = ItemStack("default:book_written") + + local data = {} + + data.owner = sender:get_player_name() + data.title = "Jumpdrive coordinates" + data.description = "Jumpdrive coordiates" + data.text = minetest.serialize(jumpdrive.get_meta_pos(pos)) + data.page = 1 + data.page_max = 1 + + new_stack:get_meta():from_table({ fields = data }) + + if inv:room_for_item("main", new_stack) then + -- put written book back + inv:add_item("main", new_stack) + else + -- put back old stack + inv:add_item("main", stack) + end + + end + +end + +jumpdrive.read_from_book = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local player_name = meta:get_string("owner") + + if inv:contains_item("main", {name="default:book_written", count=1}) then + local stack = inv:remove_item("main", {name="default:book_written", count=1}) + local stackMeta = stack:get_meta() + + local text = stackMeta:get_string("text") + local data = minetest.deserialize(text) + + if data == nil then + -- put book back, it may contain other information + inv:add_item("main", stack) + -- alert player + if nil ~= player_name then + minetest.chat_send_player(player_name, "Invalid data") + end + return + end + + local x = tonumber(data.x) + local y = tonumber(data.y) + local z = tonumber(data.z) + + if x == nil or y == nil or z == nil then + -- put book back, it may contain other information + inv:add_item("main", stack) + -- alert player + if nil ~= player_name then + minetest.chat_send_player(player_name, "Invalid coordinates") + end + return + end + + meta:set_int("x", jumpdrive.sanitize_coord(x)) + meta:set_int("y", jumpdrive.sanitize_coord(y)) + meta:set_int("z", jumpdrive.sanitize_coord(z)) + + -- put book back + inv:add_item("main", stack) + elseif inv:contains_item("main", {name="missions:wand_position", count=1}) then + local stack = inv:remove_item("main", {name="missions:wand_position", count=1}) + local stackMeta = stack:get_meta() + + local text = stackMeta:get_string("pos") + local target_pos = minetest.string_to_pos(text) + + if nil == target_pos then + -- put wand back, I don't see a way to corrupt a wand atm + inv:add_item("main", stack) + return + end + + local x = target_pos.x + local y = target_pos.y + local z = target_pos.z + + if x == nil or y == nil or z == nil then + -- put wand back, I don't see a way to corrupt a wand atm + inv:add_item("main", stack) + return + end + + meta:set_int("x", jumpdrive.sanitize_coord(x)) + meta:set_int("y", jumpdrive.sanitize_coord(y)) + meta:set_int("z", jumpdrive.sanitize_coord(z)) + + -- put wand back + inv:add_item("main", stack) + end +end diff --git a/mods_disabled/jumpdrive/common.lua b/mods_disabled/jumpdrive/common.lua new file mode 100644 index 0000000..ed9d594 --- /dev/null +++ b/mods_disabled/jumpdrive/common.lua @@ -0,0 +1,52 @@ + +jumpdrive.sanitize_coord = function(coord) + return math.max( math.min( coord, 31000 ), -31000 ) +end + +-- get pos object from pos +jumpdrive.get_meta_pos = function(pos) + local meta = minetest.get_meta(pos); + return {x=meta:get_int("x"), y=meta:get_int("y"), z=meta:get_int("z")} +end + +-- set pos object from pos +jumpdrive.set_meta_pos = function(pos, target) + local meta = minetest.get_meta(pos); + meta:set_int("x", target.x) + meta:set_int("y", target.y) + meta:set_int("z", target.z) +end + +-- get offset from meta +jumpdrive.get_radius = function(pos) + local meta = minetest.get_meta(pos); + return math.max(math.min(meta:get_int("radius"), jumpdrive.config.max_radius), 1) +end + +-- calculates the power requirements for a jump +jumpdrive.calculate_power = function(radius, distance, sourcePos, targetPos) + return 10 * distance * radius +end + + +-- preflight check, for overriding +jumpdrive.preflight_check = function(source, destination, radius, playername) + return { success=true } +end + +jumpdrive.reset_coordinates = function(pos) + local meta = minetest.get_meta(pos) + + meta:set_int("x", pos.x) + meta:set_int("y", pos.y) + meta:set_int("z", pos.z) + +end + +function jumpdrive.get_mapblock_from_pos(pos) + return { + x = math.floor(pos.x / 16), + y = math.floor(pos.y / 16), + z = math.floor(pos.z / 16) + } +end diff --git a/mods_disabled/jumpdrive/compat/anchor.lua b/mods_disabled/jumpdrive/compat/anchor.lua new file mode 100644 index 0000000..a5a67d2 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/anchor.lua @@ -0,0 +1,57 @@ +-- stolen from technic / anchor.lua + +local function compute_forceload_positions(pos, meta) + local radius = meta:get_int("radius") + local minpos = vector.subtract(pos, vector.new(radius, radius, radius)) + local maxpos = vector.add(pos, vector.new(radius, radius, radius)) + local minbpos = {} + local maxbpos = {} + for _, coord in ipairs({"x","y","z"}) do + minbpos[coord] = math.floor(minpos[coord] / 16) * 16 + maxbpos[coord] = math.floor(maxpos[coord] / 16) * 16 + end + local flposes = {} + for x = minbpos.x, maxbpos.x, 16 do + for y = minbpos.y, maxbpos.y, 16 do + for z = minbpos.z, maxbpos.z, 16 do + table.insert(flposes, vector.new(x, y, z)) + end + end + end + return flposes +end + +local function currently_forceloaded_positions(meta) + local ser = meta:get_string("forceloaded") + return ser == "" and {} or minetest.deserialize(ser) +end + +local function forceload_off(meta) + local flposes = currently_forceloaded_positions(meta) + meta:set_string("forceloaded", "") + for _, p in ipairs(flposes) do + minetest.forceload_free_block(p) + end +end + +local function forceload_on(pos, meta) + local want_flposes = compute_forceload_positions(pos, meta) + local have_flposes = {} + for _, p in ipairs(want_flposes) do + if minetest.forceload_block(p) then + table.insert(have_flposes, p) + end + end + meta:set_string("forceloaded", #have_flposes == 0 and "" or minetest.serialize(have_flposes)) +end + +jumpdrive.anchor_compat = function(from, to) + local to_meta = minetest.get_meta(to) + local from_meta = minetest.get_meta(from) + + if from_meta:get_int("enabled") ~= 0 then + -- anchor enabled + forceload_off(from_meta) + forceload_on(to, to_meta) + end +end diff --git a/mods_disabled/jumpdrive/compat/areas.lua b/mods_disabled/jumpdrive/compat/areas.lua new file mode 100644 index 0000000..013a7ae --- /dev/null +++ b/mods_disabled/jumpdrive/compat/areas.lua @@ -0,0 +1,27 @@ + +jumpdrive.areas_compat = function(pos1, pos2, delta_vector) + local list = areas:getAreasIntersectingArea(pos1, pos2) + local dirty = false + + for id, area in pairs(list) do + local xMatch = area.pos1.x >= pos1.x and area.pos2.x <= pos2.x + local yMatch = area.pos1.y >= pos1.y and area.pos2.y <= pos2.y + local zMatch = area.pos1.z >= pos1.z and area.pos2.z <= pos2.z + + if xMatch and yMatch and zMatch then + dirty = true + minetest.log("action", "[jumpdrive] moving area " .. id) + + areas:move( + id, + area, + vector.add(area.pos1, delta_vector), + vector.add(area.pos2, delta_vector) + ) + end + end + + if dirty then + areas:save() + end +end diff --git a/mods_disabled/jumpdrive/compat/beds.lua b/mods_disabled/jumpdrive/compat/beds.lua new file mode 100644 index 0000000..3488851 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/beds.lua @@ -0,0 +1,64 @@ +local bed_bottoms = {"beds:bed_bottom", "beds:fancy_bed_bottom"} + +-- Calculate a bed's middle position (where players would spawn) +local function calc_bed_middle(bed_pos, facedir) + local dir = minetest.facedir_to_dir(facedir) + local bed_middle = { + x = bed_pos.x + dir.x / 2, + y = bed_pos.y, + z = bed_pos.z + dir.z / 2 + } + return bed_middle +end + +jumpdrive.beds_compat = function(target_pos1, target_pos2, delta_vector) + if beds == nil or + beds.spawn == nil or + beds.save_spawns == nil then + -- Something is wrong. Don't do anything + return + end + + -- Look for beds in target area + local beds_list = minetest.find_nodes_in_area(target_pos1, target_pos2, bed_bottoms) + + if next(beds_list) ~= nil then + -- We found some beds! + local source_pos1 = vector.subtract(target_pos1, delta_vector) + local source_pos2 = vector.subtract(target_pos2, delta_vector) + + -- Look for players with spawn in source area + local affected_players = {} + for name, pos in pairs(beds.spawn) do + -- pos1 and pos2 must already be sorted + if pos.x >= source_pos1.x and pos.x <= source_pos2.x and + pos.y >= source_pos1.y and pos.y <= source_pos2.y and + pos.z >= source_pos1.z and pos.z <= source_pos2.z then + table.insert(affected_players, name) + end + end + + if next(affected_players) ~= nil then + -- Some players seem to be affected. + -- Iterate over all beds + for _, pos in pairs(beds_list) do + local facedir = minetest.get_node(pos).param2 + local old_middle = calc_bed_middle(vector.subtract(pos, delta_vector), facedir) + + for _, name in ipairs(affected_players) do + local spawn = beds.spawn[name] + if spawn.x == old_middle.x and + spawn.y == old_middle.y and + spawn.z == old_middle.z then + ---- Player spawn seems to match old bed position; update + beds.spawn[name] = calc_bed_middle(pos, facedir) + minetest.log("action", + "[jumpdrive] Updated bed spawn for player " .. name) + end + end + end + -- Tell beds mod to save the new spawns. + beds.save_spawns() + end + end +end diff --git a/mods_disabled/jumpdrive/compat/compat.lua b/mods_disabled/jumpdrive/compat/compat.lua new file mode 100644 index 0000000..864bafe --- /dev/null +++ b/mods_disabled/jumpdrive/compat/compat.lua @@ -0,0 +1,107 @@ +local MP = minetest.get_modpath("jumpdrive") + +local has_travelnet_mod = minetest.get_modpath("travelnet") +local has_technic_mod = minetest.get_modpath("technic") +local has_locator_mod = minetest.get_modpath("locator") +local has_elevator_mod = minetest.get_modpath("elevator") +local has_display_mod = minetest.get_modpath("display_api") +local has_pipeworks_mod = minetest.get_modpath("pipeworks") +local has_beds_mod = minetest.get_modpath("beds") + +-- rope removal crashes with minetest >= 5.2 (get_content_id) +-- isse: https://github.com/minetest-mods/ropes/issues/19 +-- local has_ropes_mod = minetest.get_modpath("ropes") +local has_sethome_mod = minetest.get_modpath("sethome") +local has_areas_mod = minetest.get_modpath("areas") +local has_drawers_mod = minetest.get_modpath("drawers") +local has_textline_mod = minetest.get_modpath("textline") + +dofile(MP.."/compat/travelnet.lua") +dofile(MP.."/compat/locator.lua") +dofile(MP.."/compat/elevator.lua") +dofile(MP.."/compat/signs.lua") +dofile(MP.."/compat/itemframes.lua") +dofile(MP.."/compat/anchor.lua") +dofile(MP.."/compat/telemosaic.lua") +dofile(MP.."/compat/beds.lua") +dofile(MP.."/compat/ropes.lua") +dofile(MP.."/compat/sethome.lua") +dofile(MP.."/compat/areas.lua") +dofile(MP.."/compat/drawers.lua") +dofile(MP.."/compat/textline.lua") + +if has_pipeworks_mod then + dofile(MP.."/compat/teleporttube.lua") +end + + +jumpdrive.node_compat = function(name, source_pos, target_pos) + if (name == "locator:beacon_1" or name == "locator:beacon_2" or name == "locator:beacon_3") and has_locator_mod then + jumpdrive.locator_compat(source_pos, target_pos) + + elseif has_technic_mod and name == "technic:admin_anchor" then + jumpdrive.anchor_compat(source_pos, target_pos) + + elseif has_pipeworks_mod and string.find(name, "^pipeworks:teleport_tube") then + jumpdrive.teleporttube_compat(source_pos, target_pos) + + elseif name == "telemosaic:beacon" or name == "telemosaic:beacon_protected" then + jumpdrive.telemosaic_compat(source_pos, target_pos) + + end +end + +jumpdrive.commit_node_compat = function() + if has_pipeworks_mod then + jumpdrive.teleporttube_compat_commit() + end +end + + +jumpdrive.target_region_compat = function(source_pos1, source_pos2, target_pos1, target_pos2, delta_vector) + -- sync compat functions + + if has_travelnet_mod then + jumpdrive.travelnet_compat(target_pos1, target_pos2) + end + + if has_elevator_mod then + jumpdrive.elevator_compat(target_pos1, target_pos2) + end + + if has_sethome_mod then + jumpdrive.sethome_compat(source_pos1, source_pos2, delta_vector) + end + + if has_beds_mod then + jumpdrive.beds_compat(target_pos1, target_pos2, delta_vector) + end + + --[[ + if has_ropes_mod then + jumpdrive.ropes_compat(target_pos1, target_pos2, delta_vector) + end + --]] + + if has_areas_mod then + jumpdrive.areas_compat(source_pos1, source_pos2, delta_vector) + end + + -- async compat functions below here + minetest.after(1.0, function() + + if has_drawers_mod then + jumpdrive.drawers_compat(target_pos1, target_pos2) + end + + if has_display_mod then + jumpdrive.signs_compat(target_pos1, target_pos2) + end + + if has_textline_mod then + jumpdrive.textline_compat(target_pos1, target_pos2) + end + + end) + +end diff --git a/mods_disabled/jumpdrive/compat/drawers.lua b/mods_disabled/jumpdrive/compat/drawers.lua new file mode 100644 index 0000000..2289d1e --- /dev/null +++ b/mods_disabled/jumpdrive/compat/drawers.lua @@ -0,0 +1,9 @@ + +function jumpdrive.drawers_compat(target_pos1, target_pos2) + local nodes = minetest.find_nodes_in_area(target_pos1, target_pos2, {"group:drawer"}) + if nodes then + for _, pos in ipairs(nodes) do + drawers.spawn_visuals(pos) + end + end +end diff --git a/mods_disabled/jumpdrive/compat/elevator.lua b/mods_disabled/jumpdrive/compat/elevator.lua new file mode 100644 index 0000000..8f1e831 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/elevator.lua @@ -0,0 +1,18 @@ + + +jumpdrive.elevator_compat = function(pos1, pos2) + + -- find potential elevators + local elevator_motors = minetest.find_nodes_in_area(pos1, pos2, "elevator:motor") + + for _,pos in ipairs(elevator_motors) do + -- delegate to compat + + local def = minetest.registered_nodes["elevator:motor"] + minetest.log("action", "[jumpdrive] Restoring elevator @ " .. pos.x .. "/" .. pos.y .. "/" .. pos.z) + + -- function(pos, placer, itemstack) + def.after_place_node(pos, nil, nil) + end + +end diff --git a/mods_disabled/jumpdrive/compat/itemframes.lua b/mods_disabled/jumpdrive/compat/itemframes.lua new file mode 100644 index 0000000..c6e7a39 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/itemframes.lua @@ -0,0 +1,20 @@ + +local update_item = function(pos, node) + -- TODO +end + + +jumpdrive.itemframes_compat = function(pos1, pos2) + + local nodes = minetest.find_nodes_in_area(pos1, pos2, {"itemframes:pedestal", "itemframes:frame"}) + + if nodes then + for _,pos in pairs(nodes) do + minetest.log("action", "[jumpdrive] updating itemframe @ " .. minetest.pos_to_string(pos)) + local node = minetest.get_node(pos) + update_item(pos, node) + end + end + + +end diff --git a/mods_disabled/jumpdrive/compat/locator.lua b/mods_disabled/jumpdrive/compat/locator.lua new file mode 100644 index 0000000..be4e7ac --- /dev/null +++ b/mods_disabled/jumpdrive/compat/locator.lua @@ -0,0 +1,8 @@ + + +jumpdrive.locator_compat = function(from, to) + local meta = minetest.get_meta(to) + locator.remove_beacon(from) + locator.update_beacon(to, meta) +end + diff --git a/mods_disabled/jumpdrive/compat/ropes.lua b/mods_disabled/jumpdrive/compat/ropes.lua new file mode 100644 index 0000000..4da0ae1 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/ropes.lua @@ -0,0 +1,86 @@ +local rope_nodes = { -- Top, middle, bottom + {"ropes:rope_top", "ropes:rope", "ropes:rope_bottom"}, -- Rope boxes + {"ropes:ropeladder_falling", "ropes:ropeladder", "ropes:ropeladder_bottom"}, -- Rope ladders +} + +jumpdrive.ropes_compat = function(target_pos1, target_pos2, delta_vector) + if ropes == nil or + ropes.destroy_rope == nil then + -- Something is wrong. Don't do anything + return + end + + -- Bottom slice of the target area + local target_bottom_pos1 = target_pos1 + local target_bottom_pos2 = { + x = target_pos2.x, + y = target_pos1.y, + z = target_pos2.z + } + + -- Top slice of the target area + local target_top_pos1 = { + x = target_pos1.x, + y = target_pos2.y, + z = target_pos1.z + } + local target_top_pos2 = target_pos2 + + + + -- For every type of rope + for _, rope_type_nodes in ipairs(rope_nodes) do + + -- Look for ropes hanging out of the jump area + local ropes_hanging_out = minetest.find_nodes_in_area( + target_bottom_pos1, target_bottom_pos2, + {rope_type_nodes[1], rope_type_nodes[2]}) + + for _, pos in ipairs(ropes_hanging_out) do + -- Swap with a proper end node, keeping param2 + local end_node = minetest.get_node(pos) + minetest.swap_node(pos, { + name=rope_type_nodes[3], + param2=end_node.param2 + }) + + -- Destroy remainder of the rope below the source area + local remainder_pos = { + x = pos.x - delta_vector.x, + y = pos.y - delta_vector.y - 1, + z = pos.z - delta_vector.z + } + ropes.destroy_rope(remainder_pos, rope_type_nodes) + end + + + -- Look for ropes hanging into the jump area + local ropes_hanging_in = minetest.find_nodes_in_area( + target_top_pos1, target_top_pos2, + rope_type_nodes) + + for _, pos in ipairs(ropes_hanging_in) do + -- Probably there is a loose end above the source area + local end_pos = { + x = pos.x - delta_vector.x, + y = pos.y - delta_vector.y + 1, + z = pos.z - delta_vector.z + } + local end_node = minetest.get_node(end_pos) + + if end_node and + (end_node.name == rope_type_nodes[1] or + end_node.name == rope_type_nodes[2]) then + + -- Swap with a proper end node, keeping param2 + minetest.swap_node(end_pos, { + name=rope_type_nodes[3], + param2=end_node.param2 + }) + end + + -- Destroy remainder of the rope in the target area + ropes.destroy_rope(pos, rope_type_nodes) + end + end +end diff --git a/mods_disabled/jumpdrive/compat/sethome.lua b/mods_disabled/jumpdrive/compat/sethome.lua new file mode 100644 index 0000000..d903c23 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/sethome.lua @@ -0,0 +1,19 @@ + +jumpdrive.sethome_compat = function(pos1, pos2, delta_vector) + -- move /home positions of online players + for _,player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + + local home_pos = sethome.get(name) + if home_pos then + local xMatch = home_pos.x >= pos1.x and home_pos.x <= pos2.x + local yMatch = home_pos.y >= pos1.y and home_pos.y <= pos2.y + local zMatch = home_pos.z >= pos1.z and home_pos.z <= pos2.z + + if xMatch and yMatch and zMatch then + local new_pos = vector.add(home_pos, delta_vector) + sethome.set(name, new_pos) + end + end + end +end diff --git a/mods_disabled/jumpdrive/compat/signs.lua b/mods_disabled/jumpdrive/compat/signs.lua new file mode 100644 index 0000000..3e0222f --- /dev/null +++ b/mods_disabled/jumpdrive/compat/signs.lua @@ -0,0 +1,10 @@ + +jumpdrive.signs_compat = function(pos1, pos2) + local nodes = minetest.find_nodes_in_area(pos1, pos2, {"group:display_api"}) + if nodes then + for _,pos in pairs(nodes) do + minetest.log("action", "[jumpdrive] updating display @ " .. minetest.pos_to_string(pos)) + display_api.update_entities(pos) + end + end +end diff --git a/mods_disabled/jumpdrive/compat/telemosaic.lua b/mods_disabled/jumpdrive/compat/telemosaic.lua new file mode 100644 index 0000000..ab1caa8 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/telemosaic.lua @@ -0,0 +1,47 @@ + +local function unhash_pos(hash) + local pos = {} + local list = string.split(hash, ':') + pos.x = tonumber(list[1]) + pos.y = tonumber(list[2]) + pos.z = tonumber(list[3]) + return pos +end + +local function hash_pos(pos) + return math.floor(pos.x + 0.5) .. ':' .. + math.floor(pos.y + 0.5) .. ':' .. + math.floor(pos.z + 0.5) +end + +jumpdrive.telemosaic_compat = function(source_pos, target_pos) + + -- delegate to compat + minetest.log("action", "[jumpdrive] Trying to rewire telemosaic @ " .. + target_pos.x .. "/" .. target_pos.y .. "/" .. target_pos.z) + + local local_meta = minetest.get_meta(target_pos) + local local_hash = local_meta:get_string('telemosaic:dest') + + if local_hash ~= nil and local_hash ~= '' then + local local_pos = unhash_pos(local_hash) + + minetest.load_area(local_pos) + local node = minetest.get_node(local_pos) + + if node.name == "telemosaic:beacon" then + local remote_hash = minetest.get_meta(local_pos):get_string('telemosaic:dest') + + if remote_hash == hash_pos(source_pos) then + -- remote beacon points to this beacon, update link + local remote_pos = unhash_pos(remote_hash) + local remote_meta = minetest.get_meta(remote_pos) + + minetest.log("action", "[jumpdrive] rewiring telemosaic at " .. minetest.pos_to_string(remote_pos) .. + " to " .. minetest.pos_to_string(target_pos)) + + remote_meta:set_string("telemosaic:dest", hash_pos(target_pos)) + end + end + end +end diff --git a/mods_disabled/jumpdrive/compat/teleporttube.lua b/mods_disabled/jumpdrive/compat/teleporttube.lua new file mode 100644 index 0000000..aac79a1 --- /dev/null +++ b/mods_disabled/jumpdrive/compat/teleporttube.lua @@ -0,0 +1,47 @@ + + +if not pipeworks.tptube then + minetest.log("warning", "[jumpdrive] pipeworks teleport patch not applied, tp-tubes don't work as expected!") +end + + +-- https://gitlab.com/VanessaE/pipeworks/blob/master/teleport_tube.lua +jumpdrive.teleporttube_compat = function(from, to) + if not pipeworks.tptube then + -- only works with the patch from "./patches/pipeworks.patch" + return + end + + local from_hash = pipeworks.tptube.hash(from) + local to_hash = pipeworks.tptube.hash(to) + + -- swap data + local db = pipeworks.tptube.get_db() + local data = db[from_hash] + + if not data then + minetest.log("warning", "[jumpdrive] no tp-tube data found at hash: " .. + from_hash .. " / pos: " .. minetest.pos_to_string(from)) + return + end + + minetest.log("action", "[jumpdrive] moving tp-tube data from " .. + from_hash .. " to " .. to_hash .. " at pos: " .. minetest.pos_to_string(from)) + + data.x = to.x + data.y = to.y + data.z = to.z + + db[from_hash] = nil + db[to_hash] = data + +end + +jumpdrive.teleporttube_compat_commit = function() + if not pipeworks.tptube then + -- only works with the patch from "./patches/pipeworks.patch" + return + end + + pipeworks.tptube.save_tube_db() +end diff --git a/mods_disabled/jumpdrive/compat/textline.lua b/mods_disabled/jumpdrive/compat/textline.lua new file mode 100644 index 0000000..2ad482e --- /dev/null +++ b/mods_disabled/jumpdrive/compat/textline.lua @@ -0,0 +1,17 @@ + +jumpdrive.textline_compat = function(target_pos1, target_pos2) + local textline_def = minetest.registered_nodes["textline:lcd"] + + if not textline_def then + return + end + + local nodes = minetest.find_nodes_in_area(target_pos1, target_pos2, {"textline:lcd"}) + if nodes then + for _, pos in ipairs(nodes) do + -- https://github.com/gbl08ma/textline/blob/636c776446c3fc831376335b72bb48281fb6ab11/init.lua#L103 + -- invoke prepare_writing() function through place_node callback + textline_def.after_place_node(pos) + end + end +end diff --git a/mods_disabled/jumpdrive/compat/travelnet.lua b/mods_disabled/jumpdrive/compat/travelnet.lua new file mode 100644 index 0000000..e4b109f --- /dev/null +++ b/mods_disabled/jumpdrive/compat/travelnet.lua @@ -0,0 +1,25 @@ +jumpdrive.travelnet_compat = function(pos1, pos2) + + local pos_list = minetest.find_nodes_in_area(pos1, pos2, {"travelnet:travelnet"}) + if pos_list then + for _,pos in pairs(pos_list) do + local meta = minetest.get_meta(pos); + minetest.log("action", "[jumpdrive] Restoring travelnet @ " .. pos.x .. "/" .. pos.y .. "/" .. pos.z) + + local owner_name = meta:get_string( "owner" ); + local station_name = meta:get_string( "station_name" ); + local station_network = meta:get_string( "station_network" ); + + if (travelnet.targets[owner_name] + and travelnet.targets[owner_name][station_network] + and travelnet.targets[owner_name][station_network][station_name]) then + + travelnet.targets[owner_name][station_network][station_name].pos = pos + + end + end + if travelnet.save_data ~= nil then + travelnet.save_data() + end + end +end diff --git a/mods_disabled/jumpdrive/crafts.lua b/mods_disabled/jumpdrive/crafts.lua new file mode 100644 index 0000000..58d24e7 --- /dev/null +++ b/mods_disabled/jumpdrive/crafts.lua @@ -0,0 +1,20 @@ + +if minetest.get_modpath("default") then + minetest.register_craft({ + output = 'jumpdrive:engine', + recipe = { + {'jumpdrive:backbone', 'default:steelblock', 'jumpdrive:backbone'}, + {'default:steelblock', 'default:steelblock', 'default:steelblock'}, + {'jumpdrive:backbone', 'default:steelblock', 'jumpdrive:backbone'} + } + }) + + minetest.register_craft({ + output = 'jumpdrive:backbone', + recipe = { + {'default:mese_block', 'default:steelblock', 'default:mese_block'}, + {'default:steelblock', 'default:steelblock', 'default:steelblock'}, + {'default:mese_block', 'default:steelblock', 'default:mese_block'} + } + }) +end diff --git a/mods_disabled/jumpdrive/digiline.lua b/mods_disabled/jumpdrive/digiline.lua new file mode 100644 index 0000000..0dcb630 --- /dev/null +++ b/mods_disabled/jumpdrive/digiline.lua @@ -0,0 +1,109 @@ + +--https://github.com/minetest-mods/technic/blob/master/technic/machines/HV/forcefield.lua + +local is_int = function(value) + return type(value) == 'number' and math.floor(value) == value +end + +jumpdrive.digiline_effector = function(pos, _, channel, msg) + + local msgt = type(msg) + if msgt ~= "table" then + return + end + + local meta = minetest.get_meta(pos) + + local set_channel = meta:get_string("channel") + if set_channel == "" then + -- backward compatibility with old static channel + set_channel = "jumpdrive" + end + + if channel ~= set_channel then + return + end + + local radius = jumpdrive.get_radius(pos) + local targetPos = jumpdrive.get_meta_pos(pos) + + local distance = vector.distance(pos, targetPos) + local power_req = jumpdrive.calculate_power(radius, distance, pos, targetPos) + + if msg.command == "get" then + digilines.receptor_send(pos, digilines.rules.default, set_channel, { + powerstorage = meta:get_int("powerstorage"), + radius = radius, + position = pos, + target = targetPos, + distance = distance, + power_req = power_req + }) + + elseif msg.command == "reset" then + meta:set_int("x", pos.x) + meta:set_int("y", pos.y) + meta:set_int("z", pos.z) + jumpdrive.update_formspec(meta, pos) + + elseif msg.command == "set" then + + if msg.key and msg.value then + local value = tonumber(msg.value) + + if value == nil then + -- not a number + return + end + -- backward compatibility with old less flexible set command + if msg.key == "x" then + meta:set_int("x", value) + elseif msg.key == "y" then + meta:set_int("y", value) + elseif msg.key == "z" then + meta:set_int("z", value) + elseif msg.key == "radius" then + if value >= 1 and value <= jumpdrive.config.max_radius then + meta:set_int("radius", value) + end + end + else + -- API requires integers for coord values, noop for everything else + if is_int(msg.x) then meta:set_int("x", msg.x) end + if is_int(msg.y) then meta:set_int("y", msg.y) end + if is_int(msg.z) then meta:set_int("z", msg.z) end + if is_int(msg.r) and msg.r <= jumpdrive.config.max_radius then + meta:set_int("radius", msg.r) + end + if msg.formupdate then + jumpdrive.update_formspec(meta, pos) + end + end + + elseif msg.command == "simulate" or msg.command == "show" then + local success, resultmsg = jumpdrive.simulate_jump(pos) + + digilines.receptor_send(pos, digilines.rules.default, set_channel, { + success=success, + msg=resultmsg + }) + + elseif msg.command == "jump" then + local success, timeormsg = jumpdrive.execute_jump(pos) + + local send_pos = pos + if success then + -- send new message in target pos + send_pos = targetPos + digilines.receptor_send(send_pos, digilines.rules.default, set_channel, { + success = success, + time = timeormsg + }) + else + digilines.receptor_send(send_pos, digilines.rules.default, set_channel, { + success = success, + msg = timeormsg + }) + end + end +end diff --git a/mods_disabled/jumpdrive/doc/digiline.md b/mods_disabled/jumpdrive/doc/digiline.md new file mode 100644 index 0000000..1599c1b --- /dev/null +++ b/mods_disabled/jumpdrive/doc/digiline.md @@ -0,0 +1,293 @@ +# Digilines interface + +Digiline commands if the `digilines` mod is available + +## Engine + +### Query current status/coords + +Request coordinates and engine status + +```lua +-- request +digiline_send("jumpdrive", { + command = "get" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "jumpdrive" then + event.msg = { + powerstorage = 1000000, + radius = 10, + position = {x=0, y=0, z=0}, + target = {x=0, y=0, z=0}, + distance = 100, + power_req = 150000 + } +end +``` + +### Reset target coordinates + +Resets the target coordinates + +```lua +-- request +digiline_send("jumpdrive", { + command = "reset" +}) +``` + +### Set target coordinates + +Set the target coordinates + +```lua +-- request +digiline_send("jumpdrive", { command = "set", key = "x", value = 1024 }) +digiline_send("jumpdrive", { command = "set", key = "y", value = 1024 }) +digiline_send("jumpdrive", { command = "set", key = "z", value = 2048 }) +digiline_send("jumpdrive", { command = "set", key = "radius", value = 15 }) +``` + +Alternate way to set coordinates + +```lua +-- request +digiline_send("jumpdrive", { command = "set", x = 1024, y = 1024, z = 2048, r = 15, formupdate = false }) +``` +Where +* `x` sets x coordinate +* `y` sets y coordinate +* `z` sets z coordinate +* `r` sets radius +* `formupdate` updates coordinates on formspec + +Every value is optional. `x`, `y`, `z` and `r` must be integers. `formupdate` is truth value. + +### Simulate jump + +Simulate a jump + +```lua +-- request +digiline_send("jumpdrive", { + command = "simulate" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "jumpdrive" then + event.msg = { + success = false, -- true if successful + msg = "Protected by xyz!" + } +end +``` + +### Execute jump + +Execute a jump + +```lua +-- request +digiline_send("jumpdrive", { + command = "jump" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "jumpdrive" then + event.msg = { + success = true, + time = 1234 -- time used in microseconds + } +end +``` + +## Fleetcontroller + +Fleetcontroller interface + +### Query current status/coords + +Request coordinates and status + +```lua +-- request +digiline_send("fleetcontroller", { + command = "get" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "fleetcontroller" then + event.msg = { + active = true, + engines = { + { + power_req = 10000, + powerstorage = 125000, + radius = 10, + position = { x=0, y=0, z=0 }, + target = { x=0, y=0, z=0 }, + distance = 2500, + },{ + -- etc + } + }, + max_power_req = 100000, -- max power of an engine + total_power_req = 12500000, -- total power of all engines + position = { x=0, y=0, z=0 }, + target = { x=0, y=0, z=0 }, + distance = 2500, + } +end +``` + + +### Reset coordinates + +Resets the target coordinates + +```lua +-- request +digiline_send("fleetcontroller", { + command = "reset" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "fleetcontroller" then + -- sent if the jump is still in progress + event.msg = { + success = false, + msg = "Operation not completed" + } +end +``` + + +### Set coordinates + +Resets the target coordinates + +Where +* `x` sets x coordinate +* `y` sets y coordinate +* `z` sets z coordinate +* `formupdate` updates coordinates on formspec + +Every value is optional. `x`, `y` and `z` must be integers. `formupdate` is truth value. + +```lua +-- request +digiline_send("fleetcontroller", { + command = "set", + x = 0, + y = 100, + z = 1024, + formupdate = false +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "fleetcontroller" then + -- sent if the jump is still in progress + event.msg = { + success = false, + msg = "Operation not completed" + } +end +``` + +Response is only sent when operation fails due to another operation is in progress like simulation or jump. +Error will not be sent for invalid values or missing values because every value is optional. + +### Simulate jump + +Simulates a jump + +```lua +-- request +digiline_send("fleetcontroller", { + command = "simulate" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "fleetcontroller" then + -- sent if the jump is still in progress + event.msg = { + success = false, + msg = "Operation not completed" + } + + -- sent on abort + event.msg { + success = false, + index = 1, + count = 10, + msg = "simulation aborted" + } + + -- sent if an error occured + event.msg = { + success = false, + pos = { x=0, y=0, z=0 }, + msg = "Protected by xyz!" + } + + -- sent on success + event.msg = { + success = true, + count = 10, + msgs = { + -- possible warning messages for engines like target in vacuum warning + } + } +end +``` + + +### Execute jump + +Executes a jump + +```lua +-- request +digiline_send("fleetcontroller", { + command = "jump" +}) + +-- response sent back on the same channel +if event.type == "digiline" and event.channel == "fleetcontroller" then + -- sent if the jump is still in progress + event.msg = { + success = false, + msg = "Operation not completed" + } + + -- sent on abort + event.msg { + success = false, + index = 1, + count = 10, + msg = "jump aborted" + } + + -- sent if an error occured + event.msg = { + success = false, + count = 1, + msg = "Protected by xyz!", + msgs = { + -- messages + } + } + + -- sent on success + event.msg = { + success = true, + count = 10, + msgs = { + -- messages + }, + time = 1234 -- microseconds used + } +end +``` diff --git a/mods_disabled/jumpdrive/doc/lua_api.txt b/mods_disabled/jumpdrive/doc/lua_api.txt new file mode 100644 index 0000000..907f47e --- /dev/null +++ b/mods_disabled/jumpdrive/doc/lua_api.txt @@ -0,0 +1,7408 @@ +Minetest Lua Modding API Reference +================================== + +* More information at +* Developer Wiki: +* (Unofficial) Minetest Modding Book by rubenwardy: + +Introduction +------------ + +Content and functionality can be added to Minetest using Lua scripting +in run-time loaded mods. + +A mod is a self-contained bunch of scripts, textures and other related +things, which is loaded by and interfaces with Minetest. + +Mods are contained and ran solely on the server side. Definitions and media +files are automatically transferred to the client. + +If you see a deficiency in the API, feel free to attempt to add the +functionality in the engine and API, and to document it here. + +Programming in Lua +------------------ + +If you have any difficulty in understanding this, please read +[Programming in Lua](http://www.lua.org/pil/). + +Startup +------- + +Mods are loaded during server startup from the mod load paths by running +the `init.lua` scripts in a shared environment. + +Paths +----- + +* `RUN_IN_PLACE=1` (Windows release, local build) + * `$path_user`: `` + * `$path_share`: `` +* `RUN_IN_PLACE=0`: (Linux release) + * `$path_share`: + * Linux: `/usr/share/minetest` + * Windows: `/minetest-0.4.x` + * `$path_user`: + * Linux: `$HOME/.minetest` + * Windows: `C:/users//AppData/minetest` (maybe) + + + + +Games +===== + +Games are looked up from: + +* `$path_share/games//` +* `$path_user/games//` + +Where `` is unique to each game. + +The game directory can contain the following files: + +* `game.conf`, with the following keys: + * `name`: Required, human readable name e.g. `name = Minetest` + * `description`: Short description to be shown in the content tab + * `disallowed_mapgens = ` + e.g. `disallowed_mapgens = v5,v6,flat` + These mapgens are removed from the list of mapgens for the game. +* `minetest.conf`: + Used to set default settings when running this game. +* `settingtypes.txt`: + In the same format as the one in builtin. + This settingtypes.txt will be parsed by the menu and the settings will be + displayed in the "Games" category in the advanced settings tab. +* If the game contains a folder called `textures` the server will load it as a + texturepack, overriding mod textures. + Any server texturepack will override mod textures and the game texturepack. + +Menu images +----------- + +Games can provide custom main menu images. They are put inside a `menu` +directory inside the game directory. + +The images are named `$identifier.png`, where `$identifier` is one of +`overlay`, `background`, `footer`, `header`. +If you want to specify multiple images for one identifier, add additional +images named like `$identifier.$n.png`, with an ascending number $n starting +with 1, and a random image will be chosen from the provided ones. + + + + +Mods +==== + +Mod load path +------------- + +Paths are relative to the directories listed in the [Paths] section above. + +* `games//mods/` +* `mods/` +* `worlds//worldmods/` + +World-specific games +-------------------- + +It is possible to include a game in a world; in this case, no mods or +games are loaded or checked from anywhere else. + +This is useful for e.g. adventure worlds and happens if the `/game/` +directory exists. + +Mods should then be placed in `/game/mods/`. + +Modpacks +-------- + +Mods can be put in a subdirectory, if the parent directory, which otherwise +should be a mod, contains a file named `modpack.conf`. +The file is a key-value store of modpack details. + +* `name`: The modpack name. +* `description`: Description of mod to be shown in the Mods tab of the main + menu. + +Note: to support 0.4.x, please also create an empty modpack.txt file. + +Mod directory structure +----------------------- + + mods + ├── modname + │   ├── mod.conf + │   ├── screenshot.png + │   ├── settingtypes.txt + │   ├── init.lua + │   ├── models + │   ├── textures + │   │   ├── modname_stuff.png + │   │   └── modname_something_else.png + │   ├── sounds + │   ├── media + │   ├── locale + │   └── + └── another + +### modname + +The location of this directory can be fetched by using +`minetest.get_modpath(modname)`. + +### mod.conf + +A `Settings` file that provides meta information about the mod. + +* `name`: The mod name. Allows Minetest to determine the mod name even if the + folder is wrongly named. +* `description`: Description of mod to be shown in the Mods tab of the main + menu. +* `depends`: A comma separated list of dependencies. These are mods that must be + loaded before this mod. +* `optional_depends`: A comma separated list of optional dependencies. + Like a dependency, but no error if the mod doesn't exist. + +Note: to support 0.4.x, please also provide depends.txt. + +### `screenshot.png` + +A screenshot shown in the mod manager within the main menu. It should +have an aspect ratio of 3:2 and a minimum size of 300×200 pixels. + +### `depends.txt` + +**Deprecated:** you should use mod.conf instead. + +This file is used if there are no dependencies in mod.conf. + +List of mods that have to be loaded before loading this mod. + +A single line contains a single modname. + +Optional dependencies can be defined by appending a question mark +to a single modname. This means that if the specified mod +is missing, it does not prevent this mod from being loaded. + +### `description.txt` + +**Deprecated:** you should use mod.conf instead. + +This file is used if there is no description in mod.conf. + +A file containing a description to be shown in the Mods tab of the main menu. + +### `settingtypes.txt` + +The format is documented in `builtin/settingtypes.txt`. +It is parsed by the main menu settings dialogue to list mod-specific +settings in the "Mods" category. + +### `init.lua` + +The main Lua script. Running this script should register everything it +wants to register. Subsequent execution depends on minetest calling the +registered callbacks. + +`minetest.settings` can be used to read custom or existing settings at load +time, if necessary. (See [`Settings`]) + +### `models` + +Models for entities or meshnodes. + +### `textures`, `sounds`, `media` + +Media files (textures, sounds, whatever) that will be transferred to the +client and will be available for use by the mod. + +### `locale` + +Translation files for the clients. (See [Translations]) + +Naming conventions +------------------ + +Registered names should generally be in this format: + + modname: + +`` can have these characters: + + a-zA-Z0-9_ + +This is to prevent conflicting names from corrupting maps and is +enforced by the mod loader. + +Registered names can be overridden by prefixing the name with `:`. This can +be used for overriding the registrations of some other mod. + +The `:` prefix can also be used for maintaining backwards compatibility. + +### Example + +In the mod `experimental`, there is the ideal item/node/entity name `tnt`. +So the name should be `experimental:tnt`. + +Any mod can redefine `experimental:tnt` by using the name + + :experimental:tnt + +when registering it. That mod is required to have `experimental` as a +dependency. + + + + +Aliases +======= + +Aliases of itemnames can be added by using +`minetest.register_alias(alias, original_name)` or +`minetest.register_alias_force(alias, original_name)`. + +This adds an alias `alias` for the item called `original_name`. +From now on, you can use `alias` to refer to the item `original_name`. + +The only difference between `minetest.register_alias` and +`minetest.register_alias_force` is that if an item named `alias` already exists, +`minetest.register_alias` will do nothing while +`minetest.register_alias_force` will unregister it. + +This can be used for maintaining backwards compatibility. + +This can also set quick access names for things, e.g. if +you have an item called `epiclylongmodname:stuff`, you could do + + minetest.register_alias("stuff", "epiclylongmodname:stuff") + +and be able to use `/giveme stuff`. + +Mapgen aliases +-------------- + +In a game, a certain number of these must be set to tell core mapgens which +of the game's nodes are to be used for core mapgen generation. For example: + + minetest.register_alias("mapgen_stone", "default:stone") + +### Aliases for non-V6 mapgens + +#### Essential aliases + +* mapgen_stone +* mapgen_water_source +* mapgen_river_water_source + +`mapgen_river_water_source` is required for mapgens with sloping rivers where +it is necessary to have a river liquid node with a short `liquid_range` and +`liquid_renewable = false` to avoid flooding. + +#### Optional aliases + +* mapgen_lava_source + +Fallback lava node used if cave liquids are not defined in biome definitions. +Deprecated for non-V6 mapgens, define cave liquids in biome definitions instead. + +* mapgen_cobble + +Fallback node used if dungeon nodes are not defined in biome definitions. +Deprecated for non-V6 mapgens, define dungeon nodes in biome definitions instead. + +### Aliases needed for Mapgen V6 + +* mapgen_stone +* mapgen_water_source +* mapgen_lava_source +* mapgen_dirt +* mapgen_dirt_with_grass +* mapgen_sand +* mapgen_gravel +* mapgen_desert_stone +* mapgen_desert_sand +* mapgen_dirt_with_snow +* mapgen_snowblock +* mapgen_snow +* mapgen_ice + +* mapgen_tree +* mapgen_leaves +* mapgen_apple +* mapgen_jungletree +* mapgen_jungleleaves +* mapgen_junglegrass +* mapgen_pine_tree +* mapgen_pine_needles + +* mapgen_cobble +* mapgen_stair_cobble +* mapgen_mossycobble +* mapgen_stair_desert_stone + +### Setting the node used in Mapgen Singlenode + +By default the world is filled with air nodes. To set a different node use, for +example: + + minetest.register_alias("mapgen_singlenode", "default:stone") + + + + +Textures +======== + +Mods should generally prefix their textures with `modname_`, e.g. given +the mod name `foomod`, a texture could be called: + + foomod_foothing.png + +Textures are referred to by their complete name, or alternatively by +stripping out the file extension: + +* e.g. `foomod_foothing.png` +* e.g. `foomod_foothing` + +Texture modifiers +----------------- + +There are various texture modifiers that can be used +to generate textures on-the-fly. + +### Texture overlaying + +Textures can be overlaid by putting a `^` between them. + +Example: + + default_dirt.png^default_grass_side.png + +`default_grass_side.png` is overlaid over `default_dirt.png`. +The texture with the lower resolution will be automatically upscaled to +the higher resolution texture. + +### Texture grouping + +Textures can be grouped together by enclosing them in `(` and `)`. + +Example: `cobble.png^(thing1.png^thing2.png)` + +A texture for `thing1.png^thing2.png` is created and the resulting +texture is overlaid on top of `cobble.png`. + +### Escaping + +Modifiers that accept texture names (e.g. `[combine`) accept escaping to allow +passing complex texture names as arguments. Escaping is done with backslash and +is required for `^` and `:`. + +Example: `cobble.png^[lowpart:50:color.png\^[mask\:trans.png` + +The lower 50 percent of `color.png^[mask:trans.png` are overlaid +on top of `cobble.png`. + +### Advanced texture modifiers + +#### Crack + +* `[crack::

` +* `[cracko::

` +* `[crack:::

` +* `[cracko:::

` + +Parameters: + +* ``: tile count (in each direction) +* ``: animation frame count +* `

`: current animation frame + +Draw a step of the crack animation on the texture. +`crack` draws it normally, while `cracko` lays it over, keeping transparent +pixels intact. + +Example: + + default_cobble.png^[crack:10:1 + +#### `[combine:x:,=:,=:...` + +* ``: width +* ``: height +* ``: x position +* ``: y position +* ``: texture to combine + +Creates a texture of size `` times `` and blits the listed files to their +specified coordinates. + +Example: + + [combine:16x32:0,0=default_cobble.png:0,16=default_wood.png + +#### `[resize:x` + +Resizes the texture to the given dimensions. + +Example: + + default_sandstone.png^[resize:16x16 + +#### `[opacity:` + +Makes the base image transparent according to the given ratio. + +`r` must be between 0 (transparent) and 255 (opaque). + +Example: + + default_sandstone.png^[opacity:127 + +#### `[invert:` + +Inverts the given channels of the base image. +Mode may contain the characters "r", "g", "b", "a". +Only the channels that are mentioned in the mode string will be inverted. + +Example: + + default_apple.png^[invert:rgb + +#### `[brighten` + +Brightens the texture. + +Example: + + tnt_tnt_side.png^[brighten + +#### `[noalpha` + +Makes the texture completely opaque. + +Example: + + default_leaves.png^[noalpha + +#### `[makealpha:,,` + +Convert one color to transparency. + +Example: + + default_cobble.png^[makealpha:128,128,128 + +#### `[transform` + +* ``: transformation(s) to apply + +Rotates and/or flips the image. + +`` can be a number (between 0 and 7) or a transform name. +Rotations are counter-clockwise. + + 0 I identity + 1 R90 rotate by 90 degrees + 2 R180 rotate by 180 degrees + 3 R270 rotate by 270 degrees + 4 FX flip X + 5 FXR90 flip X then rotate by 90 degrees + 6 FY flip Y + 7 FYR90 flip Y then rotate by 90 degrees + +Example: + + default_stone.png^[transformFXR90 + +#### `[inventorycube{{{` + +Escaping does not apply here and `^` is replaced by `&` in texture names +instead. + +Create an inventory cube texture using the side textures. + +Example: + + [inventorycube{grass.png{dirt.png&grass_side.png{dirt.png&grass_side.png + +Creates an inventorycube with `grass.png`, `dirt.png^grass_side.png` and +`dirt.png^grass_side.png` textures + +#### `[lowpart::` + +Blit the lower ``% part of `` on the texture. + +Example: + + base.png^[lowpart:25:overlay.png + +#### `[verticalframe::` + +* ``: animation frame count +* ``: current animation frame + +Crops the texture to a frame of a vertical animation. + +Example: + + default_torch_animated.png^[verticalframe:16:8 + +#### `[mask:` + +Apply a mask to the base image. + +The mask is applied using binary AND. + +#### `[sheet:x:,` + +Retrieves a tile at position x,y from the base image +which it assumes to be a tilesheet with dimensions w,h. + +#### `[colorize::` + +Colorize the textures with the given color. +`` is specified as a `ColorString`. +`` is an int ranging from 0 to 255 or the word "`alpha`". If +it is an int, then it specifies how far to interpolate between the +colors where 0 is only the texture color and 255 is only ``. If +omitted, the alpha of `` will be used as the ratio. If it is +the word "`alpha`", then each texture pixel will contain the RGB of +`` and the alpha of `` multiplied by the alpha of the +texture pixel. + +#### `[multiply:` + +Multiplies texture colors with the given color. +`` is specified as a `ColorString`. +Result is more like what you'd expect if you put a color on top of another +color, meaning white surfaces get a lot of your new color while black parts +don't change very much. + +Hardware coloring +----------------- + +The goal of hardware coloring is to simplify the creation of +colorful nodes. If your textures use the same pattern, and they only +differ in their color (like colored wool blocks), you can use hardware +coloring instead of creating and managing many texture files. +All of these methods use color multiplication (so a white-black texture +with red coloring will result in red-black color). + +### Static coloring + +This method is useful if you wish to create nodes/items with +the same texture, in different colors, each in a new node/item definition. + +#### Global color + +When you register an item or node, set its `color` field (which accepts a +`ColorSpec`) to the desired color. + +An `ItemStack`'s static color can be overwritten by the `color` metadata +field. If you set that field to a `ColorString`, that color will be used. + +#### Tile color + +Each tile may have an individual static color, which overwrites every +other coloring method. To disable the coloring of a face, +set its color to white (because multiplying with white does nothing). +You can set the `color` property of the tiles in the node's definition +if the tile is in table format. + +### Palettes + +For nodes and items which can have many colors, a palette is more +suitable. A palette is a texture, which can contain up to 256 pixels. +Each pixel is one possible color for the node/item. +You can register one node/item, which can have up to 256 colors. + +#### Palette indexing + +When using palettes, you always provide a pixel index for the given +node or `ItemStack`. The palette is read from left to right and from +top to bottom. If the palette has less than 256 pixels, then it is +stretched to contain exactly 256 pixels (after arranging the pixels +to one line). The indexing starts from 0. + +Examples: + +* 16x16 palette, index = 0: the top left corner +* 16x16 palette, index = 4: the fifth pixel in the first row +* 16x16 palette, index = 16: the pixel below the top left corner +* 16x16 palette, index = 255: the bottom right corner +* 2 (width) x 4 (height) palette, index = 31: the top left corner. + The palette has 8 pixels, so each pixel is stretched to 32 pixels, + to ensure the total 256 pixels. +* 2x4 palette, index = 32: the top right corner +* 2x4 palette, index = 63: the top right corner +* 2x4 palette, index = 64: the pixel below the top left corner + +#### Using palettes with items + +When registering an item, set the item definition's `palette` field to +a texture. You can also use texture modifiers. + +The `ItemStack`'s color depends on the `palette_index` field of the +stack's metadata. `palette_index` is an integer, which specifies the +index of the pixel to use. + +#### Linking palettes with nodes + +When registering a node, set the item definition's `palette` field to +a texture. You can also use texture modifiers. +The node's color depends on its `param2`, so you also must set an +appropriate `paramtype2`: + +* `paramtype2 = "color"` for nodes which use their full `param2` for + palette indexing. These nodes can have 256 different colors. + The palette should contain 256 pixels. +* `paramtype2 = "colorwallmounted"` for nodes which use the first + five bits (most significant) of `param2` for palette indexing. + The remaining three bits are describing rotation, as in `wallmounted` + paramtype2. Division by 8 yields the palette index (without stretching the + palette). These nodes can have 32 different colors, and the palette + should contain 32 pixels. + Examples: + * `param2 = 17` is 2 * 8 + 1, so the rotation is 1 and the third (= 2 + 1) + pixel will be picked from the palette. + * `param2 = 35` is 4 * 8 + 3, so the rotation is 3 and the fifth (= 4 + 1) + pixel will be picked from the palette. +* `paramtype2 = "colorfacedir"` for nodes which use the first + three bits of `param2` for palette indexing. The remaining + five bits are describing rotation, as in `facedir` paramtype2. + Division by 32 yields the palette index (without stretching the + palette). These nodes can have 8 different colors, and the + palette should contain 8 pixels. + Examples: + * `param2 = 17` is 0 * 32 + 17, so the rotation is 17 and the + first (= 0 + 1) pixel will be picked from the palette. + * `param2 = 35` is 1 * 32 + 3, so the rotation is 3 and the + second (= 1 + 1) pixel will be picked from the palette. + +To colorize a node on the map, set its `param2` value (according +to the node's paramtype2). + +### Conversion between nodes in the inventory and on the map + +Static coloring is the same for both cases, there is no need +for conversion. + +If the `ItemStack`'s metadata contains the `color` field, it will be +lost on placement, because nodes on the map can only use palettes. + +If the `ItemStack`'s metadata contains the `palette_index` field, it is +automatically transferred between node and item forms by the engine, +when a player digs or places a colored node. +You can disable this feature by setting the `drop` field of the node +to itself (without metadata). +To transfer the color to a special drop, you need a drop table. + +Example: + + minetest.register_node("mod:stone", { + description = "Stone", + tiles = {"default_stone.png"}, + paramtype2 = "color", + palette = "palette.png", + drop = { + items = { + -- assume that mod:cobblestone also has the same palette + {items = {"mod:cobblestone"}, inherit_color = true }, + } + } + }) + +### Colored items in craft recipes + +Craft recipes only support item strings, but fortunately item strings +can also contain metadata. Example craft recipe registration: + + minetest.register_craft({ + output = minetest.itemstring_with_palette("wool:block", 3), + type = "shapeless", + recipe = { + "wool:block", + "dye:red", + }, + }) + +To set the `color` field, you can use `minetest.itemstring_with_color`. + +Metadata field filtering in the `recipe` field are not supported yet, +so the craft output is independent of the color of the ingredients. + +Soft texture overlay +-------------------- + +Sometimes hardware coloring is not enough, because it affects the +whole tile. Soft texture overlays were added to Minetest to allow +the dynamic coloring of only specific parts of the node's texture. +For example a grass block may have colored grass, while keeping the +dirt brown. + +These overlays are 'soft', because unlike texture modifiers, the layers +are not merged in the memory, but they are simply drawn on top of each +other. This allows different hardware coloring, but also means that +tiles with overlays are drawn slower. Using too much overlays might +cause FPS loss. + +For inventory and wield images you can specify overlays which +hardware coloring does not modify. You have to set `inventory_overlay` +and `wield_overlay` fields to an image name. + +To define a node overlay, simply set the `overlay_tiles` field of the node +definition. These tiles are defined in the same way as plain tiles: +they can have a texture name, color etc. +To skip one face, set that overlay tile to an empty string. + +Example (colored grass block): + + minetest.register_node("default:dirt_with_grass", { + description = "Dirt with Grass", + -- Regular tiles, as usual + -- The dirt tile disables palette coloring + tiles = {{name = "default_grass.png"}, + {name = "default_dirt.png", color = "white"}}, + -- Overlay tiles: define them in the same style + -- The top and bottom tile does not have overlay + overlay_tiles = {"", "", + {name = "default_grass_side.png", tileable_vertical = false}}, + -- Global color, used in inventory + color = "green", + -- Palette in the world + paramtype2 = "color", + palette = "default_foilage.png", + }) + + + + +Sounds +====== + +Only Ogg Vorbis files are supported. + +For positional playing of sounds, only single-channel (mono) files are +supported. Otherwise OpenAL will play them non-positionally. + +Mods should generally prefix their sounds with `modname_`, e.g. given +the mod name "`foomod`", a sound could be called: + + foomod_foosound.ogg + +Sounds are referred to by their name with a dot, a single digit and the +file extension stripped out. When a sound is played, the actual sound file +is chosen randomly from the matching sounds. + +When playing the sound `foomod_foosound`, the sound is chosen randomly +from the available ones of the following files: + +* `foomod_foosound.ogg` +* `foomod_foosound.0.ogg` +* `foomod_foosound.1.ogg` +* (...) +* `foomod_foosound.9.ogg` + +Examples of sound parameter tables: + + -- Play locationless on all clients + { + gain = 1.0, -- default + fade = 0.0, -- default, change to a value > 0 to fade the sound in + pitch = 1.0, -- default + } + -- Play locationless to one player + { + to_player = name, + gain = 1.0, -- default + fade = 0.0, -- default, change to a value > 0 to fade the sound in + pitch = 1.0, -- default + } + -- Play locationless to one player, looped + { + to_player = name, + gain = 1.0, -- default + loop = true, + } + -- Play in a location + { + pos = {x = 1, y = 2, z = 3}, + gain = 1.0, -- default + max_hear_distance = 32, -- default, uses an euclidean metric + } + -- Play connected to an object, looped + { + object = , + gain = 1.0, -- default + max_hear_distance = 32, -- default, uses an euclidean metric + loop = true, + } + +Looped sounds must either be connected to an object or played locationless to +one player using `to_player = name,`. + +A positional sound will only be heard by players that are within +`max_hear_distance` of the sound position, at the start of the sound. + +`SimpleSoundSpec` +----------------- + +* e.g. `""` +* e.g. `"default_place_node"` +* e.g. `{}` +* e.g. `{name = "default_place_node"}` +* e.g. `{name = "default_place_node", gain = 1.0}` +* e.g. `{name = "default_place_node", gain = 1.0, pitch = 1.0}` + + +Special sound files +------------------- + +These sound files are played back by the engine if provided. + + * `main_menu`: Looped sound in the main menu (gain = 1.0) + * `player_damage`: Played when the local player takes damage (gain = 0.5) + * `player_falling_damage`: Played when the local player takes + damage by falling (gain = 0.5) + + +Registered definitions +====================== + +Anything added using certain [Registration functions] gets added to one or more +of the global [Registered definition tables]. + +Note that in some cases you will stumble upon things that are not contained +in these tables (e.g. when a mod has been removed). Always check for +existence before trying to access the fields. + +Example: + +All nodes register with `minetest.register_node` get added to the table +`minetest.registered_nodes`. + +If you want to check the drawtype of a node, you could do: + + local function get_nodedef_field(nodename, fieldname) + if not minetest.registered_nodes[nodename] then + return nil + end + return minetest.registered_nodes[nodename][fieldname] + end + local drawtype = get_nodedef_field(nodename, "drawtype") + + + + +Nodes +===== + +Nodes are the bulk data of the world: cubes and other things that take the +space of a cube. Huge amounts of them are handled efficiently, but they +are quite static. + +The definition of a node is stored and can be accessed by using + + minetest.registered_nodes[node.name] + +See [Registered definitions]. + +Nodes are passed by value between Lua and the engine. +They are represented by a table: + + {name="name", param1=num, param2=num} + +`param1` and `param2` are 8-bit integers ranging from 0 to 255. The engine uses +them for certain automated functions. If you don't use these functions, you can +use them to store arbitrary values. + +Node paramtypes +--------------- + +The functions of `param1` and `param2` are determined by certain fields in the +node definition. + +`param1` is reserved for the engine when `paramtype != "none"`: + +* `paramtype = "light"` + * The value stores light with and without sun in its upper and lower 4 bits + respectively. + * Required by a light source node to enable spreading its light. + * Required by the following drawtypes as they determine their visual + brightness from their internal light value: + * torchlike + * signlike + * firelike + * fencelike + * raillike + * nodebox + * mesh + * plantlike + * plantlike_rooted + +`param2` is reserved for the engine when any of these are used: + +* `liquidtype = "flowing"` + * The level and some flags of the liquid is stored in `param2` +* `drawtype = "flowingliquid"` + * The drawn liquid level is read from `param2` +* `drawtype = "torchlike"` +* `drawtype = "signlike"` +* `paramtype2 = "wallmounted"` + * The rotation of the node is stored in `param2`. You can make this value + by using `minetest.dir_to_wallmounted()`. +* `paramtype2 = "facedir"` + * The rotation of the node is stored in `param2`. Furnaces and chests are + rotated this way. Can be made by using `minetest.dir_to_facedir()`. + * Values range 0 - 23 + * facedir / 4 = axis direction: + 0 = y+, 1 = z+, 2 = z-, 3 = x+, 4 = x-, 5 = y- + * facedir modulo 4 = rotation around that axis +* `paramtype2 = "leveled"` + * Only valid for "nodebox" with 'type = "leveled"', and "plantlike_rooted". + * Leveled nodebox: + * The level of the top face of the nodebox is stored in `param2`. + * The other faces are defined by 'fixed = {}' like 'type = "fixed"' + nodeboxes. + * The nodebox height is (`param2` / 64) nodes. + * The maximum accepted value of `param2` is 127. + * Rooted plantlike: + * The height of the 'plantlike' section is stored in `param2`. + * The height is (`param2` / 16) nodes. +* `paramtype2 = "degrotate"` + * Only valid for "plantlike". The rotation of the node is stored in + `param2`. + * Values range 0 - 179. The value stored in `param2` is multiplied by two to + get the actual rotation in degrees of the node. +* `paramtype2 = "meshoptions"` + * Only valid for "plantlike". The value of `param2` becomes a bitfield which + can be used to change how the client draws plantlike nodes. + * Bits 0, 1 and 2 form a mesh selector. + Currently the following meshes are choosable: + * 0 = a "x" shaped plant (ordinary plant) + * 1 = a "+" shaped plant (just rotated 45 degrees) + * 2 = a "*" shaped plant with 3 faces instead of 2 + * 3 = a "#" shaped plant with 4 faces instead of 2 + * 4 = a "#" shaped plant with 4 faces that lean outwards + * 5-7 are unused and reserved for future meshes. + * Bits 3 through 7 are optional flags that can be combined and give these + effects: + * bit 3 (0x08) - Makes the plant slightly vary placement horizontally + * bit 4 (0x10) - Makes the plant mesh 1.4x larger + * bit 5 (0x20) - Moves each face randomly a small bit down (1/8 max) + * bits 6-7 are reserved for future use. +* `paramtype2 = "color"` + * `param2` tells which color is picked from the palette. + The palette should have 256 pixels. +* `paramtype2 = "colorfacedir"` + * Same as `facedir`, but with colors. + * The first three bits of `param2` tells which color is picked from the + palette. The palette should have 8 pixels. +* `paramtype2 = "colorwallmounted"` + * Same as `wallmounted`, but with colors. + * The first five bits of `param2` tells which color is picked from the + palette. The palette should have 32 pixels. +* `paramtype2 = "glasslikeliquidlevel"` + * Only valid for "glasslike_framed" or "glasslike_framed_optional" + drawtypes. + * `param2` values 0-63 define 64 levels of internal liquid, 0 being empty + and 63 being full. + * Liquid texture is defined using `special_tiles = {"modname_tilename.png"}` + +Nodes can also contain extra data. See [Node Metadata]. + +Node drawtypes +-------------- + +There are a bunch of different looking node types. + +Look for examples in `games/minimal` or `games/minetest_game`. + +* `normal` + * A node-sized cube. +* `airlike` + * Invisible, uses no texture. +* `liquid` + * The cubic source node for a liquid. +* `flowingliquid` + * The flowing version of a liquid, appears with various heights and slopes. +* `glasslike` + * Often used for partially-transparent nodes. + * Only external sides of textures are visible. +* `glasslike_framed` + * All face-connected nodes are drawn as one volume within a surrounding + frame. + * The frame appearance is generated from the edges of the first texture + specified in `tiles`. The width of the edges used are 1/16th of texture + size: 1 pixel for 16x16, 2 pixels for 32x32 etc. + * The glass 'shine' (or other desired detail) on each node face is supplied + by the second texture specified in `tiles`. +* `glasslike_framed_optional` + * This switches between the above 2 drawtypes according to the menu setting + 'Connected Glass'. +* `allfaces` + * Often used for partially-transparent nodes. + * External and internal sides of textures are visible. +* `allfaces_optional` + * Often used for leaves nodes. + * This switches between `normal`, `glasslike` and `allfaces` according to + the menu setting: Opaque Leaves / Simple Leaves / Fancy Leaves. + * With 'Simple Leaves' selected, the texture specified in `special_tiles` + is used instead, if present. This allows a visually thicker texture to be + used to compensate for how `glasslike` reduces visual thickness. +* `torchlike` + * A single vertical texture. + * If placed on top of a node, uses the first texture specified in `tiles`. + * If placed against the underside of a node, uses the second texture + specified in `tiles`. + * If placed on the side of a node, uses the third texture specified in + `tiles` and is perpendicular to that node. +* `signlike` + * A single texture parallel to, and mounted against, the top, underside or + side of a node. +* `plantlike` + * Two vertical and diagonal textures at right-angles to each other. + * See `paramtype2 = "meshoptions"` above for other options. +* `firelike` + * When above a flat surface, appears as 6 textures, the central 2 as + `plantlike` plus 4 more surrounding those. + * If not above a surface the central 2 do not appear, but the texture + appears against the faces of surrounding nodes if they are present. +* `fencelike` + * A 3D model suitable for a wooden fence. + * One placed node appears as a single vertical post. + * Adjacently-placed nodes cause horizontal bars to appear between them. +* `raillike` + * Often used for tracks for mining carts. + * Requires 4 textures to be specified in `tiles`, in order: Straight, + curved, t-junction, crossing. + * Each placed node automatically switches to a suitable rotated texture + determined by the adjacent `raillike` nodes, in order to create a + continuous track network. + * Becomes a sloping node if placed against stepped nodes. +* `nodebox` + * Often used for stairs and slabs. + * Allows defining nodes consisting of an arbitrary number of boxes. + * See [Node boxes] below for more information. +* `mesh` + * Uses models for nodes. + * Tiles should hold model materials textures. + * Only static meshes are implemented. + * For supported model formats see Irrlicht engine documentation. +* `plantlike_rooted` + * Enables underwater `plantlike` without air bubbles around the nodes. + * Consists of a base cube at the co-ordinates of the node plus a + `plantlike` extension above with a height of `param2 / 16` nodes. + * The `plantlike` extension visually passes through any nodes above the + base cube without affecting them. + * The base cube texture tiles are defined as normal, the `plantlike` + extension uses the defined special tile, for example: + `special_tiles = {{name = "default_papyrus.png", tileable_vertical = true}},` + +`*_optional` drawtypes need less rendering time if deactivated +(always client-side). + +Node boxes +---------- + +Node selection boxes are defined using "node boxes". + +A nodebox is defined as any of: + + { + -- A normal cube; the default in most things + type = "regular" + } + { + -- A fixed box (or boxes) (facedir param2 is used, if applicable) + type = "fixed", + fixed = box OR {box1, box2, ...} + } + { + -- A variable height box (or boxes) with the top face position defined + -- by the node parameter 'leveled = ', or if 'paramtype2 == "leveled"' + -- by param2. + -- Other faces are defined by 'fixed = {}' as with 'type = "fixed"'. + type = "leveled", + fixed = box OR {box1, box2, ...} + } + { + -- A box like the selection box for torches + -- (wallmounted param2 is used, if applicable) + type = "wallmounted", + wall_top = box, + wall_bottom = box, + wall_side = box + } + { + -- A node that has optional boxes depending on neighbouring nodes' + -- presence and type. See also `connects_to`. + type = "connected", + fixed = box OR {box1, box2, ...} + connect_top = box OR {box1, box2, ...} + connect_bottom = box OR {box1, box2, ...} + connect_front = box OR {box1, box2, ...} + connect_left = box OR {box1, box2, ...} + connect_back = box OR {box1, box2, ...} + connect_right = box OR {box1, box2, ...} + -- The following `disconnected_*` boxes are the opposites of the + -- `connect_*` ones above, i.e. when a node has no suitable neighbour + -- on the respective side, the corresponding disconnected box is drawn. + disconnected_top = box OR {box1, box2, ...} + disconnected_bottom = box OR {box1, box2, ...} + disconnected_front = box OR {box1, box2, ...} + disconnected_left = box OR {box1, box2, ...} + disconnected_back = box OR {box1, box2, ...} + disconnected_right = box OR {box1, box2, ...} + disconnected = box OR {box1, box2, ...} -- when there is *no* neighbour + disconnected_sides = box OR {box1, box2, ...} -- when there are *no* + -- neighbours to the sides + } + +A `box` is defined as: + + {x1, y1, z1, x2, y2, z2} + +A box of a regular node would look like: + + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + + + + +Map terminology and coordinates +=============================== + +Nodes, mapblocks, mapchunks +--------------------------- + +A 'node' is the fundamental cubic unit of a world and appears to a player as +roughly 1x1x1 meters in size. + +A 'mapblock' (often abbreviated to 'block') is 16x16x16 nodes and is the +fundamental region of a world that is stored in the world database, sent to +clients and handled by many parts of the engine. +'mapblock' is preferred terminology to 'block' to help avoid confusion with +'node', however 'block' often appears in the API. + +A 'mapchunk' (sometimes abbreviated to 'chunk') is usually 5x5x5 mapblocks +(80x80x80 nodes) and is the volume of world generated in one operation by +the map generator. +The size in mapblocks has been chosen to optimise map generation. + +Coordinates +----------- + +### Orientation of axes + +For node and mapblock coordinates, +X is East, +Y is up, +Z is North. + +### Node coordinates + +Almost all positions used in the API use node coordinates. + +### Mapblock coordinates + +Occasionally the API uses 'blockpos' which refers to mapblock coordinates that +specify a particular mapblock. +For example blockpos (0,0,0) specifies the mapblock that extends from +node position (0,0,0) to node position (15,15,15). + +#### Converting node position to the containing blockpos + +To calculate the blockpos of the mapblock that contains the node at 'nodepos', +for each axis: + +* blockpos = math.floor(nodepos / 16) + +#### Converting blockpos to min/max node positions + +To calculate the min/max node positions contained in the mapblock at 'blockpos', +for each axis: + +* Minimum: + nodepos = blockpos * 16 +* Maximum: + nodepos = blockpos * 16 + 15 + + + + +HUD +=== + +HUD element types +----------------- + +The position field is used for all element types. + +To account for differing resolutions, the position coordinates are the +percentage of the screen, ranging in value from `0` to `1`. + +The name field is not yet used, but should contain a description of what the +HUD element represents. The direction field is the direction in which something +is drawn. + +`0` draws from left to right, `1` draws from right to left, `2` draws from +top to bottom, and `3` draws from bottom to top. + +The `alignment` field specifies how the item will be aligned. It is a table +where `x` and `y` range from `-1` to `1`, with `0` being central. `-1` is +moved to the left/up, and `1` is to the right/down. Fractional values can be +used. + +The `offset` field specifies a pixel offset from the position. Contrary to +position, the offset is not scaled to screen size. This allows for some +precisely positioned items in the HUD. + +**Note**: `offset` _will_ adapt to screen DPI as well as user defined scaling +factor! + +Below are the specific uses for fields in each type; fields not listed for that +type are ignored. + +### `image` + +Displays an image on the HUD. + +* `scale`: The scale of the image, with 1 being the original texture size. + Only the X coordinate scale is used (positive values). + Negative values represent that percentage of the screen it + should take; e.g. `x=-100` means 100% (width). +* `text`: The name of the texture that is displayed. +* `alignment`: The alignment of the image. +* `offset`: offset in pixels from position. + +### `text` + +Displays text on the HUD. + +* `scale`: Defines the bounding rectangle of the text. + A value such as `{x=100, y=100}` should work. +* `text`: The text to be displayed in the HUD element. +* `number`: An integer containing the RGB value of the color used to draw the + text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on. +* `alignment`: The alignment of the text. +* `offset`: offset in pixels from position. + +### `statbar` + +Displays a horizontal bar made up of half-images. + +* `text`: The name of the texture that is used. +* `number`: The number of half-textures that are displayed. + If odd, will end with a vertically center-split texture. +* `direction` +* `offset`: offset in pixels from position. +* `size`: If used, will force full-image size to this value (override texture + pack image size) + +### `inventory` + +* `text`: The name of the inventory list to be displayed. +* `number`: Number of items in the inventory to be displayed. +* `item`: Position of item that is selected. +* `direction` +* `offset`: offset in pixels from position. + +### `waypoint` + +Displays distance to selected world position. + +* `name`: The name of the waypoint. +* `text`: Distance suffix. Can be blank. +* `number:` An integer containing the RGB value of the color used to draw the + text. +* `world_pos`: World position of the waypoint. + + + + +Representations of simple things +================================ + +Position/vector +--------------- + + {x=num, y=num, z=num} + +For helper functions see [Spatial Vectors]. + +`pointed_thing` +--------------- + +* `{type="nothing"}` +* `{type="node", under=pos, above=pos}` + * Indicates a pointed node selection box. + * `under` refers to the node position behind the pointed face. + * `above` refers to the node position in front of the pointed face. +* `{type="object", ref=ObjectRef}` + +Exact pointing location (currently only `Raycast` supports these fields): + +* `pointed_thing.intersection_point`: The absolute world coordinates of the + point on the selection box which is pointed at. May be in the selection box + if the pointer is in the box too. +* `pointed_thing.box_id`: The ID of the pointed selection box (counting starts + from 1). +* `pointed_thing.intersection_normal`: Unit vector, points outwards of the + selected selection box. This specifies which face is pointed at. + Is a null vector `{x = 0, y = 0, z = 0}` when the pointer is inside the + selection box. + + + + +Flag Specifier Format +===================== + +Flags using the standardized flag specifier format can be specified in either +of two ways, by string or table. + +The string format is a comma-delimited set of flag names; whitespace and +unrecognized flag fields are ignored. Specifying a flag in the string sets the +flag, and specifying a flag prefixed by the string `"no"` explicitly +clears the flag from whatever the default may be. + +In addition to the standard string flag format, the schematic flags field can +also be a table of flag names to boolean values representing whether or not the +flag is set. Additionally, if a field with the flag name prefixed with `"no"` +is present, mapped to a boolean of any value, the specified flag is unset. + +E.g. A flag field of value + + {place_center_x = true, place_center_y=false, place_center_z=true} + +is equivalent to + + {place_center_x = true, noplace_center_y=true, place_center_z=true} + +which is equivalent to + + "place_center_x, noplace_center_y, place_center_z" + +or even + + "place_center_x, place_center_z" + +since, by default, no schematic attributes are set. + + + + +Items +===== + +Item types +---------- + +There are three kinds of items: nodes, tools and craftitems. + +* Node: Can be placed in the world's voxel grid +* Tool: Has a wear property but cannot be stacked. The default use action is to + dig nodes or hit objects according to its tool capabilities. +* Craftitem: Cannot dig nodes or be placed + +Amount and wear +--------------- + +All item stacks have an amount between 0 and 65535. It is 1 by +default. Tool item stacks can not have an amount greater than 1. + +Tools use a wear (damage) value ranging from 0 to 65535. The +value 0 is the default and is used for unworn tools. The values +1 to 65535 are used for worn tools, where a higher value stands for +a higher wear. Non-tools always have a wear value of 0. + +Item formats +------------ + +Items and item stacks can exist in three formats: Serializes, table format +and `ItemStack`. + +When an item must be passed to a function, it can usually be in any of +these formats. + +### Serialized + +This is called "stackstring" or "itemstring". It is a simple string with +1-3 components: the full item identifier, an optional amount and an optional +wear value. Syntax: + + [[ ]] + +Examples: + +* `'default:apple'`: 1 apple +* `'default:dirt 5'`: 5 dirt +* `'default:pick_stone'`: a new stone pickaxe +* `'default:pick_wood 1 21323'`: a wooden pickaxe, ca. 1/3 worn out + +### Table format + +Examples: + +5 dirt nodes: + + {name="default:dirt", count=5, wear=0, metadata=""} + +A wooden pick about 1/3 worn out: + + {name="default:pick_wood", count=1, wear=21323, metadata=""} + +An apple: + + {name="default:apple", count=1, wear=0, metadata=""} + +### `ItemStack` + +A native C++ format with many helper methods. Useful for converting +between formats. See the [Class reference] section for details. + + + + +Groups +====== + +In a number of places, there is a group table. Groups define the +properties of a thing (item, node, armor of entity, capabilities of +tool) in such a way that the engine and other mods can can interact with +the thing without actually knowing what the thing is. + +Usage +----- + +Groups are stored in a table, having the group names with keys and the +group ratings as values. For example: + + -- Default dirt + groups = {crumbly=3, soil=1} + + -- A more special dirt-kind of thing + groups = {crumbly=2, soil=1, level=2, outerspace=1} + +Groups always have a rating associated with them. If there is no +useful meaning for a rating for an enabled group, it shall be `1`. + +When not defined, the rating of a group defaults to `0`. Thus when you +read groups, you must interpret `nil` and `0` as the same value, `0`. + +You can read the rating of a group for an item or a node by using + + minetest.get_item_group(itemname, groupname) + +Groups of items +--------------- + +Groups of items can define what kind of an item it is (e.g. wool). + +Groups of nodes +--------------- + +In addition to the general item things, groups are used to define whether +a node is destroyable and how long it takes to destroy by a tool. + +Groups of entities +------------------ + +For entities, groups are, as of now, used only for calculating damage. +The rating is the percentage of damage caused by tools with this damage group. +See [Entity damage mechanism]. + + object.get_armor_groups() --> a group-rating table (e.g. {fleshy=100}) + object.set_armor_groups({fleshy=30, cracky=80}) + +Groups of tools +--------------- + +Groups in tools define which groups of nodes and entities they are +effective towards. + +Groups in crafting recipes +-------------------------- + +An example: Make meat soup from any meat, any water and any bowl: + + { + output = 'food:meat_soup_raw', + recipe = { + {'group:meat'}, + {'group:water'}, + {'group:bowl'}, + }, + -- preserve = {'group:bowl'}, -- Not implemented yet (TODO) + } + +Another example: Make red wool from white wool and red dye: + + { + type = 'shapeless', + output = 'wool:red', + recipe = {'wool:white', 'group:dye,basecolor_red'}, + } + +Special groups +-------------- + +The asterisk `(*)` after a group name describes that there is no engine +functionality bound to it, and implementation is left up as a suggestion +to games. + +### Node, item and tool groups + +* `not_in_creative_inventory`: (*) Special group for inventory mods to indicate + that the item should be hidden in item lists. + + +### Node-only groups + +* `attached_node`: if the node under it is not a walkable block the node will be + dropped as an item. If the node is wallmounted the wallmounted direction is + checked. +* `bouncy`: value is bounce speed in percent +* `connect_to_raillike`: makes nodes of raillike drawtype with same group value + connect to each other +* `dig_immediate`: Player can always pick up node without reducing tool wear + * `2`: the node always gets the digging time 0.5 seconds (rail, sign) + * `3`: the node always gets the digging time 0 seconds (torch) +* `disable_jump`: Player (and possibly other things) cannot jump from node +* `fall_damage_add_percent`: damage speed = `speed * (1 + value/100)` +* `falling_node`: if there is no walkable block under the node it will fall +* `float`: the node will not fall through liquids +* `level`: Can be used to give an additional sense of progression in the game. + * A larger level will cause e.g. a weapon of a lower level make much less + damage, and get worn out much faster, or not be able to get drops + from destroyed nodes. + * `0` is something that is directly accessible at the start of gameplay + * There is no upper limit + * See also: `leveldiff` in [Tools] +* `slippery`: Players and items will slide on the node. + Slipperiness rises steadily with `slippery` value, starting at 1. + + +### Tool-only groups + +* `disable_repair`: If set to 1 for a tool, it cannot be repaired using the + `"toolrepair"` crafting recipe + + +### `ObjectRef` groups + +* `immortal`: Skips all damage and breath handling for an object. This group + will also hide the integrated HUD status bars for players, and is + automatically set to all players when damage is disabled on the server. +* `punch_operable`: For entities; disables the regular damage mechanism for + players punching it by hand or a non-tool item, so that it can do something + else than take damage. + + + +Known damage and digging time defining groups +--------------------------------------------- + +* `crumbly`: dirt, sand +* `cracky`: tough but crackable stuff like stone. +* `snappy`: something that can be cut using fine tools; e.g. leaves, small + plants, wire, sheets of metal +* `choppy`: something that can be cut using force; e.g. trees, wooden planks +* `fleshy`: Living things like animals and the player. This could imply + some blood effects when hitting. +* `explody`: Especially prone to explosions +* `oddly_breakable_by_hand`: + Can be added to nodes that shouldn't logically be breakable by the + hand but are. Somewhat similar to `dig_immediate`, but times are more + like `{[1]=3.50,[2]=2.00,[3]=0.70}` and this does not override the + speed of a tool if the tool can dig at a faster speed than this + suggests for the hand. + +Examples of custom groups +------------------------- + +Item groups are often used for defining, well, _groups of items_. + +* `meat`: any meat-kind of a thing (rating might define the size or healing + ability or be irrelevant -- it is not defined as of yet) +* `eatable`: anything that can be eaten. Rating might define HP gain in half + hearts. +* `flammable`: can be set on fire. Rating might define the intensity of the + fire, affecting e.g. the speed of the spreading of an open fire. +* `wool`: any wool (any origin, any color) +* `metal`: any metal +* `weapon`: any weapon +* `heavy`: anything considerably heavy + +Digging time calculation specifics +---------------------------------- + +Groups such as `crumbly`, `cracky` and `snappy` are used for this +purpose. Rating is `1`, `2` or `3`. A higher rating for such a group implies +faster digging time. + +The `level` group is used to limit the toughness of nodes a tool can dig +and to scale the digging times / damage to a greater extent. + +**Please do understand this**, otherwise you cannot use the system to it's +full potential. + +Tools define their properties by a list of parameters for groups. They +cannot dig other groups; thus it is important to use a standard bunch of +groups to enable interaction with tools. + + + + +Tools +===== + +Tools definition +---------------- + +Tools define: + +* Full punch interval +* Maximum drop level +* For an arbitrary list of groups: + * Uses (until the tool breaks) + * Maximum level (usually `0`, `1`, `2` or `3`) + * Digging times + * Damage groups + +### Full punch interval + +When used as a weapon, the tool will do full damage if this time is spent +between punches. If e.g. half the time is spent, the tool will do half +damage. + +### Maximum drop level + +Suggests the maximum level of node, when dug with the tool, that will drop +it's useful item. (e.g. iron ore to drop a lump of iron). + +This is not automated; it is the responsibility of the node definition +to implement this. + +### Uses + +Determines how many uses the tool has when it is used for digging a node, +of this group, of the maximum level. For lower leveled nodes, the use count +is multiplied by `3^leveldiff`. +`leveldiff` is the difference of the tool's `maxlevel` `groupcaps` and the +node's `level` group. The node cannot be dug if `leveldiff` is less than zero. + +* `uses=10, leveldiff=0`: actual uses: 10 +* `uses=10, leveldiff=1`: actual uses: 30 +* `uses=10, leveldiff=2`: actual uses: 90 + +### Maximum level + +Tells what is the maximum level of a node of this group that the tool will +be able to dig. + +### Digging times + +List of digging times for different ratings of the group, for nodes of the +maximum level. + +For example, as a Lua table, `times={2=2.00, 3=0.70}`. This would +result in the tool to be able to dig nodes that have a rating of `2` or `3` +for this group, and unable to dig the rating `1`, which is the toughest. +Unless there is a matching group that enables digging otherwise. + +If the result digging time is 0, a delay of 0.15 seconds is added between +digging nodes; If the player releases LMB after digging, this delay is set to 0, +i.e. players can more quickly click the nodes away instead of holding LMB. + +### Damage groups + +List of damage for groups of entities. See [Entity damage mechanism]. + +Example definition of the capabilities of a tool +------------------------------------------------ + + tool_capabilities = { + full_punch_interval=1.5, + max_drop_level=1, + groupcaps={ + crumbly={maxlevel=2, uses=20, times={[1]=1.60, [2]=1.20, [3]=0.80}} + } + damage_groups = {fleshy=2}, + } + +This makes the tool be able to dig nodes that fulfil both of these: + +* Have the `crumbly` group +* Have a `level` group less or equal to `2` + +Table of resulting digging times: + + crumbly 0 1 2 3 4 <- level + -> 0 - - - - - + 1 0.80 1.60 1.60 - - + 2 0.60 1.20 1.20 - - + 3 0.40 0.80 0.80 - - + + level diff: 2 1 0 -1 -2 + +Table of resulting tool uses: + + -> 0 - - - - - + 1 180 60 20 - - + 2 180 60 20 - - + 3 180 60 20 - - + +**Notes**: + +* At `crumbly==0`, the node is not diggable. +* At `crumbly==3`, the level difference digging time divider kicks in and makes + easy nodes to be quickly breakable. +* At `level > 2`, the node is not diggable, because it's `level > maxlevel` + + + + +Entity damage mechanism +======================= + +Damage calculation: + + damage = 0 + foreach group in cap.damage_groups: + damage += cap.damage_groups[group] + * limit(actual_interval / cap.full_punch_interval, 0.0, 1.0) + * (object.armor_groups[group] / 100.0) + -- Where object.armor_groups[group] is 0 for inexistent values + return damage + +Client predicts damage based on damage groups. Because of this, it is able to +give an immediate response when an entity is damaged or dies; the response is +pre-defined somehow (e.g. by defining a sprite animation) (not implemented; +TODO). +Currently a smoke puff will appear when an entity dies. + +The group `immortal` completely disables normal damage. + +Entities can define a special armor group, which is `punch_operable`. This +group disables the regular damage mechanism for players punching it by hand or +a non-tool item, so that it can do something else than take damage. + +On the Lua side, every punch calls: + + entity:on_punch(puncher, time_from_last_punch, tool_capabilities, direction, + damage) + +This should never be called directly, because damage is usually not handled by +the entity itself. + +* `puncher` is the object performing the punch. Can be `nil`. Should never be + accessed unless absolutely required, to encourage interoperability. +* `time_from_last_punch` is time from last punch (by `puncher`) or `nil`. +* `tool_capabilities` can be `nil`. +* `direction` is a unit vector, pointing from the source of the punch to + the punched object. +* `damage` damage that will be done to entity +Return value of this function will determine if damage is done by this function +(retval true) or shall be done by engine (retval false) + +To punch an entity/object in Lua, call: + + object:punch(puncher, time_from_last_punch, tool_capabilities, direction) + +* Return value is tool wear. +* Parameters are equal to the above callback. +* If `direction` equals `nil` and `puncher` does not equal `nil`, `direction` + will be automatically filled in based on the location of `puncher`. + + + + +Metadata +======== + +Node Metadata +------------- + +The instance of a node in the world normally only contains the three values +mentioned in [Nodes]. However, it is possible to insert extra data into a node. +It is called "node metadata"; See `NodeMetaRef`. + +Node metadata contains two things: + +* A key-value store +* An inventory + +Some of the values in the key-value store are handled specially: + +* `formspec`: Defines a right-click inventory menu. See [Formspec]. +* `infotext`: Text shown on the screen when the node is pointed at + +Example: + + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8,9]".. + "list[context;main;0,0;8,4;]".. + "list[current_player;main;0,5;8,4;]") + meta:set_string("infotext", "Chest"); + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + print(dump(meta:to_table())) + meta:from_table({ + inventory = { + main = {[1] = "default:dirt", [2] = "", [3] = "", [4] = "", + [5] = "", [6] = "", [7] = "", [8] = "", [9] = "", + [10] = "", [11] = "", [12] = "", [13] = "", + [14] = "default:cobble", [15] = "", [16] = "", [17] = "", + [18] = "", [19] = "", [20] = "default:cobble", [21] = "", + [22] = "", [23] = "", [24] = "", [25] = "", [26] = "", + [27] = "", [28] = "", [29] = "", [30] = "", [31] = "", + [32] = ""} + }, + fields = { + formspec = "size[8,9]list[context;main;0,0;8,4;]list[current_player;main;0,5;8,4;]", + infotext = "Chest" + } + }) + +Item Metadata +------------- + +Item stacks can store metadata too. See [`ItemStackMetaRef`]. + +Item metadata only contains a key-value store. + +Some of the values in the key-value store are handled specially: + +* `description`: Set the item stack's description. Defaults to + `idef.description`. +* `color`: A `ColorString`, which sets the stack's color. +* `palette_index`: If the item has a palette, this is used to get the + current color from the palette. + +Example: + + local meta = stack:get_meta() + meta:set_string("key", "value") + print(dump(meta:to_table())) + + + + +Formspec +======== + +Formspec defines a menu. This supports inventories and some of the +typical widgets like buttons, checkboxes, text input fields, etc. +It is a string, with a somewhat strange format. + +A formspec is made out of formspec elements, which includes widgets +like buttons but also can be used to set stuff like background color. + +Many formspec elements have a `name`, which is a unique identifier which +is used when the server receives user input. You must not use the name +"quit" for formspec elements. + +Spaces and newlines can be inserted between the blocks, as is used in the +examples. + +Position and size units are inventory slots unless the new coordinate system +is enabled. `X` and `Y` position the formspec element relative to the top left +of the menu or container. `W` and `H` are its width and height values. + +If the new system is enabled, all elements have unified coordinates for all +elements with no padding or spacing in between. This is highly recommended +for new forms. See `real_coordinates[]` and `Migrating to Real +Coordinates`. + +Inventories with a `player:` inventory location are only sent to the +player named ``. + +When displaying text which can contain formspec code, e.g. text set by a player, +use `minetest.formspec_escape`. +For coloured text you can use `minetest.colorize`. + +**WARNING**: do _not_ use a element name starting with `key_`; those names are +reserved to pass key press events to formspec! + +**WARNING**: Minetest allows you to add elements to every single formspec instance +using `player:set_formspec_prepend()`, which may be the reason backgrounds are +appearing when you don't expect them to, or why things are styled differently +to normal. See [`no_prepend[]`] and [Styling Formspecs]. + +Examples +-------- + +### Chest + + size[8,9] + list[context;main;0,0;8,4;] + list[current_player;main;0,5;8,4;] + +### Furnace + + size[8,9] + list[context;fuel;2,3;1,1;] + list[context;src;2,1;1,1;] + list[context;dst;5,1;2,2;] + list[current_player;main;0,5;8,4;] + +### Minecraft-like player inventory + + size[8,7.5] + image[1,0.6;1,2;player.png] + list[current_player;main;0,3.5;8,4;] + list[current_player;craft;3,0;3,3;] + list[current_player;craftpreview;7,1;1,1;] + +Elements +-------- + +### `formspec_version[]` + +* Set the formspec version to a certain number. If not specified, + version 1 is assumed. +* Must be specified before `size` element. +* Clients older than this version can neither show newer elements nor display + elements with new arguments correctly. +* Available since feature `formspec_version_element`. + +### `size[,,]` + +* Define the size of the menu in inventory slots +* `fixed_size`: `true`/`false` (optional) +* deprecated: `invsize[,;]` + +### `position[,]` + +* Must be used after `size` element. +* Defines the position on the game window of the formspec's `anchor` point. +* For X and Y, 0.0 and 1.0 represent opposite edges of the game window, + for example: + * [0.0, 0.0] sets the position to the top left corner of the game window. + * [1.0, 1.0] sets the position to the bottom right of the game window. +* Defaults to the center of the game window [0.5, 0.5]. + +### `anchor[,]` + +* Must be used after both `size` and `position` (if present) elements. +* Defines the location of the anchor point within the formspec. +* For X and Y, 0.0 and 1.0 represent opposite edges of the formspec, + for example: + * [0.0, 1.0] sets the anchor to the bottom left corner of the formspec. + * [1.0, 0.0] sets the anchor to the top right of the formspec. +* Defaults to the center of the formspec [0.5, 0.5]. + +* `position` and `anchor` elements need suitable values to avoid a formspec + extending off the game window due to particular game window sizes. + +### `no_prepend[]` + +* Must be used after the `size`, `position`, and `anchor` elements (if present). +* Disables player:set_formspec_prepend() from applying to this formspec. + +### `real_coordinates[]` + +* INFORMATION: Enable it automatically using `formspec_version` version 2 or newer. +* When set to true, all following formspec elements will use the new coordinate system. +* If used immediately after `size`, `position`, `anchor`, and `no_prepend` elements + (if present), the form size will use the new coordinate system. +* **Note**: Formspec prepends are not affected by the coordinates in the main form. + They must enable it explicitly. +* For information on converting forms to the new coordinate system, see `Migrating + to Real Coordinates`. + +### `container[,]` + +* Start of a container block, moves all physical elements in the container by + (X, Y). +* Must have matching `container_end` +* Containers can be nested, in which case the offsets are added + (child containers are relative to parent containers) + +### `container_end[]` + +* End of a container, following elements are no longer relative to this + container. + +### `list[;;,;,;]` + +* Show an inventory list if it has been sent to the client. Nothing will + be shown if the inventory list is of size 0. +* **Note**: With the new coordinate system, the spacing between inventory + slots is one-fourth the size of an inventory slot. + +### `list[;;,;,;]` + +* Show an inventory list if it has been sent to the client. Nothing will + be shown if the inventory list is of size 0. +* **Note**: With the new coordinate system, the spacing between inventory + slots is one-fourth the size of an inventory slot. + +### `listring[;]` + +* Allows to create a ring of inventory lists +* Shift-clicking on items in one element of the ring + will send them to the next inventory list inside the ring +* The first occurrence of an element inside the ring will + determine the inventory where items will be sent to + +### `listring[]` + +* Shorthand for doing `listring[;]` + for the last two inventory lists added by list[...] + +### `listcolors[;]` + +* Sets background color of slots as `ColorString` +* Sets background color of slots on mouse hovering + +### `listcolors[;;]` + +* Sets background color of slots as `ColorString` +* Sets background color of slots on mouse hovering +* Sets color of slots border + +### `listcolors[;;;;]` + +* Sets background color of slots as `ColorString` +* Sets background color of slots on mouse hovering +* Sets color of slots border +* Sets default background color of tooltips +* Sets default font color of tooltips + +### `tooltip[;;;]` + +* Adds tooltip for an element +* `` tooltip background color as `ColorString` (optional) +* `` tooltip font color as `ColorString` (optional) + +### `tooltip[,;,;;;]` + +* Adds tooltip for an area. Other tooltips will take priority when present. +* `` tooltip background color as `ColorString` (optional) +* `` tooltip font color as `ColorString` (optional) + +### `image[,;,;]` + +* Show an image + +### `item_image[,;,;]` + +* Show an inventory image of registered item/node + +### `bgcolor[;]` + +* Sets background color of formspec as `ColorString` +* If `true`, a fullscreen background is drawn and the color is ignored + (does not affect the size of the formspec) + +### `background[,;,;]` + +* Example for formspec 8x4 in 16x resolution: image shall be sized + 8 times 16px times 4 times 16px. + +### `background[,;,;;]` + +* Example for formspec 8x4 in 16x resolution: + image shall be sized 8 times 16px times 4 times 16px +* If `auto_clip` is `true`, the background is clipped to the formspec size + (`x` and `y` are used as offset values, `w` and `h` are ignored) + +### `background9[,;,;;;]` + +* 9-sliced background. See https://en.wikipedia.org/wiki/9-slice_scaling +* Middle is a rect which defines the middle of the 9-slice. + * `x` - The middle will be x pixels from all sides. + * `x,y` - The middle will be x pixels from the horizontal and y from the vertical. + * `x,y,x2,y2` - The middle will start at x,y, and end at x2, y2. Negative x2 and y2 values + will be added to the width and height of the texture, allowing it to be used as the + distance from the far end. + * All numbers in middle are integers. +* Example for formspec 8x4 in 16x resolution: + image shall be sized 8 times 16px times 4 times 16px +* If `auto_clip` is `true`, the background is clipped to the formspec size + (`x` and `y` are used as offset values, `w` and `h` are ignored) +* Available since formspec version 2 + +### `pwdfield[,;,;;