From 4c0e3fa1deb08781f5a2b127649bfd63100a06e1 Mon Sep 17 00:00:00 2001 From: mckaygerhard Date: Sun, 11 Jun 2023 03:19:39 -0400 Subject: [PATCH] ethereal - added ethereal with hard optimized images * we used pngquan cos we need more more optimized images to being able to load in older phones (Client) and small devices (server), --- README.md | 3 +- mods/ethereal/CHANGELOG.md | 398 +++++++++ mods/ethereal/README.md | 615 +++++++++++++ mods/ethereal/api.txt | 41 + mods/ethereal/biomes.lua | 515 +++++++++++ mods/ethereal/biomes_init.lua | 117 +++ mods/ethereal/compatibility.lua | 51 ++ mods/ethereal/crystal.lua | 319 +++++++ mods/ethereal/decor.lua | 806 ++++++++++++++++++ mods/ethereal/depends.txt | 10 + mods/ethereal/description.txt | 1 + mods/ethereal/dirt.lua | 323 +++++++ ...l-biomes-defaults-22-Jul-2022-geogebra.ggb | Bin 0 -> 32862 bytes mods/ethereal/extra.lua | 436 ++++++++++ mods/ethereal/fences.lua | 103 +++ mods/ethereal/fishing.lua | 611 +++++++++++++ mods/ethereal/flight.lua | 218 +++++ mods/ethereal/food.lua | 685 +++++++++++++++ mods/ethereal/init.lua | 171 ++++ mods/ethereal/leaves.lua | 604 +++++++++++++ mods/ethereal/license.txt | 151 ++++ mods/ethereal/locale/de.txt | 220 +++++ mods/ethereal/locale/es.txt | 296 +++++++ mods/ethereal/locale/ethereal.de.tr | 163 ++++ mods/ethereal/locale/ethereal.en.tr | 163 ++++ mods/ethereal/locale/ethereal.es.tr | 250 ++++++ mods/ethereal/locale/ethereal.fr.tr | 163 ++++ mods/ethereal/locale/ethereal.ru.tr | 163 ++++ mods/ethereal/locale/ethereal.zh_CN.tr | 163 ++++ mods/ethereal/locale/ru.txt | 220 +++++ mods/ethereal/locale/template.txt | 294 +++++++ mods/ethereal/locale/zh_CN.txt | 178 ++++ mods/ethereal/lucky_block.lua | 159 ++++ mods/ethereal/mod.conf | 4 + mods/ethereal/onion.lua | 128 +++ mods/ethereal/ores.lua | 87 ++ mods/ethereal/plantlife.lua | 337 ++++++++ mods/ethereal/plantpack.lua | 196 +++++ mods/ethereal/sapling.lua | 309 +++++++ mods/ethereal/schematics/bamboo_tree.lua | 86 ++ mods/ethereal/schematics/banana_tree.lua | 85 ++ mods/ethereal/schematics/basandra_bush.lua | 23 + mods/ethereal/schematics/bigtree.lua | 100 +++ mods/ethereal/schematics/birch_tree.lua | 59 ++ mods/ethereal/schematics/bush.lua | 38 + mods/ethereal/schematics/corals.mts | Bin 0 -> 171 bytes mods/ethereal/schematics/frosttrees.lua | 184 ++++ mods/ethereal/schematics/igloo.lua | 62 ++ mods/ethereal/schematics/lemon_tree.lua | 65 ++ mods/ethereal/schematics/mushroomone.lua | 116 +++ mods/ethereal/schematics/olive_tree.lua | 84 ++ mods/ethereal/schematics/orange_tree.lua | 54 ++ mods/ethereal/schematics/palmtree.lua | 110 +++ mods/ethereal/schematics/pinetree.lua | 81 ++ .../schematics/redwood_small_tree.lua | 219 +++++ mods/ethereal/schematics/redwood_tree.lua | 533 ++++++++++++ mods/ethereal/schematics/sakura.lua | 96 +++ mods/ethereal/schematics/vinetree.lua | 77 ++ mods/ethereal/schematics/volcanol.lua | 97 +++ mods/ethereal/schematics/volcanom.lua | 36 + mods/ethereal/schematics/waterlily.lua | 28 + mods/ethereal/schematics/willow.lua | 199 +++++ mods/ethereal/schematics/yellowtree.lua | 201 +++++ mods/ethereal/schems.lua | 337 ++++++++ .../ethereal/screenshot-geogebra-ethereal.png | Bin 0 -> 70220 bytes mods/ethereal/screenshot.jpg | Bin 0 -> 221869 bytes mods/ethereal/sealife.lua | 298 +++++++ mods/ethereal/settings.conf_example | 44 + mods/ethereal/settingtypes.txt | 43 + mods/ethereal/sounds/ethereal_casting_rod.ogg | Bin 0 -> 18801 bytes mods/ethereal/stairs.lua | 196 +++++ mods/ethereal/strawberry.lua | 147 ++++ .../textures/alt/ethereal_banana_wood.png | Bin 0 -> 141 bytes .../textures/alt/ethereal_olive_wood.png | Bin 0 -> 177 bytes .../textures/alt/ethereal_redwood_wood.png | Bin 0 -> 112 bytes .../textures/alt/ethereal_sakura_wood.png | Bin 0 -> 111 bytes .../textures/alt/ethereal_willow_wood.png | Bin 0 -> 141 bytes mods/ethereal/textures/alt/license.txt | 5 + .../textures/alt/moretrees_birch_wood.png | Bin 0 -> 182 bytes .../textures/alt/moretrees_palm_wood.png | Bin 0 -> 141 bytes mods/ethereal/textures/baked_clay_grey.png | Bin 0 -> 132 bytes mods/ethereal/textures/baked_clay_orange.png | Bin 0 -> 134 bytes mods/ethereal/textures/baked_clay_red.png | Bin 0 -> 134 bytes mods/ethereal/textures/bucket_cactus.png | Bin 0 -> 191 bytes mods/ethereal/textures/bucket_cactus.png_hd | Bin 0 -> 421 bytes mods/ethereal/textures/default_apple_gold.png | Bin 0 -> 217 bytes .../textures/ethereal_agar_powder.png | Bin 0 -> 147 bytes .../textures/ethereal_bamboo_floor.png | Bin 0 -> 271 bytes .../textures/ethereal_bamboo_leaves.png | Bin 0 -> 210 bytes .../textures/ethereal_bamboo_sprout.png | Bin 0 -> 189 bytes .../textures/ethereal_bamboo_trunk.png | Bin 0 -> 143 bytes .../textures/ethereal_banana_bread.png | Bin 0 -> 302 bytes .../textures/ethereal_banana_bunch.png | Bin 0 -> 232 bytes .../textures/ethereal_banana_dough.png | Bin 0 -> 153 bytes .../textures/ethereal_banana_leaf.png | Bin 0 -> 360 bytes .../textures/ethereal_banana_single.png | Bin 0 -> 187 bytes .../textures/ethereal_banana_tree_sapling.png | Bin 0 -> 166 bytes .../textures/ethereal_banana_trunk.png | Bin 0 -> 172 bytes .../textures/ethereal_banana_trunk_top.png | Bin 0 -> 168 bytes .../textures/ethereal_banana_wood.png | Bin 0 -> 179 bytes .../ethereal_basandra_bush_leaves.png | Bin 0 -> 185 bytes .../ethereal_basandra_bush_sapling.png | Bin 0 -> 145 bytes .../textures/ethereal_basandra_bush_stem.png | Bin 0 -> 175 bytes .../textures/ethereal_basandra_bush_wood.png | Bin 0 -> 289 bytes .../textures/ethereal_big_tree_sapling.png | Bin 0 -> 160 bytes .../textures/ethereal_blue_marble.png | Bin 0 -> 339 bytes .../textures/ethereal_blue_marble_tile.png | Bin 0 -> 372 bytes mods/ethereal/textures/ethereal_bowl.png | Bin 0 -> 254 bytes mods/ethereal/textures/ethereal_brick_ice.png | Bin 0 -> 183 bytes .../ethereal/textures/ethereal_brick_snow.png | Bin 0 -> 202 bytes mods/ethereal/textures/ethereal_bush.png | Bin 0 -> 172 bytes .../textures/ethereal_calamari_cooked.png | Bin 0 -> 175 bytes .../textures/ethereal_calamari_raw.png | Bin 0 -> 172 bytes .../textures/ethereal_candied_lemon.png | Bin 0 -> 191 bytes mods/ethereal/textures/ethereal_candle.png | Bin 0 -> 215 bytes .../textures/ethereal_candle_black.png | Bin 0 -> 201 bytes .../textures/ethereal_candle_black_static.png | Bin 0 -> 167 bytes .../textures/ethereal_candle_blue.png | Bin 0 -> 207 bytes .../textures/ethereal_candle_blue_static.png | Bin 0 -> 172 bytes .../textures/ethereal_candle_brown.png | Bin 0 -> 217 bytes .../textures/ethereal_candle_brown_static.png | Bin 0 -> 180 bytes .../textures/ethereal_candle_cyan.png | Bin 0 -> 210 bytes .../textures/ethereal_candle_cyan_static.png | Bin 0 -> 175 bytes .../textures/ethereal_candle_dark_green.png | Bin 0 -> 217 bytes .../ethereal_candle_dark_green_static.png | Bin 0 -> 180 bytes .../textures/ethereal_candle_dark_grey.png | Bin 0 -> 217 bytes .../ethereal_candle_dark_grey_static.png | Bin 0 -> 176 bytes .../textures/ethereal_candle_green.png | Bin 0 -> 210 bytes .../textures/ethereal_candle_green_static.png | Bin 0 -> 175 bytes .../textures/ethereal_candle_grey.png | Bin 0 -> 211 bytes .../textures/ethereal_candle_grey_static.png | Bin 0 -> 176 bytes .../textures/ethereal_candle_magenta.png | Bin 0 -> 211 bytes .../ethereal_candle_magenta_static.png | Bin 0 -> 176 bytes .../textures/ethereal_candle_orange.png | Bin 0 -> 210 bytes .../ethereal_candle_orange_static.png | Bin 0 -> 175 bytes .../textures/ethereal_candle_pink.png | Bin 0 -> 210 bytes .../textures/ethereal_candle_pink_static.png | Bin 0 -> 175 bytes .../ethereal/textures/ethereal_candle_red.png | Bin 0 -> 210 bytes .../textures/ethereal_candle_red_static.png | Bin 0 -> 175 bytes .../textures/ethereal_candle_static.png | Bin 0 -> 176 bytes .../textures/ethereal_candle_violet.png | Bin 0 -> 210 bytes .../ethereal_candle_violet_static.png | Bin 0 -> 175 bytes .../textures/ethereal_candle_yellow.png | Bin 0 -> 210 bytes .../ethereal_candle_yellow_static.png | Bin 0 -> 175 bytes .../textures/ethereal_charcoal_lump.png | Bin 0 -> 136 bytes .../ethereal/textures/ethereal_coral_blue.png | Bin 0 -> 208 bytes .../textures/ethereal_coral_green.png | Bin 0 -> 169 bytes .../textures/ethereal_coral_orange.png | Bin 0 -> 158 bytes .../ethereal/textures/ethereal_coral_pink.png | Bin 0 -> 183 bytes .../textures/ethereal_crystal_axe.png | Bin 0 -> 165 bytes .../textures/ethereal_crystal_block.png | Bin 0 -> 149 bytes .../textures/ethereal_crystal_gilly_staff.png | Bin 0 -> 173 bytes .../textures/ethereal_crystal_ingot.png | Bin 0 -> 200 bytes .../textures/ethereal_crystal_pick.png | Bin 0 -> 196 bytes .../textures/ethereal_crystal_shovel.png | Bin 0 -> 174 bytes .../textures/ethereal_crystal_spike.png | Bin 0 -> 350 bytes .../textures/ethereal_crystal_sword.png | Bin 0 -> 170 bytes .../textures/ethereal_crystalgrass.png | Bin 0 -> 202 bytes mods/ethereal/textures/ethereal_dry_dirt.png | Bin 0 -> 208 bytes mods/ethereal/textures/ethereal_dry_shrub.png | Bin 0 -> 149 bytes .../textures/ethereal_etherium_dust.png | Bin 0 -> 169 bytes .../textures/ethereal_etherium_ore.png | Bin 0 -> 165 bytes mods/ethereal/textures/ethereal_fern.png | Bin 0 -> 182 bytes .../textures/ethereal_fern_tubers.png | Bin 0 -> 187 bytes mods/ethereal/textures/ethereal_fire_dust.png | Bin 0 -> 151 bytes .../textures/ethereal_fire_flower.png | Bin 0 -> 198 bytes mods/ethereal/textures/ethereal_firethorn.png | Bin 0 -> 152 bytes .../textures/ethereal_firethorn_jelly.png | Bin 0 -> 158 bytes .../textures/ethereal_fish_angler.png | Bin 0 -> 240 bytes .../textures/ethereal_fish_bluefin.png | Bin 0 -> 244 bytes .../textures/ethereal_fish_blueram.png | Bin 0 -> 260 bytes mods/ethereal/textures/ethereal_fish_carp.png | Bin 0 -> 232 bytes .../textures/ethereal_fish_catfish.png | Bin 0 -> 233 bytes .../ethereal/textures/ethereal_fish_chips.png | Bin 0 -> 280 bytes .../textures/ethereal_fish_cichlid.png | Bin 0 -> 240 bytes .../textures/ethereal_fish_clownfish.png | Bin 0 -> 235 bytes mods/ethereal/textures/ethereal_fish_cod.png | Bin 0 -> 217 bytes .../textures/ethereal_fish_cooked.png | Bin 0 -> 212 bytes mods/ethereal/textures/ethereal_fish_coy.png | Bin 0 -> 206 bytes .../textures/ethereal_fish_flathead.png | Bin 0 -> 222 bytes .../textures/ethereal_fish_flounder.png | Bin 0 -> 247 bytes .../textures/ethereal_fish_jellyfish.png | Bin 0 -> 268 bytes .../textures/ethereal_fish_mackerel.png | Bin 0 -> 216 bytes .../textures/ethereal_fish_parrot.png | Bin 0 -> 256 bytes mods/ethereal/textures/ethereal_fish_pike.png | Bin 0 -> 215 bytes .../textures/ethereal_fish_piranha.png | Bin 0 -> 240 bytes .../textures/ethereal_fish_plaice.png | Bin 0 -> 262 bytes .../textures/ethereal_fish_pufferfish.png | Bin 0 -> 227 bytes .../textures/ethereal_fish_redsnapper.png | Bin 0 -> 235 bytes .../textures/ethereal_fish_salmon.png | Bin 0 -> 212 bytes .../textures/ethereal_fish_seahorse.png | Bin 0 -> 189 bytes .../textures/ethereal_fish_seahorse_blue.png | Bin 0 -> 189 bytes .../textures/ethereal_fish_seahorse_green.png | Bin 0 -> 186 bytes .../textures/ethereal_fish_seahorse_pink.png | Bin 0 -> 182 bytes .../ethereal_fish_seahorse_yellow.png | Bin 0 -> 188 bytes .../textures/ethereal_fish_shrimp.png | Bin 0 -> 231 bytes .../textures/ethereal_fish_shrimp_cooked.png | Bin 0 -> 207 bytes .../ethereal/textures/ethereal_fish_squid.png | Bin 0 -> 229 bytes .../ethereal/textures/ethereal_fish_tetra.png | Bin 0 -> 232 bytes .../textures/ethereal_fish_tilapia.png | Bin 0 -> 234 bytes .../textures/ethereal_fish_trevally.png | Bin 0 -> 226 bytes .../ethereal/textures/ethereal_fish_trout.png | Bin 0 -> 233 bytes mods/ethereal/textures/ethereal_fish_tuna.png | Bin 0 -> 257 bytes .../textures/ethereal_fishing_bob.png | Bin 0 -> 160 bytes .../textures/ethereal_fishing_rod.png | Bin 0 -> 245 bytes .../textures/ethereal_flight_potion.png | Bin 0 -> 164 bytes .../textures/ethereal_frost_leaves.png | Bin 0 -> 185 bytes .../ethereal/textures/ethereal_frost_tree.png | Bin 0 -> 156 bytes .../textures/ethereal_frost_tree_sapling.png | Bin 0 -> 170 bytes .../textures/ethereal_frost_tree_top.png | Bin 0 -> 187 bytes .../ethereal/textures/ethereal_frost_wood.png | Bin 0 -> 144 bytes mods/ethereal/textures/ethereal_fugu.png | Bin 0 -> 282 bytes .../ethereal_garlic_butter_shrimp.png | Bin 0 -> 263 bytes .../ethereal_giant_redwood_sapling.png | Bin 0 -> 149 bytes mods/ethereal/textures/ethereal_glostone.png | Bin 0 -> 170 bytes .../textures/ethereal_grass_bamboo_side.png | Bin 0 -> 186 bytes .../textures/ethereal_grass_bamboo_top.png | Bin 0 -> 168 bytes .../textures/ethereal_grass_cold_side.png | Bin 0 -> 175 bytes .../textures/ethereal_grass_cold_top.png | Bin 0 -> 144 bytes .../textures/ethereal_grass_crystal_side.png | Bin 0 -> 170 bytes .../textures/ethereal_grass_crystal_top.png | Bin 0 -> 151 bytes .../textures/ethereal_grass_fiery_side.png | Bin 0 -> 171 bytes .../textures/ethereal_grass_fiery_top.png | Bin 0 -> 160 bytes .../textures/ethereal_grass_gray_side.png | Bin 0 -> 182 bytes .../textures/ethereal_grass_gray_top.png | Bin 0 -> 169 bytes .../textures/ethereal_grass_grove_side.png | Bin 0 -> 171 bytes .../textures/ethereal_grass_grove_top.png | Bin 0 -> 170 bytes .../textures/ethereal_grass_jungle_side.png | Bin 0 -> 133 bytes .../textures/ethereal_grass_jungle_top.png | Bin 0 -> 134 bytes .../textures/ethereal_grass_mushroom_side.png | Bin 0 -> 175 bytes .../textures/ethereal_grass_mushroom_top.png | Bin 0 -> 134 bytes .../textures/ethereal_grass_prairie_side.png | Bin 0 -> 199 bytes .../textures/ethereal_grass_prairie_top.png | Bin 0 -> 173 bytes .../textures/ethereal_gray_tree_sapling.png | Bin 0 -> 149 bytes .../textures/ethereal_hearty_stew.png | Bin 0 -> 284 bytes .../textures/ethereal_illumishroom_cyan.png | Bin 0 -> 561 bytes .../textures/ethereal_illumishroom_green.png | Bin 0 -> 563 bytes .../textures/ethereal_illumishroom_red.png | Bin 0 -> 658 bytes .../textures/ethereal_jellyfish_salad.png | Bin 0 -> 285 bytes .../textures/ethereal_jungle_tree_sapling.png | Bin 0 -> 160 bytes mods/ethereal/textures/ethereal_lemon.png | Bin 0 -> 169 bytes .../textures/ethereal_lemon_fruit.png | Bin 0 -> 159 bytes .../textures/ethereal_lemon_leaves.png | Bin 0 -> 491 bytes .../textures/ethereal_lemon_tree_sapling.png | Bin 0 -> 154 bytes mods/ethereal/textures/ethereal_lemonade.png | Bin 0 -> 212 bytes .../textures/ethereal_light_staff.png | Bin 0 -> 181 bytes .../textures/ethereal_lightstring.png | Bin 0 -> 201 bytes mods/ethereal/textures/ethereal_lilac.png | Bin 0 -> 245 bytes .../textures/ethereal_mushroom_block.png | Bin 0 -> 185 bytes .../textures/ethereal_mushroom_pore.png | Bin 0 -> 126 bytes .../textures/ethereal_mushroom_sapling.png | Bin 0 -> 199 bytes .../textures/ethereal_mushroom_soup.png | Bin 0 -> 285 bytes .../textures/ethereal_mushroom_trunk.png | Bin 0 -> 101 bytes .../textures/ethereal_mushroom_trunk_top.png | Bin 0 -> 152 bytes mods/ethereal/textures/ethereal_olive.png | Bin 0 -> 185 bytes .../textures/ethereal_olive_fruit.png | Bin 0 -> 223 bytes .../textures/ethereal_olive_leaves.png | Bin 0 -> 427 bytes mods/ethereal/textures/ethereal_olive_oil.png | Bin 0 -> 158 bytes .../textures/ethereal_olive_tree_sapling.png | Bin 0 -> 183 bytes .../textures/ethereal_olive_trunk.png | Bin 0 -> 389 bytes .../textures/ethereal_olive_trunk_top.png | Bin 0 -> 472 bytes .../ethereal/textures/ethereal_olive_wood.png | Bin 0 -> 173 bytes .../textures/ethereal_orange_leaves.png | Bin 0 -> 412 bytes .../textures/ethereal_orange_tree_sapling.png | Bin 0 -> 172 bytes mods/ethereal/textures/ethereal_palm_wax.png | Bin 0 -> 149 bytes .../ethereal/textures/ethereal_paper_wall.png | Bin 0 -> 177 bytes mods/ethereal/textures/ethereal_pine_nuts.png | Bin 0 -> 137 bytes .../textures/ethereal_pine_tree_sapling.png | Bin 0 -> 171 bytes .../textures/ethereal_redwood_leaves.png | Bin 0 -> 244 bytes .../textures/ethereal_redwood_sapling.png | Bin 0 -> 141 bytes .../textures/ethereal_redwood_trunk.png | Bin 0 -> 316 bytes .../textures/ethereal_redwood_trunk_top.png | Bin 0 -> 268 bytes .../textures/ethereal_redwood_wood.png | Bin 0 -> 180 bytes .../textures/ethereal_sakura_door.png | Bin 0 -> 260 bytes .../textures/ethereal_sakura_door_inv.png | Bin 0 -> 145 bytes .../textures/ethereal_sakura_leaves.png | Bin 0 -> 141 bytes .../textures/ethereal_sakura_leaves2.png | Bin 0 -> 141 bytes .../textures/ethereal_sakura_sapling.png | Bin 0 -> 170 bytes .../textures/ethereal_sakura_trunk.png | Bin 0 -> 305 bytes .../textures/ethereal_sakura_trunk_top.png | Bin 0 -> 329 bytes .../textures/ethereal_sakura_wood.png | Bin 0 -> 194 bytes mods/ethereal/textures/ethereal_sashimi.png | Bin 0 -> 229 bytes .../textures/ethereal_scorched_tree.png | Bin 0 -> 127 bytes .../textures/ethereal_scorched_tree_top.png | Bin 0 -> 181 bytes mods/ethereal/textures/ethereal_seaweed.png | Bin 0 -> 201 bytes .../ethereal/textures/ethereal_snowygrass.png | Bin 0 -> 183 bytes mods/ethereal/textures/ethereal_sponge.png | Bin 0 -> 188 bytes .../ethereal/textures/ethereal_sponge_wet.png | Bin 0 -> 213 bytes .../textures/ethereal_spore_grass.png | Bin 0 -> 206 bytes .../textures/ethereal_stone_ladder.png | Bin 0 -> 138 bytes .../ethereal/textures/ethereal_strawberry.png | Bin 0 -> 321 bytes .../textures/ethereal_strawberry_1.png | Bin 0 -> 116 bytes .../textures/ethereal_strawberry_2.png | Bin 0 -> 137 bytes .../textures/ethereal_strawberry_3.png | Bin 0 -> 157 bytes .../textures/ethereal_strawberry_4.png | Bin 0 -> 208 bytes .../textures/ethereal_strawberry_5.png | Bin 0 -> 234 bytes .../textures/ethereal_strawberry_6.png | Bin 0 -> 240 bytes .../textures/ethereal_strawberry_7.png | Bin 0 -> 258 bytes .../textures/ethereal_strawberry_8.png | Bin 0 -> 258 bytes .../textures/ethereal_sushi_kappa_maki.png | Bin 0 -> 181 bytes .../textures/ethereal_sushi_nigiri.png | Bin 0 -> 155 bytes .../textures/ethereal_sushi_tamago.png | Bin 0 -> 160 bytes .../textures/ethereal_teriyaki_beef.png | Bin 0 -> 281 bytes .../textures/ethereal_teriyaki_chicken.png | Bin 0 -> 162 bytes .../textures/ethereal_tree_sapling.png | Bin 0 -> 183 bytes mods/ethereal/textures/ethereal_vine.png | Bin 0 -> 145 bytes .../ethereal/textures/ethereal_wild_onion.png | Bin 0 -> 171 bytes .../textures/ethereal_wild_onion_1.png | Bin 0 -> 105 bytes .../textures/ethereal_wild_onion_2.png | Bin 0 -> 108 bytes .../textures/ethereal_wild_onion_3.png | Bin 0 -> 106 bytes .../textures/ethereal_wild_onion_4.png | Bin 0 -> 109 bytes .../textures/ethereal_wild_onion_5.png | Bin 0 -> 123 bytes .../textures/ethereal_willow_sapling.png | Bin 0 -> 189 bytes .../textures/ethereal_willow_trunk.png | Bin 0 -> 326 bytes .../textures/ethereal_willow_trunk_top.png | Bin 0 -> 279 bytes .../textures/ethereal_willow_twig.png | Bin 0 -> 1247 bytes .../textures/ethereal_willow_wood.png | Bin 0 -> 262 bytes mods/ethereal/textures/ethereal_worm.png | Bin 0 -> 164 bytes .../textures/ethereal_yellow_leaves.png | Bin 0 -> 185 bytes .../textures/ethereal_yellow_tree.png | Bin 0 -> 162 bytes .../textures/ethereal_yellow_tree_sapling.png | Bin 0 -> 154 bytes .../textures/ethereal_yellow_tree_top.png | Bin 0 -> 203 bytes .../textures/ethereal_yellow_wood.png | Bin 0 -> 141 bytes mods/ethereal/textures/farming_orange.png | Bin 0 -> 185 bytes .../textures/moretrees_acacia_leaves.png | Bin 0 -> 150 bytes .../textures/moretrees_birch_leaves.png | Bin 0 -> 182 bytes .../textures/moretrees_birch_sapling.png | Bin 0 -> 186 bytes .../textures/moretrees_birch_trunk.png | Bin 0 -> 228 bytes .../textures/moretrees_birch_trunk_top.png | Bin 0 -> 200 bytes .../textures/moretrees_birch_wood.png | Bin 0 -> 207 bytes mods/ethereal/textures/moretrees_coconut.png | Bin 0 -> 265 bytes .../textures/moretrees_coconut_slice.png | Bin 0 -> 154 bytes .../textures/moretrees_palm_leaves.png | Bin 0 -> 179 bytes .../textures/moretrees_palm_sapling.png | Bin 0 -> 137 bytes .../textures/moretrees_palm_trunk.png | Bin 0 -> 172 bytes .../textures/moretrees_palm_trunk_top.png | Bin 0 -> 193 bytes .../ethereal/textures/moretrees_palm_wood.png | Bin 0 -> 183 bytes mods/ethereal/water.lua | 181 ++++ mods/ethereal/wood.lua | 368 ++++++++ 339 files changed, 13922 insertions(+), 1 deletion(-) create mode 100644 mods/ethereal/CHANGELOG.md create mode 100644 mods/ethereal/README.md create mode 100644 mods/ethereal/api.txt create mode 100644 mods/ethereal/biomes.lua create mode 100644 mods/ethereal/biomes_init.lua create mode 100644 mods/ethereal/compatibility.lua create mode 100644 mods/ethereal/crystal.lua create mode 100644 mods/ethereal/decor.lua create mode 100644 mods/ethereal/depends.txt create mode 100644 mods/ethereal/description.txt create mode 100644 mods/ethereal/dirt.lua create mode 100644 mods/ethereal/ethereal-biomes-defaults-22-Jul-2022-geogebra.ggb create mode 100644 mods/ethereal/extra.lua create mode 100644 mods/ethereal/fences.lua create mode 100644 mods/ethereal/fishing.lua create mode 100644 mods/ethereal/flight.lua create mode 100644 mods/ethereal/food.lua create mode 100644 mods/ethereal/init.lua create mode 100644 mods/ethereal/leaves.lua create mode 100644 mods/ethereal/license.txt create mode 100644 mods/ethereal/locale/de.txt create mode 100644 mods/ethereal/locale/es.txt create mode 100644 mods/ethereal/locale/ethereal.de.tr create mode 100644 mods/ethereal/locale/ethereal.en.tr create mode 100644 mods/ethereal/locale/ethereal.es.tr create mode 100644 mods/ethereal/locale/ethereal.fr.tr create mode 100644 mods/ethereal/locale/ethereal.ru.tr create mode 100644 mods/ethereal/locale/ethereal.zh_CN.tr create mode 100644 mods/ethereal/locale/ru.txt create mode 100644 mods/ethereal/locale/template.txt create mode 100644 mods/ethereal/locale/zh_CN.txt create mode 100644 mods/ethereal/lucky_block.lua create mode 100644 mods/ethereal/mod.conf create mode 100644 mods/ethereal/onion.lua create mode 100644 mods/ethereal/ores.lua create mode 100644 mods/ethereal/plantlife.lua create mode 100644 mods/ethereal/plantpack.lua create mode 100644 mods/ethereal/sapling.lua create mode 100644 mods/ethereal/schematics/bamboo_tree.lua create mode 100644 mods/ethereal/schematics/banana_tree.lua create mode 100644 mods/ethereal/schematics/basandra_bush.lua create mode 100644 mods/ethereal/schematics/bigtree.lua create mode 100644 mods/ethereal/schematics/birch_tree.lua create mode 100644 mods/ethereal/schematics/bush.lua create mode 100644 mods/ethereal/schematics/corals.mts create mode 100644 mods/ethereal/schematics/frosttrees.lua create mode 100644 mods/ethereal/schematics/igloo.lua create mode 100644 mods/ethereal/schematics/lemon_tree.lua create mode 100644 mods/ethereal/schematics/mushroomone.lua create mode 100644 mods/ethereal/schematics/olive_tree.lua create mode 100644 mods/ethereal/schematics/orange_tree.lua create mode 100644 mods/ethereal/schematics/palmtree.lua create mode 100644 mods/ethereal/schematics/pinetree.lua create mode 100644 mods/ethereal/schematics/redwood_small_tree.lua create mode 100644 mods/ethereal/schematics/redwood_tree.lua create mode 100644 mods/ethereal/schematics/sakura.lua create mode 100644 mods/ethereal/schematics/vinetree.lua create mode 100644 mods/ethereal/schematics/volcanol.lua create mode 100644 mods/ethereal/schematics/volcanom.lua create mode 100644 mods/ethereal/schematics/waterlily.lua create mode 100644 mods/ethereal/schematics/willow.lua create mode 100644 mods/ethereal/schematics/yellowtree.lua create mode 100644 mods/ethereal/schems.lua create mode 100644 mods/ethereal/screenshot-geogebra-ethereal.png create mode 100644 mods/ethereal/screenshot.jpg create mode 100644 mods/ethereal/sealife.lua create mode 100644 mods/ethereal/settings.conf_example create mode 100644 mods/ethereal/settingtypes.txt create mode 100644 mods/ethereal/sounds/ethereal_casting_rod.ogg create mode 100644 mods/ethereal/stairs.lua create mode 100644 mods/ethereal/strawberry.lua create mode 100644 mods/ethereal/textures/alt/ethereal_banana_wood.png create mode 100644 mods/ethereal/textures/alt/ethereal_olive_wood.png create mode 100644 mods/ethereal/textures/alt/ethereal_redwood_wood.png create mode 100644 mods/ethereal/textures/alt/ethereal_sakura_wood.png create mode 100644 mods/ethereal/textures/alt/ethereal_willow_wood.png create mode 100644 mods/ethereal/textures/alt/license.txt create mode 100644 mods/ethereal/textures/alt/moretrees_birch_wood.png create mode 100644 mods/ethereal/textures/alt/moretrees_palm_wood.png create mode 100644 mods/ethereal/textures/baked_clay_grey.png create mode 100644 mods/ethereal/textures/baked_clay_orange.png create mode 100644 mods/ethereal/textures/baked_clay_red.png create mode 100644 mods/ethereal/textures/bucket_cactus.png create mode 100644 mods/ethereal/textures/bucket_cactus.png_hd create mode 100644 mods/ethereal/textures/default_apple_gold.png create mode 100644 mods/ethereal/textures/ethereal_agar_powder.png create mode 100644 mods/ethereal/textures/ethereal_bamboo_floor.png create mode 100644 mods/ethereal/textures/ethereal_bamboo_leaves.png create mode 100644 mods/ethereal/textures/ethereal_bamboo_sprout.png create mode 100644 mods/ethereal/textures/ethereal_bamboo_trunk.png create mode 100644 mods/ethereal/textures/ethereal_banana_bread.png create mode 100644 mods/ethereal/textures/ethereal_banana_bunch.png create mode 100644 mods/ethereal/textures/ethereal_banana_dough.png create mode 100644 mods/ethereal/textures/ethereal_banana_leaf.png create mode 100644 mods/ethereal/textures/ethereal_banana_single.png create mode 100644 mods/ethereal/textures/ethereal_banana_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_banana_trunk.png create mode 100644 mods/ethereal/textures/ethereal_banana_trunk_top.png create mode 100644 mods/ethereal/textures/ethereal_banana_wood.png create mode 100644 mods/ethereal/textures/ethereal_basandra_bush_leaves.png create mode 100644 mods/ethereal/textures/ethereal_basandra_bush_sapling.png create mode 100644 mods/ethereal/textures/ethereal_basandra_bush_stem.png create mode 100644 mods/ethereal/textures/ethereal_basandra_bush_wood.png create mode 100644 mods/ethereal/textures/ethereal_big_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_blue_marble.png create mode 100644 mods/ethereal/textures/ethereal_blue_marble_tile.png create mode 100644 mods/ethereal/textures/ethereal_bowl.png create mode 100644 mods/ethereal/textures/ethereal_brick_ice.png create mode 100644 mods/ethereal/textures/ethereal_brick_snow.png create mode 100644 mods/ethereal/textures/ethereal_bush.png create mode 100644 mods/ethereal/textures/ethereal_calamari_cooked.png create mode 100644 mods/ethereal/textures/ethereal_calamari_raw.png create mode 100644 mods/ethereal/textures/ethereal_candied_lemon.png create mode 100644 mods/ethereal/textures/ethereal_candle.png create mode 100644 mods/ethereal/textures/ethereal_candle_black.png create mode 100644 mods/ethereal/textures/ethereal_candle_black_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_blue.png create mode 100644 mods/ethereal/textures/ethereal_candle_blue_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_brown.png create mode 100644 mods/ethereal/textures/ethereal_candle_brown_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_cyan.png create mode 100644 mods/ethereal/textures/ethereal_candle_cyan_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_dark_green.png create mode 100644 mods/ethereal/textures/ethereal_candle_dark_green_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_dark_grey.png create mode 100644 mods/ethereal/textures/ethereal_candle_dark_grey_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_green.png create mode 100644 mods/ethereal/textures/ethereal_candle_green_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_grey.png create mode 100644 mods/ethereal/textures/ethereal_candle_grey_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_magenta.png create mode 100644 mods/ethereal/textures/ethereal_candle_magenta_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_orange.png create mode 100644 mods/ethereal/textures/ethereal_candle_orange_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_pink.png create mode 100644 mods/ethereal/textures/ethereal_candle_pink_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_red.png create mode 100644 mods/ethereal/textures/ethereal_candle_red_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_violet.png create mode 100644 mods/ethereal/textures/ethereal_candle_violet_static.png create mode 100644 mods/ethereal/textures/ethereal_candle_yellow.png create mode 100644 mods/ethereal/textures/ethereal_candle_yellow_static.png create mode 100644 mods/ethereal/textures/ethereal_charcoal_lump.png create mode 100644 mods/ethereal/textures/ethereal_coral_blue.png create mode 100644 mods/ethereal/textures/ethereal_coral_green.png create mode 100644 mods/ethereal/textures/ethereal_coral_orange.png create mode 100644 mods/ethereal/textures/ethereal_coral_pink.png create mode 100644 mods/ethereal/textures/ethereal_crystal_axe.png create mode 100644 mods/ethereal/textures/ethereal_crystal_block.png create mode 100644 mods/ethereal/textures/ethereal_crystal_gilly_staff.png create mode 100644 mods/ethereal/textures/ethereal_crystal_ingot.png create mode 100644 mods/ethereal/textures/ethereal_crystal_pick.png create mode 100644 mods/ethereal/textures/ethereal_crystal_shovel.png create mode 100644 mods/ethereal/textures/ethereal_crystal_spike.png create mode 100644 mods/ethereal/textures/ethereal_crystal_sword.png create mode 100644 mods/ethereal/textures/ethereal_crystalgrass.png create mode 100644 mods/ethereal/textures/ethereal_dry_dirt.png create mode 100644 mods/ethereal/textures/ethereal_dry_shrub.png create mode 100644 mods/ethereal/textures/ethereal_etherium_dust.png create mode 100644 mods/ethereal/textures/ethereal_etherium_ore.png create mode 100644 mods/ethereal/textures/ethereal_fern.png create mode 100644 mods/ethereal/textures/ethereal_fern_tubers.png create mode 100644 mods/ethereal/textures/ethereal_fire_dust.png create mode 100644 mods/ethereal/textures/ethereal_fire_flower.png create mode 100644 mods/ethereal/textures/ethereal_firethorn.png create mode 100644 mods/ethereal/textures/ethereal_firethorn_jelly.png create mode 100644 mods/ethereal/textures/ethereal_fish_angler.png create mode 100644 mods/ethereal/textures/ethereal_fish_bluefin.png create mode 100644 mods/ethereal/textures/ethereal_fish_blueram.png create mode 100644 mods/ethereal/textures/ethereal_fish_carp.png create mode 100644 mods/ethereal/textures/ethereal_fish_catfish.png create mode 100644 mods/ethereal/textures/ethereal_fish_chips.png create mode 100644 mods/ethereal/textures/ethereal_fish_cichlid.png create mode 100644 mods/ethereal/textures/ethereal_fish_clownfish.png create mode 100644 mods/ethereal/textures/ethereal_fish_cod.png create mode 100644 mods/ethereal/textures/ethereal_fish_cooked.png create mode 100644 mods/ethereal/textures/ethereal_fish_coy.png create mode 100644 mods/ethereal/textures/ethereal_fish_flathead.png create mode 100644 mods/ethereal/textures/ethereal_fish_flounder.png create mode 100644 mods/ethereal/textures/ethereal_fish_jellyfish.png create mode 100644 mods/ethereal/textures/ethereal_fish_mackerel.png create mode 100644 mods/ethereal/textures/ethereal_fish_parrot.png create mode 100644 mods/ethereal/textures/ethereal_fish_pike.png create mode 100644 mods/ethereal/textures/ethereal_fish_piranha.png create mode 100644 mods/ethereal/textures/ethereal_fish_plaice.png create mode 100644 mods/ethereal/textures/ethereal_fish_pufferfish.png create mode 100644 mods/ethereal/textures/ethereal_fish_redsnapper.png create mode 100644 mods/ethereal/textures/ethereal_fish_salmon.png create mode 100644 mods/ethereal/textures/ethereal_fish_seahorse.png create mode 100644 mods/ethereal/textures/ethereal_fish_seahorse_blue.png create mode 100644 mods/ethereal/textures/ethereal_fish_seahorse_green.png create mode 100644 mods/ethereal/textures/ethereal_fish_seahorse_pink.png create mode 100644 mods/ethereal/textures/ethereal_fish_seahorse_yellow.png create mode 100644 mods/ethereal/textures/ethereal_fish_shrimp.png create mode 100644 mods/ethereal/textures/ethereal_fish_shrimp_cooked.png create mode 100644 mods/ethereal/textures/ethereal_fish_squid.png create mode 100644 mods/ethereal/textures/ethereal_fish_tetra.png create mode 100644 mods/ethereal/textures/ethereal_fish_tilapia.png create mode 100644 mods/ethereal/textures/ethereal_fish_trevally.png create mode 100644 mods/ethereal/textures/ethereal_fish_trout.png create mode 100644 mods/ethereal/textures/ethereal_fish_tuna.png create mode 100644 mods/ethereal/textures/ethereal_fishing_bob.png create mode 100644 mods/ethereal/textures/ethereal_fishing_rod.png create mode 100644 mods/ethereal/textures/ethereal_flight_potion.png create mode 100644 mods/ethereal/textures/ethereal_frost_leaves.png create mode 100644 mods/ethereal/textures/ethereal_frost_tree.png create mode 100644 mods/ethereal/textures/ethereal_frost_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_frost_tree_top.png create mode 100644 mods/ethereal/textures/ethereal_frost_wood.png create mode 100644 mods/ethereal/textures/ethereal_fugu.png create mode 100644 mods/ethereal/textures/ethereal_garlic_butter_shrimp.png create mode 100644 mods/ethereal/textures/ethereal_giant_redwood_sapling.png create mode 100644 mods/ethereal/textures/ethereal_glostone.png create mode 100644 mods/ethereal/textures/ethereal_grass_bamboo_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_bamboo_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_cold_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_cold_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_crystal_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_crystal_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_fiery_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_fiery_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_gray_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_gray_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_grove_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_grove_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_jungle_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_jungle_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_mushroom_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_mushroom_top.png create mode 100644 mods/ethereal/textures/ethereal_grass_prairie_side.png create mode 100644 mods/ethereal/textures/ethereal_grass_prairie_top.png create mode 100644 mods/ethereal/textures/ethereal_gray_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_hearty_stew.png create mode 100644 mods/ethereal/textures/ethereal_illumishroom_cyan.png create mode 100644 mods/ethereal/textures/ethereal_illumishroom_green.png create mode 100644 mods/ethereal/textures/ethereal_illumishroom_red.png create mode 100644 mods/ethereal/textures/ethereal_jellyfish_salad.png create mode 100644 mods/ethereal/textures/ethereal_jungle_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_lemon.png create mode 100644 mods/ethereal/textures/ethereal_lemon_fruit.png create mode 100644 mods/ethereal/textures/ethereal_lemon_leaves.png create mode 100644 mods/ethereal/textures/ethereal_lemon_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_lemonade.png create mode 100644 mods/ethereal/textures/ethereal_light_staff.png create mode 100644 mods/ethereal/textures/ethereal_lightstring.png create mode 100644 mods/ethereal/textures/ethereal_lilac.png create mode 100644 mods/ethereal/textures/ethereal_mushroom_block.png create mode 100644 mods/ethereal/textures/ethereal_mushroom_pore.png create mode 100644 mods/ethereal/textures/ethereal_mushroom_sapling.png create mode 100644 mods/ethereal/textures/ethereal_mushroom_soup.png create mode 100644 mods/ethereal/textures/ethereal_mushroom_trunk.png create mode 100644 mods/ethereal/textures/ethereal_mushroom_trunk_top.png create mode 100644 mods/ethereal/textures/ethereal_olive.png create mode 100644 mods/ethereal/textures/ethereal_olive_fruit.png create mode 100644 mods/ethereal/textures/ethereal_olive_leaves.png create mode 100644 mods/ethereal/textures/ethereal_olive_oil.png create mode 100644 mods/ethereal/textures/ethereal_olive_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_olive_trunk.png create mode 100644 mods/ethereal/textures/ethereal_olive_trunk_top.png create mode 100644 mods/ethereal/textures/ethereal_olive_wood.png create mode 100644 mods/ethereal/textures/ethereal_orange_leaves.png create mode 100644 mods/ethereal/textures/ethereal_orange_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_palm_wax.png create mode 100644 mods/ethereal/textures/ethereal_paper_wall.png create mode 100644 mods/ethereal/textures/ethereal_pine_nuts.png create mode 100644 mods/ethereal/textures/ethereal_pine_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_redwood_leaves.png create mode 100644 mods/ethereal/textures/ethereal_redwood_sapling.png create mode 100644 mods/ethereal/textures/ethereal_redwood_trunk.png create mode 100644 mods/ethereal/textures/ethereal_redwood_trunk_top.png create mode 100644 mods/ethereal/textures/ethereal_redwood_wood.png create mode 100644 mods/ethereal/textures/ethereal_sakura_door.png create mode 100644 mods/ethereal/textures/ethereal_sakura_door_inv.png create mode 100644 mods/ethereal/textures/ethereal_sakura_leaves.png create mode 100644 mods/ethereal/textures/ethereal_sakura_leaves2.png create mode 100644 mods/ethereal/textures/ethereal_sakura_sapling.png create mode 100644 mods/ethereal/textures/ethereal_sakura_trunk.png create mode 100644 mods/ethereal/textures/ethereal_sakura_trunk_top.png create mode 100644 mods/ethereal/textures/ethereal_sakura_wood.png create mode 100644 mods/ethereal/textures/ethereal_sashimi.png create mode 100644 mods/ethereal/textures/ethereal_scorched_tree.png create mode 100644 mods/ethereal/textures/ethereal_scorched_tree_top.png create mode 100644 mods/ethereal/textures/ethereal_seaweed.png create mode 100644 mods/ethereal/textures/ethereal_snowygrass.png create mode 100644 mods/ethereal/textures/ethereal_sponge.png create mode 100644 mods/ethereal/textures/ethereal_sponge_wet.png create mode 100644 mods/ethereal/textures/ethereal_spore_grass.png create mode 100644 mods/ethereal/textures/ethereal_stone_ladder.png create mode 100644 mods/ethereal/textures/ethereal_strawberry.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_1.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_2.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_3.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_4.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_5.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_6.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_7.png create mode 100644 mods/ethereal/textures/ethereal_strawberry_8.png create mode 100644 mods/ethereal/textures/ethereal_sushi_kappa_maki.png create mode 100644 mods/ethereal/textures/ethereal_sushi_nigiri.png create mode 100644 mods/ethereal/textures/ethereal_sushi_tamago.png create mode 100644 mods/ethereal/textures/ethereal_teriyaki_beef.png create mode 100644 mods/ethereal/textures/ethereal_teriyaki_chicken.png create mode 100644 mods/ethereal/textures/ethereal_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_vine.png create mode 100644 mods/ethereal/textures/ethereal_wild_onion.png create mode 100644 mods/ethereal/textures/ethereal_wild_onion_1.png create mode 100644 mods/ethereal/textures/ethereal_wild_onion_2.png create mode 100644 mods/ethereal/textures/ethereal_wild_onion_3.png create mode 100644 mods/ethereal/textures/ethereal_wild_onion_4.png create mode 100644 mods/ethereal/textures/ethereal_wild_onion_5.png create mode 100644 mods/ethereal/textures/ethereal_willow_sapling.png create mode 100644 mods/ethereal/textures/ethereal_willow_trunk.png create mode 100644 mods/ethereal/textures/ethereal_willow_trunk_top.png create mode 100644 mods/ethereal/textures/ethereal_willow_twig.png create mode 100644 mods/ethereal/textures/ethereal_willow_wood.png create mode 100644 mods/ethereal/textures/ethereal_worm.png create mode 100644 mods/ethereal/textures/ethereal_yellow_leaves.png create mode 100644 mods/ethereal/textures/ethereal_yellow_tree.png create mode 100644 mods/ethereal/textures/ethereal_yellow_tree_sapling.png create mode 100644 mods/ethereal/textures/ethereal_yellow_tree_top.png create mode 100644 mods/ethereal/textures/ethereal_yellow_wood.png create mode 100644 mods/ethereal/textures/farming_orange.png create mode 100644 mods/ethereal/textures/moretrees_acacia_leaves.png create mode 100644 mods/ethereal/textures/moretrees_birch_leaves.png create mode 100644 mods/ethereal/textures/moretrees_birch_sapling.png create mode 100644 mods/ethereal/textures/moretrees_birch_trunk.png create mode 100644 mods/ethereal/textures/moretrees_birch_trunk_top.png create mode 100644 mods/ethereal/textures/moretrees_birch_wood.png create mode 100644 mods/ethereal/textures/moretrees_coconut.png create mode 100644 mods/ethereal/textures/moretrees_coconut_slice.png create mode 100644 mods/ethereal/textures/moretrees_palm_leaves.png create mode 100644 mods/ethereal/textures/moretrees_palm_sapling.png create mode 100644 mods/ethereal/textures/moretrees_palm_trunk.png create mode 100644 mods/ethereal/textures/moretrees_palm_trunk_top.png create mode 100644 mods/ethereal/textures/moretrees_palm_wood.png create mode 100644 mods/ethereal/water.lua create mode 100644 mods/ethereal/wood.lua diff --git a/README.md b/README.md index ff580fa..060c4e3 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ To download you can play this game with the following minetest engines: #### Mods * minetest default - * killme/game_commands were simplified into default mod, and provide CC-BY-SA-NC license + * integrated the killme/game_commands were simplified into default mod, and provide CC-BY-SA-NC license * sorceredkid auth mod * minetest Auth Redux as `auth_rx` [mods/auth_rx](mods/auth_rx) from https://codeberg.org/minenux/minetest-mod-auth_rx * so then minetest Formspecs as `formspecs` [mods/formspecs](mods/formspecs) from https://codeberg.org/minenux/minetest-mod-formspecs @@ -43,6 +43,7 @@ To download you can play this game with the following minetest engines: * tenplus1 customized mods * simple_skins as `skins` [mods/skins](mods/skins) from https://codeberg.org/minenux/minetest-mod-simple_skins * regrow as `regrow` [mods/regrow](mods/regrow) from https://codeberg.org/minenux/minetest-mod-regrow + * ethereal as `ethereal` [mods/ethereal](mods/ethereal) from https://codeberg.org/minenux/minetest-mod-ethereal * armors and stuff mods * 3d_armor and shields [mods/3d_armor](mods/3d_armor) https://codeberg.org/minenux/minetest-mod-3d_armor * minenux bags as `backpacks` [mods/backpacks](mods/backpacks) diff --git a/mods/ethereal/CHANGELOG.md b/mods/ethereal/CHANGELOG.md new file mode 100644 index 0000000..239d965 --- /dev/null +++ b/mods/ethereal/CHANGELOG.md @@ -0,0 +1,398 @@ +## Changelog + +A huge thanks to Chinchow who was the inspiration behind Ethereal and everyone +who helped make this mod bigger and better throughout it's release :) + +As of January 3rd 2023, All gameplay features are up to-date + +#### 1.29 + - Use "stratum" to generate mesa biome for stripey goodness + - Added coloured candles (thanks wRothbard) + - Rename some biomes to fall inline with default for spawning + - Make stairs and doors a soft dependency, fix willow recipes (thanks sangeet) + - Added 'ethereal.flightpotion_duration' setting, potion also works on 0.4.x clients + - Added olive wood fences, gates, mese posts + - Added lilac to sakura biome (can be crafted into magenta dye) + +#### 1.28 + + - Added new Mediterranean biome with Lemon and Olive trees (thanks Felfa) + - Added Candied Lemon and Olive Oil items and recipe + - Rewrite stairs and add auto-select function + - Added Lemonade + - Added smaller redwood trees, to grow large variety 2 saplings required + - Added Flight Potion (etherium dust arch, fire dust middle, empty bottle bottom) + - Added new Fishing mechanics (inspired by Rootyjr's on mineclone2) + - Added fishing api to add new items (read API.txt file) + - Certain fish can only be found in specific biomes + - Rename textures so they begin with ethereal_ (sorry texture pack folks) + - Override mushroom spread abm to use "group:mushroom" + +#### 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 + - Split and re-write mapgen files for tidier generation + - Giant Mushroom tops now decay when trunk removed + - Added Blue Marble to grey biomes and Blue Marble Tile recipe + +#### 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 \ No newline at end of file diff --git a/mods/ethereal/README.md b/mods/ethereal/README.md new file mode 100644 index 0000000..6ce165a --- /dev/null +++ b/mods/ethereal/README.md @@ -0,0 +1,615 @@ +minetest mod ethereal NG +====================== + +BIOME mod mapgen to add many new biomes to the world + +## Information +-------------- + +This mod is named `ethereal`, it produces huge amount of new biomes +overriding defaults, many new items and features that spice up gameplay. + +Known as Ethereal NG (next-generation) it give players that +little something extra to look for while exploring the world. + +![screenshot.png](screenshot.png) + +Forum Topic https://forum.minetest.net/viewtopic.php?f=11&t=14638 + +TODO: document items and crafting + +#### Lucky Blocks + +It provides 63 new lucky blocks if the mod is detected. + +## Technical info +----------------- + +- [Information](#information) + - [Lucky Blocks](#lucky-blocks) +- [Technical info](#technical-info) + - [Mod structure and customization](#mod-structure-and-customization) + - [Dependencies](#dependencies-and-compatibility) + - [Compatibility](#dependencies-and-compatibility) + - [Settings](#settings) + - [Fishing api](#fishing-api) + - [Biomes list](#biomes-list) + - [Biome work](#biome-work) + - [Node list](#node-list) + - [Hard nodes or blocks](#hard-nodes-or-blocks) + - [Biome nodes like trees and plants](#biome-nodes-like-trees-and-plants) + - [Willow](#willow) + - [Redwood](#redwood) + - [Frost megatree](#frost-megatree) + - [Banana ](#banana-) + - [Orange minitree](#orange-minitree) + - [Healing megatree](#healing-megatree) + - [Palm tree](#palm-tree) + - [Birch minitree ](#birch-minitree-) + - [Bamboo](#bamboo) + - [Sakura megatree](#sakura-megatree) + - [Lemon tree](#lemon-tree) + - [Olive megatree](#olive-megatree) + - [Other "Wood-like" items](#other-"wood-like"-items) + - [Mushroom](#mushroom) + - [Misc bushes](#misc-bushes) + - [BIG SAPLING](#big-sapling) + - [Understanding Biome customization](#understanding-biome-customization) +- [Changelog](#changelog) + - [1.30](#1.30) + - [1.29](#1.29) + - [1.28](#1.28) + - [1.27](#1.27) + - [1.26](#1.26) + - [1.25](#1.25) + - [1.24](#1.24) + - [1.23](#1.23) + - [1.22](#1.22) + - [1.21](#1.21) + - [1.20](#1.20) + - [1.19](#1.19) + - [1.18](#1.18) + - [1.17](#1.17) + - [1.16](#1.16) + - [1.15](#1.15) + - [1.14](#1.14) + - [1.13](#1.13) + - [1.12](#1.12) + - [1.11](#1.11) + - [1.10](#1.10) + - [1.09](#1.09) +- [LICENSE](#license) + +#### Mod structure and customization + +Biomes customization values are hardcoded in the [`biomes.lua`](biomes.lua) file, +and initialized in the [`biomes_init.lua`](biomes_init.lua) file. + +Nodes and elements are hardcoded in the [schems.lua](schems.lua) file, +each of those are defined in [schematics](schematics) directory. + +Underwater life are defined in the [sealife.lua](sealife.lua) file. + +#### Dependencies and compatibility + +Make sure you are using Minetest 0.4.16+ and start a new world (anything but v6), +then enable Ethereal in the mods list. Ethereal has been designed to work +alongside with those mods: + +* default +* farming (Farming Redo, not normal build in, support for seeds, plant and new foods) +* flowers ( for sunflowers, fire flowers and each variety of viola and others) +* mobs (Mobs Redo, is heaviliy used) +* backedclay (For clay biomes and results) +* stairs + +Also those more as optional: + +* lucky_block (will provide much more surprices for, 60+ surprices) +* doors (will provide a fence gate and a sakura door) +* intllib (only need on older engines for translations) +* toolranks (Will provide support for new crystal stuffs) + +#### Settings + +**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` + + +| name setting | Description | values | default | +| ------------------------------ | --------------------------------- | ---- | ------ | +| ethereal.leaftype | 2D plantlike leaves (0) or 3D (1) | int | 0 | +| ethereal.leafwalk | Walkable leaves | bool | false | +| ethereal.cavedirt | Caves cut through dirt | bool | true | +| ethereal.torchdrop | Torches drop when in water | bool | true | +| ethereal.papyruswalk | Papyrus and Bamboo are walkable | bool | true | +| ethereal.lilywalk | Lilypads are walkable | bool | true | +| ethereal.xcraft | Enable X-Craft cheats | bool | true | +| ethereal.flight | Enable Flight Potion | bool | true | +| ethereal.glacier | Glacier biome, 1=on / 0=off | int | 1 | +| ethereal.bambo | Bamboo biome, 1=on / 0=off | int | 1 | +| ethereal.mesa | Mesa biome, 1=on / 0=off | int | 1 | +| ethereal.alpine | Alpine biome, 1=on / 0=off | int | 1 | +| ethereal.healing | Healing Tree biome, 1=on / 0=off | int | 1 | +| ethereal.snowy | Pine Tree biome, 1=on / 0=off | int | 1 | +| ethereal.frost | Blue Frost biome, 1=on / 0=off | int | 1 | +| ethereal.grassy | Grassy biome, 1=on / 0=off | int | 1 | +| ethereal.caves | Desertstone biome, 1=on / 0=off | int | 1 | +| ethereal.grayness | Grey Willow biome, 1=on / 0=off | int | 1 | +| ethereal.grassytwo | GrassyTwo biome, 1=on / 0=off | int | 1 | +| ethereal.prairie | Prairie biome, 1=on / 0=off | int | 1 | +| ethereal.jumble | Jumble biome, 1=on / 0=off | int | 1 | +| ethereal.junglee | Jungle biome, 1=on / 0=off | int | 1 | +| ethereal.desert | Desert biome, 1=on / 0=off | int | 1 | +| ethereal.grove | Banana Grove biome, 1=on / 0=off | int | 1 | +| ethereal.mushroom | Mushroom biome, 1=on / 0=off | int | 1 | +| ethereal.sandstone | Sandstone biome, 1=on / 0=off | int | 1 | +| ethereal.quicksand | Quicksand Bank biome, 1=on / 0=off | int | 1 | +| ethereal.plains | Scorched Plains biome, 1=on / 0=off | int | 1 | +| ethereal.savanna | Savanna biome, 1=on / 0=off | int | 1 | +| ethereal.fiery | Feiry Lava biome, 1=on / 0=off | int | 1 | +| ethereal.sandclay | Sandy Clay biome, 1=on / 0=off | int | 1 | +| ethereal.swamp | Swamp biome, 1=on / 0=off | int | 1 | +| ethereal.sealife | Coral and Seaweed biome, 1=on / 0=off | int | 1 | +| ethereal.reefs | MT5 Coral biome, 1=on / 0=off | int | 1 | +| ethereal.sakura | Sakura biome, 1=on / 0=off | int | 1 | +| ethereal.tundra | Tundra biome, 1=on / 0=off | int | 1 | +| ethereal.mediterranean | Mediterranean biome, 1=on / 0=off | int | 1 | +| ethereal.flightpotion_duration | Flight Potion Duration seconds | int | 300 | + +#### Fishing api + +The mod provides a fishing api, basically is `ethereal.add_item(fish, junk, bonus)`, +several examples are at the documentation of [api.txt](api.txt) file. + +#### Biomes list + +There are almost 20 biomes or more, those are indicators of (WIP list.. maybe more): + +| biome | y.min | y.max | heat | humidity | enabled/setting | +| ----------------- | ---- | ---- | ----- | --------- | ------------- | +| mountain | 140 | 31000 | 50 | 50 | 1 (enabled) | +| grassland | 3 | 71 | 45 | 65 | 1 (enalbed) | +| underground | -31000 | -192 | 50 | 50 | 1 (enabled) | +| desert | 3 | 23 | 35 | 20 | ethereal.desert | +| desert_ocean | -192 | 3 | 35 | 20 | ethereal.desert | +| bamboo | 25 | 70 | 45 | 75 | ethereal.bamboo | +| sakura | 3 | 25 | 45 | 75 | ethereal.sakura | +| sakura_ocean | -192 | 2 | 45 | 75 | ethereal.sakura | +| mesa | 1 | 71 | 25 | 28 | ethereal.mesa | +| mesa_ocean | -192 | 1 | 25 | 28 | ethereal.mesa | +| coniferous_forest | 4 | 40 | 10 | 40 | ethereal.snowy | +| taiga | 40 | 140 | 10 | 40 | ethereal.alpine | +| frost_floatland | 1025 | 1750 | 10 | 40 | ethereal.frost | +| frost | 1 | 71 | 10 | 40 | ethereal.frost | +| frost_ocean | -192 | 1 | 10 | 40 | ethereal.frost | +| deciduous_forest | 3 | 91 | 13 | 40 | ethereal.grassy | +| deciduous_forest_ocean | -31000 | 3 | 13 | 40 | ethereal.grassy | +| caves | 4 | 41 | 15 | 25 | ethereal.caves | +| grayness | 2 | 41 | 15 | 30 | ethereal.grayness | +| grayness_ocean | -28 | 1 | 15 | 30 | ethereal.grayness | +| grassytwo | 1 | 91 | 15 | 40 | ethereal.grassytwo | +| grassytwo_ocean | -192 | 1 | 15 | 40 | ethereal.grassytwo | +| prairie | 3 | 26 | 20 | 40 | ethereal.prairie | +| prairie_ocean | -192 | 1 | 20 | 40 | ethereal.prairie | +| jumble | 1 | 71 | 25 | 50 | ethereal.jumble | +| jumble_ocean | -192 | 1 | 25 | 50 | ethereal.jumble | +| junglee | 1 | 71 | 30 | 60 | ethereal.junglee | +| junglee_ocean | -192 | 1 | 30 | 60 | ethereal.junglee | +| grove | 3 | 23 | 45 | 35 | ethereal.grove | +| grove_ocean | -192 | 2 | 45 | 35 | ethereal.grove | +| mediterranean | 3 | 50 | 20 | 45 | ethereal.mediterranean | +| mushroom | 3 | 50 | 45 | 55 | ethereal.mushroom | +| mushroom_ocean | -192 | 2 | 45 | 55 | ethereal.mushroom | +| sandstone | 3 | 23 | 50 | 20 | ethereal.sandstone | +| sandstone_ocean | -192 | 2 | 50 | 20 | ethereal.sandstone | +| quicksand | 1 | 1 | 50 | 38 | ethereal.quicksand | +| plains | 3 | 25 | 65 | 25 | ethereal.plains | +| plains_ocean | -192 | 2 | 55 | 25 | ethereal.plains | +| savanna | 3 | 50 | 55 | 25 | ethereal.savanna | +| savanna_ocean | -192 | 1 | 55 | 25 | ethereal.savanna | +| fiery | 5 | 20 | 75 | 10 | ethereal.fiery | +| fiery_ocean | -192 | 4 | 75 | 10 | ethereal.fiery | +| sandclay | 1 | 11 | 65 | 2 | ethereal.sandclay | +| swamp | 1 | 7 | 80 | 90 | ethereal.swamp | +| swamp_ocean | -192 | 1 | 80 | 90 | ethereal.swamp | + +#### Biome work + +This is done by assigning a heat and a humidity value to each biome. +Each biome is assigned with a heat and humidity value between 0 and 100. + +The `ethereal` mod will sustitute all the current biomes and will +places new ones.. the code do `minetest.clear_registered_biomes()` and +the `minetest.clear_registered_decorations()` rutines, ores still are +not well developed and are just defaults and featured. + +### Node list + +#### Hard nodes or blocks + + * ethereal:etherium_ore, ethereal:stone_with_etherium_ore. Regular ore, cosmetic use like gold ore. + * ethereal:crystal_spike, mix 2 Crystal and 2 Mese for a crystal ingot, water bucket, gives ethereal:crystal_ingot, used for silk touch tools, ow OP sword + * ethereal:crystal_block Block of the above mineral, Only for cosmetic use. + * ethereal:stone_ladder Ladders made of stone + * ethereal:glostone Light block, Same light level as a mese post, decorative + +#### Biome nodes like trees and plants + +Stairs, Slabs, Outer and Inner variants of wood exists, Just append, _stair _slab _outer_stairs _inner_stair to every wood respectively. + +List goes, Leaves, Trunk, Wood, Sapling, and extras + +##### Willow + + * ethereal:willow_twig + * ethereal:willow_trunk + * ethereal:willow_wood + * ethereal:willow_sapling + +##### Redwood + + * ethereal:redwood_leaves + * ethereal:redwood_trunk + * ethereal:redwood_wood + * ethereal:redwood_sapling - Grows a small redwood tree + * ethereal:giant_redwood_sapling - The big one, crafted from 2 saplings. + +##### Frost megatree + + * ethereal:frost_leaves + * ethereal:frost_tree - Substantially harder to break + * ethereal:frost_wood - A bit hard to break + * ethereal:frost_sapling + +##### Banana + + * ethereal:bananaleaves + * ethereal:banana_trunk + * ethereal:banana_wood + * ethereal:banana_tree_sapling + * ethereal:banana - Heals 2 hearts + +##### Orange minitree + +Orange uses apple trunk and wood as base + + * ethereal:orange_leaves + * ethereal:orange_sapling + * ethereal:orange - heals 1.5 hearts + +##### Healing megatree + + * ethereal:yellowleaves + * ethereal:yellow_trunk + * ethereal:yellow_wood + * ethereal:yellow_tree_sapling + * ethereal:golden_apple - Heals to full health (It does not heal 10 hearts, just heals to default full) + +##### Palm tree + +Like pine + + * ethereal:palmleaves + * ethereal:palm_trunk + * ethereal:palm_wood + * ethereal:palmsapling + +##### Birch minitree + +Like aspen + + * ethereal:birch_leaves + * ethereal:birch_trunk + * ethereal:birch_wood + * ethereal:birch_sapling + +##### Bamboo + + * ethereal:bamboo_trunk - Cheap wood, easy to break a trunk of it + * ethereal:bamboo_leaves + * ethereal:bamboo_sprout + +##### Sakura megatree + + * ethereal:sakura_leaves + * ethereal:sakura_leaves2 - Nosense to be honest + * ethereal:sakura_trunk + * ethereal:sakura_wood + * ethereal:sakura_sapling + +##### Lemon tree + + * ethereal:lemon_leaves + * ethereal:lemon_trunk + * ethereal:lemon_wood + * ethereal:lemon_sapling + * ethereal:lemon - TODO: Healing value + +##### Olive megatree + + * ethereal:olive_leaves + * ethereal:olive_trunk + * ethereal:olive_wood + * ethereal:olive_sapling + +#### Other "Wood-like" items + +##### Mushroom + + * ethereal:mushroom_sapling + * ethereal:mushroom + * ethereal:mushroom_trunk + * ethereal:mushroom_pore + +##### Misc bushes + + * ethereal:bush3 (wtf?) + * ethereal:bush2 (Nonsense) + * ethereal:bush + +#### BIG SAPLING + +-Crafted with 3 regular apple saplings, gros a big tree with lots of wood and apples + + * ethereal:big_tree_sapling + + +#### Understanding Biome customization + +Are there any settings to enable to correctly use it to customized? +Each biome has a `y.min` and `y.max` values where will be apply. +Also is assigned with a `heat` and `humidity` value between 0 and 100. + +As well as drawing them by hand, **you can also create Voronoi diagrams +using programs such as Geogebra.** Dug up this **ethereal voronoi diagram** +from Paramat at https://www.geogebra.org/classic/jcc8eyy5 using those basics: + +* Firstly GeoGebra is not what we call super user friendly - Quirky + would be good descriptor :) +* Depending on your monitor size/aspect ratio you may need to change some + of the pane sizes :) large widescreen monitors will be helpfully +* If playing with the above don't try and move the blue dots that'll + totally break the height automation +* Update the Height Min/Max Heat/Humidity values in the spreadsheet + view, It left open on the right (red box below) - and don't change + the formula in Column F, that'll break it. +* When updating click in cell update value then click outside the cell + on the top menu bar works well...pressing enter will move you down a + cell which is annoying - quirky +* Adjusting to an exact height click on the slider and then update the + value in the right most pane "definition" field to an exact value - The + above link will open setup like that but as soon as you click on another + element it's properties will be displayed (Blue box below) + +Legend: heat = x and humidity = y so then by example: + +![screenshot-geogebra-ethereal.png](screenshot-geogebra-ethereal.png) + +File to import in new geogebra: [ethereal-biomes-defaults-22-Jul-2022-geogebra.ggb](ethereal-biomes-defaults-22-Jul-2022-geogebra.ggb) + +For example, the Frost biome has heat=10 and humidity=40 by default + +Recommendations: + +* https://rubenwardy.com/minetest_modding_book/en/advmap/biomesdeco.html + +- [Mod structure and customization](#mod-structure-and-customization) +- [Dependencies](#dependencies-and-compatibility) +- [Compatibility](#dependencies-and-compatibility) +- [Settings](#settings) +- [Fishing api](#fishing-api) +- [Biomes list](#biomes-list) +- [Biome work](#biome-work) + +## Changelog + +A huge thanks to Chinchow who was the inspiration behind Ethereal and everyone +who helped make this mod bigger and better throughout it's release :) + +### 1.30 + - New fish textures by SirroBzeroone and BlueTangs Rock + - New fish added along with food recipes (thanks BlueTangs Rock) + - Fishing rod now has 65 uses + - Fixed willow leaves scaling and forced schematic trunk placement + - Add 11 new lucky blocks + - Caverealms' glow bait reduces wait time when fishing + - Add Basandra Bush and wood items, Add Spore Grass + +#### 1.29 + - Use "stratum" to generate mesa biome for stripey goodness + - Added coloured candles (thanks wRothbard) + - Rename some biomes to fall inline with default for spawning + - Make stairs and doors a soft dependency, fix willow recipes (thanks sangeet) + - Added 'ethereal.flightpotion_duration' setting, potion also works on 0.4.x clients + - Added olive wood fences, gates, mese posts + - Added lilac to sakura biome (can be crafted into magenta dye) + +#### 1.28 + + - Added new Mediterranean biome with Lemon and Olive trees (thanks Felfa) + - Added Candied Lemon and Olive Oil items and recipe + - Rewrite stairs and add auto-select function + - Added Lemonade + - Added smaller redwood trees, to grow large variety 2 saplings required + - Added Flight Potion (etherium dust arch, fire dust middle, empty bottle bottom) + - Added new Fishing mechanics (inspired by Rootyjr's on mineclone2) + - Added fishing api to add new items (read API.txt file) + - Certain fish can only be found in specific biomes + - Rename textures so they begin with ethereal_ (sorry texture pack folks) + - Override mushroom spread abm to use "group:mushroom" + +#### 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 + - Split and re-write mapgen files for tidier generation + - Giant Mushroom tops now decay when trunk removed + - Added Blue Marble to grey biomes and Blue Marble Tile recipe + +#### 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 + +## LICENSE + +* Code: + * The MIT License (MIT) Copyright (c) 2016 TenPlus1 +* Art: + * Free textures from lisheng2121 (shutterstock) + * Free textures from epicwannehz, Altairas, JMArtsDesign + * Some from Royalty Free SFX from dreamstime.com + * Others + +Complete details are at the [license.txt](license.txt) file. + diff --git a/mods/ethereal/api.txt b/mods/ethereal/api.txt new file mode 100644 index 0000000..370e600 --- /dev/null +++ b/mods/ethereal/api.txt @@ -0,0 +1,41 @@ +Ethereal Fishing Rod API + +Usage: + + ethereal.add_item(fish, junk, bonus) + + +Example: + +The fish, junk and bonus entries can all be entered or used seperately e.g. + +..add fish: + + ethereal.add_item("mymod:myfish", "", "") + +..add fish and junk: + + ethereal.add_item("mymod:myfish", "mymod:myjunk", "") + + +You may also use a table that not only adds an item but the biome it can be found in: + +..add fish only found in 'grassy_ocean' biome: + + ethereal.add_item({"mymod:myfish", "grassy_ocean"}, "", "") + +..add special item only found in 'frost' biome waters: + + ethereal.add_item("", "", {"ethereal:crystal_spike", "frost"}) + +.. add special item with wear level: + + ethereal.add_item("", "", "default:sword_steel 15000") + + +Please note that only Ethereal biome names can be used for specific finds, unless mod +specifically adds ethereal as an optional dependency. + + +Crystal Shovel has silk touch ability for digging blocks and returning the actual block +intact. The {no_silktouch=1} group can be used to override this. diff --git a/mods/ethereal/biomes.lua b/mods/ethereal/biomes.lua new file mode 100644 index 0000000..210cfcb --- /dev/null +++ b/mods/ethereal/biomes.lua @@ -0,0 +1,515 @@ + +local S = ethereal.intllib + + +-- Blue Marble Nodes +minetest.register_node("ethereal:blue_marble", { + description = S("Blue Marble"), + tiles = {"ethereal_blue_marble.png"}, + groups = {cracky = 1, stone = 1}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("ethereal:blue_marble_tile", { + description = S("Blue Marble Tile"), + tiles = {"ethereal_blue_marble_tile.png"}, + groups = {cracky = 1, stone = 1}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_craft({ + output = "ethereal:blue_marble_tile 9", + recipe = { + {"ethereal:blue_marble", "ethereal:blue_marble", "ethereal:blue_marble"}, + {"ethereal:blue_marble", "ethereal:blue_marble", "ethereal:blue_marble"}, + {"ethereal:blue_marble", "ethereal:blue_marble", "ethereal:blue_marble"} + } +}) + + +-- helper strings +local tmp, tmp2 + +-- helper function +local add_biome = function(a, l, m, n, o, p, b, c, d, e, f, g, nd, na, ns) + + -- if not 1 then biome disabled, don't add + 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, + + node_dungeon = nd or "default:cobble", + node_dungeon_alt = (nd and "") or "default:mossycobble", + node_dungeon_stair = ns or "stairs:stair_cobble" + }) +end + + +-- always registered biomes +add_biome("mountain", 140, 31000, 50, 50, 1, + nil, "default:snow", 1, "default:snowblock", 2) + +add_biome("grassland", 3, 71, 45, 65, 1, + nil, "default:dirt_with_grass", 1, "default:dirt", 3) + +add_biome("grassland_ocean", -192, 1, 45, 65, 1, + nil, "default:sand", 1, "default:sand", 3) + +minetest.register_biome({ + name = "grassland_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 45, + humidity_point = 65 +}) + +--add_biome("underground", -31000, -192, 50, 50, 1, +-- nil, nil, nil, nil, nil) + + +-- biomes with disable setting +tmp = "default:desert_stone" + +add_biome("desert", 3, 23, 35, 20, ethereal.desert, + nil, "default:desert_sand", 1, "default:desert_sand", 3, tmp, + "default:desert_stone", nil, "stairs:stair_desert_stone") + +add_biome("desert_ocean", -192, 3, 35, 20, ethereal.desert, + nil, "default:sand", 1, "default:sand", 2, tmp, + "default:desert_stone", nil, "stairs:stair_desert_stone") + +if ethereal.desert then + minetest.register_biome({ + name = "desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 35, + humidity_point = 20 + }) +end + +add_biome("bamboo", 25, 70, 45, 75, ethereal.bamboo, + nil, "ethereal:bamboo_dirt", 1, "default:dirt", 3) + +add_biome("sakura", 3, 25, 45, 75, ethereal.sakura, + nil, "ethereal:bamboo_dirt", 1, "default:dirt", 3) + +add_biome("sakura_ocean", -192, 2, 45, 75, ethereal.sakura, + nil, "default:sand", 1, "default:sand", 2) + + +add_biome("mesa", 1, 71, 25, 28, ethereal.mesa, + nil, "default:dirt_with_dry_grass", 1, "bakedclay:orange", 15) + +add_biome("mesa_ocean", -192, 1, 25, 28, ethereal.mesa, + nil, "default:sand", 1, "default:sand", 2) + + +tmp = "default:dirt_with_coniferous_litter" + +if not minetest.registered_nodes[tmp] then + tmp = "ethereal:cold_dirt" +end + +-- was 'snowy' biome +add_biome("coniferous_forest", 4, 40, 10, 40, ethereal.snowy, + nil, tmp, 1, "default:dirt", 2) + +add_biome("coniferous_forest_ocean", -192, 1, 10, 40, ethereal.snowy, + nil, "default:sand", 1, "default:sand", 2) + +if ethereal.snowy then + minetest.register_biome({ + name = "coniferous_forest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 10, + humidity_point = 40 + }) +end + +add_biome("taiga", 40, 140, 10, 40, ethereal.alpine, + nil, "default:dirt_with_snow", 1, "default:dirt", 2) + +add_biome("taiga_ocean", -192, 1, 10, 40, ethereal.alpine, + nil, "default:sand", 1, "default:sand", 2) + +if ethereal.alpine then + minetest.register_biome({ + name = "taiga_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 10, + humidity_point = 40 + }) +end + +add_biome("frost_floatland", 1025, 1750, 10, 40, ethereal.frost, + nil, "ethereal:crystal_dirt", 1, "default:dirt", 1) + +add_biome("frost", 1, 71, 10, 40, ethereal.frost, + nil, "ethereal:crystal_dirt", 1, "default:dirt", 3) + +add_biome("frost_ocean", -192, 1, 10, 40, ethereal.frost, + nil, "default:sand", 1, "default:sand", 2) + + +add_biome("deciduous_forest", 3, 91, 13, 40, ethereal.grassy, + nil, "default:dirt_with_grass", 1, "default:dirt", 3) + +add_biome("deciduous_forest_ocean", -31000, 3, 13, 40, ethereal.grassy, + nil, "default:sand", 2, "default:gravel", 1) + +if ethereal.grassy then + minetest.register_biome({ + name = "deciduous_forest_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 13, + humidity_point = 40 + }) +end + +add_biome("caves", 4, 41, 15, 25, ethereal.caves, + nil, "default:desert_stone", 3, "air", 8) + + +tmp = "default:silver_sand" + +if not minetest.registered_nodes[tmp] then + tmp = "default:sand" +end + +add_biome("grayness", 2, 41, 15, 30, ethereal.grayness, + nil, "ethereal:gray_dirt", 1, "default:dirt", 3) + +add_biome("grayness_ocean", -18, 1, 15, 30, ethereal.grayness, + nil, tmp, 2, "default:sand", 2, "ethereal:blue_marble") + +if ethereal.grayness then + minetest.register_biome({ + name = "grayness_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 15, + humidity_point = 30 + }) +end + +add_biome("grassytwo", 1, 91, 15, 40, ethereal.grassytwo, + nil, "default:dirt_with_grass", 1, "default:dirt", 3) + +add_biome("grassytwo_ocean", -192, 1, 15, 40, ethereal.grassytwo, + nil, "default:sand", 1, "default:sand", 2) + + +add_biome("prairie", 3, 26, 20, 40, ethereal.prairie, + nil, "ethereal:prairie_dirt", 1, "default:dirt", 3) + +add_biome("prairie_ocean", -192, 1, 20, 40, ethereal.prairie, + nil, "default:sand", 1, "default:sand", 2) + + +add_biome("jumble", 1, 71, 25, 50, ethereal.jumble, + nil, "default:dirt_with_grass", 1, "default:dirt", 3) + +add_biome("jumble_ocean", -192, 1, 25, 50, ethereal.jumble, + nil, "default:sand", 1, "default:sand", 2) + +tmp = "default:dirt_with_rainforest_litter" + +if not minetest.registered_nodes[tmp] then + tmp = "ethereal:jungle_dirt" +end + +add_biome("junglee", 1, 71, 30, 60, ethereal.junglee, + nil, tmp, 1, "default:dirt", 3) + +add_biome("junglee_ocean", -192, 1, 30, 60, ethereal.junglee, + nil, "default:sand", 1, "default:sand", 2) + +if ethereal.junglee then + minetest.register_biome({ + name = "junglee_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 30, + humidity_point = 60 + }) +end + +add_biome("grove", 3, 23, 45, 35, ethereal.grove, + nil, "ethereal:grove_dirt", 1, "default:dirt", 3) + +add_biome("grove_ocean", -192, 2, 45, 35, ethereal.grove, + nil, "default:sand", 1, "default:sand", 2) + + +add_biome("mediterranean", 3, 50, 20, 45, ethereal.mediterranean, + nil, "ethereal:grove_dirt", 1, "default:dirt", 3) + + +add_biome("mushroom", 3, 50, 45, 55, ethereal.mushroom, + nil, "ethereal:mushroom_dirt", 1, "default:dirt", 3) + +add_biome("mushroom_ocean", -192, 2, 45, 55, ethereal.mushroom, + nil, "default:sand", 1, "default:sand", 2) + + +add_biome("sandstone_desert", 3, 23, 50, 20, ethereal.sandstone, + nil, "default:sandstone", 1, "default:sandstone", 1, "default:sandstone", + "default:sandstone", nil, "stairs:stair_sandstone") + +add_biome("sandstone_desert_ocean", -192, 2, 50, 20, ethereal.sandstone, + nil, "default:sand", 1, "default:sand", 2, "default:sandstone", + "default:sandstone", nil, "stairs:stair_sandstone") + +if ethereal.sandstone then + minetest.register_biome({ + name = "sandstone_desert_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 50, + humidity_point = 20 + }) +end + +add_biome("quicksand", 1, 1, 50, 38, ethereal.quicksand, + nil, "ethereal:quicksand2", 3, "default:gravel", 1) + + +add_biome("plains", 3, 25, 65, 25, ethereal.plains, + nil, "ethereal:dry_dirt", 1, "default:dirt", 3) + +add_biome("plains_ocean", -192, 2, 55, 25, ethereal.plains, + nil, "default:sand", 1, "default:sand", 2) + +tmp = "default:dry_dirt_with_dry_grass" +tmp2 = "default:dry_dirt" + +if not minetest.registered_nodes[tmp] then + tmp = "default:dirt_with_dry_grass" + tmp2 = "default:dirt" +end + +add_biome("savanna", 3, 50, 55, 25, ethereal.savanna, + nil, tmp, 1, tmp2, 3) + +add_biome("savanna_ocean", -192, 1, 55, 25, ethereal.savanna, + nil, "default:sand", 1, "default:sand", 2) + +if ethereal.savanna then + minetest.register_biome({ + name = "savanna_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 55, + humidity_point = 25 + }) +end + +add_biome("fiery", 5, 20, 75, 10, ethereal.fiery, + nil, "ethereal:fiery_dirt", 1, "default:dirt", 3) + +add_biome("fiery_beach", 1, 4, 75, 10, ethereal.fiery, + nil, "default:desert_sand", 1, "default:sand", 2) + +add_biome("fiery_ocean", -192, 0, 75, 10, ethereal.fiery, + nil, "default:sand", 1, "default:sand", 2) + +if ethereal.fiery then + minetest.register_biome({ + name = "fiery_under", + node_cave_liquid = {"default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 75, + humidity_point = 10 + }) +end + +add_biome("sandclay", 1, 11, 65, 2, ethereal.sandclay, + nil, "default:sand", 3, "default:clay", 2) + + +add_biome("swamp", 1, 7, 80, 90, ethereal.swamp, + nil, "default:dirt_with_grass", 1, "default:dirt", 3) + +add_biome("swamp_ocean", -192, 1, 80, 90, ethereal.swamp, + nil, "default:sand", 2, "default:clay", 2) + + +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_river_water = "default:ice", + node_riverbed = "default:gravel", + depth_riverbed = 2, + node_dungeon = "ethereal:icebrick", + node_dungeon_stair = "stairs:stair_ice", + 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, + y_min = -112, + y_max = -9, + heat_point = 0, + humidity_point = 50 + }) + + minetest.register_biome({ + name = "glacier_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 0, + humidity_point = 50 + }) +end + + +if ethereal.tundra == 1 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 + }) + + minetest.register_biome({ + name = "tundra_under", + node_cave_liquid = {"default:water_source", "default:lava_source"}, + node_dungeon = "default:cobble", + node_dungeon_alt = "default:mossycobble", + node_dungeon_stair = "stairs:stair_cobble", + y_max = -256, + y_min = -31000, + heat_point = 0, + humidity_point = 40 + }) +end diff --git a/mods/ethereal/biomes_init.lua b/mods/ethereal/biomes_init.lua new file mode 100644 index 0000000..ff8aee2 --- /dev/null +++ b/mods/ethereal/biomes_init.lua @@ -0,0 +1,117 @@ +local old_biomes = {} +local old_decor = {} + + +-- backup registered biome data +for key, def in pairs(minetest.registered_biomes) do + old_biomes[key] = def +end + +for key, def in pairs(minetest.registered_decorations) do + old_decor[key] = def +end + + +-- clear current biome data +minetest.clear_registered_biomes() +minetest.clear_registered_decorations() +-- minetest.clear_registered_ores() + + +-- create list of default biomes to remove +local def_biomes = { + ["rainforest_swamp"] = 1, + ["grassland_dunes"] = 1, + ["cold_desert"] = 1, + ["taiga"] = 1, + ["icesheet_ocean"] = 1, + ["snowy_grassland_under"] = 1, + ["desert"] = 1, + ["deciduous_forest"] = 1, + ["taiga_ocean"] = 1, + ["desert_ocean"] = 1, + ["tundra_ocean"] = 1, + ["snowy_grassland_ocean"] = 1, + ["sandstone_desert"] = 1, + ["tundra_under"] = 1, + ["coniferous_forest_ocean"] = 1, + ["tundra"] = 1, + ["sandstone_desert_under"] = 1, + ["grassland"] = 1, + ["rainforest"] = 1, + ["grassland_ocean"] = 1, + ["tundra_beach"] = 1, + ["rainforest_under"] = 1, + ["savanna_under"] = 1, + ["icesheet"] = 1, + ["savanna_ocean"] = 1, + ["tundra_highland"] = 1, + ["savanna"] = 1, + ["cold_desert_under"] = 1, + ["cold_desert_ocean"] = 1, + ["desert_under"] = 1, + ["taiga_under"] = 1, + ["savanna_shore"] = 1, + ["sandstone_desert_ocean"] = 1, + ["snowy_grassland"] = 1, + ["coniferous_forest_under"] = 1, + ["deciduous_forest_ocean"] = 1, + ["grassland_under"] = 1, + ["icesheet_under"] = 1, + ["rainforest_ocean"] = 1, + ["deciduous_forest_shore"] = 1, + ["deciduous_forest_under"] = 1, + ["coniferous_forest_dunes"] = 1, + ["coniferous_forest"] = 1 +} + + +-- only re-register biomes that aren't on the list +for key, def in pairs(old_biomes) do + + if not def_biomes[key] then + minetest.register_biome(def) + end +end + + +-- loop through decorations +for key, def in pairs(old_decor) do + + local can_add = true + local new_biomes = {} + + if type(def.biomes) == "table" then + + -- loop through decoration biomes, only re-add one's not on above list + for num, bio in pairs(def.biomes) do + + if not def_biomes[bio] then + table.insert(new_biomes, bio) + end + end + + -- if no biomes are left on new list, do not re-add decoration + if #new_biomes == 0 then + can_add = false + end + + elseif type(def.biomes) == "string" then + + if def_biomes[def.biomes] then + can_add = false + else + new_biomes = {def.biomes} -- convert to table + end + + elseif not def.biomes then + new_biomes = nil -- keep it nil for re-adding + end + + if can_add == true then + + def.biomes = new_biomes + + minetest.register_decoration(def) + end +end diff --git a/mods/ethereal/compatibility.lua b/mods/ethereal/compatibility.lua new file mode 100644 index 0000000..da49bec --- /dev/null +++ b/mods/ethereal/compatibility.lua @@ -0,0 +1,51 @@ + +-- 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") + +-- check if pine bush stem exists, if not create alias +if not minetest.registered_nodes["default:pine_bush_stem"] then + minetest.register_alias("default:pine_bush_stem", "default:wood") +end diff --git a/mods/ethereal/crystal.lua b/mods/ethereal/crystal.lua new file mode 100644 index 0000000..c6ad355 --- /dev/null +++ b/mods/ethereal/crystal.lua @@ -0,0 +1,319 @@ + +local S = ethereal.intllib + + +-- Crystal Spike (Hurts if you touch it) +minetest.register_node("ethereal:crystal_spike", { + description = S("Crystal Spike"), + drawtype = "plantlike", + tiles = {"ethereal_crystal_spike.png"}, + inventory_image = "ethereal_crystal_spike.png", + wield_image = "ethereal_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 = "ethereal_crystal_ingot.png", + wield_image = "ethereal_crystal_ingot.png" +}) + +-- Check for builtin_item mod and add custom drop code to crystal spikes +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 = minetest.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() + + minetest.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 = {"ethereal_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 = "ethereal_crystal_sword.png", + wield_image = "ethereal_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 = "ethereal_crystal_axe.png", + wield_image = "ethereal_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 = "ethereal_crystal_pick.png", + wield_image = "ethereal_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", ""} + } +}) + + +-- dig override for crystal shovel's silk touch ability +local old_handle_node_drops = minetest.handle_node_drops + +function minetest.handle_node_drops(pos, drops, digger) + + -- are we holding Crystal Shovel? + if not digger + or 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 + or minetest.get_item_group(nn, "no_silktouch") == 1 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 = S("Crystal Shovel"), + inventory_image = "ethereal_crystal_shovel.png", + wield_image = "ethereal_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 = "ethereal_crystal_gilly_staff.png", + wield_image = "ethereal_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({ + 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/ethereal/decor.lua b/mods/ethereal/decor.lua new file mode 100644 index 0000000..a81c20a --- /dev/null +++ b/mods/ethereal/decor.lua @@ -0,0 +1,806 @@ + +if minetest.registered_nodes["farming:cotton_wild"] then + + minetest.register_decoration({ + name = "farming:cotton_wild", + deco_type = "simple", + place_on = {"default:dry_dirt_with_dry_grass"}, + sidelen = 16, + noise_params = { + offset = -0.1, + scale = 0.1, + spread = {x = 50, y = 50, z = 50}, + seed = 4242, + octaves = 3, + persist = 0.7 + }, + biomes = {"savanna"}, + y_max = 31000, + y_min = 1, + decoration = "farming:cotton_wild" + }) +end + +-- 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 + + +-- helper string +local tmp + +-- helper function +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, {"deciduous_forest_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_desert"}, 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 +add_node({"default:dry_dirt_with_dry_grass", + "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) + +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, {"deciduous_forest"}, 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", "frost_floatland"}, 1, 1750, + {"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) + +-- 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, + {"coniferous_forest"}, 1, 100, {"ethereal:snowygrass"}, nil, nil, nil, ethereal.snowy) + +-- cactus +add_node({"default:sandstone"}, 0.002, {"sandstone_desert"}, 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_red"}, nil, nil, nil, ethereal.mushroom) + +-- spore grass +add_node({"ethereal:mushroom_dirt"}, 0.1, {"mushroom"}, 1, 100, + {"ethereal:spore_grass"}, nil, nil, nil, ethereal.mushroom) + + +local list = { + {"junglee", {"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, ethereal.junglee}, + {"deciduous_forest", {"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, {"deciduous_forest"}, 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:grove_dirt"}, 0.35, {"mediterranean"}, 1, 100, + {"default:grass_2", "default:grass_3", "default:grass_4", + "default:grass_5"}, nil, nil, nil, ethereal.mediterranean) + +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, {"grassland", "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) + +add_node({"ethereal:bamboo_dirt"}, 0.025, {"sakura"}, 1, 100, + {"ethereal:lilac"}, nil, nil, nil, ethereal.sakura) + +-- grass on sand +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) +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) + +add_node({"ethereal:crystal_dirt"}, 0.001, {"frost_floatlands"}, 1025, 1750, + {"ethereal:fern"}, nil, nil, nil, ethereal.frost) + +-- snow +add_node({"ethereal:cold_dirt", "default:dirt_with_coniferous_litter"}, + 0.8, {"coniferous_forest"}, 4, 40, {"default:snow"}, nil, nil, nil, ethereal.snowy) + +add_node({"default:dirt_with_snow"}, 0.8, {"taiga"}, 40, 140, + {"default:snow"}, nil, nil, nil, ethereal.alpine) + +-- wild onion +add_node({"default:dirt_with_grass", "ethereal:prairie_dirt"}, 0.025, + {"deciduous_forest", "grassytwo", "jumble", "prairie"}, 1, 100, + {"ethereal:onion_4"}, nil, nil, nil, 1) + +-- papyrus +add_node({"default:dirt_with_grass"}, 0.1, {"deciduous_forest"}, 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.002, {"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.002, {"grassytwo"}, 1, 100, + {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7", + "farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4", + "farming:cabbage_6", "farming:lettuce_5", "farming:sunflower_8", + "farming:asparagus"}, nil, nil, nil, + ethereal.grassytwo) + +add_node({"default:dirt_with_grass"}, 0.002, {"deciduous_forest"}, 1, 100, + {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7", + "farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4", + "farming:beetroot_5", "farming:sunflower_8", + "farming:eggplant_3"}, nil, nil, nil, ethereal.grassy) + +add_node({"default:dirt_with_grass"}, 0.002, {"jumble"}, 1, 100, + {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:vanilla_7", + "farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4", + "farming:cabbage_6", "farming:lettuce_5", + "farming:spinach_3"}, nil, nil, nil, ethereal.jumble) + +add_node({"ethereal:prairie_dirt"}, 0.025, {"prairie"}, 1, 100, + {"farming:carrot_7", "farming:cucumber_4", "farming:potato_3", "farming:parsley_3", + "farming:tomato_7", "farming:corn_8", "farming:coffee_5", "farming:blackberry_4", + "farming:raspberry_4", "farming:rhubarb_3", "farming:blueberry_4", + "farming:pea_5", "farming:beetroot_5", "farming:sunflower_8"}, nil, nil, nil, + ethereal.prairie) + +add_node({"ethereal:grove_dirt"}, 0.002, {"mediterranean"}, 1, 100, + {"farming:parsley_3"}, nil, nil, nil, ethereal.mediterranean) + +-- melon and pumpkin +add_node({"ethereal:jungle_dirt", "default:dirt_with_rainforest_litter"}, + 0.001, {"junglee"}, 1, 1, {"farming:melon_8", "farming:pumpkin_8"}, + nil, "default:water_source", 1, ethereal.junglee) + +add_node({"default:dirt_with_grass"}, 0.001, {"deciduous_forest"}, 1, 1, + {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", + 1, ethereal.grassy) + +add_node({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 1, + {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", + 1, ethereal.grassytwo) + +add_node({"default:dirt_with_grass"}, 0.001, {"jumble"}, 1, 1, + {"farming:melon_8", "farming:pumpkin_8"}, nil, "default:water_source", + 1, ethereal.jumble) + +-- mint +add_node({"default:dirt_with_grass", "default:dirt_with_coniferous_litter", + "ethereal:bamboo_dirt"}, 0.005, nil, 1, 75, "farming:mint_4", nil, + {"group:water", "group:sand"}, 1, 1) + +-- green beans +add_node({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 100, + {"farming:beanbush"}, nil, nil, nil, ethereal.grassytwo) + +-- grape bushel +add_node({"default:dirt_with_grass"}, 0.001, {"grassytwo"}, 1, 100, + {"farming:grapebush"}, nil, nil, nil, ethereal.grassytwo) + +add_node({"default:dirt_with_grass"}, 0.001, {"deciduous_forest"}, 1, 100, + {"farming:grapebush"}, nil, nil, nil, ethereal.grassy) + +add_node({"ethereal:prairie_dirt"}, 0.001, {"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.002, + 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:pepper_6", + "farming:onion_5", "farming:hemp_7", "farming:pepper_7", "farming:soy_5", + "farming:ginger" + }, + 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.002, + spread = {x = 100, y = 100, z = 100}, + seed = 917, + octaves = 3, + persist = 0.6 + }, + y_min = 18, + y_max = 30, + decoration = {"farming:pineapple_8", "farming:soy_5"} +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = {"ethereal:grove_dirt"}, + sidelen = 16, + noise_params = { + offset = 0, + scale = 0.002, + spread = {x = 100, y = 100, z = 100}, + seed = 448, + octaves = 3, + persist = 0.6 + }, + y_min = 15, + y_max = 40, + decoration = {"farming:artichoke_5"}, + spawn_by = "group:tree", + num_spawn_by = 1 +}) +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_dirt", "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_dirt", "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 == 1 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 == 1 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 == 1 and minetest.registered_nodes["default:permafrost"] then + + -- 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 = {"deciduous_forest", "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 + }) + + -- restart butterfly timers + minetest.register_lbm({ + name = ":butterflies:butterfly_timer", + nodenames = { + "butterflies:butterfly_white", "butterflies:butterfly_red", + "butterflies:butterfly_violet" + }, + run_at_every_load = true, + + action = function(pos) + minetest.get_node_timer(pos):start(5) + end + }) +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", "prairie" + }, + place_offset_y = 2, + sidelen = 80, + fill_ratio = 0.0005, + biomes = { + "deciduous_forest", "grassytwo", "coniferous_forest", "junglee", "swamp"}, + y_max = 31000, + y_min = -1, + decoration = "fireflies:hidden_firefly" + }) + + -- restart firefly timers + minetest.register_lbm({ + name = ":fireflies:firefly_timer", + nodenames = {"fireflies:firefly", "fireflies:hidden_firefly"}, + run_at_every_load = true, + + action = function(pos) + minetest.get_node_timer(pos):start(5) + end + }) +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", "deciduous_forest_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 + + +local random = math.random + +-- Generate Illumishroom in caves on top of 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(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) diff --git a/mods/ethereal/depends.txt b/mods/ethereal/depends.txt new file mode 100644 index 0000000..bec5d3d --- /dev/null +++ b/mods/ethereal/depends.txt @@ -0,0 +1,10 @@ +default +farming +stairs? +flowers +doors? +bakedclay? +moreblocks? +intllib? +lucky_block? +toolranks? diff --git a/mods/ethereal/description.txt b/mods/ethereal/description.txt new file mode 100644 index 0000000..50a0b6e --- /dev/null +++ b/mods/ethereal/description.txt @@ -0,0 +1 @@ +BIOME mod mapgen to add many new biomes to the world \ No newline at end of file diff --git a/mods/ethereal/dirt.lua b/mods/ethereal/dirt.lua new file mode 100644 index 0000000..4498697 --- /dev/null +++ b/mods/ethereal/dirt.lua @@ -0,0 +1,323 @@ + +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, +}) + + +-- register ethereal dirt types +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 + + pos.y = pos.y - 1 + + local under = minetest.get_node(pos) + + -- make sure we have soil underneath + if minetest.get_item_group(under.name, "soil") == 0 + or under.name == "default:desert_sand" then + return + end + + local seedling = minetest.find_nodes_in_area_under_air( + pos0, pos1, {under.name}) + + if #seedling > 0 then + + pos = seedling[math.random(#seedling)] + + 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 = 96 -- back to original chance from 300 + 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 + + elseif label == "Mushroom spread" then + + --ab.interval = 1 + ab.chance = 50 -- back to original chance from 150 + ab.nodenames = {"group:mushroom"} + 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, not_in_creative_inventory = 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^[colorize:#00004F10"}, + 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/ethereal/ethereal-biomes-defaults-22-Jul-2022-geogebra.ggb b/mods/ethereal/ethereal-biomes-defaults-22-Jul-2022-geogebra.ggb new file mode 100644 index 0000000000000000000000000000000000000000..d8b8ae09787cd7b7f4ba293e2def8f5a82e6e1d2 GIT binary patch literal 32862 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 Qal!vi5)hjA!~X040Kr_uhX4Qo literal 0 HcmV?d00001 diff --git a/mods/ethereal/extra.lua b/mods/ethereal/extra.lua new file mode 100644 index 0000000..2b4c4cd --- /dev/null +++ b/mods/ethereal/extra.lua @@ -0,0 +1,436 @@ + +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() +}) + +minetest.register_node("ethereal:stone_with_etherium_ore", { + description = S("Etherium Ore"), + tiles = {"default_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 = {"ethereal_bamboo_floor.png"}, + wield_image = "ethereal_bamboo_floor.png", + inventory_image = "ethereal_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() +}) + +minetest.register_craft({ + output = "ethereal:bamboo_floor 2", + recipe = { + {"ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo"} + } +}) + + +-- Bamboo Block +minetest.register_node("ethereal:bamboo_block", { + description = S("Bamboo Block"), + tiles = {"ethereal_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_floor"}, + {"ethereal:bamboo_floor"} + } +}) + +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"} + } +}) + + +-- Paper recipes +minetest.register_craft({ + output = "default:paper 6", + recipe = { + {"ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo"}, + {"ethereal:bamboo", "ethereal:bamboo"} + } +}) + +minetest.register_craft({ + output = "default:paper 2", + recipe = { + {"farming:cotton", "farming:cotton", "farming:cotton"} + } +}) + + +-- 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"} + } +}) + + +-- X pattern craft recipes (5x 'a' in X pattern gives 5 of 'b') +if ethereal.xcraft == true then + + 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}, + {"default:stone", "default:silver_sandstone", 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 + + +-- Palm Wax +minetest.register_craftitem("ethereal:palm_wax", { + description = S("Palm Wax"), + inventory_image = "ethereal_palm_wax.png", + wield_image = "ethereal_palm_wax.png" +}) + +minetest.register_craft({ + type = "cooking", + cooktime = 10, + output = "ethereal:palm_wax", + recipe = "ethereal:palmleaves" +}) + + +local function add_candle(col, dcol) + + local rcol = "" + + if col ~= "" then + rcol = col + col = "_" .. col + end + + minetest.register_node("ethereal:candle" .. col, { + description = S(dcol .. "Candle"), + drawtype = "plantlike", + inventory_image = "ethereal_candle" .. col .. "_static.png", + wield_image = "ethereal_candle" .. col .. "_static.png", + tiles = { + { + name = "ethereal_candle" .. col .. ".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 = {candle = 1, 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 } + } + }) + + if col ~= "" then + + minetest.register_craft({ + output = "ethereal:candle" .. col, + recipe = { + {"group:candle", "dye:" .. rcol}, + } + }) + end +end + +add_candle("", "") +add_candle("black", "Black ") -- candle colour textures by wRothbard +add_candle("blue", "Blue ") +add_candle("brown", "Brown ") +add_candle("cyan", "Cyan ") +add_candle("dark_green", "Dark Green ") +add_candle("dark_grey", "Dark Grey ") +add_candle("green", "Green ") +add_candle("grey", "Grey ") +add_candle("magenta", "Magenta ") +add_candle("orange", "Orange ") +add_candle("pink", "Pink ") +add_candle("red", "Red ") +add_candle("violet", "Violet ") +add_candle("yellow", "Yellow ") + + +-- white candle recipe +minetest.register_craft({ + output = "ethereal:candle", + recipe = { + {"group:candle", "dye:white"} + } +}) + +-- candle recipe +minetest.register_craft({ + output = "ethereal:candle 2", + recipe = { + {"farming:string"}, + {"ethereal:palm_wax"}, + {"ethereal:palm_wax"} + } +}) + + +-- Wooden Bowl +minetest.register_craftitem("ethereal:bowl", { + description = S("Bowl"), + inventory_image = "ethereal_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 = {"ethereal_stone_ladder.png"}, + inventory_image = "ethereal_stone_ladder.png", + wield_image = "ethereal_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 = {"ethereal_paper_wall.png"}, + inventory_image = "ethereal_paper_wall.png", + wield_image = "ethereal_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 = {"ethereal_glostone.png"}, + groups = {cracky = 3}, + light_source = 13, + drop = "ethereal:glostone", + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_craft({ + output = "ethereal:glostone", + recipe = { + {"", "default:torch", ""}, + {"default:torch", "default:stone", "default:torch"}, + {"", "dye:yellow", ""} + } +}) + + +-- Charcoal Lump +minetest.register_craftitem("ethereal:charcoal_lump", { + description = S("Lump of Charcoal"), + inventory_image = "ethereal_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 alternative node list +ethereal.lightstaff_recipes = { + ["nether:rack"] = "nether:glowstone", + ["nether:rack_deep"] = "nether:glowstone_deep" +} + +-- Staff of Light (by Xanthin) +minetest.register_tool("ethereal:light_staff", { + description = S("Staff of Light"), + inventory_image = "ethereal_light_staff.png", + light_source = 13, + wield_image = "ethereal_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 + local def = minetest.registered_nodes[node] + local stone = def and def.groups and def.groups.stone and def.groups.stone == 1 + + if ethereal.lightstaff_recipes[node] or stone then + + local glo = ethereal.lightstaff_recipes[node] or "ethereal:glostone" + + minetest.set_node(pos, {name = glo}) + + itemstack:add_wear(65535 / 149) -- 150 uses + + 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/ethereal/fences.lua b/mods/ethereal/fences.lua new file mode 100644 index 0000000..6655ca2 --- /dev/null +++ b/mods/ethereal/fences.lua @@ -0,0 +1,103 @@ + +local S = ethereal.intllib + +local door_mod = minetest.get_modpath("doors") + + +local add_fence = function(name, node, desc, texture) + + if default.register_fence then + + default.register_fence("ethereal:fence_" .. name, { + description = S(desc .. " Fence"), + texture = texture .. ".png", + material = "ethereal:" .. node, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + check_for_pole = true + }) + end + + if default.register_fence_rail then + + default.register_fence_rail("ethereal:fence_rail_" .. name, { + description = S(desc .. " Fence Rail"), + texture = texture .. ".png", + material = "ethereal:" .. node, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2}, + sounds = default.node_sound_wood_defaults() + }) + end + + if door_mod and doors.register_fencegate then + + doors.register_fencegate("ethereal:fencegate_" .. name, { + description = S(desc .. " Fence Gate"), + texture = texture .. ".png", + material = "ethereal:" .. node, + groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2} + }) + end + + if default.register_mesepost then + + default.register_mesepost("ethereal:mese_post_" .. name, { + description = S(desc .. " Mese Post Light"), + texture = texture .. ".png", + material = "ethereal:" .. node, + }) + end +end + + +add_fence("scorched", "scorched_tree", "Scorched", "ethereal_scorched_tree") +add_fence("frostwood", "frost_wood", "Frost", "ethereal_frost_wood") +add_fence("redwood", "redwood_wood", "Redwood", "ethereal_redwood_wood") +add_fence("willow", "willow_wood", "Willow", "ethereal_willow_wood") +add_fence("yellowwood", "yellow_wood", "Healing Wood", "ethereal_yellow_wood") +add_fence("palm", "palm_wood", "Palm", "moretrees_palm_wood") +add_fence("banana", "banana_wood", "Banana Wood", "ethereal_banana_wood") +add_fence("mushroom", "mushroom_trunk", "Mushroom", "ethereal_mushroom_trunk") +add_fence("birch", "birch_wood", "Birch", "moretrees_birch_wood") +add_fence("sakura", "sakura_wood", "Sakura", "ethereal_sakura_wood") +add_fence("olive", "olive_wood", "Olive", "ethereal_olive_wood") +add_fence("basandra", "basandra_wood", "Basandra", "ethereal_basandra_bush_wood") + + +-- 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 +if door_mod then + + doors.register("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") +end diff --git a/mods/ethereal/fishing.lua b/mods/ethereal/fishing.lua new file mode 100644 index 0000000..46a7dfb --- /dev/null +++ b/mods/ethereal/fishing.lua @@ -0,0 +1,611 @@ +--[[ + + This fishing routine is inspired by the great work Rootyjr did for MineClone2 + +]]-- + +local S = ethereal.intllib + +local fish_items = { + "ethereal:fish_bluefin", + "ethereal:fish_blueram", + "ethereal:fish_catfish", + "ethereal:fish_plaice", + "ethereal:fish_salmon", + {"ethereal:fish_clownfish", "savanna"}, + {"ethereal:fish_pike", "grassy"}, + {"ethereal:fish_flathead", "jungle"}, + {"ethereal:fish_pufferfish", "desert_ocean"}, + {"ethereal:fish_cichlid", "junglee_ocean"}, + {"ethereal:fish_coy", "sakura"}, + {"ethereal:fish_tilapia", "sakura"}, + {"ethereal:fish_trevally", "sakura"}, + {"ethereal:fish_angler", "ocean"}, + {"ethereal:fish_jellyfish", "ocean"}, + {"ethereal:fish_seahorse", "ocean"}, + {"ethereal:fish_seahorse_green", "junglee_ocean"}, + {"ethereal:fish_seahorse_pink", "mushroom_ocean"}, + {"ethereal:fish_seahorse_blue", "frost_ocean"}, + {"ethereal:fish_seahorse_yellow", "desert_ocean"}, + {"ethereal:fish_parrot", "desert"}, + {"ethereal:fish_piranha", "jungle"}, + {"ethereal:fish_tuna", "jungle"}, + {"ethereal:fish_trout", "ocean"}, + {"ethereal:fish_cod", "ocean"}, + {"ethereal:fish_flounder", "ocean"}, + {"ethereal:fish_redsnapper", "ocean"}, + {"ethereal:fish_squid", "ocean"}, + {"ethereal:fish_shrimp", "ocean"}, + {"ethereal:fish_carp", "swamp"} +} +-- grassland_ocean, desert_ocean, sakura_ocean, mesa_ocean, coniferous_forest_ocean, +-- taiga_ocean, frost_ocean, deciduous_forest_ocean, grayness_ocean, grassytwo_ocean, +-- prairie_ocean, jumble_ocean, junglee_ocean, grove_ocean, mushroom_ocean, +-- sandstone_desert_ocean, plains_ocean, savanna_ocean, fiery_ocean, swamp_ocean, +-- glacier_ocean, tundra_ocean + +local mod_bonemeal = minetest.get_modpath("bonemeal") +local mod_armor = minetest.get_modpath("3d_armor") +local mod_mobs = minetest.get_modpath("mobs") + +local junk_items = { + "ethereal:bowl", + "default:stick", + "farming:string", + "default:papyrus", + "dye:black", + "flowers:waterlily", + "default:paper", + "flowers:mushroom_red", + "vessels:glass_bottle", + {"ethereal:bamboo", "bamboo"}, + mod_bonemeal and "bonemeal:bone" or "default:stick", + mod_armor and "3d_armor:boots_wood 6000" or "default:stick" +} + +local bonus_items = { + mod_mobs and "mobs:nametag" or "fireflies:bug_net", + mod_mobs and "mobs:net" or "default:sapling", + "fireflies:firefly_bottle", + mod_mobs and "mobs:saddle" or "farming:cotton_wild", + "default:book", + {"ethereal:firethorn", "glacier"}, + {"ethereal:crystal_spike", "frost"}, + {"ethereal:banana_bunch", "grove"}, + "tnt:tnt_stick", + "bucket:bucket_empty", + "default:sword_steel 12000", + "ethereal:fishing_rod 9000" +} + +local default_item = "default:dirt" +local random = math.random -- yup we use this a lot + + +-- add item function +ethereal.add_item = function(fish, junk, bonus) + + if fish and fish ~= "" then + table.insert(fish_items, fish) + end + + if junk and junk ~= "" then + table.insert(junk_items, junk) + end + + if bonus and bonus ~= "" then + table.insert(bonus_items, bonus) + end +end + + +local effect = function(pos) + + minetest.add_particle({ + pos = { + x = pos.x + random() - 0.5, + y = pos.y + 0.1, + z = pos.z + random() - 0.5 + }, + velocity = {x = 0, y = 4, z = 0}, + acceleration = {x = 0, y = -5, z = 0}, + expirationtime = random() * 0.5, + size = random(), + collisiondetection = false, + vertical = false, + texture = "bubble.png" + }) +end + + +-- fishing bob entity +minetest.register_entity("ethereal:bob_entity", { + + textures = {"ethereal_fishing_bob.png"}, + visual_size = {x = 0.5, y = 0.5}, + collisionbox = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1}, + physical = false, + pointable = false, + static_save = false, + timer = 0, + + on_step = function(self, dtime) + + local pos = self.object:get_pos() + local node = minetest.get_node(pos) + local def = minetest.registered_nodes[node.name] + +-- casting rod into water +if not self.cast then + + -- remove if we hit something hard + if (def and def.walkable) or node.name == "ignore" then + + self.object:remove() ; --print("-- hit block") + + return + end + + -- while bob is in water + if def and def.liquidtype == "source" + and minetest.get_item_group(node.name, "water") > 0 then + + -- incase of lag find water level + local free_fall, blocker = minetest.line_of_sight( + {x = pos.x, y = pos.y + 2, z = pos.z}, + {x = pos.x, y = pos.y , z = pos.z}) + + -- do we have worms for bait, if so take one + local player = self.fisher and minetest.get_player_by_name(self.fisher) + local inv = player and player:get_inventory() + local bait = 0 + + if inv and inv:contains_item("main", "caverealms:glow_bait") then + inv:remove_item("main", "caverealms:glow_bait") + bait = 40 + elseif inv and inv:contains_item("main", "ethereal:worm") then + inv:remove_item("main", "ethereal:worm") + bait = 20 + end + + -- re-position fishing bob and set to cast + pos = {x = pos.x, y = blocker.y + 0.45, z = pos.z} + + self.object:set_acceleration({x = 0, y = 0, z = 0}) + self.object:set_velocity({x = 0, y = 0, z = 0}) + self.object:set_pos(pos) + self.bait = bait + self.cast = true + + -- splash + effect(pos) ; effect(pos) ; effect(pos) ; effect(pos) + + minetest.sound_play("default_water_footstep", { + pos = pos, gain = 0.1}, true) + end + +else -- already cast and waiting for fish + + -- we need a name + if self.fisher == nil or self.fisher == "" then + + self.object:remove() ; --print("-- no name") + + return + end + + local player = minetest.get_player_by_name(self.fisher) + + -- we need an actual person + if not player then + + self.object:remove() ; --print("-- no player") + + return + end + + local wield = player:get_wielded_item() + + -- we also need a rod to fish with + if not wield or wield:get_name() ~= "ethereal:fishing_rod" then + + self.object:remove() ; --print("-- no rod") + + return + end + + -- remove bob if player is too far away + local pla_pos = player:get_pos() + + if (pla_pos.y - pos.y) > 15 + or (pla_pos.y - pos.y) < -15 + or (pla_pos.x - pos.x) > 15 + or (pla_pos.x - pos.x) < -15 + or (pla_pos.z - pos.z) > 15 + or (pla_pos.z - pos.z) < -15 then + + self.object:remove() ; --print("-- out of range") + + return + end + + -- when in water, bob. + if def and def.liquidtype == "source" + and minetest.get_item_group(def.name, "water") ~= 0 then + + self.old_y = self.old_y or pos.y + + -- choose random time to wait (minus bait time for worm) + if not self.patience or self.patience <= 0 then + + self.patience = random(10, (45 - self.bait)) + self.bait = 0 + end + + -- add particles if bobber bobbing + if self.bob then + + effect(pos) + + -- handle timer + if self.timer < self.patience then + self.timer = self.timer + dtime + else + self.patience = 0 + self.timer = 0 + self.bob = false + end + else + -- handle timer + if self.timer < self.patience then + self.timer = self.timer + dtime + else + -- waiting over, bob that bobber and play splash sound + self.bob = true + self.patience = 1.5 -- timeframe to catch fish after bob + self.timer = 0 + + self.object:set_velocity({x = 0, y = -1, z = 0}) + self.object:set_acceleration({x = 0, y = 3, z = 0}) + + minetest.sound_play("default_water_footstep", { + pos = pos, gain = 0.1}, true) + end + end + else + -- reset to original position after dive. + if self.old_y and pos.y > self.old_y then + + self.object:set_velocity({x = 0, y = 0, z = 0}) + self.object:set_acceleration({x = 0, y = 0, z = 0}) + self.object:set_pos({x = pos.x, y = self.old_y, z = pos.z}) + --print("-- reset bob y pos") + end + + -- remove if not in water and not bobbing + if not self.bob then + self.object:remove() ; --print("-- not in water") + end + end + +end -- if not self.cast + + end -- on_step +}) + + +-- narrow item list depending on biome if applicable +local find_item = function(list, pos) + + local item + local items = {} + local data= minetest.get_biome_data(pos) + local biome = data and minetest.get_biome_name(data.biome) or "" + + for n = 1, #list do + + item = list[n] + + if type(item) == "string" then + + table.insert(items, item) + + elseif type(item) == "table" then + + if item[2] == "" or biome:find(item[2]) then + table.insert(items, item[1]) + end + end + end + +--print("==biome: " .. biome, dump(items)) + + if #items > 0 then + return items[random(#items)] + end + + return "" +end + + +-- fishing rod function that throws pre bob, places bob and catches fish when it moves +local use_rod = function(itemstack, player, pointed_thing) + + local pos = player:get_pos() + local objs = minetest.get_objects_inside_radius(pos, 15) + local found = true + local ent + + -- loop through entities and look for bobs + for n = 1, #objs do + + ent = objs[n]:get_luaentity() + + if ent + and ent.fisher + and ent.name == "ethereal:bob_entity" + and player:get_player_name() == ent.fisher then + + found = false + + if ent.bob == true then + + local item + local r = random(100) + + if r < 86 then + + item = find_item(fish_items, pos) + + elseif r > 85 and r < 96 then + + item = find_item(junk_items, pos) + + else + + item = find_item(bonus_items, pos) + end + + -- split into name and number (wear level or number of items) + local item_name = item:split(" ")[1] + local item_wear = item:split(" ")[2] + + -- make sure item exists, if not replace with default item + if not minetest.registered_items[item_name] then + item = default_item + end + +--print ("---caught", item, r) + + item = ItemStack(item) -- convert into itemstack + + -- if tool then add wear + if item_wear and minetest.registered_tools[item_name] then + item:set_wear(65535 - item_wear) + end + + local inv = player:get_inventory() + + if inv:room_for_item("main", item) then + inv:add_item("main", item) + else + minetest.add_item(pos, item) + end + end + + ent.object:remove() + + return itemstack + end + end + + -- loop through entities and look for bobs + for n = 1, #objs do + + ent = objs[n]:get_luaentity() + + if ent + and ent.fisher + and ent.name == "ethereal:bob_entity" + and player:get_player_name() == ent.fisher then + + found = false + + break + end + end + + if found == true then + + local playerpos = player:get_pos() + local dir = player:get_look_dir() + local pos = {x = playerpos.x, y = playerpos.y + 1.5, z = playerpos.z} + + minetest.sound_play("ethereal_casting_rod", + {pos = pos, gain = 1.0, max_hear_distance = 10}, true) + + -- place actual bob + local obj = minetest.add_entity(pos, "ethereal:bob_entity") + + obj:set_velocity({x = dir.x * 8, y = dir.y * 8, z = dir.z * 8}) + obj:set_acceleration({x = dir.x * -3, y = -9.8, z = dir.z * -3}) + obj:get_luaentity().fisher = player and player:get_player_name() + end + + -- Add wear to fishing rod (65 uses) + local item = player:get_wielded_item() + + item:add_wear(65535 / 65) + player:set_wielded_item(item) +end + + +-- scan area for bobs that belong to player and remove +local remove_bob = function(player) + + local objs = minetest.get_objects_inside_radius(player:get_pos(), 15) + local name = player:get_player_name() + local ent + + for n = 1, #objs do + + ent = objs[n]:get_luaentity() + + if ent and ent.name == "ethereal:bob_entity" then + + -- only remove players own bob + if ent.fisher and ent.fisher == name then + ent.object:remove() + end + end + end +end + + +-- remove bob if player signs off +minetest.register_on_leaveplayer(function(player) + remove_bob(player) +end) + + +-- remove bob if player dies +minetest.register_on_dieplayer(function(player) + remove_bob(player) +end) + + +-- fishing rod +minetest.register_tool("ethereal:fishing_rod", { + description = S("Fishing Rod (USE to cast and again when the time is right)"), + groups = {tool = 1}, + inventory_image = "ethereal_fishing_rod.png", + wield_image = "ethereal_fishing_rod.png^[transformFX", + wield_scale = {x = 1.5, y = 1.5, z = 1}, + stack_max = 1, + on_use = use_rod, + sound = {breaks = "default_tool_breaks"} +}) + +minetest.register_craft({ + output = "ethereal:fishing_rod", + recipe = { + {"","","group:stick"}, + {"","group:stick","farming:string"}, + {"group:stick","","farming:string"} + } +}) + +minetest.register_craft({ + type = "fuel", + recipe = "ethereal:fishing_rod", + burntime = 15 +}) + + +local fish = { + {"Blue Fin", "bluefin", 2}, + {"Blue Ram Chichlid", "blueram", 2}, + {"Common Carp", "carp", 2}, + {"Cod", "cod", 2}, + {"Redtail Catfish", "catfish", 2}, + {"Clownfish", "clownfish", 2}, + {"Northern Pike", "pike", 2}, + {"Dusky Flathead", "flathead", 2}, + {"Plaice", "plaice", 2}, + {"Tiger Pufferfish", "pufferfish", -2}, + {"Coy", "coy", 2}, + {"European Flounder", "flounder", 2}, + {"Atlantic Salmon", "salmon", 2}, + {"Iceblue Zebra Cichlid", "cichlid", 2}, + {"Angler", "angler", 2}, + {"Moon Jellyfish", "jellyfish", 0}, + {"Pacific Mackerel", "mackerel", 2}, + {"Piranha", "piranha", 2}, + {"Rainbow Trout", "trout", 2}, + {"Red Snapper", "redsnapper", 2}, + {"Red Seahorse", "seahorse", 0}, + {"Green Seahorse", "seahorse_green", 0}, + {"Pink Seahorse", "seahorse_pink", 0}, + {"Blue Seahorse", "seahorse_blue", 0}, + {"Yellow Seahorse", "seahorse_yellow", 0}, + {"Yellowfin Tuna", "tuna", 2}, + {"Humboldt Squid", "squid", 0}, + {"White Shrimp", "shrimp", 0}, + {"Neon Tetra", "tetra", 1}, + {"Tilapia", "tilapia", 2}, + {"Golden Trevally", "trevally", 2}, + {"Stoplight Parrotfish", "parrot", 2} +} + +for n = 1, #fish do + + local usage + local groups + + if fish[n][3] > 0 then + usage = minetest.item_eat(fish[n][3]) + groups = {food_fish_raw = 1, ethereal_fish = 1} + end + + minetest.register_craftitem("ethereal:fish_" .. fish[n][2], { + description = S(fish[n][1]), + inventory_image = "ethereal_fish_" .. fish[n][2] .. ".png", + on_use = usage, + groups = groups + }) +end + + +-- Make Neon Tetra glow slightly +minetest.override_item("ethereal:fish_tetra", {light_source = 3}) + + +-- cooked fish +minetest.register_craftitem(":ethereal:fish_cooked", { + description = S("Cooked Fish"), + inventory_image = "ethereal_fish_cooked.png", + wield_image = "ethereal_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 = "group:ethereal_fish", + cooktime = 8 +}) + +-- Sashimi +minetest.register_craftitem("ethereal:sashimi", { + description = S("Sashimi"), + inventory_image = "ethereal_sashimi.png", + wield_image = "ethereal_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 = "ethereal_worm.png", + wield_image = "ethereal_worm.png" +}) + +minetest.register_craft({ + output = "ethereal:worm", + recipe = { + {"default:dirt", "default:dirt"} + } +}) + +-- compatibility +minetest.register_alias("ethereal:fish_raw", "ethereal:fish_cichlid") +minetest.register_alias("ethereal:fishing_rod_baited", "ethereal:fishing_rod") +minetest.register_alias("ethereal:fish_chichlid", "ethereal:fish_cichlid") diff --git a/mods/ethereal/flight.lua b/mods/ethereal/flight.lua new file mode 100644 index 0000000..3df07d8 --- /dev/null +++ b/mods/ethereal/flight.lua @@ -0,0 +1,218 @@ +local flight_secs = minetest.settings:get("ethereal.flightpotion_duration") or (5 * 60) +local timer_check = 5 -- seconds per check +local S = ethereal.intllib +local is_50 = minetest.has_feature("object_use_texture_alpha") + + +local function get_timer(user) + + if not user then return end + + if is_50 then + + local meta = user:get_meta() + + if not meta then return "" end + + return meta:get_string("ethereal:fly_timer") or "" + else + return user:get_attribute("ethereal:fly_timer") or "" + end +end + + +local function has_fly(name) + return minetest.get_player_privs(name).fly +end + + +local function set_timer(user, timer) + + if is_50 then + + local meta = user:get_meta() ; if not meta then return end + + meta:set_string("ethereal:fly_timer", timer) + else + user:set_attribute("ethereal:fly_timer", timer) + end + +end + + +local function set_flight(user, set) + + local name = user and user:get_player_name() ; if not name then return end + local privs = minetest.get_player_privs(name) + + privs.fly = set + + minetest.set_player_privs(name, privs) + + -- when flight removed set timer to temp position + if set ~= true then + set_timer(user, "-99") + end +end + + +-- after function +local function ethereal_set_flight(user) + + local name = user and user:get_player_name() ; if not name then return end + + local timer = tonumber(get_timer(user)) or 0 + + -- if timer ran out then remove 'fly' privelage + if timer <= 0 and timer ~= -99 then + + set_flight(user, nil) + + return + end + + local privs = minetest.get_player_privs(name) + + -- have we already applied 'fly' privelage? + if not privs.fly then + set_flight(user, true) + end + + -- handle timer + timer = timer - timer_check + + -- show expiration message and play sound + if timer <= 10 then + + minetest.chat_send_player(name, + minetest.get_color_escape_sequence("#ff5500") + .. S("Flight timer about to expire!")) + + minetest.sound_play("default_dig_dig_immediate", + {to_player = name, gain = 1.0}, true) + end + + -- set updated timer + set_timer(user, timer) + + -- restart checks + minetest.after(timer_check, function() + ethereal_set_flight(user) + end) +end + + +-- on join / leave +minetest.register_on_joinplayer(function(player) + + -- wait 2 seconds before doing flight checks on player + minetest.after(2.0, function(player) + + -- get player name and timer + local name = player and player:get_player_name() ; if not name then return end + local timer = get_timer(player) + + -- if timer is blank and player can already fly then default and return + if timer == "" and has_fly(name) then + + set_timer(player, "-99") + + return + end + + timer = tonumber(timer) or 0 + + -- if timer is set to default then return + if timer == -99 then + return + end + + -- if we got this far and player is flying then start countdown check + if has_fly(name) then + + minetest.after(timer_check, function() + ethereal_set_flight(player) + end) + end + + end, player) +end) + + +-- potion item +minetest.register_node("ethereal:flight_potion", { + description = S("Flight Potion"), + drawtype = "plantlike", + tiles = {"ethereal_flight_potion.png"}, + inventory_image = "ethereal_flight_potion.png", + wield_image = "ethereal_flight_potion.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 = {dig_immediate = 3}, + sounds = default.node_sound_glass_defaults(), + + on_use = function(itemstack, user, pointed_thing) + + if not user then return end + -- get privs + local name = user:get_player_name() + local privs = minetest.get_player_privs(name) + local timer = get_timer(user) + + if privs.fly then + + local msg = timer + + if timer == "" or timer == "-99" then + msg = S("unlimited") + end + + minetest.chat_send_player(name, + minetest.get_color_escape_sequence("#ffff00") + .. S("Flight already granted, @1 seconds left!", msg)) + + return + end + + -- set flight timer + set_timer(user, flight_secs) + + -- show time remaining + minetest.chat_send_player(name, + minetest.get_color_escape_sequence("#1eff00") + .. S("Flight granted, you have @1 seconds!", flight_secs)) + + -- start check + ethereal_set_flight(user) + + -- take item + itemstack:take_item() + + -- return empty bottle + local inv = user:get_inventory() + + if inv:room_for_item("main", {name = "vessels:glass_bottle"}) then + user:get_inventory():add_item("main", "vessels:glass_bottle") + else + minetest.add_item(user:get_pos(), {name = "vessels:glass_bottle"}) + end + + return itemstack + end +}) + + +-- recipe +minetest.register_craft({ + output = "ethereal:flight_potion", + recipe = { + {"ethereal:etherium_dust", "ethereal:etherium_dust", "ethereal:etherium_dust"}, + {"ethereal:etherium_dust", "ethereal:fire_dust", "ethereal:etherium_dust"}, + {"ethereal:etherium_dust", "vessels:glass_bottle", "ethereal:etherium_dust"} + } +}) diff --git a/mods/ethereal/food.lua b/mods/ethereal/food.lua new file mode 100644 index 0000000..72344bf --- /dev/null +++ b/mods/ethereal/food.lua @@ -0,0 +1,685 @@ + +local S = ethereal.intllib + + +-- Banana (Heals one heart when eaten) +minetest.register_node("ethereal:banana", { + description = S("Banana"), + drawtype = "torchlike", + tiles = {"ethereal_banana_single.png"}, + inventory_image = "ethereal_banana_single.png", + wield_image = "ethereal_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 Bunch +minetest.register_node("ethereal:banana_bunch", { + description = S("Banana Bunch"), + drawtype = "torchlike", + tiles = {"ethereal_banana_bunch.png"}, + inventory_image = "ethereal_banana_bunch.png", + wield_image = "ethereal_banana_bunch.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 = { + fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 1, leafdecay_drop = 1 + }, + drop = "ethereal:banana_bunch", + on_use = minetest.item_eat(6), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer) + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:banana_bunch", param2 = 1}) + end + end +}) + +-- Bunch to Single +minetest.register_craft({ + output = "ethereal:banana 3", + recipe = {{"ethereal:banana_bunch"}} +}) + +minetest.register_craft({ + output = "ethereal:banana_bunch", + recipe = {{"ethereal:banana", "ethereal:banana", "ethereal:banana"}} +}) + +-- Banana Dough +minetest.register_craftitem("ethereal:banana_dough", { + description = S("Banana Dough"), + inventory_image = "ethereal_banana_dough.png" +}) + +minetest.register_craft({ + 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 = "ethereal_pine_nuts.png", + wield_image = "ethereal_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 = "ethereal_banana_bread.png", + wield_image = "ethereal_banana_bread.png", + groups = {food_bread = 1, flammable = 3}, + on_use = minetest.item_eat(6) +}) + + +-- coconut settings if farming redo found +local fredo = minetest.get_modpath("farming") and farming and farming.mod + and farming.mod == "redo" + +local cdrp = fredo and "ethereal:coconut" or "ethereal:coconut_slice 4" +local cgrp = fredo and {3, 2} or {1, 1} + +-- Coconut (drops 4x coconut slice by default, whole coconut if farming redo found) +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 = cgrp[1], oddly_breakable_by_hand = cgrp[2], + cracky = cgrp[1], choppy = cgrp[1], flammable = 1, + leafdecay = 3, leafdecay_drop = 1 + }, + drop = cdrp, + sounds = default.node_sound_wood_defaults(), + + after_place_node = function(pos, placer) + + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:coconut", param2 = 1}) + end + end +}) + +-- 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) +}) + +-- coconut slice recipe (farming redo) +if fredo then + + minetest.register_craft({ + output = "ethereal:coconut_slice 4", + recipe = {{"farming:cutting_board", "ethereal:coconut"}}, + replacements = {{"farming:cutting_board", "farming:cutting_board"}} + }) +end + +-- coconut slice into whole coconut +minetest.register_craft({ + output = "ethereal:coconut", + recipe = { + {"ethereal:coconut_slice", "ethereal:coconut_slice"}, + {"ethereal:coconut_slice", "ethereal:coconut_slice"} + } +}) + + +-- 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", + sounds = default.node_sound_leaves_defaults(), + + on_use = function(itemstack, user, pointed_thing) + + if user and pointed_thing and pointed_thing.type ~= "object" then + + user:set_hp(20) + + return minetest.do_item_eat(2, nil, itemstack, user, pointed_thing) + end + end, + + 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) +minetest.register_craftitem("ethereal:hearty_stew", { + description = S("Hearty Stew"), + inventory_image = "ethereal_hearty_stew.png", + wield_image = "ethereal_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 fredo 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, + groups = {vessel = 1, drink = 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({ + 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 + + +-- Lemon +minetest.register_node("ethereal:lemon", { + description = S("Lemon"), + drawtype = "plantlike", + tiles = {"ethereal_lemon.png"}, + inventory_image = "ethereal_lemon_fruit.png", + wield_image = "ethereal_lemon_fruit.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_lemon = 1, fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1 + }, + drop = "ethereal:lemon", + on_use = minetest.item_eat(3), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer) + + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:lemon", param2 = 1}) + end + end +}) + +-- Candied Lemon +minetest.register_craftitem("ethereal:candied_lemon", { + description = S("Candied Lemon"), + inventory_image = "ethereal_candied_lemon.png", + wield_image = "ethereal_candied_lemon.png", + groups = {food_candied_lemon = 1}, + on_use = minetest.item_eat(5) +}) + +minetest.register_craft({ + output = "ethereal:candied_lemon", + recipe = { + {"farming:baking_tray", "ethereal:lemon", "group:food_sugar"} + }, + replacements = { + {"farming:baking_tray", "farming:baking_tray"} + } +}) + +-- Lemonade +minetest.register_node("ethereal:lemonade", { + description = S("Lemonade"), + drawtype = "plantlike", + tiles = {"ethereal_lemonade.png"}, + inventory_image = "ethereal_lemonade.png", + wield_image = "ethereal_lemonade.png", + paramtype = "light", + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.25, -0.5, -0.25, 0.25, 0.25, 0.25} + }, + groups = {vessel = 1, dig_immediate = 3, attached_node = 1, drink = 1}, + on_use = minetest.item_eat(5, "vessels:drinking_glass"), + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_craft({ + output = "ethereal:lemonade", + recipe = { + {"ethereal:lemon", "group:food_sugar", "group:food_sugar"}, + {"vessels:drinking_glass", "group:water_bucket", ""} + }, + replacements = { + {"group:water_bucket", "bucket:bucket_empty"}, + } +}) + + +-- Olive +minetest.register_node("ethereal:olive", { + description = S("Olive"), + drawtype = "plantlike", + tiles = {"ethereal_olive.png"}, + inventory_image = "ethereal_olive_fruit.png", + wield_image = "ethereal_olive_fruit.png", + visual_scale = 0.2, + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-0.1, -0.5, -0.1, 0.1, -0.3, 0.1} + }, + groups = { + fleshy = 3, dig_immediate = 3, flammable = 2, + leafdecay = 3, leafdecay_drop = 1 + }, + drop = "ethereal:olive", + on_use = minetest.item_eat(1), + sounds = default.node_sound_leaves_defaults(), + + after_place_node = function(pos, placer) + + if placer:is_player() then + minetest.set_node(pos, {name = "ethereal:olive", param2 = 1}) + end + end +}) + +-- Olive Oil +minetest.register_craftitem("ethereal:olive_oil", { + description = S("Olive Oil"), + inventory_image = "ethereal_olive_oil.png", + wield_image = "ethereal_olive_oil.png", + groups = {food_oil = 1, food_olive_oil = 1, vessel = 1} +}) + +minetest.register_craft({ + output = "ethereal:olive_oil", + recipe = { + {"ethereal:olive", "ethereal:olive", "ethereal:olive"}, + {"ethereal:olive", "ethereal:olive", "ethereal:olive"}, + {"farming:juicer", "vessels:glass_bottle", ""} + }, + replacements = { + {"farming:juicer", "farming:juicer"} + } +}) + + +-- Kappa Maki (sushi with cucumber) +minetest.register_craftitem("ethereal:sushi_kappamaki", { + description = S("Kappa Maki Sushi"), + inventory_image = "ethereal_sushi_kappa_maki.png", + on_use = minetest.item_eat(3) +}) + +minetest.register_craft({ + output = "ethereal:sushi_kappamaki 2", + recipe = { + {"group:food_seaweed", "group:food_cucumber", "group:food_rice"} + } +}) + + +-- Nigiri (sushi with raw fish) +minetest.register_craftitem("ethereal:sushi_nigiri", { + description = S("Nigiri Sushi"), + inventory_image = "ethereal_sushi_nigiri.png", + on_use = minetest.item_eat(2) +}) + +minetest.register_craft({ + output = "ethereal:sushi_nigiri 2", + recipe = { + {"group:food_rice", "group:food_fish_raw", ""} + } +}) + + +-- Tamago (sushi with sweet egg) +minetest.register_craftitem("ethereal:sushi_tamago", { + description = S("Tamago Sushi"), + inventory_image = "ethereal_sushi_tamago.png", + on_use = minetest.item_eat(2) +}) + +minetest.register_craft({ + output = "ethereal:sushi_tamago 2", + recipe = { + {"group:food_seaweed", "group:food_egg", "group:food_rice"} + } +}) + + +-- Fugu (prepared pufferfish) +minetest.register_craftitem("ethereal:fugu", { + description = S("Fugusashi"), + inventory_image = "ethereal_fugu.png", + + on_use = function(itemstack, user, pointed_thing) + + if user then + + if math.random(12) == 1 then + return minetest.do_item_eat(-16, nil, itemstack, user, pointed_thing) + else + return minetest.do_item_eat(4, nil, itemstack, user, pointed_thing) + end + end + end +}) + +minetest.register_craft({ + output = "ethereal:fugu", + recipe = { + {"group:food_cutting_board", "ethereal:fish_pufferfish", "group:food_soy_sauce"} + }, + replacements = { + {"group:food_cutting_board", "farming:cutting_board"}, + {"group:food_soy_sauce", "vessels:glass_bottle"} + } +}) + + +-- Teriyaki Chicken +minetest.register_craftitem("ethereal:teriyaki_chicken", { + description = S("Teriyaki Chicken"), + inventory_image = "ethereal_teriyaki_chicken.png", + on_use = minetest.item_eat(4) +}) + +minetest.register_craft({ + output = "ethereal:teriyaki_chicken 2", + recipe = { + {"group:food_chicken_raw", "group:food_sugar", "group:food_soy_sauce"}, + {"group:food_garlic_clove", "group:food_saucepan", "group:food_gelatin"} + }, + replacements = { + {"group:food_soy_sauce", "vessels:glass_bottle"}, + {"group:food_saucepan", "farming:saucepan"} + } +}) + + +-- Teriyaki Beef +minetest.register_craftitem("ethereal:teriyaki_beef", { + description = S("Teriyaki Beef"), + inventory_image = "ethereal_teriyaki_beef.png", + on_use = minetest.item_eat(12, "ethereal:bowl") +}) + +minetest.register_craft({ + output = "ethereal:teriyaki_beef", + recipe = { + {"group:food_meat_raw", "group:food_sugar", "group:food_soy_sauce"}, + {"group:food_garlic_clove", "group:food_saucepan", "group:food_gelatin"}, + {"group:food_cabbage", "group:food_rice", "group:food_bowl"} + }, + replacements = { + {"group:food_soy_sauce", "vessels:glass_bottle"}, + {"group:food_saucepan", "farming:saucepan"} + } +}) + + +-- mushroom soup (Heals 1 heart) +minetest.register_craftitem("ethereal:mushroom_soup", { + description = S("Mushroom Soup"), + inventory_image = "ethereal_mushroom_soup.png", + groups = {drink = 1}, + on_use = minetest.item_eat(5, "ethereal:bowl") +}) + +minetest.register_craft({ + output = "ethereal:mushroom_soup", + recipe = { + {"group:food_mushroom"}, + {"group:food_mushroom"}, + {"group:food_bowl"} + } +}) + + +-- boiled shrimp +minetest.register_craftitem("ethereal:fish_shrimp_cooked", { + description = S("Boiled Shrimp"), + inventory_image = "ethereal_fish_shrimp_cooked.png", + on_use = minetest.item_eat(2) +}) + +minetest.register_craft({ + output = "ethereal:fish_shrimp_cooked 5", + recipe = { + {"ethereal:fish_shrimp", "ethereal:fish_shrimp", "ethereal:fish_shrimp"}, + {"ethereal:fish_shrimp", "group:water_bucket", "ethereal:fish_shrimp"}, + {"", "ethereal:fire_dust", ""} + }, + replacements = { + {"group:water_bucket", "bucket:bucket_empty"}, + } +}) + + +-- garlic butter shrimp +minetest.register_craftitem("ethereal:garlic_shrimp", { + description = S("Garlic Butter Shrimp"), + inventory_image = "ethereal_garlic_butter_shrimp.png", + on_use = minetest.item_eat(6) +}) + +minetest.register_craft({ + output = "ethereal:garlic_shrimp", + recipe = { + {"farming:skillet", "ethereal:fish_shrimp", "ethereal:fish_shrimp"}, + {"group:food_butter", "group:food_garlic_clove", "ethereal:lemon"} + }, + replacements = {{"farming:skillet", "farming:skillet"}} +}) + + +-- jellyfish salad +minetest.register_craftitem("ethereal:jellyfish_salad", { + description = S("Jellyfish Salad"), + inventory_image = "ethereal_jellyfish_salad.png", + on_use = minetest.item_eat(6) +}) + +minetest.register_craft({ + output = "ethereal:jellyfish_salad", + recipe = { + {"farming:cutting_board", "ethereal:fish_jellyfish", "group:food_onion"}, + }, + replacements = {{"farming:cutting_board", "farming:cutting_board"}} +}) + + +-- raw calamari +minetest.register_craftitem("ethereal:calamari_raw", { + description = S("Raw Calamari"), + inventory_image = "ethereal_calamari_raw.png", + on_use = minetest.item_eat(-2) +}) + +minetest.register_craft({ + output = "ethereal:calamari_raw 2", + recipe = { + {"farming:cutting_board", "ethereal:fish_squid"}, + }, + replacements = {{"farming:cutting_board", "farming:cutting_board"}} +}) + +-- cooked calamari +minetest.register_craftitem("ethereal:calamari_cooked", { + description = S("Calamari"), + inventory_image = "ethereal_calamari_cooked.png", + on_use = minetest.item_eat(5) +}) + +minetest.register_craft({ + output = "ethereal:calamari_cooked", + recipe = { + {"farming:skillet", "ethereal:calamari_raw", "farming:flour"}, + }, + replacements = {{"farming:skillet", "farming:skillet"}} +}) + +-- fish & chips +minetest.register_craftitem("ethereal:fish_n_chips", { + description = S("Fish & Chips"), + inventory_image = "ethereal_fish_chips.png", + on_use = minetest.item_eat(6) +}) + +minetest.register_craft({ + output = "ethereal:fish_n_chips", + recipe = { + {"farming:baking_tray", "group:ethereal_fish", "group:food_potato"} + }, + replacements = { + {"farming:baking_tray", "farming:baking_tray"} + } +}) diff --git a/mods/ethereal/init.lua b/mods/ethereal/init.lua new file mode 100644 index 0000000..428cbd7 --- /dev/null +++ b/mods/ethereal/init.lua @@ -0,0 +1,171 @@ +--[[ + Minetest Ethereal Mod + + Created by ChinChow + + Updated by TenPlus1 +]] + + +ethereal = {version = "20221230"} + + +local function setting(stype, name, default) + + local value + + if stype == "bool" then + value = minetest.settings:get_bool("ethereal." .. name) + elseif stype == "string" then + value = minetest.settings:get("ethereal." .. name) + elseif stype == "number" then + value = tonumber(minetest.settings:get("ethereal." .. name)) + end + + if value == nil then + value = default + end + + ethereal[name] = value +end + + +-- DO NOT change settings below, use the settings.conf file instead + +setting("number", "leaftype", 0) +setting("bool", "leafwalk", false) +setting("bool", "cavedirt", true) +setting("bool", "torchdrop", true) +setting("bool", "papyruswalk", true) +setting("bool", "lilywalk", true) +setting("bool", "xcraft", true) +setting("bool", "flight", true) +setting("number", "glacier", 1) +setting("number", "bamboo", 1) +setting("number", "mesa", 1) +setting("number", "alpine", 1) +setting("number", "healing", 1) +setting("number", "snowy", 1) +setting("number", "frost", 1) +setting("number", "grassy", 1) +setting("number", "caves", 1) +setting("number", "grayness", 1) +setting("number", "grassytwo", 1) +setting("number", "prairie", 1) +setting("number", "jumble", 1) +setting("number", "junglee", 1) +setting("number", "desert", 1) +setting("number", "grove", 1) +setting("number", "mushroom", 1) +setting("number", "sandstone", 1) +setting("number", "quicksand", 1) +setting("number", "plains", 1) +setting("number", "savanna", 1) +setting("number", "fiery", 1) +setting("number", "sandclay", 1) +setting("number", "swamp", 1) +setting("number", "sealife", 1) +setting("number", "reefs", 1) +setting("number", "sakura", 1) +setting("number", "tundra", 1) +setting("number", "mediterranean", 1) + + +local path = minetest.get_modpath("ethereal") + +-- Load settings.conf file 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.get_translator ~= nil then + S = minetest.get_translator("ethereal") -- 5.x translation function +else + if minetest.get_modpath("intllib") then + dofile(minetest.get_modpath("intllib") .. "/init.lua") + if intllib.make_gettext_pair then + gettext, ngettext = intllib.make_gettext_pair() -- new gettext method + else + gettext = intllib.Getter() -- old text file method + end + S = gettext + else -- boilerplate function + S = function(str, ...) + local args = {...} + return str:gsub("@%d+", function(match) + return args[tonumber(match:sub(2))] + end) + end + 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 .. "/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") + +if minetest.settings:get_bool("ethereal.clear_default_biomes", true) then + dofile(path .. "/biomes_init.lua") +end + +dofile(path .. "/biomes.lua") +dofile(path .. "/ores.lua") +dofile(path .. "/schems.lua") +dofile(path .. "/decor.lua") +dofile(path .. "/compatibility.lua") +dofile(path .. "/stairs.lua") + +-- add flight if enabled +if ethereal.flight then + dofile(path .. "/flight.lua") +end + +-- add lucky blocks if mod active +if minetest.get_modpath("lucky_block") then + dofile(path .. "/lucky_block.lua") +end + +-- 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 ("[MOD] Ethereal loaded") diff --git a/mods/ethereal/leaves.lua b/mods/ethereal/leaves.lua new file mode 100644 index 0000000..728d1fc --- /dev/null +++ b/mods/ethereal/leaves.lua @@ -0,0 +1,604 @@ + +local S = ethereal.intllib + + +-- set leaftype (value inside init.lua) +local leaftype = "plantlike" +local leafscale = 1.4 + +if ethereal.leaftype ~= 0 then + leaftype = "allfaces_optional" + leafscale = 1.0 +end + +-- default apple tree leaves +minetest.override_item("default:leaves", { + drawtype = leaftype, + visual_scale = leafscale, + 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 = leafscale, + 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 = leafscale, + 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 = leafscale, + 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 = leafscale, + walkable = ethereal.leafwalk +}) + +-- willow twig +minetest.register_node("ethereal:willow_twig", { + description = S("Willow Twig"), + drawtype = "plantlike", + tiles = {"ethereal_willow_twig.png"}, + inventory_image = "ethereal_willow_twig.png", + wield_image = "ethereal_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 = leafscale, + tiles = {"ethereal_redwood_leaves.png"}, + inventory_image = "ethereal_redwood_leaves.png", + wield_image = "ethereal_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 = leafscale, + tiles = {"ethereal_orange_leaves.png"}, + inventory_image = "ethereal_orange_leaves.png", + wield_image = "ethereal_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 = leafscale, + tiles = {"ethereal_banana_leaf.png"}, + inventory_image = "ethereal_banana_leaf.png", + wield_image = "ethereal_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 = leafscale, + tiles = {"ethereal_yellow_leaves.png"}, + inventory_image = "ethereal_yellow_leaves.png", + wield_image = "ethereal_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 = leafscale, + 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 = leafscale, + 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 = leafscale, + 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 = leafscale, + tiles = {"ethereal_bamboo_leaves.png"}, + inventory_image = "ethereal_bamboo_leaves.png", + wield_image = "ethereal_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 = leafscale, + 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 = leafscale, + 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 +}) + +-- lemon tree leaves +minetest.register_node("ethereal:lemon_leaves", { + description = S("Lemon Tree Leaves"), + drawtype = leaftype, + visual_scale = leafscale, + tiles = {"ethereal_lemon_leaves.png"}, + inventory_image = "ethereal_lemon_leaves.png", + wield_image = "ethereal_lemon_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:lemon_tree_sapling"}, rarity = 25}, + {items = {"ethereal:lemon_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults(), + after_place_node = default.after_place_leaves +}) + +-- olive tree leaves +minetest.register_node("ethereal:olive_leaves", { + description = S("Olive Tree Leaves"), + drawtype = leaftype, + visual_scale = leafscale, + tiles = {"ethereal_olive_leaves.png"}, + inventory_image = "ethereal_olive_leaves.png", + wield_image = "ethereal_olive_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:olive_tree_sapling"}, rarity = 25}, + {items = {"ethereal:olive_leaves"}} + } + }, + 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 = {"ethereal_mushroom_block.png"}, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2, leafdecay = 3}, + 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 = {"ethereal_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, + leafdecay = 3 + }, + 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 +}) + +-- basandra bush stem, leaves +minetest.register_node("ethereal:basandra_bush_stem", { + description = S("Basandra Bush Stem"), + drawtype = "plantlike", + visual_scale = 1.41, + damage_per_second = 2, + tiles = {"ethereal_basandra_bush_stem.png"}, + inventory_image = "ethereal_basandra_bush_stem.png", + wield_image = "ethereal_basandra_bush_stem.png", + paramtype = "light", + sunlight_propagates = true, + groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + sounds = default.node_sound_wood_defaults(), + selection_box = { + type = "fixed", + fixed = {-7 / 16, -0.5, -7 / 16, 7 / 16, 0.5, 7 / 16}, + } +}) + +minetest.register_node("ethereal:basandra_bush_leaves", { + description = S("Basandra Bush Leaves"), + drawtype = "allfaces_optional", + tiles = {"ethereal_basandra_bush_leaves.png"}, + paramtype = "light", + groups = {snappy = 3, flammable = 2, leaves = 1}, + drop = { + max_items = 1, + items = { + {items = {"ethereal:basandra_bush_sapling"}, rarity = 5}, + {items = {"ethereal:basandra_bush_leaves"}} + } + }, + sounds = default.node_sound_leaves_defaults() +}) + +-- 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:lemon", "ethereal:lemon_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", "ethereal:banana_bunch"}, + 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 + }) + + default.register_leafdecay({ + trunks = {"ethereal:olive_trunk"}, + leaves = {"ethereal:olive_leaves", "ethereal:olive"}, + radius = 3 + }) + + default.register_leafdecay({ + trunks = {"ethereal:mushroom_trunk"}, + leaves = {"ethereal:mushroom", "ethereal:mushroom_pore"}, + radius = 3 + }) +end diff --git a/mods/ethereal/license.txt b/mods/ethereal/license.txt new file mode 100644 index 0000000..a8e4ce0 --- /dev/null +++ b/mods/ethereal/license.txt @@ -0,0 +1,151 @@ +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. + +Textures by TenPlus1 (CC0) unless listed below... + +Based on default_leaves.png (Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) + ethereal_frost_leaves.png [edited by TenPlus1] + ethereal_yellow_leaves.png [edited by TenPlus1] + ethereal_basandra_leaves.png [edited by TenPlus1] + +Textures by BlueTangs Rock (CC BY-SA 3.0): + ethereal_seaweed.png + ethereal_fish_angler.png + ethereal_fish_bluefin.png + ethereal_fish_blueram.png + ethereal_fish_carp.png + ethereal_fish_catfish.png + ethereal_fish_chichlid.png + ethereal_fish_clownfish.png + ethereal_fish_cod.png + ethereal_fish_flathead.png + ethereal_fish_flounder.png + ethereal_fish_jellyfish.png + ethereal_fish_mackerel.png + ethereal_fish_parrot.png + ethereal_fish_pike.png + ethereal_fish_piranha.png + ethereal_fish_plaice.png + ethereal_fish_pufferfish.png + ethereal_fish_redsnapper.png + ethereal_fish_salmon.png + ethereal_fish_shrimp.png + ethereal_fish_shrimp_cooked.png + ethereal_fish_squid.png + ethereal_fish_tetra.png + ethereal_fish_tilapia.png + ethereal_fish_trevally.png + ethereal_fish_tuna.png + ethereal_fish_trout.png + ethereal_sashimi.png + ethereal_fugu.png + ethereal_fish_chips.png + ethereal_calamari_raw.png + ethereal_calamari_cooked.png + ethereal_garlic_butter_shrimp.png + +Texture by Sirrobzeroone (CC0) + ethereal_fish_seahorse*.png + ethereal_fish_coy.png + ethereal_fish_cooked.png + +Textures by Epoxum (CC0) + ethereal_sushi_*.png + +Based on candle textures and coloured by wRothbard (CC0): + ethereal_candle_black*.png + ethereal_candle_blue*.png + ethereal_candle_cyan*.png + ethereal_candle_dark_green*.png + ethereal_candle_dark_grey*.png + ethereal_candle_green*.png + ethereal_candle_grey*.png + ethereal_candle_magenta*.png + ethereal_candle_orange*.png + ethereal_candle_pink*.png + ethereal_candle_red*.png + ethereal_candle_violet*.png + ethereal_candle_yellow*.png + +Based on default tool textures by BlockMen in Minetest (CC BY-SA 3.0): + ethereal_crystal_pick.png + ethereal_crystal_shovel.png + ethereal_crystal_axe.png + ethereal_crystal_sword.png + +Based on texture by ElementW (CC BY-SA 3.0): + bucket_cactus.png + +Based on tree textures by ElementW (CC BY-SA 3.0): + ethereal_yellow_tree.png + ethereal_yellow_tree_top.pngethereal_fish_plaice.png + ethereal_frost_tree.png + ethereal_frost_tree_top.png + ethereal_scorched_tree.png + ethereal_scorched_tree_top.png + +Based on wood texture by BlockMen (CC BY-SA 3.0): + ethereal_yellow_wood.png [edited by alerikaisattera] + ethereal_frost_wood.png [edited by alerikaisattera] + +Based on bottle texture by Thomas-S (CC BY-SA 3.0): + ethereal_flight_potion.png + ethereal_firethorn_jelly.png + +Textures based on default_grass.png and default_grass_side.png by TumeniNodes (CC BY-SA 3.0) + ethereal_grass_*.png [Edited by TenPlus1] + ethereal_crystal_moss.png + ethereal_mushroom_moss.png + ethereal_fiery_moss.png + ethereal_gray_moss.png + ethereal_green_moss.png + +Texture by ZonerDarkRevention (CC0) + ethereal_crystal_spike.png [edited by TenPlus1] + ethereal_bowl.png [edited by TenPlus1] + ethereal_teriyaki_beef.png [edited by TenPlus1] + ethereal_hearty_stew.png + +Textures by VanessaE (CC-BY-SA 4.0) + moretrees_*.png + ethereal_banana_wood.png (edited) + ethereal_olive_wood.png (edited) + +Based on default ice texture by asl97 (CC BY-SA 3.0): + ethereal_brick_ice.png [edited by philipmi] + +Based on default snow texture by Gambit (CC BY-SA 3.0): + ethereal_brick_snow.png [edited by philipmi] + +Textures by Felfa (CC0) + olive*.png + lemon*.png + +Textures by Isaiah658 (CC0) + ethereal_lemonade.png + ethereal_bamboo.png + +Created by XSSheep (CC BY-SA 4.0 - https://minecraft.curseforge.com/projects/pixel-perfection-freshly-updated) + default_apple_gold.png + +Sound by I_q (Attribution 3.0) https://freesound.org/people/l_q/sounds/440956/ + ethereal_casting_rod.ogg diff --git a/mods/ethereal/locale/de.txt b/mods/ethereal/locale/de.txt new file mode 100644 index 0000000..9c9c9d7 --- /dev/null +++ b/mods/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/ethereal/locale/es.txt b/mods/ethereal/locale/es.txt new file mode 100644 index 0000000..6dfd1b0 --- /dev/null +++ b/mods/ethereal/locale/es.txt @@ -0,0 +1,296 @@ +# Spanish translations of ethereal mod +# Traducción al español del mod ethereal +# Author: ost1 +# last update: 2022/June/04 + +#biomes.lua +Blue Marble=Mármol azul +Blue Marble Tile=Baldosa de mármol azul + +#bonemeal.lua +Bone=Hueso +Bone Meal=Fertilizante de hueso + +#crystal.lua +Crystal Spike=Púa de Cristal +Crystal Ingot=Lingote de Cristal +Crystal Block=Bloque de Cristal +Crystal Sword=Espada de Cristal +Crystal Axe=Hacha de Cristal +Crystal Pickaxe=Pico de Cristal +Crystal Shovel=Pala de Cristal +Crystal Gilly Staff=Bastón de Cristal de Gilly + +#dirt.lua +Green Dirt=Tierra verde +Dried Dirt=Tierra seca +Bamboo Dirt=Tierra de bamboo +Jungle Dirt=Tierra de la jungla +Grove Dirt=Tierra de la arboleda +Prairie Dirt=Tierra de la pradera +Cold Dirt=Tierra helada +Crystal Dirt=Tierra de cristal +Mushroom Dirt=Tierra de champiñones +Fiery Dirt=Tierra de fuego +Gray Dirt=Tierra gris +Red Baked Clay=Arcilla roja cocida +Orange Baked Clay=Arcilla naranja cocida +Grey Baked Clay=Arcilla gris cocida +Quicksand=Arena movediza + +#extra.lua +Bamboo Floor=Piso de bamboo +Palm Wax=Cera de palma +Candle=Vela +Black Candle=Vela negra +Blue Candle=Vela azul +Brown Candle=Vela café +Cyan Candle=Vela turquesa +Dark Green Candle=Vela verde oscuro +Dark Grey Candle=Vela gris oscuro +Green Candle=Vela verde +Grey Candle=Vela gris +Magenta Candle=Vela magenta +Orange Candle=Vela naranja +Pink Candle=Vela rosada +Red Candle=Vela roja +Violet Candle=Vela violeta +Yellow Candle=Vela amarilla +Bowl=Tazón +Stone Ladder=Escalera de piedra +Paper Wall=Papel mural +Glo Stone=Piedra brillante +Lump of Charcoal=Carbón de madera +Staff of Light=Bastón de Luz +Etherium Dust=Polvo de Etherium +Etherium Ore=Mineral de Etherium +Bamboo Block=Bloque de bamboo + +#fences.lua +Scorched Fence=Cerca de madera quemada +Frost Fence=Cerca congelada +Redwood Fence=Cerca de secoya +Willow Fence=Cerca de sauce +Healing Wood Fence=Cerca de madera de árbol sanador +Palm Fence=Cerca de palma +Banana Wood Fence=Cerca de madera de árbol de banana +Mushroom Fence=Cerca de champiñones +Birch Fence=Cerca de abedul +Sakura Wood Door=Puerta de madera de sakura + +#fishing.lua +Blue Fin=Atún +Blue Ram=Ramirezi +Catfish=Pezgato +Clownfish=Pez payaso +Pike=Lucio +Flathead=Flathead +Plaice=Solla +Pufferfish=Pez globo +Coy=Coy +Salmon=Salmón +Cichlid=Cíclido +Angler=Lophiiforme +Jellyfish=Medusa +Seahorse=Hipocampo +Piranha=Piraña +Trout=Trucha +Raw Fish=Pescado crudo +Cooked Fish=Pescado cocido +Sashimi=Sashimi +Worm=Gusano +Fishing Rod (USE to cast and again when the time is right)=Caña de pescar (Botón principal para lanzar, cuando sea el momento adecuado vuelve a presionarlo) +Baited Fishing Rod=Caña de pescar con cebo +Inventory full, Fish Got Away!=Inventario lleno, ¡el pez se ha escapado! + +#flight.lua +Flight Potion=Poción de vuelo +Flight timer about to expire!=¡El tiempo de vuelo está apunto de acabarse! +Flight already granted, @1 seconds left!=El vuelo ya ha sido otorgado, ¡te quedan @1 segundos! +Flight granted, you have @1 seconds!=Ya puedes volar, ¡tienes @1 segundos! + +#food.lua +Banana Bunch=Racimo de bananas +Firethorn Jelly=Jalea de Firethorn +Lemon=Limón +Candied Lemon=Limón confitado +Lemonade=Limonada +Olive=Aceituna +Olive Oil=Aceite de oliva +Kappa Maki Sushi=Sushi Kappa Maki +Nigiri Sushi=Sushi Nigiri +Tamago Sushi=Sushi Tamago +Fugusashi=Fugusashi +Teriyaki Chicken=Pollo Teriyaki +Teriyaki Beef=Asado Teriyaki +Banana=Banana +Banana Dough=Masa de banana +Orange=Naranja +Pine Nuts=Piñones +Banana Loaf=Pan de banana +Coconut=Coco +Coconut Slice=Trozo de coco +Golden Apple=Manzana de oro +Hearty Stew=Guiso abundante +Bucket of Cactus Pulp=Cubo de pulpa de cactus + +#gates.lua +Scorched Wood Fence Gate=Puerta de cerca de madera quemada +Frost Wood Fence Gate=Puerta de cerca de madera congelada +Redwood Fence Gate=Puerta de cerca de secoya +Willow Wood Fence Gate=Puerta de cerca de sauce +Healing Wood Fence Gate=Puera de cerca de madera de arbol sanador +Palm Wood Fence Gate=Puerta de cerca de madera de palma +Banana Wood Fence Gate=Puerta de cerca de madera de banana +Mushroom Trunk Fence Gate=Puerta de cerca de tronco de champiñones +Birch Wood Fence Gate=Puerta de cerca de madera de abedul + +#init.lua +[MOD] Ethereal loaded=[MOD] Ethereal cargado + +#leaves.lua +Sakura Leaves=Hojas de sakura +Lemon Tree Leaves=Hojas de limonero +Olive Tree Leaves=Hojas de olivo +Willow Twig=Ramas de sauce +Redwood Leaves=Hojas de secoya +Orange Leaves=Hojas de naranja +Banana Leaves=Hojas de banana +Healing Tree Leaves=Hojas de árbol sanador +Palm Leaves=Hojas de palma +Birch Leaves=Hojas de abedul +Frost Leaves=Hojas congeladas +Bamboo Leaves=Hojas de bamboo +Mushroom Cap=Sombrero de champiñón +Mushroom Pore=Esporas de champiñón +Bush=Arbusto +Bush #2=Arbusto #2 +Bush #3=Arbusto #3 + +#mushroom.lua +Mushroom Soup=Sopa de champiñón + +#onion.lua +Wild Onion=Cebolla silvestre + +#plantlife.lua +Firethorn Shrub=Arbusto de Firethorn +Fire Flower=Flor de fuego +Fire Dust=Polvo de fuego +Vine=Enredadera +Light String Vine=Enredadera luminosa +Fern=Helecho +Fern Tubers=Tubérculos de helecho +Fiery Dry Shrub=Arbusto seco de fuego +Snowy Grass=Pasto nevado +Crystal Grass=Pasto de cristal +Crystal Moss=Musgo de cristal +Mushroom Moss=Musgo de champiñón +Fiery Moss=Musgo ardiente +Gray Moss=Musgo gris +Green Moss=Musgo verde +Red Illumishroom=Champiluz roja +Green Illumishroom=Champiluz verde +Cyan Illumishroom=Champiluz turquesa + +#sapling.lua +Giant Redwood Tree Sapling=Retoño de secoya gigante +Sakura Tree Sapling=Retoño de sakura +Lemon Tree Sapling=Retoño de limonero +Olive Tree Sapling=Retoño de olivo +Bamboo Sprout=Brote de bamboo +Willow Tree Sapling=Retoño de sauce +Healing Tree Sapling=Retoño de árbol sanador +Apple Tree Sapling=Retoño de manzano +Jungle Tree Sapling=Retoño de árbol tropical +Pine Tree Sapling=Retoño de pino +Big Tree Sapling=Retoño de árbol gigante +Banana Tree Sapling=Retoño de banana +Frost Tree Sapling=Retoño de árbol congelado +Mushroom Tree Sapling=Retoño de champiñón +Palm Tree Sapling=Retoño de Palma +Redwood Tree Sapling=Retoño de secoya +Orange Tree Sapling=Retoño de naranja +Birch Tree Sapling=Retoño de abedul +Schematic not found=Schematica no encontrada + +#sealife.lua +Agar Powder=Polvo de Agar +Sponge=Esponja de mar +Wet sponge=Esponja de mar con agua +Seaweed=Alga marina +Blue Glow Coral=Coral azul brillante +Orange Glow Coral=Coral naranjo brillante +Pink Glow Coral=Coral rosado brillante +Green Glow Coral=Coral verde brillante + +#stairs.lua +Blue Marble Stair=Escalera de marmol azul +Blue Marble Tile=Baldosa de marmol azul +Sakura Wood Stair=Escalera de madera de sakura +Sakura Wood Tile=Baldosa de madera de sakura +Olive Wood Stair=Escalera de madera de olivo +Olive Wood Tile=Baldosa de madera de olivo +Crystal Block Stair=Escalera de bloque de cristal +Crystal Block Slab=Losa de bloque de cristal +Ice Brick Stair=Escalera de ladrillo de hielo +Ice Brick Slab=Losa de ladrillo de hielo +Snow Brick Stair=Escalera de ladrillo de nieve +Snow Brick Slab=Losa de ladrillo de nieve +Dried Dirt Stair=Escalera de tierra seca +Dried Dirt Slab=Losa de tiera seca +Mushroom Trunk Stair=Escalera de tronco de champiñón +Mushroom Trunk Slab=Losa de tronco de champiñón +Mushroom Top Stair=Escalera de sombrero de champiñón +Mushroom Top Slab=Losa de sombrero de champiñón +Frost Wood Stair=Escalera de madera congelada +Frost Wood Slab=Losa de madera congelada +Healing Wood Stair=Escalera de madera de árbol sanador +Healing Wood Slab=Losa de madera de árbol sanador +Palm Wood Stair=Escalera de madera de palma +Palm Wood Slab=Losa de madera de palma +Birch Wood Stair=Escalera de madera de abedul +Birch Wood Slab=Losa de madera de abedul +Banana Wood Stair=Escalera de madera de banana +Banana Wood Slab=Losa de madera de banana +Willow Wood Stair=Escalera de madera de sauce +Willow Wood Slab=Losa de madera de sauce +Redwood Stair=Escalera de secoya +Redwood Slab=Losa de secoya +Bamboo Stair=Escalera de bamboo +Bamboo Slab=Losa de bamboo +Dry Dirt=Tierra seca +Mushroom Trunk=Tronco de champiñón +Mushroom Top=Sombrero de champión +Healing Wood=Madera de árbol sanador +Redwood=Secoya + +#strawberry.lua +Strawberry=Fresa + +#water.lua +Ice Brick=Ladrillo de hielo +Snow Brick=Ladrillo de nieve + +#wood.lua +Sakura Trunk=Tronco de sakura +Sakura Wood=Madera de sakura +Olive Trunk=Tronco de olivo +Olive Wood=Madera de olivo +Willow Trunk=Tronco de sauce +Willow Wood=Madera de sauce +Redwood Trunk=Tronco de secoya +Redwood Wood=Madera de secoya +Frost Tree=Árbol sanador +Frost Wood=Madera congelada +Healing Tree Trunk=Tronco de árbol sanador +Healing Tree Wood=Madera de árbol sanador +Palm Trunk=Tronco de palma +Palm Wood=Madera de palma +Banana Trunk=Tronco de banana +Banana Wood=Madera de banana +Scorched Tree=Árbol quemado +Mushroom=Champiñón +Birch Trunk=Tronco de abedul +Birch Wood=Madera de abedul +Bamboo=Bamboo diff --git a/mods/ethereal/locale/ethereal.de.tr b/mods/ethereal/locale/ethereal.de.tr new file mode 100644 index 0000000..be78ee9 --- /dev/null +++ b/mods/ethereal/locale/ethereal.de.tr @@ -0,0 +1,163 @@ +# textdomain:ethereal +Agar Powder=Agarpulver +Baited Fishing Rod=Angel mit Köder +Bamboo=Bambus +Bamboo Block=Bambusblock +Bamboo Floor=Bambusboden +Bamboo Leaves=Bambusblätter +Bamboo Slab=Bambusplatte +Bamboo Sprout=Bambussprosse +Bamboo stair=Bambustreppe +Banana=Banane +Banana Bunch=Bananenbündel +Banana Dough=Bananenteig +Banana Leaves=Bananenblätter +Banana Loaf=Bananenbrot +Banana Trunk=Bananenstamm +Banana Wood=Bananenholz +Banana Wood Fence=Bananenholzzaun +Banana Wood Fence Gate=Bananenholzzauntor +Banana Wood Slab=Bananenholzplatte +Banana Wood Stair=Bananenholztreppe +Birch Fence=Birkenzaun +Birch Leaves=Birkenblätter +Birch Trunk=Birkenstamm +Birch Wood=Birkenholz +Birch Wood Fence Gate=Birkenholzzauntor +Blue Glow Coral=Blaue Leuchtende Koralle +Bowl=Schale +Bucket of Cactus Pulp=Eimer Kaktusmark +Bush=Busch +Bush #2=Busch #2 +Bush #3=Busch #3 +Candle=Kerze +Coconut=Kokosnuss +Coconut Slice=Kokosscheibe +Cooked Fish=Gekochter Fisch +Crystal Axe=Kristallaxt +Crystal Block=Kristallblock +Crystal Block Slab=Kristallblockplatte +Crystal Block Stair=Kristallblocktreppe +Crystal Gilly Staff=Kristallener Gilly-Stab +Crystal Grass=Kristallgras +Crystal Ingot=Kristallbarren +Crystal Pickaxe=Kristallspitzhacke +Crystal Spike=Kristallnadel +Crystal Sword=Kristallschwert +Crystal block=Kristallblock +Cyan Illumishroom=Türkiser Leuchtpilz +Dried Dirt=Vertrocknete Erde +Dried Dirt Slab=Vertrocknete Erdplatte +Dried Dirt Stair=Vertrocknete Erdtreppe +Etherium Dust=Etheriumstaub +Etherium Ore=Etheriumerz +Fern=Farn +Fern Tubers=Farnsporenkapseln +Fiery Dry Shrub=Feuerroter vertrockneter Strauch +Fire Dust=Feuerstaub +Fire Flower=Feuerblume +Firethorn Jelly=Feuerdorngelee +Firethorn Shrub=Feuerdornbusch +Fishing Rod (Right-Click with rod to bait with worm from inventory)=Angel (Rechtsklick mit Angel, um Wurm aus Inventar als Köder zu benutzen) +Frost Fence=Frostzaun +Frost Leaves=Frostblätter +Frost Tree=Frostbaum +Frost Wood=Frostholz +Frost Wood Fence Gate=Frostholzzauntor +Frost Wood Slab=Frostholzplatte +Frost Wood Stair=Frostholztreppe +Glo Stone=Leuchtstein +Golden Apple=Goldener Apfel +Green Glow Coral=Grüne Leuchtende Koralle +Green Illumishroom=Grüner Leuchtpilz +Grey Baked Clay=Grauer gebrannter Ton +Healing Tree Leaves=Lebensbaumblätter +Healing Tree Trunk=Lebensbaumstamm +Healing Tree Wood=Lebensbaumholz +Healing Wood=Lebensholz +Healing Wood Fence=Lebensholzzaun +Healing Wood Fence Gate=Lebensholzzauntor +Healing Wood Slab=Lebensholzplatte +Healing Wood Stair=Lebensholztreppe +Hearty Stew=Deftiger Eintopf +Ice Brick=Eisziegel +Ice Brick Slab=Eisziegelplatte +Ice Brick Stair=Eisziegeltreppe +Inventory full, Fish Got Away!=Inventar voll, Fisch entkam! +Light String Vine=Leuchtschnurrebe +Lump of Charcoal=Holzkohleklumpen +Mushroom=Pilz +Mushroom Cap=Pilzkappe +Mushroom Fence=Pilzzaun +Mushroom Pore=Pilzpore +Mushroom Soup=Pilzsuppe +Mushroom Top=Pilzkappe +Mushroom Top Slab=Pilzkappenplatte +Mushroom Top Stair=Pilzkappentreppe +Mushroom Trunk=Pilzstamm +Mushroom Trunk Fence Gate=Pilzstammzauntor +Mushroom Trunk Slab=Pilzstammplatte +Mushroom Trunk Stair=Pilzstammtreppe +Orange=Orange +Orange Baked Clay=Orange gebrannter Ton +Orange Glow Coral=Orange Leuchtende Koralle +Orange Leaves=Orangenblätter +Palm Fence=Palmzaun +Palm Leaves=Palmenblätter +Palm Trunk=Palmstamm +Palm Wax=Palmwachs +Palm Wood=Palmholz +Palm Wood Fence Gate=Palmholzzauntor +Palm Wood Slab=Palmholzplatte +Palm Wood Stair=Palmholztreppe +Paper Wall=Papierwand +Pine Nuts=Kiefernkerne +Pink Glow Coral=Rosa Leuchtende Koralle +Quicksand=Treibsand +Raw Fish=Roher Fisch +Red Baked Clay=Roter gebrannter Ton +Red Illumishroom=Roter Leuchtpilz +Redwood=Mammutbaum +Redwood Fence=Mammutbaumzaun +Redwood Fence Gate=Mammutbaumzauntor +Redwood Leaves=Mammutbaumblätter +Redwood Slab=Mammutbaumplatte +Redwood Trunk=Mammutbaumstamm +Redwood Wood=Mammutbaumholz +Redwood stair=Mammutbaumtreppe +Sakura=Sakura +Sakura Fence=Sakurazaun +Sakura Leaves=Sakurablätter +Sakura Trunk=Sakurastamm +Sakura Wood=Sakuraholz +Sakura Wood Door=Sakuraholztür +Sakura Wood Fence Gate=Sakuraholzzauntor +Sakura Wood Slab=Sakuraholzplatte +Sakura Wood Stair=Sakuraholztreppe +Sandy=Sandy +Sashimi=Sashimi +Schematic not found=Schematic nicht gefunden +Scorched Fence=Verbrannter Zaun +Scorched Tree=Verbrannter Baum +Scorched Wood Fence Gate=Verbranntes Holzzauntor +Seaweed=Seetang +Snow Brick=Schneeziegel +Snow Brick Slab=Schneeziegelplatte +Snow Brick Stair=Schneeziegeltreppe +Snowy Grass=Verschneites Gras +Sponge=Schwamm +Staff of Light=Stab des Lichts +Stone Ladder=Steinleiter +Strawberry=Erdbeere +Vine=Liane +Wet sponge=Nasser Schwamm +Wild Onion=Wildzwiebel +Willow Fence=Weidenzaun +Willow Trunk=Weidenstamm +Willow Twig=Weidenrute +Willow Wood=Weidenholz +Willow Wood Fence Gate=Weidenholztor +Willow Wood Slab=Weidenholzplatte +Willow Wood Stair=Weidenholztreppe +Worm=Wurm +[MOD] Ethereal loaded=[MOD] Ethereal geladen diff --git a/mods/ethereal/locale/ethereal.en.tr b/mods/ethereal/locale/ethereal.en.tr new file mode 100644 index 0000000..e6663ed --- /dev/null +++ b/mods/ethereal/locale/ethereal.en.tr @@ -0,0 +1,163 @@ +# textdomain:ethereal +#Agar Powder= +#Baited Fishing Rod= +#Bamboo= +#Bamboo Block= +#Bamboo Floor= +#Bamboo Leaves= +#Bamboo Slab= +#Bamboo Sprout= +#Bamboo stair= +#Banana= +#Banana Bunch= +#Banana Dough= +#Banana Leaves= +#Banana Loaf= +#Banana Trunk= +#Banana Wood= +#Banana Wood Fence= +#Banana Wood Fence Gate= +#Banana Wood Slab= +#Banana Wood Stair= +#Birch Fence= +#Birch Leaves= +#Birch Trunk= +#Birch Wood= +#Birch Wood Fence Gate= +#Blue Glow Coral= +#Bowl= +#Bucket of Cactus Pulp= +#Bush= +#Bush #2= +#Bush #3= +#Candle= +#Coconut= +#Coconut Slice= +#Cooked Fish= +#Crystal Axe= +#Crystal Block= +#Crystal Block Slab= +#Crystal Block Stair= +#Crystal Gilly Staff= +#Crystal Grass= +#Crystal Ingot= +#Crystal Pickaxe= +#Crystal Spike= +#Crystal Sword= +#Crystal block= +#Cyan Illumishroom= +#Dried Dirt= +#Dried Dirt Slab= +#Dried Dirt Stair= +#Etherium Dust= +#Etherium Ore= +#Fern= +#Fern Tubers= +#Fiery Dry Shrub= +#Fire Dust= +#Fire Flower= +#Firethorn Jelly= +#Firethorn Shrub= +#Fishing Rod (Right-Click with rod to bait with worm from inventory)= +#Frost Fence= +#Frost Leaves= +#Frost Tree= +#Frost Wood= +#Frost Wood Fence Gate= +#Frost Wood Slab= +#Frost Wood Stair= +#Glo Stone= +#Golden Apple= +#Green Glow Coral= +#Green Illumishroom= +#Grey Baked Clay= +#Healing Tree Leaves= +#Healing Tree Trunk= +#Healing Tree Wood= +#Healing Wood= +#Healing Wood Fence= +#Healing Wood Fence Gate= +#Healing Wood Slab= +#Healing Wood Stair= +#Hearty Stew= +#Ice Brick= +#Ice Brick Slab= +#Ice Brick Stair= +#Inventory full, Fish Got Away!= +#Light String Vine= +#Lump of Charcoal= +#Mushroom= +#Mushroom Cap= +#Mushroom Fence= +#Mushroom Pore= +#Mushroom Soup= +#Mushroom Top= +#Mushroom Top Slab= +#Mushroom Top Stair= +#Mushroom Trunk= +#Mushroom Trunk Fence Gate= +#Mushroom Trunk Slab= +#Mushroom Trunk Stair= +#Orange= +#Orange Baked Clay= +#Orange Glow Coral= +#Orange Leaves= +#Palm Fence= +#Palm Leaves= +#Palm Trunk= +#Palm Wax= +#Palm Wood= +#Palm Wood Fence Gate= +#Palm Wood Slab= +#Palm Wood Stair= +#Paper Wall= +#Pine Nuts= +#Pink Glow Coral= +#Quicksand= +#Raw Fish= +#Red Baked Clay= +#Red Illumishroom= +#Redwood= +#Redwood Fence= +#Redwood Fence Gate= +#Redwood Leaves= +#Redwood Slab= +#Redwood Trunk= +#Redwood Wood= +#Redwood stair= +#Sakura= +#Sakura Fence= +#Sakura Leaves= +#Sakura Trunk= +#Sakura Wood= +#Sakura Wood Door= +#Sakura Wood Fence Gate= +#Sakura Wood Slab= +#Sakura Wood Stair= +#Sandy= +#Sashimi= +#Schematic not found= +#Scorched Fence= +#Scorched Tree= +#Scorched Wood Fence Gate= +#Seaweed= +#Snow Brick= +#Snow Brick Slab= +#Snow Brick Stair= +#Snowy Grass= +#Sponge= +#Staff of Light= +#Stone Ladder= +#Strawberry= +#Vine= +#Wet sponge= +#Wild Onion= +#Willow Fence= +#Willow Trunk= +#Willow Twig= +#Willow Wood= +#Willow Wood Fence Gate= +#Willow Wood Slab= +#Willow Wood Stair= +#Worm= +#[MOD] Ethereal loaded= diff --git a/mods/ethereal/locale/ethereal.es.tr b/mods/ethereal/locale/ethereal.es.tr new file mode 100644 index 0000000..9f4b186 --- /dev/null +++ b/mods/ethereal/locale/ethereal.es.tr @@ -0,0 +1,250 @@ +# textdomain:ethereal +Agar Powder=Polvo de Agar +Angler=Lophiiforme +Apple Tree Sapling=Retoño de manzano +Baited Fishing Rod=Caña de pescar con cebo +Bamboo Block=Bloque de bamboo +Bamboo Dirt=Tierra de bamboo +Bamboo Floor=Piso de bamboo +Bamboo Leaves=Hojas de bamboo +Bamboo Slab=Losa de bamboo +Bamboo Sprout=Brote de bamboo +Bamboo Stair=Escalera de bamboo +Bamboo=Bamboo +Banana Bunch=Racimo de bananas +Banana Dough=Masa de banana +Banana Leaves=Hojas de banana +Banana Loaf=Pan de banana +Banana Tree Sapling=Retoño de banana +Banana Trunk=Tronco de banana +Banana Wood Fence Gate=Puerta de cerca de madera de banana +Banana Wood Fence=Cerca de madera de árbol de banana +Banana Wood Slab=Losa de madera de banana +Banana Wood Stair=Escalera de madera de banana +Banana Wood=Madera de banana +Banana=Banana +Big Tree Sapling=Retoño de árbol gigante +Birch Fence=Cerca de abedul +Birch Leaves=Hojas de abedul +Birch Tree Sapling=Retoño de abedul +Birch Trunk=Tronco de abedul +Birch Wood Fence Gate=Puerta de cerca de madera de abedul +Birch Wood Slab=Losa de madera de abedul +Birch Wood Stair=Escalera de madera de abedul +Birch Wood=Madera de abedul +Black Candle=Vela negra +Blue Candle=Vela azul +Blue Fin=Atún +Blue Glow Coral=Coral azul brillante +Blue Marble=Mármol azul +Blue Marble Stair=Escalera de marmol azul +Blue Marble Tile=Baldosa de marmol azul +Blue Ram=Ramirezi +Bone Meal=Fertilizante de hueso +Bone=Hueso +Bowl=Tazón +Brown Candle=Vela café +Bucket of Cactus Pulp=Cubo de pulpa de cactus +Bush #2=Arbusto #2 +Bush #3=Arbusto #3 +Bush=Arbusto +Candied Lemon=Limón confitado +Candle=Vela +Catfish=Pezgato +Cichlid=Cíclido +Clownfish=Pez payaso +Coconut Slice=Trozo de coco +Coconut=Coco +Cold Dirt=Tierra helada +Cooked Fish=Pescado cocido +Coy=Coy +Crystal Axe=Hacha de Cristal +Crystal Block Slab=Losa de bloque de cristal +Crystal Block Stair=Escalera de bloque de cristal +Crystal Block=Bloque de Cristal +Crystal Dirt=Tierra de cristal +Crystal Gilly Staff=Bastón de Cristal de Gilly +Crystal Grass=Pasto de cristal +Crystal Ingot=Lingote de Cristal +Crystal Moss=Musgo de cristal +Crystal Pickaxe=Pico de Cristal +Crystal Shovel=Pala de Cristal +Crystal Spike=Púa de Cristal +Crystal Sword=Espada de Cristal +Cyan Candle=Vela turquesa +Cyan Illumishroom=Champiluz turquesa +Dark Green Candle=Vela verde oscuro +Dark Grey Candle=Vela gris oscuro +Dried Dirt Slab=Losa de tiera seca +Dried Dirt Stair=Escalera de tierra seca +Dried Dirt=Tierra seca +Dry Dirt=Tierra seca +Etherium Dust=Polvo de Etherium +Etherium Ore=Mineral de Etherium +Fern Tubers=Tubérculos de helecho +Fern=Helecho +Fiery Dirt=Tierra de fuego +Fiery Dry Shrub=Arbusto seco de fuego +Fiery Moss=Musgo ardiente +Fire Dust=Polvo de fuego +Fire Flower=Flor de fuego +Firethorn Jelly=Jalea de Firethorn +Firethorn Shrub=Arbusto de Firethorn +Fishing Rod (USE to cast and again when the time is right)=Caña de pescar (Botón principal para lanzar, cuando sea el momento adecuado vuelve a presionarlo) +Flathead=Flathead +Flight already granted, @1 seconds left!=El vuelo ya ha sido otorgado, ¡te quedan @1 segundos! +Flight granted, you have @1 seconds!=Ya puedes volar, ¡tienes @1 segundos! +Flight Potion=Poción de vuelo +Flight timer about to expire!=¡El tiempo de vuelo está apunto de acabarse! +Frost Fence=Cerca congelada +Frost Leaves=Hojas congeladas +Frost Tree Sapling=Retoño de árbol congelado +Frost Tree=Árbol sanador +Frost Wood Fence Gate=Puerta de cerca de madera congelada +Frost Wood Slab=Losa de madera congelada +Frost Wood Stair=Escalera de madera congelada +Frost Wood=Madera congelada +Fugusashi=Fugusashi +Giant Redwood Tree Sapling=Retoño de secoya gigante +Glo Stone=Piedra brillante +Golden Apple=Manzana de oro +Gray Dirt=Tierra gris +Gray Moss=Musgo gris +Green Candle=Vela verde +Green Dirt=Tierra verde +Green Glow Coral=Coral verde brillante +Green Illumishroom=Champiluz verde +Green Moss=Musgo verde +Grey Baked Clay=Arcilla gris cocida +Grey Candle=Vela gris +Grove Dirt=Tierra de la arboleda +Healing Tree Leaves=Hojas de árbol sanador +Healing Tree Sapling=Retoño de árbol sanador +Healing Tree Trunk=Tronco de árbol sanador +Healing Tree Wood=Madera de árbol sanador +Healing Wood Fence Gate=Puera de cerca de madera de arbol sanador +Healing Wood Fence=Cerca de madera de árbol sanador +Healing Wood Slab=Losa de madera de árbol sanador +Healing Wood Stair=Escalera de madera de árbol sanador +Healing Wood=Madera de árbol sanador +Hearty Stew=Guiso abundante +Ice Brick Slab=Losa de ladrillo de hielo +Ice Brick Stair=Escalera de ladrillo de hielo +Ice Brick=Ladrillo de hielo +Inventory full, Fish Got Away!=Inventario lleno, ¡el pez se ha escapado! +Jellyfish=Medusa +Jungle Dirt=Tierra de la jungla +Jungle Tree Sapling=Retoño de árbol tropical +Kappa Maki Sushi=Sushi Kappa Maki +Lemon Tree Leaves=Hojas de limonero +Lemon Tree Sapling=Retoño de limonero +Lemon=Limón +Lemonade=Limonada +Light String Vine=Enredadera luminosa +Lump of Charcoal=Carbón de madera +Magenta Candle=Vela magenta +Mushroom Cap=Sombrero de champiñón +Mushroom Dirt=Tierra de champiñones +Mushroom Fence=Cerca de champiñones +Mushroom Moss=Musgo de champiñón +Mushroom Pore=Esporas de champiñón +Mushroom Soup=Sopa de champiñón +Mushroom Top Slab=Losa de sombrero de champiñón +Mushroom Top Stair=Escalera de sombrero de champiñón +Mushroom Top=Sombrero de champión +Mushroom Tree Sapling=Retoño de champiñón +Mushroom Trunk Fence Gate=Puerta de cerca de tronco de champiñones +Mushroom Trunk Slab=Losa de tronco de champiñón +Mushroom Trunk Stair=Escalera de tronco de champiñón +Mushroom Trunk=Tronco de champiñón +Mushroom=Champiñón +Nigiri Sushi=Sushi Nigiri +Olive Oil=Aceite de oliva +Olive Tree Leaves=Hojas de olivo +Olive Tree Sapling=Retoño de olivo +Olive Trunk=Tronco de olivo +Olive Wood Stair=Escalera de madera de olivo +Olive Wood Tile=Baldosa de madera de olivo +Olive Wood=Madera de olivo +Olive=Aceituna +Orange Baked Clay=Arcilla naranja cocida +Orange Candle=Vela naranja +Orange Glow Coral=Coral naranjo brillante +Orange Leaves=Hojas de naranja +Orange Tree Sapling=Retoño de naranja +Orange=Naranja +Palm Fence=Cerca de palma +Palm Leaves=Hojas de palma +Palm Tree Sapling=Retoño de Palma +Palm Trunk=Tronco de palma +Palm Wax=Cera de palma +Palm Wood Fence Gate=Puerta de cerca de madera de palma +Palm Wood Slab=Losa de madera de palma +Palm Wood Stair=Escalera de madera de palma +Palm Wood=Madera de palma +Paper Wall=Papel mural +Pike=Lucio +Pine Nuts=Piñones +Pine Tree Sapling=Retoño de pino +Pink Candle=Vela rosada +Pink Glow Coral=Coral rosado brillante +Piranha=Piraña +Plaice=Solla +Prairie Dirt=Tierra de la pradera +Pufferfish=Pez globo +Quicksand=Arena movediza +Raw Fish=Pescado crudo +Red Baked Clay=Arcilla roja cocida +Red Candle=Vela roja +Red Illumishroom=Champiluz roja +Redwood Fence Gate=Puerta de cerca de secoya +Redwood Fence=Cerca de secoya +Redwood Leaves=Hojas de secoya +Redwood Slab=Losa de secoya +Redwood Stair=Escalera de secoya +Redwood Tree Sapling=Retoño de secoya +Redwood Trunk=Tronco de secoya +Redwood Wood=Madera de secoya +Redwood=Secoya +Sakura Leaves=Hojas de sakura +Sakura Tree Sapling=Retoño de sakura +Sakura Trunk=Tronco de sakura +Sakura Wood Door=Puerta de madera de sakura +Sakura Wood Stair=Escalera de madera de sakura +Sakura Wood Tile=Baldosa de madera de sakura +Sakura Wood=Madera de sakura +Salmon=Salmón +Sashimi=Sashimi +Schematic not found=Schematica no encontrada +Scorched Fence=Cerca de madera quemada +Scorched Tree=Árbol quemado +Scorched Wood Fence Gate=Puerta de cerca de madera quemada +Seahorse=Hipocampo +Seaweed=Alga marina +Snow Brick Slab=Losa de ladrillo de nieve +Snow Brick Stair=Escalera de ladrillo de nieve +Snow Brick=Ladrillo de nieve +Snowy Grass=Pasto nevado +Sponge=Esponja de mar +Staff of Light=Bastón de Luz +Stone Ladder=Escalera de piedra +Strawberry=Fresa +Tamago Sushi=Sushi Tamago +Teriyaki Beef=Asado Teriyaki +Teriyaki Chicken=Pollo Teriyaki +Trout=Trucha +Vine=Enredadera +Violet Candle=Vela violeta +Wet sponge=Esponja de mar con agua +Wild Onion=Cebolla silvestre +Willow Fence=Cerca de sauce +Willow Tree Sapling=Retoño de sauce +Willow Trunk=Tronco de sauce +Willow Twig=Ramas de sauce +Willow Wood Fence Gate=Puerta de cerca de sauce +Willow Wood Slab=Losa de madera de sauce +Willow Wood Stair=Escalera de madera de sauce +Willow Wood=Madera de sauce +Worm=Gusano +Yellow Candle=Vela amarilla +[MOD] Ethereal loaded=[MOD] Ethereal cargado diff --git a/mods/ethereal/locale/ethereal.fr.tr b/mods/ethereal/locale/ethereal.fr.tr new file mode 100644 index 0000000..9c5183d --- /dev/null +++ b/mods/ethereal/locale/ethereal.fr.tr @@ -0,0 +1,163 @@ +# textdomain:ethereal +Agar Powder=Poudre d'agar +Baited Fishing Rod=Canne à pêche avec appât +Bamboo=Bambou +Bamboo Block=Bloc de bambou +Bamboo Floor=Plancher de bambou +Bamboo Leaves=Feuilles de bambou +Bamboo Slab=Dalle de bambou +Bamboo Sprout=Germe de bambou +Bamboo stair=Marche de bambou +Banana=Banane +Banana Bunch=Régime de banane +Banana Dough=Pâte de banande +Banana Leaves=Feuilles de bananier +Banana Loaf=Pain aux bananes +Banana Trunk=Tronc de bananier +Banana Wood=Bois de bananier +Banana Wood Fence=Clôture en bananier +Banana Wood Fence Gate=Porte de clôture en bananier +Banana Wood Slab=Dalle de bois de bananier +Banana Wood Stair=Marche en bois de bananier +Birch Fence=Clôture en bouleau +Birch Leaves=Feuilles de bouleau +Birch Trunk=Tronc de bouleau +Birch Wood=Bois de bouleau +Birch Wood Fence Gate=Porte de clôture en bouleau +Blue Glow Coral=Corail lueur bleu +Bowl=Bol +Bucket of Cactus Pulp=Seau de pâte de cactus +Bush=Arbuste +Bush #2=Arbuste #2 +Bush #3=Arbuste #3 +Candle=Chandelle +Coconut=Noix de coco +Coconut Slice=Tranche de noix de coco +Cooked Fish=Poisson cuit +Crystal Axe=Hâche de crystal +Crystal Block=Bloc de crystal +Crystal Block Slab=Dalle de crystal +Crystal Block Stair=Marche de crystal +Crystal Gilly Staff=Baton de crystal +Crystal Grass=Herbe de crystal +Crystal Ingot=Lingot de crystal +Crystal Pickaxe=Pioche de crystal +Crystal Spike=Pic de crystal +Crystal Sword=Épée de crystal +Crystal block=Bloc de crystal +Cyan Illumishroom=Luminochampignon cyan +Dried Dirt=Terre sèche +Dried Dirt Slab=Dalle de terre sèche +Dried Dirt Stair=Marche de terre sèche +Etherium Dust=Poudre céleste +Etherium Ore=Minerai céleste +Fern=Fougère +Fern Tubers=Tubercules de fougère +Fiery Dry Shrub=Arbuste ardent sec +Fire Dust=Poudre de feu +Fire Flower=Fleur de feu +Firethorn Jelly=Gelée d'épinafeu +Firethorn Shrub=Arbuste épinafeu +Fishing Rod (Right-Click with rod to bait with worm from inventory)=Canne à pèche (Clic droit avec canne pour ajouter l'appât à partir de l'inventaire) +Frost Fence=Clôture de givrier +Frost Leaves=Feuilles de givrier +Frost Tree=Givrier +Frost Wood=Bois de givrier +Frost Wood Fence Gate=Porte de clôture en givrier +Frost Wood Slab=Dalle de givrier +Frost Wood Stair=Marche en givrier +Glo Stone=Pierre luminescente +Golden Apple=Pomme dorée +Green Glow Coral=Corail lueur vert +Green Illumishroom=Luminochampignon vert +Grey Baked Clay=Terre cuite grise +Healing Tree Leaves=Feuilles de soignantier +Healing Tree Trunk=Tronc de soignantier +Healing Tree Wood=Bois de soignantier +Healing Wood=Bois soignant +Healing Wood Fence=Clôture en soignantier +Healing Wood Fence Gate=Porte de clôture en soignantier +Healing Wood Slab=Dalle de soignantier +Healing Wood Stair=Marche en soignantier +Hearty Stew=Ragoût copieux +Ice Brick=Brique de glace +Ice Brick Slab=Dalle en briques de glace +Ice Brick Stair=Marche en briques de glace +Inventory full, Fish Got Away!=Inventaire plein, un poisson s'est échappé ! +Light String Vine=Vigne en girlande de lumières +Lump of Charcoal=Morceau de charbon de bois +Mushroom=Champignon +Mushroom Cap=Dessus de champignon +Mushroom Fence=Clôture en champignon +Mushroom Pore=Pore de champignon +Mushroom Soup=Soupe aux champignons +Mushroom Top=Tête de champignon +Mushroom Top Slab=Dalle en tête de champignon +Mushroom Top Stair=Marche en tête de champignon +Mushroom Trunk=Tronc de champignon +Mushroom Trunk Fence Gate=Porte de clôture en champignon +Mushroom Trunk Slab=Dalle de champignon +Mushroom Trunk Stair=Marche en champignon +Orange=Orange +Orange Baked Clay=Terre cuite orange +Orange Glow Coral=Corail lueur orange +Orange Leaves=Feuilles orange +Palm Fence=Clôture de palmier +Palm Leaves=Feuilles de palmier +Palm Trunk=Tronc de palmier +Palm Wax=Cire de palmier +Palm Wood=Bois de palmier +Palm Wood Fence Gate=Porte de clôture en palmier +Palm Wood Slab=Dalle de palmier +Palm Wood Stair=Marche en palmier +Paper Wall=Mûr de papier +Pine Nuts=Pignon de pin +Pink Glow Coral=Corail lueur rose +Quicksand=Sables mouvants +Raw Fish=Poisson cru +Red Baked Clay=Terre cuite rouge +Red Illumishroom=Luminochampignon rouge +Redwood=Séquoia +Redwood Fence=Clôture en séquoia +Redwood Fence Gate=Porte de clôture en séquoia +Redwood Leaves=Feuilles de séquoia +Redwood Slab=Dalle de séquoia +Redwood Trunk=Tronc de séquoia +Redwood Wood=Bois de séquoia +Redwood stair=Marche en séquoia +Sakura=Sakura +Sakura Fence=Clôture en sakura +Sakura Leaves=Feuilles de sakura +Sakura Trunk=Tronc de sakura +Sakura Wood=Bois de sakura +Sakura Wood Door=Porte en sakura +Sakura Wood Fence Gate=Porte de clôture en sakura +Sakura Wood Slab=Dalle de sakura +Sakura Wood Stair=Marche de sakura +Sandy=Sable de mer +Sashimi=Sashimi +Schematic not found=Schéma introuvable +Scorched Fence=Clôture brûlée +Scorched Tree=Arbre brûlé +Scorched Wood Fence Gate=Porte de clôture en bois brûlé +Seaweed=Algues +Snow Brick=Brique de neige +Snow Brick Slab=Dalle en briques de neige +Snow Brick Stair=Marche en briques de neige +Snowy Grass=Herbe des neiges +Sponge=Éponge +Staff of Light=Bâton de lumière +Stone Ladder=Échelle en roche +Strawberry=Fraise +Vine=Vigne +Wet sponge=Éponge mouillée +Wild Onion=Onion sauvage +Willow Fence=Clôture en saule +Willow Trunk=Tronc de saule +Willow Twig=Brindille de saule +Willow Wood=Bois de saule +Willow Wood Fence Gate=Porte de clôture en saule +Willow Wood Slab=Dalle de saule +Willow Wood Stair=Marche en saule +Worm=Ver +[MOD] Ethereal loaded=[MOD] Ethereal chargé diff --git a/mods/ethereal/locale/ethereal.ru.tr b/mods/ethereal/locale/ethereal.ru.tr new file mode 100644 index 0000000..9104d68 --- /dev/null +++ b/mods/ethereal/locale/ethereal.ru.tr @@ -0,0 +1,163 @@ +# textdomain:ethereal +#Agar Powder= +Baited Fishing Rod=Удочка с приманкой +Bamboo=Бамбук +#Bamboo Block= +Bamboo Floor=Бамбуковый пол +Bamboo Leaves=Бамбуковая листва +Bamboo Slab=Плита из бамбука +Bamboo Sprout=Росток бамбука +#Bamboo stair= +Banana=Банан +#Banana Bunch= +Banana Dough=Банановое тесто +Banana Leaves=Листва банана +Banana Loaf=Банадовый хлеб +Banana Trunk=Ствол бананового дерева +Banana Wood=Доски банавого дерева +Banana Wood Fence=Забор из бананового дерева +Banana Wood Fence Gate=Ворота из бананового дерева для забора +Banana Wood Slab=Плита из банановых досок +Banana Wood Stair=Ступенька из банановых досок +Birch Fence=Берёзовый забор +Birch Leaves=Берёзовая листва +Birch Trunk=Ствол берёзы +Birch Wood=Доски берёзы +Birch Wood Fence Gate=Берёзовые ворота для забора +Blue Glow Coral=Синий коралл +Bowl=Чашка +Bucket of Cactus Pulp=Ведро с мякотью кактуса +Bush=Куст +Bush #2=Куст #2 +Bush #3=Куст #3 +Candle=Свеча +Coconut=Кокос +Coconut Slice=Кокосовый ломтик +Cooked Fish=Свареная рыба +Crystal Axe=Хрустальный топор +Crystal Block=Хрустальный блок +Crystal Block Slab=Плита из хрустального блока +Crystal Block Stair=Ступенька из хрустального блока +Crystal Gilly Staff=Хрустальный посох Джилли +Crystal Grass=Хрустальная трава +Crystal Ingot=Хрустальный слиток +Crystal Pickaxe=Хрустальная кирка +Crystal Spike=Хрустальный шип +Crystal Sword=Хрустальный меч +#Crystal block= +Cyan Illumishroom=Голубой светящийся гриб +Dried Dirt=Высушенная земля +#Dried Dirt Slab= +#Dried Dirt Stair= +#Etherium Dust= +#Etherium Ore= +Fern=Папоротник +Fern Tubers=Клубни папоротника +Fiery Dry Shrub=Огненный сухой кустарник +Fire Dust=Огненая пыль +Fire Flower=Огненый цветок +#Firethorn Jelly= +#Firethorn Shrub= +#Fishing Rod (Right-Click with rod to bait with worm from inventory)= +Frost Fence=Замороженный забор +Frost Leaves=Замороженная листва +Frost Tree=Морозное дерево +Frost Wood=Доски +Frost Wood Fence Gate=Замороженные деревянные ворота для забора +Frost Wood Slab=Плита из замороженных досок +Frost Wood Stair=Ступенька из замороженных досок +Glo Stone=Светящийся камень +Golden Apple=Золотое яблоко +Green Glow Coral=Залёный коралл +Green Illumishroom=Зелёный светящийся гриб +Grey Baked Clay=Серая обожжёная глина +Healing Tree Leaves=Листва лечащего дерева +Healing Tree Trunk=Ствол лечебного дерева +Healing Tree Wood=Доски лечебного дерева +Healing Wood=лечебная древесина +Healing Wood Fence=Забор из лечащего дерева +Healing Wood Fence Gate=Ворота из лечащего дерева для забора +Healing Wood Slab=Плита из лечебного дерева +Healing Wood Stair=Ступенька из лечебного дерева +Hearty Stew=Сытное рагу +Ice Brick=Ледяной кирпич +Ice Brick Slab=Плита из ледяного кирпича +Ice Brick Stair=Ступенька из ледяного кирпича +Inventory full, Fish Got Away!=Инвентарь заполнен, рыба сбежала! +Light String Vine=Светящаяся виноградная лоза +Lump of Charcoal=Кусок угля +Mushroom=Гриб +Mushroom Cap=Шляпка гриба +Mushroom Fence=Грибной забор +Mushroom Pore=Грибные поры +Mushroom Soup=Грибной суп +Mushroom Top=Шляпка гриба +Mushroom Top Slab=Плита из шляпки гриба +Mushroom Top Stair=Ступенька из шляпки гриба +Mushroom Trunk=Ствол гриба +Mushroom Trunk Fence Gate=Ворота из грибного ствола для забора +Mushroom Trunk Slab=Плита из ствола гриба +Mushroom Trunk Stair=Ступенька из ствола гриба +Orange=Апельсин +Orange Baked Clay=Оранжевая обожжёная глина +Orange Glow Coral=Оранжевый коралл +Orange Leaves=Листва апельсина +Palm Fence=Пальмовый забор +Palm Leaves=Пальмовая листва +Palm Trunk=Ствол пальмы +Palm Wax=Пальмовый воск +Palm Wood=Доски пальмы +Palm Wood Fence Gate=Ворота из пальмого дерева для забора +Palm Wood Slab=Плита из пальмовых досок +Palm Wood Stair=Ступенька из пальмовых досок +Paper Wall=Обои +Pine Nuts=Кедровые орехи +Pink Glow Coral=Розовый коралл +Quicksand=Зыбучий песок +Raw Fish=Сырая рыба +Red Baked Clay=Красная обожжёная глина +Red Illumishroom=Красный светящийся гриб +Redwood=Секвойя +Redwood Fence=Забор из секвойи +Redwood Fence Gate=Ворота из секвойи для забора +Redwood Leaves=Листва секвойи +Redwood Slab=Плита из секвойи +Redwood Trunk=Ствол секвойи +Redwood Wood=Доски секвойи +#Redwood stair= +#Sakura= +#Sakura Fence= +#Sakura Leaves= +#Sakura Trunk= +#Sakura Wood= +#Sakura Wood Door= +#Sakura Wood Fence Gate= +#Sakura Wood Slab= +#Sakura Wood Stair= +Sandy=Песочный +Sashimi=Сашими +Schematic not found=Схема не найдена +Scorched Fence=Обожжёный забор +Scorched Tree=Обожжёное дерево +Scorched Wood Fence Gate=Обожжёные деревянные ворота для забора +Seaweed=Водоросли +Snow Brick=Снежный кирпич +Snow Brick Slab=Плита из снежного кирпича +Snow Brick Stair=Ступенька из снежного кирпича +Snowy Grass=Заснеженная трава +#Sponge= +Staff of Light=Световой посох +Stone Ladder=Каменная лестница +Strawberry=Клубника +Vine=Виноградная лоза +#Wet sponge= +Wild Onion=Дикий лук +Willow Fence=Ивовый забор +Willow Trunk=Ствол ивы +Willow Twig=Ивовый прут +Willow Wood=Доски ивы +Willow Wood Fence Gate=Ивовые ворота для забора +Willow Wood Slab=Плита из ивовых досок +Willow Wood Stair=Ступенька из ивовых досок +Worm=Червь +[MOD] Ethereal loaded=[MOD] Ethereal загружен diff --git a/mods/ethereal/locale/ethereal.zh_CN.tr b/mods/ethereal/locale/ethereal.zh_CN.tr new file mode 100644 index 0000000..2c4474d --- /dev/null +++ b/mods/ethereal/locale/ethereal.zh_CN.tr @@ -0,0 +1,163 @@ +# textdomain:ethereal +#Agar Powder= +Baited Fishing Rod=带饵的钓鱼竿 +Bamboo=竹子 +#Bamboo Block= +Bamboo Floor=竹地板 +Bamboo Leaves=竹叶 +Bamboo Slab=竹板 +Bamboo Sprout=竹笋 +#Bamboo stair= +Banana=香蕉 +#Banana Bunch= +Banana Dough=香蕉皮 +Banana Leaves=香蕉树叶 +Banana Loaf=香蕉面包 +Banana Trunk=香蕉树干 +Banana Wood=香蕉木 +Banana Wood Fence=香蕉木栅栏 +Banana Wood Fence Gate=香蕉木栅栏门 +Banana Wood Slab=香蕉木板 +Banana Wood Stair=香蕉木楼梯 +Birch Fence=桦树栅栏 +Birch Leaves=白桦树叶 +Birch Trunk=桦树树干 +Birch Wood=白桦木材 +Birch Wood Fence Gate=白桦木栅栏门 +Blue Glow Coral=蓝色珊瑚 +Bowl=碗 +Bucket of Cactus Pulp=仙人掌果肉桶 +Bush=灌木 +Bush #2=灌木 #2 +Bush #3=灌木 #3 +Candle=蜡烛 +Coconut=椰子 +Coconut Slice=椰子片 +Cooked Fish=煮熟的鱼 +Crystal Axe=水晶斧 +Crystal Block=水晶块 +Crystal Block Slab=水晶板 +Crystal Block Stair=水晶楼梯 +Crystal Gilly Staff=水晶网络人员 +Crystal Grass=水晶草 +Crystal Ingot=水晶锭 +Crystal Pickaxe=水晶锄 +Crystal Spike=水晶尖 +Crystal Sword=水晶剑 +#Crystal block= +Cyan Illumishroom=青色蘑菇 +Dried Dirt=干土 +#Dried Dirt Slab= +#Dried Dirt Stair= +#Etherium Dust= +#Etherium Ore= +Fern=蕨类植物 +Fern Tubers=蕨类植物的茎 +Fiery Dry Shrub=干枯灌木 +Fire Dust=火土 +Fire Flower=火焰花 +#Firethorn Jelly= +#Firethorn Shrub= +#Fishing Rod (Right-Click with rod to bait with worm from inventory)= +Frost Fence=霜木栅栏 +Frost Leaves=霜叶子 +Frost Tree=霜树 +Frost Wood=霜木 +Frost Wood Fence Gate=霜木栅栏门 +Frost Wood Slab=霜木材板 +Frost Wood Stair=霜木楼梯 +Glo Stone=荧光石 +Golden Apple=金苹果 +Green Glow Coral=绿色珊瑚 +Green Illumishroom=绿色蘑菇 +Grey Baked Clay=灰色烤粘土 +Healing Tree Leaves=治疗树叶 +Healing Tree Trunk=治疗树干 +Healing Tree Wood=治疗树木材 +Healing Wood=治疗木 +Healing Wood Fence=治疗木栅栏 +Healing Wood Fence Gate=愈合木栅栏门 +Healing Wood Slab=治疗木板 +Healing Wood Stair=治疗木楼梯 +Hearty Stew=丰盛的炖肉 +Ice Brick=冰砖 +Ice Brick Slab=冰砖板 +Ice Brick Stair=冰砖楼梯 +Inventory full, Fish Got Away!=库存满了,鱼逃掉了! +Light String Vine=荧光藤蔓 +Lump of Charcoal=块木炭 +Mushroom=蘑菇 +Mushroom Cap=蘑菇帽 +Mushroom Fence=蘑菇栅栏 +Mushroom Pore=蘑菇孔隙 +Mushroom Soup=蘑菇汤 +Mushroom Top=蘑菇顶部 +Mushroom Top Slab=蘑菇顶部板 +Mushroom Top Stair=蘑菇上楼梯 +Mushroom Trunk=蘑菇干 +Mushroom Trunk Fence Gate=蘑菇栅栏门 +Mushroom Trunk Slab=蘑菇板 +Mushroom Trunk Stair=蘑菇楼梯 +Orange=橙子 +Orange Baked Clay=橙色烤粘土 +Orange Glow Coral=橙色珊瑚 +Orange Leaves=橙子树叶 +Palm Fence=棕榈栅栏 +Palm Leaves=棕榈叶 +Palm Trunk=棕榈树干 +Palm Wax=棕榈蜡 +Palm Wood=棕榈木 +Palm Wood Fence Gate=棕榈木栅栏门 +Palm Wood Slab=棕榈木板 +Palm Wood Stair=棕榈木楼梯 +Paper Wall=纸墙 +Pine Nuts=松子 +Pink Glow Coral=粉色珊瑚 +Quicksand=流沙 +Raw Fish=生鱼 +Red Baked Clay=红色烤粘土 +Red Illumishroom=红色蘑菇 +Redwood=红木 +Redwood Fence=红杉栅栏 +Redwood Fence Gate=红杉栅栏门 +Redwood Leaves=红杉树叶 +Redwood Slab=红杉板 +Redwood Trunk=红木箱子 +Redwood Wood=红木木材 +#Redwood stair= +#Sakura= +#Sakura Fence= +#Sakura Leaves= +#Sakura Trunk= +#Sakura Wood= +#Sakura Wood Door= +#Sakura Wood Fence Gate= +#Sakura Wood Slab= +#Sakura Wood Stair= +Sandy=沙子 +Sashimi=生鱼片 +Schematic not found=没有找到示意图 +Scorched Fence=烧焦的栅栏 +Scorched Tree=烧焦的树 +Scorched Wood Fence Gate=烧焦的木栅栏门 +Seaweed=海藻 +Snow Brick=雪砖 +Snow Brick Slab=雪砖板 +Snow Brick Stair=雪砖楼梯 +Snowy Grass=雪草 +#Sponge= +Staff of Light=灯柱 +Stone Ladder=石梯 +Strawberry=草莓 +Vine=藤蔓 +#Wet sponge= +Wild Onion=野生洋葱 +Willow Fence=柳树栅栏 +Willow Trunk=柳树树干 +Willow Twig=柳树枝 +Willow Wood=柳树木 +Willow Wood Fence Gate=柳树木栅栏门 +Willow Wood Slab=柳树木板 +Willow Wood Stair=柳树木楼梯 +Worm=蠕虫 +[MOD] Ethereal loaded=(MOD)的加载 diff --git a/mods/ethereal/locale/ru.txt b/mods/ethereal/locale/ru.txt new file mode 100644 index 0000000..81ddb53 --- /dev/null +++ b/mods/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/ethereal/locale/template.txt b/mods/ethereal/locale/template.txt new file mode 100644 index 0000000..e8c3af4 --- /dev/null +++ b/mods/ethereal/locale/template.txt @@ -0,0 +1,294 @@ +# Template for translations of ethereal mod +# last update: 2022/June/04 + +#biomes.lua +Blue Marble= +Blue Marble Tile= + +#bonemeal.lua +Bone=Hueso +Bone Meal= + +#crystal.lua +Crystal Spike= +Crystal Ingot= +Crystal Block= +Crystal Sword= +Crystal Axe= +Crystal Pickaxe= +Crystal 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= +Black Candle= +Blue Candle= +Brown Candle= +Cyan Candle= +Dark Green Candle= +Dark Grey Candle= +Green Candle= +Grey Candle= +Magenta Candle= +Orange Candle= +Pink Candle= +Red Candle= +Violet Candle= +Yellow Candle= +Bowl= +Stone Ladder= +Paper Wall= +Glo Stone= +Lump of Charcoal= +Staff of Light= +Etherium Dust= +Etherium Ore= +Bamboo Block= + +#fences.lua +Scorched Fence= +Frost Fence= +Redwood Fence= +Willow Fence= +Healing Wood Fence= +Palm Fence= +Banana Wood Fence= +Mushroom Fence= +Birch Fence= +Sakura Wood Door= + +#fishing.lua +Blue Fin= +Blue Ram= +Catfish= +Clownfish= +Pike= +Flathead= +Plaice= +Pufferfish= +Coy= +Salmon= +Cichlid= +Angler= +Jellyfish= +Seahorse= +Piranha= +Trout= +Raw Fish= +Cooked Fish= +Sashimi= +Worm= +Fishing Rod (USE to cast and again when the time is right)= +Baited Fishing Rod= +Inventory full, Fish Got Away!= + +#flight.lua +Flight Potion= +Flight timer about to expire!= +Flight already granted, @1 seconds left!= +Flight granted, you have @1 seconds!= + +#food.lua +Banana Bunch= +Firethorn Jelly= +Lemon= +Candied Lemon= +Lemonade= +Olive= +Olive Oil= +Kappa Maki Sushi= +Nigiri Sushi= +Tamago Sushi= +Fugusashi= +Teriyaki Chicken= +Teriyaki Beef= +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 +Sakura Leaves= +Lemon Tree Leaves= +Olive Tree Leaves= +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 +Firethorn Shrub= +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 +Giant Redwood Tree Sapling= +Sakura Tree Sapling= +Lemon Tree Sapling= +Olive Tree Sapling= +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= +Birch Tree Sapling= +Schematic not found= + +#sealife.lua +Agar Powder= +Sponge= +Wet sponge= +Seaweed= +Blue Glow Coral= +Orange Glow Coral= +Pink Glow Coral= +Green Glow Coral= + +#stairs.lua +Blue Marble Stair= +Blue Marble Tile= +Sakura Wood Stair= +Sakura Wood Tile= +Olive Wood Stair= +Olive Wood Tile= +Crystal Block Stair= +Crystal Block Slab= +Ice Brick Stair= +Ice Brick Slab= +Snow Brick Stair= +Snow Brick Slab= +Dried Dirt Stair= +Dried 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 +Sakura Trunk= +Sakura Wood= +Olive Trunk= +Olive Wood= +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= diff --git a/mods/ethereal/locale/zh_CN.txt b/mods/ethereal/locale/zh_CN.txt new file mode 100644 index 0000000..757c746 --- /dev/null +++ b/mods/ethereal/locale/zh_CN.txt @@ -0,0 +1,178 @@ +Bone =骨 +Bone Meal =骨粉 +Crystal Spike =水晶尖 +Crystal Ingot =水晶锭 +Crystal Block =水晶块 +Crystal Sword =水晶剑 +Crystal Axe =水晶斧 +Crystal Pickaxe =水晶锄 +Crystal (soft touch) Shovel =水晶铲 +Crystal Gilly Staff =水晶网络人员 +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 =流沙 +Bamboo Floor =竹地板 +Palm Wax =棕榈蜡 +Candle =蜡烛 +Bowl =碗 +Stone Ladder =石梯 +Paper Wall =纸墙 +Glo Stone =荧光石 +Lump of Charcoal =块木炭 +Staff of Light =灯柱 +Scorched Fence =烧焦的栅栏 +Frost Fence =霜木栅栏 +Redwood Fence =红杉栅栏 +Willow Fence =柳树栅栏 +Healing Wood Fence =治疗木栅栏 +Palm Fence =棕榈栅栏 +Banana Wood Fence =香蕉木栅栏 +Mushroom Fence =蘑菇栅栏 +Birch Fence =桦树栅栏 +Raw Fish =生鱼 +Cooked Fish =煮熟的鱼 +Sashimi =生鱼片 +Worm =蠕虫 +Fishing Rod =鱼竿 +Baited Fishing Rod =带饵的钓鱼竿 +Inventory full, Fish Got Away! =库存满了,鱼逃掉了! +Banana =香蕉 +Banana Dough =香蕉皮 +Orange =橙子 +Pine Nuts =松子 +Banana Loaf =香蕉面包 +Coconut =椰子 +Coconut Slice =椰子片 +Golden Apple =金苹果 +Hearty Stew =丰盛的炖肉 +Bucket of Cactus Pulp =仙人掌果肉桶 +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 =白桦木栅栏门 +[MOD] Ethereal loaded =(MOD)的加载 +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 Soup =蘑菇汤 +Wild Onion =野生洋葱 +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 =青色蘑菇 +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 =没有找到示意图 +Seaweed =海藻 +Blue Coral =蓝色珊瑚 +Orange Coral =橙色珊瑚 +Pink Coral =粉色珊瑚 +Green Coral =绿色珊瑚 +Sandy =沙子 +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 =草莓 +Ice Brick =冰砖 +Snow Brick =雪砖 +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/ethereal/lucky_block.lua b/mods/ethereal/lucky_block.lua new file mode 100644 index 0000000..c3bc9c9 --- /dev/null +++ b/mods/ethereal/lucky_block.lua @@ -0,0 +1,159 @@ + +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 = 2, y = 0, z = 2}}, + {"birchtree", ethereal.birchtree, {x = 2, y = 0, z = 2}}, + {"basandrabush", ethereal.basandrabush, {x = 1, y = 0, z = 1}} +}) + +lucky_block:add_blocks({ + {"sch", "basandrabush", 0, false}, + {"dro", {"ethereal:basandra_wood"}, 5}, + {"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:flight_potion"}, 1}, + {"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"}}, + {"nod", "ethereal:basandra_bush_stem", 1}, + {"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}, + {name = "ethereal:lemon_tree_sapling", max = 10}, + {name = "ethereal:olive_tree_sapling", max = 10} + }}, + {"flo", 5, {"ethereal:blue_marble_tile"}, 2}, + {"dro", {"ethereal:blue_marble", "ethereal:blue_marble_tile"}, 8}, + {"dro", {"ethereal:etherium_ore"}, 5}, + {"nod", "default:chest", 0, { + {name = "ethereal:fish_bluefin", max = 7}, + {name = "ethereal:fish_blueram", max = 7}, + {name = "ethereal:fish_catfish", max = 7}, + {name = "ethereal:fish_clownfish", max = 7}, + {name = "ethereal:fish_pike", max = 7}, + {name = "ethereal:fish_flathead", max = 7}, + {name = "ethereal:fish_plaice", max = 7}, + {name = "ethereal:fish_pufferfish", max = 5}, + {name = "ethereal:fish_salmon", max = 7}, + {name = "ethereal:fish_cichlid", max = 7}, + {name = "ethereal:fish_trout", max =7}, + {name = "ethereal:fish_tilapia", max = 4}, + {name = "ethereal:fish_parrot", max = 4}, + {name = "ethereal:fishing_rod", max = 1}, + {name = "ethereal:worm", max = 10} + }}, + {"nod", "default:chest", 0, { + {name = "ethereal:fish_carp", max = 4}, + {name = "ethereal:fish_coy", max = 4}, + {name = "ethereal:fish_flounder", max = 4}, + {name = "ethereal:fish_jellyfish", max = 4}, + {name = "ethereal:fish_mackerel", max = 4}, + {name = "ethereal:fish_redsnapper", max = 4}, + {name = "ethereal:fish_tuna", max = 4}, + {name = "ethereal:fish_squid", max = 4}, + {name = "ethereal:fish_shrimp", max = 4}, + {name = "ethereal:fish_angler", max = 4}, + {name = "ethereal:fish_piranha", max = 4}, + {name = "ethereal:fish_trevally", max = 4}, + {name = "ethereal:fishing_rod", max = 1}, + {name = "ethereal:worm", max = 10} + }}, + {"dro", {"ethereal:lemon"}, 9}, + {"dro", {"ethereal:fish_seahorse", "ethereal:fish_seahorse_green", + "ethereal:fish_seahorse_pink", "ethereal:fish_seahorse_blue", + "ethereal:fish_seahorse_yellow"}, 1}, + {"dro", {"ethereal:jellyfish_salad"}, 2}, + {"dro", {"ethereal:calamari_cooked", "ethereal:calamari_raw"}, 4}, + {"dro", {"ethereal:fish_shrimp", "ethereal:fish_shrimp_cooked"}, 4}, + {"dro", {"ethereal:teriyaki_chicken", "ethereal:teriyaki_beef"}, 4}, + {"dro", {"ethereal:sushi_tamago", "ethereal:sushi_nigiri", + "ethereal:sushi_kappamaki", "ethereal:fugu", "ethereal:sashimi"}, 4}, + {"flo", 3, {"ethereal:gray_moss", "ethereal:fiery_moss", "ethereal:green_moss", + "ethereal:crystal_moss", "ethereal:mushroom_moss"}, 1}, + {"tro", "ethereal:candle_red", "tnt_blast", true}, + {"nod", "ethereal:candle_orange", 0}, + {"nod", "ethereal:candle", 0}, + {"dro", {"ethereal:fish_tetra", "ethereal:fish_shrimp", "ethereal:worm"}, 1}, + {"nod", "default:chest", 0, { + {name = "ethereal:fish_n_chips", max = 1}, + {name = "ethereal:calamari_cooked", max = 1}, + {name = "ethereal:jellyfish_salad", max = 1}, + {name = "ethereal:garlic_shrimp", max = 1}, + {name = "ethereal:fish_shrimp_cooked", max = 1}, + {name = "ethereal:mushroom_soup", max = 1}, + {name = "ethereal:teriyaki_beed", max = 1}, + {name = "ethereal:teriyaki_chicken", max = 1}, + {name = "ethereal:fugu", max = 1}, + {name = "ethereal:sushu_tamago", max = 1}, + {name = "ethereal:sushi_nigiri", max = 1}, + {name = "ethereal:sushi_kappamaki", max = 1}, + {name = "ethereal:hearty_stew", max = 1}, + }} +}) + +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 diff --git a/mods/ethereal/mod.conf b/mods/ethereal/mod.conf new file mode 100644 index 0000000..3526a13 --- /dev/null +++ b/mods/ethereal/mod.conf @@ -0,0 +1,4 @@ +name = ethereal +depends = default, flowers, farming +optional_depends = stairs, doors, bakedclay, moreblocks, lucky_block, toolranks +description = BIOME mod mapgen to add many new biomes to the world diff --git a/mods/ethereal/onion.lua b/mods/ethereal/onion.lua new file mode 100644 index 0000000..1d17855 --- /dev/null +++ b/mods/ethereal/onion.lua @@ -0,0 +1,128 @@ + +local S = ethereal.intllib + + +-- wild onion +minetest.register_craftitem("ethereal:wild_onion_plant", { + description = S("Wild Onion"), + inventory_image = "ethereal_wild_onion.png", + wield_image = "ethereal_wild_onion.png", + groups = {food_onion = 1, flammable = 2}, + on_use = minetest.item_eat(2), + + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:wild_onion_1") + end +}) + + +-- Define Onion growth stages +local 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(def)) + +--stage 2 +def.tiles = {"ethereal_wild_onion_2.png"} +minetest.register_node("ethereal:onion_2", table.copy(def)) + +--stage 3 +def.tiles = {"ethereal_wild_onion_3.png"} +minetest.register_node("ethereal:onion_3", table.copy(def)) + +--stage 4 +def.tiles = {"ethereal_wild_onion_4.png"} +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(def)) + +--stage 5 +def.tiles = {"ethereal_wild_onion_5.png"} +def.groups.growing = nil +def.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5} +} +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(def)) + + +-- growing routine if farming redo isn't present +if farming and farming.mod and farming.mod == "redo" then + + -- add to registered_plants + farming.registered_plants["ethereal:wild_onion_plant"] = { + crop = "ethereal:onion", + seed = "ethereal:wild_onion_plant", + minlight = farming.min_light, + maxlight = farming.max_light, + steps = 5 + } + +else + + 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 = 11, + 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 diff --git a/mods/ethereal/ores.lua b/mods/ethereal/ores.lua new file mode 100644 index 0000000..6dd013e --- /dev/null +++ b/mods/ethereal/ores.lua @@ -0,0 +1,87 @@ + +-- Baked Clay (mesa biome is between 1 and 71) + +local add_stratum = function(y_min, y_max, node) + + minetest.register_ore({ + ore_type = "stratum", + ore = node, + wherein = {"bakedclay:orange"}, + clust_scarcity = 1, + y_max = y_max, + y_min = y_min, + biomes = {"mesa"} + }) +end + +add_stratum(5, 10, "bakedclay:red") +add_stratum(15, 20, "bakedclay:grey") +add_stratum(25, 30, "bakedclay:red") +add_stratum(35, 40, "bakedclay:grey") +add_stratum(45, 50, "bakedclay:red") +add_stratum(55, 60, "bakedclay:grey") + + +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"} +}) + +-- Etherium in floatlands +minetest.register_ore({ + ore_type = "scatter", + ore = "ethereal:stone_with_etherium_ore", + wherein = "default:stone", + clust_scarcity = 9 * 9 * 9, + clust_num_ores = 6, + clust_size = 2, + y_min = 1025, + y_max = 31000 +}) diff --git a/mods/ethereal/plantlife.lua b/mods/ethereal/plantlife.lua new file mode 100644 index 0000000..5103824 --- /dev/null +++ b/mods/ethereal/plantlife.lua @@ -0,0 +1,337 @@ + +local S = ethereal.intllib + +-- Spore Grass +minetest.register_node("ethereal:spore_grass", { + description = S("Spore Grass"), + drawtype = "plantlike", + tiles = {"ethereal_spore_grass.png"}, + inventory_image = "ethereal_spore_grass.png", + wield_image = "ethereal_spore_grass.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} + } +}) + +-- 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 = "ethereal_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 = {"ethereal_vine.png"}, + inventory_image = "ethereal_vine.png", + wield_image = "ethereal_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 = {"ethereal_lightstring.png"}, + inventory_image = "ethereal_lightstring.png", + wield_image = "ethereal_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 = {"ethereal_fern.png"}, + inventory_image = "ethereal_fern.png", + wield_image = "ethereal_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 = "ethereal_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} + } +}) + + +-- lilac +minetest.register_node("ethereal:lilac", { + description = S("Lilac"), + drawtype = "plantlike", + visual_scale = 1.9, + tiles = {"ethereal_lilac.png"}, + inventory_image = "ethereal_lilac.png", + wield_image = "ethereal_lilac.png", + paramtype = "light", + sunlight_propagates = true, + waving = 1, + walkable = false, + buildable_to = true, + 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} + } +}) + +minetest.register_craft({ + output = "dye:magenta 2", + recipe = {{"ethereal:lilac"}} +}) + + +-- 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({ + 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:spore_grass") +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) +local add_shroom = function(name, desc, ad) + + minetest.register_node("ethereal:illumishroom" .. ad, { + description = S(desc .. " Illumishroom"), + drawtype = "plantlike", + tiles = {"ethereal_illumishroom_" .. name .. ".png"}, + inventory_image = "ethereal_illumishroom_" .. name .. ".png", + wield_image = "ethereal_illumishroom_" .. name .. ".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} + } + }) +end + +add_shroom("red", "Red", "") +add_shroom("green", "Green", "2") +add_shroom("cyan", "Cyan", "3") diff --git a/mods/ethereal/plantpack.lua b/mods/ethereal/plantpack.lua new file mode 100644 index 0000000..8df21e5 --- /dev/null +++ b/mods/ethereal/plantpack.lua @@ -0,0 +1,196 @@ + +--= 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", "deciduous_forest", "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_dirt", "default:dirt_with_grass", + "ethereal:grove_dirt", "ethereal:bamboo_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "deciduous_forest", "grassytwo", "bamboo"}, + decoration = { + "xanadu:flower_jacobsladder", "xanadu:flower_thistle", + "xanadu:flower_wildcarrot" + } +}) + +minetest.register_decoration({ + deco_type = "simple", + place_on = { + "ethereal:prairie_dirt", "default:dirt_with_grass", + "ethereal:grove_dirt" + }, + sidelen = 16, + fill_ratio = 0.005, + biomes = {"prairie", "deciduous_forest", "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_dirt", "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", "deciduous_forest", "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 = {"coniferous_forest", "taiga", "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", "deciduous_forest_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", "deciduous_forest", "grassytwo", "jumble", "coniferous_forest", + "taiga", "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 = {"grassland"}, + decoration = {"xanadu:poppy"} +}) diff --git a/mods/ethereal/sapling.lua b/mods/ethereal/sapling.lua new file mode 100644 index 0000000..ac59bff --- /dev/null +++ b/mods/ethereal/sapling.lua @@ -0,0 +1,309 @@ + +local S = ethereal.intllib + +-- Basandra Bush Sapling +minetest.register_node("ethereal:basandra_bush_sapling", { + description = S("Basandra Bush Sapling"), + drawtype = "plantlike", + tiles = {"ethereal_basandra_bush_sapling.png"}, + inventory_image = "ethereal_basandra_bush_sapling.png", + wield_image = "ethereal_basandra_bush_sapling.png", + paramtype = "light", + sunlight_propagates = true, + walkable = false, + selection_box = { + type = "fixed", + fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 2 / 16, 4 / 16} + }, + groups = {snappy = 2, dig_immediate = 3, attached_node = 1, ethereal_sapling = 1, + sapling = 1}, + sounds = default.node_sound_leaves_defaults(), + grown_height = 2 +}) + +-- Bamboo Sprout +minetest.register_node("ethereal:bamboo_sprout", { + description = S("Bamboo Sprout"), + drawtype = "plantlike", + tiles = {"ethereal_bamboo_sprout.png"}, + inventory_image = "ethereal_bamboo_sprout.png", + wield_image = "ethereal_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", "ethereal_willow_sapling", 14) +register_sapling("ethereal:yellow_tree", "Healing", "ethereal_yellow_tree_sapling", 19) +register_sapling("ethereal:big_tree", "Big", "ethereal_big_tree_sapling", 7) +register_sapling("ethereal:banana_tree", "Banana", "ethereal_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:giant_redwood", "Giant Redwood", + "ethereal_giant_redwood_sapling", 33) +register_sapling("ethereal:redwood", "Redwood", "ethereal_redwood_sapling", 21) +register_sapling("ethereal:orange_tree", "Orange", "ethereal_orange_tree_sapling", 6) +register_sapling("ethereal:birch", "Birch", "moretrees_birch_sapling", 7) +register_sapling("ethereal:sakura", "Sakura", "ethereal_sakura_sapling", 10) +register_sapling("ethereal:lemon_tree", "Lemon", "ethereal_lemon_tree_sapling", 7) +register_sapling("ethereal:olive_tree", "Olive", "ethereal_olive_tree_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_basandra_bush(pos) + add_tree(pos, 1, 0, 1, ethereal.basandrabush) +end + +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) + + if math.random(3) == 1 and minetest.find_node_near(pos, 1, {"farming:soil_wet"}) then + + add_tree(pos, 3, 0, 3, ethereal.bananatree, + {{"ethereal:banana", "ethereal:banana_bunch"}}) + else + add_tree(pos, 3, 0, 3, ethereal.bananatree) + end +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, 4, 0, 4, ethereal.redwood_small_tree) +end + +function ethereal.grow_giant_redwood_tree(pos) + add_tree(pos, 7, 0, 7, ethereal.redwood_tree) +end + +function ethereal.grow_orange_tree(pos) + add_tree(pos, 2, 0, 2, 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 + +function ethereal.grow_lemon_tree(pos) + add_tree(pos, 2, 0, 2, ethereal.lemontree) +end + +function ethereal.grow_olive_tree(pos) + add_tree(pos, 3, 0, 3, ethereal.olivetree) +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 + + +ethereal.grow_sapling = function(pos, node) + + local light_level = minetest.get_node_light(pos) or 0 + + if light_level < 13 then + return + end + + 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:basandra_bush_sapling" + and under == "ethereal:fiery_dirt" then + ethereal.grow_basandra_bush(pos) + + elseif 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:giant_redwood_sapling" + and under == "default:dirt_with_dry_grass" then + ethereal.grow_giant_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) + + elseif node.name == "ethereal:olive_tree_sapling" + and under == "ethereal:grove_dirt" then + ethereal.grow_olive_tree(pos) + + elseif node.name == "ethereal:lemon_tree_sapling" + and under == "ethereal:grove_dirt" then + ethereal.grow_lemon_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) + ethereal.grow_sapling(pos, node) + end +}) + +-- 2x redwood saplings make 1x giant redwood sapling +minetest.register_craft({ + output = "ethereal:giant_redwood_sapling", + recipe = {{"ethereal:redwood_sapling", "ethereal:redwood_sapling"}} +}) diff --git a/mods/ethereal/schematics/bamboo_tree.lua b/mods/ethereal/schematics/bamboo_tree.lua new file mode 100644 index 0000000..00e0650 --- /dev/null +++ b/mods/ethereal/schematics/bamboo_tree.lua @@ -0,0 +1,86 @@ + +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}, + {ypos = 3, prob = 127} + }, + + data = { + + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + _,_,_, + l,L,l, + _,L,_, + _,_,_, + + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + _,B,_, + l,B,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/ethereal/schematics/banana_tree.lua b/mods/ethereal/schematics/banana_tree.lua new file mode 100644 index 0000000..e554aa1 --- /dev/null +++ b/mods/ethereal/schematics/banana_tree.lua @@ -0,0 +1,85 @@ + +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}, + {ypos = 1, prob = 127}, + {ypos = 2, prob = 127} + }, + + data = { + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,l,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,l,_,_,_, + _,_,_,L,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,b,_,_,_, + _,_,_,B,_,_,_, + _,_,_,L,_,_,_, + _,_,_,_,_,_,_, + + _,_,_,T,_,_,_, + _,_,_,T,_,_,_, + _,_,_,T,_,_,_, + _,_,_,T,_,_,_, + _,_,b,T,b,_,_, + _,_,B,T,B,_,_, + _,L,L,L,L,L,_, + l,l,_,L,_,l,l, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,b,_,_,_, + _,_,_,B,_,_,_, + _,_,_,L,_,_,_, + _,_,_,_,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,L,_,_,_, + _,_,_,l,_,_,_, + + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,_,_,_,_, + _,_,_,l,_,_,_, + + } +} diff --git a/mods/ethereal/schematics/basandra_bush.lua b/mods/ethereal/schematics/basandra_bush.lua new file mode 100644 index 0000000..00ca5d1 --- /dev/null +++ b/mods/ethereal/schematics/basandra_bush.lua @@ -0,0 +1,23 @@ + +local _ = {name = "air", param1 = 0} +local S = {name = "ethereal:basandra_bush_stem", param1 = 255, force_place = true} +local B = {name = "ethereal:basandra_bush_leaves", param1 = 255} +local b = {name = "ethereal:basandra_bush_leaves", param1 = 100} + +ethereal.basandrabush = { + + size = {x = 3, y = 2, z = 3}, + + data = { + + b,B,b, + b,b,b, + + B,S,B, + b,B,b, + + b,B,b, + b,b,b, + + } +} diff --git a/mods/ethereal/schematics/bigtree.lua b/mods/ethereal/schematics/bigtree.lua new file mode 100644 index 0000000..689149b --- /dev/null +++ b/mods/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/ethereal/schematics/birch_tree.lua b/mods/ethereal/schematics/birch_tree.lua new file mode 100644 index 0000000..5fdd5b8 --- /dev/null +++ b/mods/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/ethereal/schematics/bush.lua b/mods/ethereal/schematics/bush.lua new file mode 100644 index 0000000..67c3417 --- /dev/null +++ b/mods/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/ethereal/schematics/corals.mts b/mods/ethereal/schematics/corals.mts new file mode 100644 index 0000000000000000000000000000000000000000..e1bd7ded6c202e4ca9f308164806f53117606728 GIT binary patch literal 171 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 ?L5B`p_|`+pk++_I^TGQ%l9QvP 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 literal 0 HcmV?d00001 diff --git a/mods/ethereal/screenshot.jpg b/mods/ethereal/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..269c417b909926520d36fe02b0c544f0f3a785bc GIT binary patch literal 221869 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⁣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%0AL*tvaeK|JLCp!E~rbG(( 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 YHHb`!?M2d0W_chLGQ5LVAlF>~*+__{KL7v# literal 0 HcmV?d00001 diff --git a/mods/ethereal/sealife.lua b/mods/ethereal/sealife.lua new file mode 100644 index 0000000..a534e7d --- /dev/null +++ b/mods/ethereal/sealife.lua @@ -0,0 +1,298 @@ + +local S = ethereal.intllib + + +-- Seaweed +minetest.register_node("ethereal:seaweed", { + description = S("Seaweed"), + drawtype = "plantlike", + tiles = {"ethereal_seaweed.png"}, + inventory_image = "ethereal_seaweed.png", + wield_image = "ethereal_seaweed.png", + paramtype = "light", + walkable = false, + climbable = true, + drowning = 1, + selection_box = { + type = "fixed", + fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3} + }, + post_effect_color = {a = 64, r = 100, g = 100, b = 200}, + groups = {food_seaweed = 1, snappy = 3, flammable = 3}, + on_use = minetest.item_eat(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 = "shapeless", + output = "dye:dark_green 3", + recipe = {"ethereal:seaweed"} +}) + + +-- agar powder +minetest.register_craftitem("ethereal:agar_powder", { + description = S("Agar Powder"), + inventory_image = "ethereal_agar_powder.png", + groups = {food_gelatin = 1, flammable = 2} +}) + +minetest.register_craft({ + output = "ethereal:agar_powder 3", + recipe = { + {"group:food_seaweed", "group:food_seaweed", "group:food_seaweed"}, + {"bucket:bucket_water", "bucket:bucket_water", "default:torch"}, + {"bucket:bucket_water", "bucket:bucket_water", "default:torch"} + }, + replacements = { + {"bucket:bucket_water", "bucket:bucket_empty 4"} + } +}) + + +-- Blue Coral +minetest.register_node("ethereal:coral2", { + description = S("Blue Glow Coral"), + drawtype = "plantlike", + tiles = {"ethereal_coral_blue.png"}, + inventory_image = "ethereal_coral_blue.png", + wield_image = "ethereal_coral_blue.png", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 1 / 4, 6 / 16} + }, + light_source = 3, + groups = {snappy = 3}, + sounds = default.node_sound_leaves_defaults() +}) + +minetest.register_craft( { + output = "dye:cyan 3", + recipe = {{"ethereal:coral2"}} +}) + + +-- Orange Coral +minetest.register_node("ethereal:coral3", { + description = S("Orange Glow Coral"), + drawtype = "plantlike", + tiles = {"ethereal_coral_orange.png"}, + inventory_image = "ethereal_coral_orange.png", + wield_image = "ethereal_coral_orange.png", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 1 / 4, 6 / 16} + }, + light_source = 3, + groups = {snappy = 3}, + sounds = default.node_sound_leaves_defaults() +}) + +minetest.register_craft( { + output = "dye:orange 3", + recipe = {{"ethereal:coral3"}} +}) + + +-- Pink Coral +minetest.register_node("ethereal:coral4", { + description = S("Pink Glow Coral"), + drawtype = "plantlike", + tiles = {"ethereal_coral_pink.png"}, + inventory_image = "ethereal_coral_pink.png", + wield_image = "ethereal_coral_pink.png", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 8 / 16, 6 / 16} + }, + light_source = 3, + groups = {snappy = 3}, + sounds = default.node_sound_leaves_defaults() +}) + +minetest.register_craft( { + output = "dye:pink 3", + recipe = {{"ethereal:coral4"}} +}) + + +-- Green Coral +minetest.register_node("ethereal:coral5", { + description = S("Green Glow Coral"), + drawtype = "plantlike", + tiles = {"ethereal_coral_green.png"}, + inventory_image = "ethereal_coral_green.png", + wield_image = "ethereal_coral_green.png", + paramtype = "light", + selection_box = { + type = "fixed", + fixed = {-6 / 16, -0.5, -6 / 16, 6 / 16, 3 / 16, 6 / 16} + }, + light_source = 3, + groups = {snappy = 3}, + sounds = default.node_sound_leaves_defaults() +}) + +minetest.register_craft( { + output = "dye:green 3", + recipe = {{"ethereal:coral5"}} +}) + + +-- Undersea Sand (used for growing seaweed and corals) +minetest.register_node("ethereal:sandy", { + description = S("Sandy"), + tiles = {"default_sand.png"}, + is_ground_content = true, + groups = { + crumbly = 3, falling_node = 1, sand = 1, not_in_creative_inventory = 1 + }, + drop = "default:sand", + sounds = default.node_sound_sand_defaults() +}) + + +-- randomly generate coral or seaweed and have seaweed grow up to 14 high +if ethereal.sealife == 1 then + + minetest.register_abm({ + label = "Grow coral/seaweed", + nodenames = {"ethereal:sandy"}, + neighbors = {"group:water"}, + interval = 15, + chance = 10, + catch_up = false, + action = function(pos, node) + + local sel = math.random(6) + + pos.y = pos.y + 1 + + local nod = minetest.get_node(pos).name + + if nod == "default:water_source" + and sel == 6 then + + minetest.swap_node(pos, {name = "ethereal:sponge_wet"}) + + return + end + + if nod == "default:water_source" + and sel > 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 + + +-- sponge nodes + +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_wet", { + description = S("Wet sponge"), + tiles = {"ethereal_sponge_wet.png"}, + groups = {crumbly = 3}, + sounds = default.node_sound_sand_defaults() +}) + +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 +}) + +-- 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/ethereal/settings.conf_example b/mods/ethereal/settings.conf_example new file mode 100644 index 0000000..1668a69 --- /dev/null +++ b/mods/ethereal/settings.conf_example @@ -0,0 +1,44 @@ + +--[[ + 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 +ethereal.flight = true -- enable flight potion + +-- 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 +ethereal.mediterranean = 1 -- Enable Mediterranean biome diff --git a/mods/ethereal/settingtypes.txt b/mods/ethereal/settingtypes.txt new file mode 100644 index 0000000..f521074 --- /dev/null +++ b/mods/ethereal/settingtypes.txt @@ -0,0 +1,43 @@ +ethereal.leaftype (0 for 2D plantlike leaves or 1 for 3D) int 0 +ethereal.leafwalk (Walkable leaves) bool false + +ethereal.cavedirt (Caves cut through dirt) bool true +ethereal.torchdrop (Torches drop when in water) bool true +ethereal.papyruswalk (Papyrus and Bamboo are walkable) bool true +ethereal.lilywalk (Lilypads are walkable) bool true +ethereal.xcraft (Enable X-Craft cheats) bool true +ethereal.flight (Enable Flight Potion) bool true + +ethereal.glacier (Glacier biome, 1 = Enable / 0 = Disable) int 1 +ethereal.bambo (Bamboo biome, 1 = Enable / 0 = Disable) int 1 +ethereal.mesa (Mesa biome, 1 = Enable / 0 = Disable) int 1 +ethereal.alpine (Alpine biome, 1 = Enable / 0 = Disable) int 1 +ethereal.healing (Healing Tree biome, 1 = Enable / 0 = Disable) int 1 +ethereal.snowy (Pine Tree biome, 1 = Enable / 0 = Disable) int 1 +ethereal.frost (Blue Frost biome, 1 = Enable / 0 = Disable) int 1 +ethereal.grassy (Grassy biome, 1 = Enable / 0 = Disable) int 1 +ethereal.caves (Desertstone biome, 1 = Enable / 0 = Disable) int 1 +ethereal.grayness (Grey Willow biome, 1 = Enable / 0 = Disable) int 1 +ethereal.grassytwo (GrassyTwo biome, 1 = Enable / 0 = Disable) int 1 +ethereal.prairie (Prairie biome, 1 = Enable / 0 = Disable) int 1 +ethereal.jumble (Jumble biome, 1 = Enable / 0 = Disable) int 1 +ethereal.junglee (Jungle biome, 1 = Enable / 0 = Disable) int 1 +ethereal.desert (Desert biome, 1 = Enable / 0 = Disable) int 1 +ethereal.grove (Banana Grove biome, 1 = Enable / 0 = Disable) int 1 +ethereal.mushroom (Mushroom biome, 1 = Enable / 0 = Disable) int 1 +ethereal.sandstone (Sandstone biome, 1 = Enable / 0 = Disable) int 1 +ethereal.quicksand (Quicksand Bank biome, 1 = Enable / 0 = Disable) int 1 +ethereal.plains (Scorched Plains biome, 1 = Enable / 0 = Disable) int 1 +ethereal.savanna (Savanna biome, 1 = Enable / 0 = Disable) int 1 +ethereal.fiery (Feiry Lava biome, 1 = Enable / 0 = Disable) int 1 +ethereal.sandclay (Sandy Clay biome, 1 = Enable / 0 = Disable) int 1 +ethereal.swamp (Swamp biome, 1 = Enable / 0 = Disable) int 1 +ethereal.sealife (Coral and Seaweed biome, 1 = Enable / 0 = Disable) int 1 +ethereal.reefs (MT5 Coral biome, 1 = Enable / 0 = Disable) int 1 +ethereal.sakura (Sakura biome, 1 = Enable / 0 = Disable) int 1 +ethereal.tundra (Tundra biome, 1 = Enable / 0 = Disable) int 1 +ethereal.mediterranean (Mediterranean biome, 1 = Enable / 0 = Disable) int 1 + +ethereal.flightpotion_duration (Flight Potion Duration) int 300 + +ethereal.clear_default_biomes (Clear Default Biomes and Decoration) bool true diff --git a/mods/ethereal/sounds/ethereal_casting_rod.ogg b/mods/ethereal/sounds/ethereal_casting_rod.ogg new file mode 100644 index 0000000000000000000000000000000000000000..c916dd7c935e3d80944498ff574035e299ef3fef GIT binary patch literal 18801 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 L0Ny$AcL?AC^2*0R literal 0 HcmV?d00001 diff --git a/mods/ethereal/stairs.lua b/mods/ethereal/stairs.lua new file mode 100644 index 0000000..2e8be45 --- /dev/null +++ b/mods/ethereal/stairs.lua @@ -0,0 +1,196 @@ + +-- language support +local S = ethereal.intllib + +-- stair mods active +local stairs_mod = minetest.get_modpath("stairs") +local stairs_redo = stairs_mod and stairs.mod and stairs.mod == "redo" +local stairs_plus = minetest.global_exists("stairsplus") + +-- stair selection function +local do_stair = function(description, name, node, groups, texture, sound) + + if stairs_redo then + + stairs.register_all(name, node, groups, texture, S(description), sound) + + elseif stairs_plus then + + local mod = "ethereal" + + stairsplus:register_all(mod, name, node, { + description = S(description), + tiles = texture, + groups = groups, + sounds = sound + }) + + -- aliases need to be set for previous stairs to avoid unknown nodes + minetest.register_alias_force("stairs:stair_" .. name, + mod .. ":stair_" .. name) + + minetest.register_alias_force("stairs:stair_outer_" .. name, + mod .. ":stair_" .. name .. "_outer") + + minetest.register_alias_force("stairs:stair_inner_" .. name, + mod .. ":stair_" .. name .. "_inner") + + minetest.register_alias_force("stairs:slab_" .. name, + mod .. ":slab_" .. name) + + else + + stairs.register_stair_and_slab(name, node, groups, texture, + S(description .. " Stair"), S(description .. " Slab"), sound) + end +end + + +-- Register Stairs (stair mod will be auto-selected) + +do_stair( + "Blue Marble", + "blue_marble", + "ethereal:blue_marble", + {cracky = 1}, + {"ethereal_blue_marble.png"}, + default.node_sound_stone_defaults()) + +do_stair( + "Blue Marble Tile", + "blue_marble_tile", + "ethereal:blue_marble_tile", + {cracky = 1}, + {"ethereal_blue_marble_tile.png"}, + default.node_sound_stone_defaults()) + +do_stair( + "Crystal Block", + "crystal_block", + "ethereal:crystal_block", + {cracky = 1, level = 2, puts_out_fire = 1, cools_lava = 1}, + {"ethereal_crystal_block.png"}, + default.node_sound_glass_defaults()) + +do_stair( + "Ice Brick", + "icebrick", + "ethereal:icebrick", + {cracky = 3, puts_out_fire = 1, cools_lava = 1}, + {"ethereal_brick_ice.png"}, + default.node_sound_glass_defaults()) + +do_stair( + "Snow Brick", + "snowbrick", + "ethereal:snowbrick", + {crumbly = 3, puts_out_fire = 1, cools_lava = 1}, + {"ethereal_brick_snow.png"}, + default.node_sound_dirt_defaults({ + footstep = {name = "default_snow_footstep", gain = 0.25}, + dug = {name = "default_snow_footstep", gain = 0.75}, + })) + +do_stair( + "Dried Dirt", + "dry_dirt", + "ethereal:dry_dirt", + {crumbly = 3}, + {"ethereal_dry_dirt.png"}, + default.node_sound_dirt_defaults()) + +do_stair( + "Mushroom Trunk", + "mushroom_trunk", + "ethereal:mushroom_trunk", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"ethereal_mushroom_trunk.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Mushroom Top", + "mushroom", + "ethereal:mushroom", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, + {"ethereal_mushroom_block.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Frost Wood", + "frost_wood", + "ethereal:frost_wood", + {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + {"ethereal_frost_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Healing Wood", + "yellow_wood", + "ethereal:yellow_wood", + {choppy = 2, oddly_breakable_by_hand = 1, put_out_fire = 1}, + {"ethereal_yellow_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Palm Wood", + "palm_wood", + "ethereal:palm_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"moretrees_palm_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Birch Wood", + "birch_wood", + "ethereal:birch_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"moretrees_birch_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Banana Wood", + "banana_wood", + "ethereal:banana_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_banana_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Willow Wood", + "willow_wood", + "ethereal:willow_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_willow_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Redwood", + "redwood_wood", + "ethereal:redwood_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_redwood_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Bamboo", + "bamboo_wood", + "ethereal:bamboo_block", + {snappy = 3, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_bamboo_floor.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Sakura Wood", + "sakura_wood", + "ethereal:sakura_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_sakura_wood.png"}, + default.node_sound_wood_defaults()) + +do_stair( + "Olive Wood", + "olive_wood", + "ethereal:olive_wood", + {choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + {"ethereal_olive_wood.png"}, + default.node_sound_wood_defaults()) diff --git a/mods/ethereal/strawberry.lua b/mods/ethereal/strawberry.lua new file mode 100644 index 0000000..e6b40e0 --- /dev/null +++ b/mods/ethereal/strawberry.lua @@ -0,0 +1,147 @@ + +local S = ethereal.intllib + + +-- Strawberry (can also be planted as seed) +minetest.register_craftitem("ethereal:strawberry", { + description = S("Strawberry"), + inventory_image = "ethereal_strawberry.png", + wield_image = "ethereal_strawberry.png", + groups = {food_strawberry = 1, food_berry = 1, flammable = 2}, + on_use = minetest.item_eat(1), + + on_place = function(itemstack, placer, pointed_thing) + return farming.place_seed(itemstack, placer, pointed_thing, "ethereal:strawberry_1") + end +}) + + +-- Define Strawberry Bush growth stages +local def = { + drawtype = "plantlike", + tiles = {"ethereal_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(def)) + +-- stage 2 +def.tiles = {"ethereal_strawberry_2.png"} +minetest.register_node("ethereal:strawberry_2", table.copy(def)) + +-- stage 3 +def.tiles = {"ethereal_strawberry_3.png"} +minetest.register_node("ethereal:strawberry_3", table.copy(def)) + +-- stage 4 +def.tiles = {"ethereal_strawberry_4.png"} +minetest.register_node("ethereal:strawberry_4", table.copy(def)) + +-- stage 5 +def.tiles = {"ethereal_strawberry_5.png"} +minetest.register_node("ethereal:strawberry_5", table.copy(def)) + +-- stage 6 +def.tiles = {"ethereal_strawberry_6.png"} +def.drop = { + items = { + {items = {"ethereal:strawberry 1"}, rarity = 2}, + {items = {"ethereal:strawberry 2"}, rarity = 3} + } +} +minetest.register_node("ethereal:strawberry_6", table.copy(def)) + +-- stage 7 +def.tiles = {"ethereal_strawberry_7.png"} +def.drop = { + items = { + {items = {"ethereal:strawberry 1"}, rarity = 1}, + {items = {"ethereal:strawberry 2"}, rarity = 3} + } +} +minetest.register_node("ethereal:strawberry_7", table.copy(def)) + +-- stage 8 (final) +def.tiles = {"ethereal_strawberry_8.png"} +def.groups.growing = nil +def.selection_box = { + type = "fixed", + fixed = {-0.5, -0.5, -0.5, 0.5, -2.5/16, 0.5} +} +def.drop = { + items = { + {items = {"ethereal:strawberry 2"}, rarity = 1}, + {items = {"ethereal:strawberry 3"}, rarity = 3} + } +} +minetest.register_node("ethereal:strawberry_8", table.copy(def)) + + +-- growing routine if farming redo isn't present +if farming and farming.mod and farming.mod == "redo" then + + -- add to registered_plants + farming.registered_plants["ethereal:strawberry"] = { + crop = "ethereal:strawberry", + seed = "ethereal:strawberry", + minlight = farming.min_light, + maxlight = farming.max_light, + steps = 8 + } + +else + + 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 diff --git a/mods/ethereal/textures/alt/ethereal_banana_wood.png b/mods/ethereal/textures/alt/ethereal_banana_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..e627614df0d7b70b6533867218e731a4c340ecd7 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uJal~(*jISEG{@<w3G+ zo@il7pj51FVdQ&MBb@0N3j}`v3p{ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/alt/ethereal_redwood_wood.png b/mods/ethereal/textures/alt/ethereal_redwood_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..03d324b9cef7006b72979aa0845dc1c2865cb0e5 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9tCQ6=7U-zh3ao|Mv&qR4GU^NUDk*5Ef>y0%~CJboFyt I=akR{0Lb1T5C8xG literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/alt/ethereal_sakura_wood.png b/mods/ethereal/textures/alt/ethereal_sakura_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8a40392638974855dd4533d558d540264075a0 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>xWfkpLVoGZLHk|6jAYX zaSY+Op8Vtgd`6CU|I>Hup2~QLZIZ*6-}+5||J%-pi_@% literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/alt/ethereal_willow_wood.png b/mods/ethereal/textures/alt/ethereal_willow_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..55e90ece29ce99c4f291ecd212d791c125552505 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|u4lH**t4+a#?iICKV)oy zg7%&+jv*Y^lM^DgHZ>}Wa7aW*I5;r&Yz=cf61Fz#DuYgTe~DWM4f+M_E3 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/alt/license.txt b/mods/ethereal/textures/alt/license.txt new file mode 100644 index 0000000..5d6501b --- /dev/null +++ b/mods/ethereal/textures/alt/license.txt @@ -0,0 +1,5 @@ +based on default minetest wood textures + +edited by alerikaisattera + +license: CC-BY-SA 3.0 diff --git a/mods/ethereal/textures/alt/moretrees_birch_wood.png b/mods/ethereal/textures/alt/moretrees_birch_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..6618195a5a07e0a0fc660b983ba0e4056c6e4379 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWJ-;;L@RZPsM3ej|gJ(M` zC*(Q2yPvibC>!tT;uykl-L>~1Cxapni}`~8EIJP^@NHpi)qU`5{j+N|d2*bJn{^UY z%o}c2#~14yS$x_i;ld7+wMuWxXUu6(ZaJO!b@t&X+eW9%mrI#06=X+vJ98zU;(Yhr e<;B`HNBC{#2#7U>#%BYqV(@hJb6Mw<&;$SmxkTRp literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/alt/moretrees_palm_wood.png b/mods/ethereal/textures/alt/moretrees_palm_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..b04fb8e05ce8f4f474032053a53f2922610827c6 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|u1kxZlATl!b%f5n!q5&B zwD)vz4B@z*oDi|KsZmjcLn1=L!GW=7YnbDau(eTF8N|{q%sRjjdi=oFEYap`T$E9TXH1)3WgzziC}Qd9 z;uyklJvkvGVaJ3M0h=c{Hg-DJiZxGXcjl0GUaWk0S_~U=DBCtp9ve2E$rTcOa)}w2 d(h?FF7&xYLRpfn5+zT{>!PC{xWt~$(697a&#-WIi)^4|77O@MXWtt z978y+Ga4|Q|IbizfZ<~)!{5gYHTDeuXEW62G332x_?pY`|1U#bEkpbt2Kyfj-|QI9 ge`h%Mn<4iA%UjX62OG|d0F7brboFyt=akR{03ZV@)&Kwi literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/baked_clay_red.png b/mods/ethereal/textures/baked_clay_red.png new file mode 100644 index 0000000000000000000000000000000000000000..712bd11bdc2adaddb89923604b1ab31862cbde4b GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9Yo@75j)i&A?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/ethereal/textures/default_apple_gold.png b/mods/ethereal/textures/default_apple_gold.png new file mode 100644 index 0000000000000000000000000000000000000000..36669991c77b8397cc26fe9f616dadfe79609028 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMVbuaK)QlYe~N9)RR(`hLx z|1X!mI+zsMY~CIwLySs01P8V| z0$sI-*bL4_#_eNJGOB&#Mb4%}E(|9MjCiw*idc+VoDcViIu@N$XcLT3IqPvk zV2PS;q-O-{lG72Mfs#wQmwI}hIKh}Qp?!hT4F@){eld0xaR!EyyaMg3jy--3w2r~k L)z4*}Q$iB}K_N+z literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_agar_powder.png b/mods/ethereal/textures/ethereal_agar_powder.png new file mode 100644 index 0000000000000000000000000000000000000000..8fe3aca173fc48578c7b92eea56452cdf2814f6e GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsr*BWO@sPOnY|HKv z$In1<#*!evUEaloaX$6pZQjEQJgfoi`V&rYFY#pGu}a(_>HpkU>=R7>I=f%L!4_3| zw2yyvfU@-k{T0n6503GD;tyLCnG_(SaZuPs_>&Ijg191Pz4JoMN0u(?&34$mz}Le1 z#>4F_%eR|W{7hh*qR{Q%6?(hj?OxF~pNQ?Us_fPiJKs3vN~&6F${7f2dG~H(Ox?1T z<=B#m90zP0XFlLA5jfAroHgAmd*!cU#;&s;hIM<)# z-X5Gi`Sk8zeWJn3wO9i$?LE^h&w9Mz)ScZ1*{9CMFN=ThnpbIcXbH&044$rjF6*2U FngHbfQeprA literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_bamboo_sprout.png b/mods/ethereal/textures/ethereal_bamboo_sprout.png new file mode 100644 index 0000000000000000000000000000000000000000..de26a59322debbe56594ab0f7caa3ab5f7c9dace GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{SN8&+qzXj^V+NN9!C9;0 z^Zd=W+_i}V$}*M&`2{mLJiCzwPB<>W+h90h3B$t$Y;N)2uPg&LV8QC`xMmw?-?+S|? z@jcMAFgn2G@e3;l$BZ?mZVhVpc(YRi+TS@ISRoPi+M$wZLFeq zFr)N^r;WABqsW+helb6jt8S(}@ibHLiB93?yVS@OA0)z`eeHegt;<3`GPq|oxj*U|Y>LO*!Er_J2)f1RW4GX8`027lguwTcINiNVv=&t;ucLK6TVFm{yy literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_banana_bunch.png b/mods/ethereal/textures/ethereal_banana_bunch.png new file mode 100644 index 0000000000000000000000000000000000000000..e392972ca41bf9a39a32660cc40f0c7bf24f8da7 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsi2$DvSN8&++ZW8%EzxeRR@k>i z-$I4k*O33q3)|HlI;(+d7)yfuf*Bm1-ADs+>O5T>LpZJ{Cmdi|$Y>xIEip%O8dv%< z#TkhQ*#gA6cX9WuT%pI2Y^BvS<0KakPft_pA&0aLizjz42;iKd8K*ZN=jI8 zP>_DPNg%_`nL%+%i!wNpHnmw;acS*tn89=ASW{D*pFnVLPcLih!o0vj!Jr1K+c$1V b9F=F7<|M4q=<@M4&?O9>u6{1-oD!MdscOEaia=Y`%i%swU zt=kC{XDkWw3ubV5b|VeQvG#Ov4B@z*oZ!H`N|1-gXX#WPo;P2=^6@T0=LmggT@6-oTTeBFM#TXc--50pMDfLDb&=>|!S3j3^P65 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_banana_leaf.png b/mods/ethereal/textures/ethereal_banana_leaf.png new file mode 100644 index 0000000000000000000000000000000000000000..34386d076e7758380b5b6382d03e8932a28390a2 GIT binary patch literal 360 zcmV-u0hj)XP)O1cJMW#;d6(lSs>AYA)SABF0d)D&*@sIf0t!+Uth!GE&|J9`Yot^J zn5%+E6op9wyvWu=sYPFeDQ?!=A}}gtD3`bhori1D`cIgt<_s>vXggA?U>Cu24w_9G zEJB2qnoVB>vSmGPLI^26-rjD4B!S22wg~RZ^nvoL@RQIq9p&Uum_^WoFGSrkSQ1j8 z=6IYp!LdV(jf!37!Mh=7|OINm~1v~Ihdotld?fddiD+prl}j)c3W^aOXQqvYin{-5cTnD fGC1qy<-o*HyP31US3XA{XgGtXtDnm{r-UW|`_ng* literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_banana_tree_sapling.png b/mods/ethereal/textures/ethereal_banana_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..d3d2df863d81750da63e930af0015b3534495c64 GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaMoSZ!vmqcpvXH^9Nj zxKz6{LE|V;ma!zrFPOpM*^M+H$H~*hF@)oKa)JX>k3kzlk0M91lVlHD4^NMR*kXpo z4FwDlZGj$=F2?Mv&QpwxHMAYJ8XG1U$Rz0OkP?@0=Ja4-IMvUrXd@Ua2sDks)78&q Iol`;+0O>j@aR2}S literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_banana_trunk.png b/mods/ethereal/textures/ethereal_banana_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..93d5bf74c9feff924542f925a157dd30da24a1b8 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uK9Tm5fO&2&gzYIo)eig zHvq+>JzX3_IIc4WFs%R25H?kni(#eHq-6|Inwm}wqRXaQG91hbdBxC>8oY`jE7flq zL*x>xAcmJwPrVpsh)v~WU=y97#n9B6G>IW|fo2thRMu2YhGQ!OrZQ|?Vil_3FU_#E S>hflwH4L7velF{r5}E*$6)`vf literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_banana_trunk_top.png b/mods/ethereal/textures/ethereal_banana_trunk_top.png new file mode 100644 index 0000000000000000000000000000000000000000..3963db0bf6d281a297e7157c94d58ee2f28a789c GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b-8egMZd-`IllIX~{dL(c z=`6YOK&cQ<7sn8e>$ay4@*XhYV0KugBQQ%Z;0S|T&V)DngBxAGzD_xl-bfyBJ O`3#<}elF{r5}E*~d^j}# literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_banana_wood.png b/mods/ethereal/textures/ethereal_banana_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..4498f3464bd6575835528c39b5557da6373deb81 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW-8my8*gkNHNuKXE ba{OQnSimi^YND$T&>jX)S3j3^P6dskpjYnA`%m%Md%8G=a9n2$U|9d3K})jj0>clfvVMlYM@`)sW**UWV@PXY zcVl2PJzdCf(A;eT!v`(b$qW;3GWav}9uaV3aBH~3#=zFJhLM4haR~#1JVU|+hPmd# eHyCD`Gp=xuko5oMaddsJ@QJMwDq#Z#H!;; zYJlR5B|(0{3=Yq3qyag`o-U3d9M_W*4)D*AI?%$zES`Lri)~$68w=a9<{owl2^q;o oq4JxJEtQ-T9_TV`mdKI;Vst0F|{ScmMzZ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_basandra_bush_stem.png b/mods/ethereal/textures/ethereal_basandra_bush_stem.png new file mode 100644 index 0000000000000000000000000000000000000000..016ebe8905036adcebede3f855fe0aabca3b5de0 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>ds*tN*#pUmga~J-5`^=u_&C~B(5;O9`tqlsMTxXiPXYT3)2lkX_F*6ru{$yleJSKMG TxjXM+py3Rju6{1-oD!M<%~LyG literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_basandra_bush_wood.png b/mods/ethereal/textures/ethereal_basandra_bush_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..97e80706f1c212174b84edadcd2e5926a70ad56b GIT binary patch literal 289 zcmV++0p9+JP)Ix+jg8(eMPUd}!S!1lm~l83=0|YyCEKqgt(BxG*VO95LM1gIorn;kO4i zgp7sk4fru>{Ryxop(ijI4)c0Qn$)M^7F8PQ9tQENh*I>EbW1nU%PCq+8ncI7m$;vz zPmhS~f>4zFZ;cjwePWU~z8Ynv^8mBtJ3Aanu+IL^+#DmH5y~B5K|wz3BY8OVckdBg nvla9Ik)4F78!Rn)=$`)opqNS0o@9wF00000NkvXXu0mjfzxZ^@ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_big_tree_sapling.png b/mods/ethereal/textures/ethereal_big_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8faed3eeaadf112abafcae263baf3b6097f2b3 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsR(dL~PPz$|rYjCy zv;vAVmIV0)GdMiEkp|>AdAc};a9mGLU|@d6?9k-O;4$MYqtGfr9-f}QbG$r0!gpmP zB%G8RwbGU`UfsaPkSf{e#IuLhq3I;!v8P@M45yhGD&sl1qAx!E2sDks)78&qol`;+ E00$5(Gynhq literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_blue_marble.png b/mods/ethereal/textures/ethereal_blue_marble.png new file mode 100644 index 0000000000000000000000000000000000000000..359fbd392a95660979f501c0f562d4aa0762c089 GIT binary patch literal 339 zcmV-Z0j&OsP)Yk6va=5LfgGBAjIO}L+I!f#G5}t`GTlu zCzmclNiw>*Bw|1)!Uxrt=u^bdA@n8s+39+{xzi8sx#u1ZZb!TP1PmYN2`!F5?>yBOi@?vZv9;I<5j45whzlp(t*96zbwegkGIyT!Rib<4A# l=V=eyLgsxN{5$Py`3JdvjJh8%#A*Nl002ovPDHLkV1j?mm#Y8( literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_blue_marble_tile.png b/mods/ethereal/textures/ethereal_blue_marble_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..60345108ee3c581d728dfca698683ba184dcace5 GIT binary patch literal 372 zcmV-)0gL{LP)wzkuEfsTax!xvyX-Z3YJWWs*_2agBIfL%95@@2DT86g~L6 SHFEv{0000?_mW2mx*)O#HKJwoGw2c(4c(T zLF8h+cBEL!^a*=z+nucwIQLhWd+OhHGaIkj?a6WxY|Ou`({X;;9$U9?za~D(Fzz+_ zt2b_Xa@XakiK={Tg_>bSo8q=arh|$L)HNg*mOLzZwk%qZxqGecUcR0x=}2FjN$xEy zyfTlk1l#AsF-rsAe-D2=-To7+`ENP99ZDZGfUaclboFyt=akR{0KK4H AZ2$lO literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_brick_ice.png b/mods/ethereal/textures/ethereal_brick_ice.png new file mode 100644 index 0000000000000000000000000000000000000000..308e89b75f3bd77ddeb9f1c9a449a5da0f0cf37f GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWU2yzc*Xj%FFaJFM?%#?d z*NXbqN%Bn%1Ii|Nx;Tb#T$k;+$a}e_Jw2Q&h)z4*}Q$iB}8E-|2 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_brick_snow.png b/mods/ethereal/textures/ethereal_brick_snow.png new file mode 100644 index 0000000000000000000000000000000000000000..68d88d1194e653146162971c106693ee413a9baa GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZy?o`t%U9nXK6<}q&DOtv z|L@+tzon(ir19Sxpn?KV7sn8e>#AoC@*XzeaSjZ7$uMmWqmI=~2ZwW8FZfOPTfVaE zlgppOhkx(qH@eFA*hR}_Z*D}hU(sQ2kE_pJs&6Q5S$uKLEf<$NBC{UM_;A>T&Q0Sqv8|6ZA~GbD zp;+|FT!#6{Y7z`$5m)Xr91RJ-#&F|g>Qshlrj4--q2gvn3=vzu_A)4kq?R7xki9-L SD0C9g8U{~SKbLh*2~7ZQW;9U% literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_calamari_cooked.png b/mods/ethereal/textures/ethereal_calamari_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..a0029b1514b201841edb8430675d09ff5fa35c15 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAf3?x51|2hvy@dWsUxVjhk9G$N7@L>7XRUSRl z`W=Acj3q&S!3+-1ZlnP@fu1goAsp9}6ArNMxYpotHAleG@f8Cz^JHe}IVm$3#I8pr z^N0QB(%90F_>zrn8AltZCC{839$^)UkQ)*qDh?-%nj4K98}oUYgPEB>vv<5?P`D`& U5qIp(U7+C%p00i_>zopr0G#7DZvX%Q literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_calamari_raw.png b/mods/ethereal/textures/ethereal_calamari_raw.png new file mode 100644 index 0000000000000000000000000000000000000000..67f6aefce788697459ef6b072b90382a03e9e8ef GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAf3?x51|2hvyaR&H=xVjhkTt0c||LdD>bNBZH z1sO|%{DK)Ap4~_TasoYF978y+Cnp?W-7&4fSJ4ynaSL4Bgqff~>30 zGI8l9L|8R8YBnW0aWSh)A7jWc9Xk#g}&$ z-8>SP6(@e`+XczhDN3XE)M-oCr@B#}JO|$q5Ho8hLn{ayT8_IvA1@CJ9bZ zTy)^YDvl%#NrPQl+6|$GR?Z>XjEXbl*{$r{DK)Ap4~_Tatb_M978;gCnrd-Ml>?-YG9O_f0Wg?;i_n? z0>j-NmJq$g3l=DJHEftPX%jGwc|$Zb-GR%~#g}+RfnU L>gTe~DWM4fx28=n literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_black.png b/mods/ethereal/textures/ethereal_candle_black.png new file mode 100644 index 0000000000000000000000000000000000000000..2bb41dc2dd834a2617d66de4d13921fdcc7786de GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^3P9Yz!VDy5c$8@ZDgFST5LfpC9~)~+AwKs1*CyPX zSCDZdZU#__u_VYZn8D%MjWi%9!_&nv#N+teDF-GC*F@=cJ{9nEtG?KZ@&akUn^6LL9tv`U)GI+ZBxvXh0UZ*s&T3Ro#@?2z*=xyZ*%OY5$Rn6G$_!@plkMr^7~*j}IYELoqLEpVQB2%~F)X~Kk)gy` zC}3w#Q&W=$(;+XfQ%o96PA{0+GMIXfIkl~5lagG-t+AL}Lvm4ccE>V?v(o|_gTe~DWM4f DUrs<& literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_cyan_static.png b/mods/ethereal/textures/ethereal_candle_cyan_static.png new file mode 100644 index 0000000000000000000000000000000000000000..7a080c3c9638f30b65fdb91ee3b37d175bb2be81 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8%Rr>2C8j~gR5HvPXj z>+akFpiD*zdl-;nED7=pW^j0RBMr#$@N{tu(Kw%+Ai)~Z$gIdHCT_wQ7GBcGP+}|; zu(PMBsY!$BkeAmfCJiR17ffv#Og+b(+E%nlNiO2nSj?>Nl+Y`Oy Svk!n~GI+ZBxvX<@L&PU2^}g zO?a@l2q<&0Gix(fo*j_ISQ6wH%;50sMjDWl@9E+g;&D7VL4q}+ky(*ZOx%RAEZl_g z8bgV(P{7WfrluwhrbAv{reW zHpu;E5$4gZDoSwoH{elR{4#mV9|>K1H*SG7PuZ(}B}n$YWM=rcO=|Yi?dd8&s~J39 L{an^LB{Ts54sk+? literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_dark_green_static.png b/mods/ethereal/textures/ethereal_candle_dark_green_static.png new file mode 100644 index 0000000000000000000000000000000000000000..bf33bb706284f3af7587b29daf6d5840de3a908d GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvSN8%Rku(wI^~!Qxa{q76 zda$_YVrLdm^6aKBH9(57B*-tA!Qt7BG$6;z)5S4F<9u?01ZzYivm&FIxCx_KxC!Gm zh7x10fSo-}O-&k1hrGN_F=;S4ygTe~DWM4f(~C1p literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_dark_grey.png b/mods/ethereal/textures/ethereal_candle_dark_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..83b563e539af50c3466e495d1d2e7c05f0f09d58 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^3P9Yz!VDy5c$8@ZDTx4|5LfpCp8!wWw#JIgr11aO zCOlYN1eCehnYHWMsTv@Qu_VYZn8D%MjWi%9-_yl0#N&8!f&^@lSBFv**Rg~cFZ@{Ct_+|2zKN7n3ZrlQEp0Zc{N|5Y($;|L?o7C*3+tXEmRx^0I L`njxgN@xNAtWQNH literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_dark_grey_static.png b/mods/ethereal/textures/ethereal_candle_dark_grey_static.png new file mode 100644 index 0000000000000000000000000000000000000000..e18e338a08f65b9658a55811510b2fc46fb6b999 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+08iVt#){0O@c%bw z-JM$il(CCEYzCwlOM?7@862M7NCR>_JzX3_G|nd{NU%mUGAlBQiJLHng_krklo$&I z?Cfc3YSLgj{#<1{`Murk& zp@5w}US3`rOsATf4smHPb-iG6%V6?3*5$UMO-gDZH^*Xb4ylFF*)7W$&Q1$#ko(Od z%#&8+;BUaAxcFuAmOm1@_HNt)Yo4-K{YsGRd&$h;(j|3s{VnxvKx-L1UHx3vIVCg! E08pJlg8%>k literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_green_static.png b/mods/ethereal/textures/ethereal_candle_green_static.png new file mode 100644 index 0000000000000000000000000000000000000000..d1fc207e0294535b5aff03798421664f4cdcafd7 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+X{U@5n&j$NY5l)B z>+akFpp47sE8l?>V@Z%-FoVOh8)-m}ho_5Uh{pNk1PRuNMrK7uF>w>du<(*bh7x0; zfSo>GUS1kZr<$4$acMAhy_!?$%+tj&#N&8!f&^LV5%O43{dpB-@HBZ^AekDluy<}#1U?DZt?z!53puG&9u6{1-oD!M< DGH5|* literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_magenta_static.png b/mods/ethereal/textures/ethereal_candle_magenta_static.png new file mode 100644 index 0000000000000000000000000000000000000000..fac89cb622798c7fd898244451f76e2d17f26275 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+d})tEdbM*^Qvcta zb$4z7Q078UvOx_!@plkMr^7~*j}IYELoqLEpVQB2%~F)X~Kk)gy` zC}3w#Q&W=$(;+XfQ%o96PA{0+GMIXfIkl~5lagG-t+AL}Lvm4ccE>V?v(o|_gTe~DWM4f DY{x)^ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_orange_static.png b/mods/ethereal/textures/ethereal_candle_orange_static.png new file mode 100644 index 0000000000000000000000000000000000000000..875174db53d978c8662e59edd75f0d92e16e2745 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+mSD*j9pcAIME>8L zb$4z7Q0B+y*)M<;V@Z%-FoVOh8)-m}ho_5Uh{pNk1PRuNMrK7uF>w>du<(*bh7x0; zfSo-}O-&k1hrGN_F=;S4y{#<1{`Murk& zp@5w|O-)T2OozO@PBCdPIlW+N%V6p`=G3;LO-gbRx5i>_4ar5(*&WLm&Q1$#ko(Od z%#&8+;BUaAxcFuAmOm1@_HNt)Yo4-K{YsGRd&$f&HB4Gmq_xlnXf1=MtDnm{r-UW| Dm|Q@$ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_pink_static.png b/mods/ethereal/textures/ethereal_candle_pink_static.png new file mode 100644 index 0000000000000000000000000000000000000000..2e2f76a7691bcdb229007437d52a87e75172f99d GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+2|=O1x+fk;&;EaN z*4?=UK$$to*UEtuV@Z%-FoVOh8)-m}ho_5Uh{pNk1PRuNMrK7uF>w>du<(*bh7x0; zfSo-}O-&k1hrGN_F=;S4y3H#aI&L7tG-B>_!@plkMr^7~*j}IYELoqLEpVQB2%~F)X~Kk)gy` zC}5|LmzS3Y)2XJWLtGk6T`!p2GMIdhb-Ar*lagA<&9Ru9Luz4kcFQt`v(o|_Da+ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_red_static.png b/mods/ethereal/textures/ethereal_candle_red_static.png new file mode 100644 index 0000000000000000000000000000000000000000..96e400746ae29e495343be8cf4591178c73dd584 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+^X}>sjAhr@D*wMZ z>+akFpiH%q{|g|+SQ6wH%;50sMjDXg;pyTSqH#VsL4q}+ky(*ZOx%PqEWD(Vp~P4y zV5g6lmzM_9sivkwTpCPWFPPjin0$_PxvglEl3K{kv6!1fYGHJC%QA*EZU(J|Y*$^F Sqjvz!WbkzLb6Mw<&;$TrfiR~4 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_static.png b/mods/ethereal/textures/ethereal_candle_static.png new file mode 100644 index 0000000000000000000000000000000000000000..2d5922841a78004884ccaf68a0f9ee1b69ba0faa GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+J=;3Ie>(g0-n#!c zXWgA!0F-$>El3qeF_r}R1v5B2yO9RuczU`xhG?8mPLN=YXk=Do6caaL3=1!5WGFEf z3fS4x)YPQGbjZu=6q5#%(+j4y45prAPHijNq$C${Yj7{()R0^ho!zmFA&r}X{RrEU USaqQ2U`#TpRyi zn{aPl0Z@izg3~%6#aI&L7tG-B>_!@plkMr^7~*j}IYELoqLEpVQB2%~F)X~Kk)gy` zC}3w#Q&W=$(;+XfQ%o96PA{0+GMIXfIkl~5lagG-t+AL}Lvm4ccE>V?v(o|_gTe~DWM4f D%}zgZ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_violet_static.png b/mods/ethereal/textures/ethereal_candle_violet_static.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4cbf2e9072cb4e218a91570c125cff91ca6f52 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8%RZ{wKhaR)M78~@*& zb$4z7P-e#$b|WCgSQ6wH%;50sMjDXg;pyTSqH#VsL4q}+ky(*ZOx%PqEWD(Vp~P4y zU}sNLQ{#<1{`Murk& zp@5w|O-)T2OozO@PBCdPIlW+N%V6p`=G3;LO-gbRx5i>_4ar5(*&WLm&Q1$#ko(Od z%#&8+;BUaAxcFuAmOm1@_HNt)Yo4-K{YsGRd&$f&HB4Gmq_xlnXf1=MtDnm{r-UW| D52HbL literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_candle_yellow_static.png b/mods/ethereal/textures/ethereal_candle_yellow_static.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecdc1788d8a15eb12da5c28cf2dc312407a6940 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+o(|pr-+eEf(D;9I z*4?=UKpE*Z@=JgeV@Z%-FoVOh8)-m}ho_5Uh{pNk1PRuNMrK7uF>w>du<(*bh7x0; zfSo-}O-&k1hrGN_F=;S4ydst}eC-u|X=?QzC$Z zj3q&S!3+-1ZlnP@x}GkMAsp9}6C9XhcpaRwStmqn<#I_eH85Bk#i}NgaKww9t!?T; fhscWpC2tv?it;$WnO-m%sFA_b)z4*}Q$iB}9rq*r literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_coral_blue.png b/mods/ethereal/textures/ethereal_coral_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..39c568e724edc705bd9bf802e0aa8f773a036375 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUbuaKSU%St2_VVDJM>Oj? z>P}tx{^zG+QuZ4DL`|R?#*!evUo|9+|V zji*{je1=EN0ak(U{Sz%3qC&MaAILwl4=mir5Mx(;-QR=PI8}8*kfvj0)1;hgg{E&` z@0I23*im)5aq{(m-jCay+GYv&%{K8$GrU=(|4c5~oacZ011<-kjSQZyelF{r5}E+@ CZcHNp literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_coral_green.png b/mods/ethereal/textures/ethereal_coral_green.png new file mode 100644 index 0000000000000000000000000000000000000000..054900aff02dfd58cc120bd73260c18a1eb79731 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bbuaLlu{mnVfutF~XH=ZG z{id}u1SrK=666=m;PC858j$1R>Eal|aeZo!qu>Dp4i@pO1~m3bJ`4O4MD$3aZLO^Nm3;i`KpWcyMYZI+28+&ZW{;btj&sclRnEt2z`Va*) Olfl!~&t;ucLK6VTmpPUI literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_coral_orange.png b/mods/ethereal/textures/ethereal_coral_orange.png new file mode 100644 index 0000000000000000000000000000000000000000..1c097e3ca8ce0ec2e21e5f9d33b871253c148a2b GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uI>dsFOwO*l{09xt`i3e zGL{7S1v5B2yO9RuID5J{hHzX@PB_37(GcO#)adBg;@s%yye5^gnMFF9xw%1ESiRXr zX*L`4>|_rn=3wsy%*?O11n{!8UD?9G#&$7)jp2knhhuCAlMT=~22WQ%mvv4FO#tU3 BDc1l1 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_coral_pink.png b/mods/ethereal/textures/ethereal_coral_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..20bcbd75f97ffd6def7c21509baa93110ece2b73 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>ds|JR=SAJp;x{%fgY zb7um@8B2ovf*Bm1-ADs+B0XIkLpZJ{2Na~dObFOHBNX9w1mOa)z4*}Q$iB}WGqHG literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_crystal_axe.png b/mods/ethereal/textures/ethereal_crystal_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..51f5bbbb3ecf994f1aa3245a4cf10cacb0e932b6 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUbuaLVkM?X|biAXv+1ph! zvt-?dHESle`7U3v)D5VHu_VYZn8D%MjWi&~+SA1`gyVX0f&<&afLWoM42L*^iW;~y ztehpAR0UQFI2Lxu%=T1lnW*!CNzkB0YO>A&2Zx5p21Zc^2Dt-lTRv;Kd;%K7;OXk; Jvd$@?2>==PF~$G@ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_crystal_block.png b/mods/ethereal/textures/ethereal_crystal_block.png new file mode 100644 index 0000000000000000000000000000000000000000..b0eb2c3abc287e37d1ec0fddc35454fb7a81ee6b GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWomlT;R6X&^{-&LaqFfg2 z`S@s8>M_Xxpsbyzi(?4K^<)m-(9ocyAfqG>5f)ZW}W2Y@j71JSF?hQAxvXRi0_@a>E|r`5|! zCUu72eDKz;^58yQYumWCJ0-Pq+;?AMJ@6E$p0OmzFPOpM*^M+H$K2D!F@)oKasmUh zDl5m?l#K$XG;&&umgTn?#IUj+F!45E4mr@!*w7#q(x54*rqJNr;3(k5%+L_S?!_Lz R?;g+y22WQ%mvv4FO#qt(I2!-} literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_crystal_ingot.png b/mods/ethereal/textures/ethereal_crystal_ingot.png new file mode 100644 index 0000000000000000000000000000000000000000..3c1df4420e5e6f5730d72bb462e6900b095d8b9a GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(abuaK)zwhSiWhG6M*4%yk zKDA<+o1xilT!^_y1OU2O_XY0*wNkXE*PM4B=E>Zm&G={iUJQ)gAKS=TxDL`QS; zyh*_kp`jbrtf?w=Nw~@$3RK2e666=m;PC858j$1Y>Eal|aXmS~fziuLVAjQmNX9b) zp+;=R63Vj_dDuFyC2%+!Y!O^!7U0BiMnf=xGR2JMi&%jWs#t|2# S#_Fy_Yrmrlv6>RcHCnYxl9UidoEHm|B>mMIsqqe# znSo`(TAHB3>=}{KeM2^wrB4O1vf75P@8vckKD1~;@wR}0;Ir3gWj#M7sVwVJxPk!@ wpuKVR{1^_>RzL4gkluP}QL4?CM})%!?*D2nvEo0+{Qv*}07*qoM6N<$g1Nq)`2YX_ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_crystal_sword.png b/mods/ethereal/textures/ethereal_crystal_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..a0001d0446c80a22ca616f169c3ea69e0e950743 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(abuaMobXE@wv~1XXB(r2) zcY{~Yw38dwtm$ZOo|U#c0;r6!B*-tA!Qt7BG$6;;)5S4_<9c#}1FIgBz^tP@rwaT+ z8@O1KL=#FHxC~|<2;t~-3NaATa?1Fome`Rg%GD#V)h*z)gy@Ag>_+yu&YEw~o&)kARjkc)I$ztaD0e0sxZCN|^uv literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_dry_dirt.png b/mods/ethereal/textures/ethereal_dry_dirt.png new file mode 100644 index 0000000000000000000000000000000000000000..3d280730760c4c8a0c315913665055921082bd12 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWUDV)zVo64SzH42))yDp) z2fNB-FPYB=%2s;1IEHXs=RI>!u-Slz^`ibnrU|}W8(7M9b~dEExx*~^D_`}_cin6I zo~=kavF_u!WXFw>s+x;?JLcY)uq{3Ko&1yJ8HdxC)P7n2S8T#wkE*H$<&OO38|RM6 zHLjLBXDTl6Qe>I2K$NOK@7`TgO75;!>YE@OzNo|cFSA0C;76-dol-zYFnGH9xvXds*^Ani69%NrnR&+SEEGNF(suY1-8i>7BAw6m_2F10-+-cs;X8C{u%&y?5bgw; O$>8bg=d#Wzp$P!MW;E6S literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_etherium_ore.png b/mods/ethereal/textures/ethereal_etherium_ore.png new file mode 100644 index 0000000000000000000000000000000000000000..7acdd6d0a91fe90ea7b815f06a73643a87905861 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bbuaLly5wTZ)RR|ky;;Be zPW*|h0YE9nk|4ie28U-i(tsQnPZ!4!j_b(@4a|uW&72*g5-buD5e+=fZ0r+e2rx4n zGjk=FFnKd@GHy^~c2me?5D8~6WLY4=B$B|x-lAc=skDHB;qoq~wNrIOP6N$j@O1Ta JS?83{1OSp)EfD|! literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fern.png b/mods/ethereal/textures/ethereal_fern.png new file mode 100644 index 0000000000000000000000000000000000000000..124b593c1513c31954131f9f321be1965d0fcfda GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bbuaMo%F|13voP?IsbA%{ zTz~gLpcG?CkY6x^!?PP{Ku)Nqi(?4K_1>P_yayC`n0w)Ie|-i^=yZqtEL5&Y|6MNyhznJb#;=YRnMiEwSB*ft}-$C*nZSm ceXEjjT^WboAsNM^KnoZ=UHx3vIVCg!0EUV_`v3p{ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fern_tubers.png b/mods/ethereal/textures/ethereal_fern_tubers.png new file mode 100644 index 0000000000000000000000000000000000000000..cef66b66511b1a421bfd0bc77b69c6142ad595d7 GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(abuaL-(`46mQmBen*w*7T zw@C5JtxbX1*7eK7bsN=I1C=qB1o;IsI6S+N2ITm8x;Tb#Tu)9&NC--5VE9(1(d_6c z;AA{YlG{Nd^IV&NTUWM1%R?cqNlaN{A}yJ1Ggz+hm~pO=OcC-hp22(x$X+6uBottL eMTO0Po#Di39+orL?VNxnGkCiCxvXdse-<FMGa!f`!0!GVEKU?F?Dp@E5kfuVt_L4lbmL*yJz2f?cx v3Wk5Bn3;qBTxa7rXkf~tv1}{TB31@zXRaKU4Ggz|hA?=#`njxgN@xNAfBPnl literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fire_flower.png b/mods/ethereal/textures/ethereal_fire_flower.png new file mode 100644 index 0000000000000000000000000000000000000000..cea7a8a6248ac136ffa69bdc0e09984b429d91eb GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa3-AeXbuaMA789$u_(KB`%GN8IL5GWj$y(VW^$apy9^GnA*xB;N5WX#017e p31SS!5=VQ4jvOfJZ0h9UVc2_$%VkyZK{KEY44$rjF6*2UngDG3Jy`$% literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_firethorn.png b/mods/ethereal/textures/ethereal_firethorn.png new file mode 100644 index 0000000000000000000000000000000000000000..32304b56a76d6d0bd584c7d1666bcfc3a3511ad6 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsQ(m{d?hL5jRe0Ea z{so{oV@Z%-FoVOh8)-m}m8Xki2*>s01O)~Q35gk864DY*Nc$0a>wCxRy41dHpCoh|SUKeNzgQu&X%Q~loCIE|3F&6*; literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_firethorn_jelly.png b/mods/ethereal/textures/ethereal_firethorn_jelly.png new file mode 100644 index 0000000000000000000000000000000000000000..c59587ec5de01ee1f01a5d9809908fa97d3ae915 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaMQvHRTX&Vch5Z*Q** zolueDBkaWplw~Xl@(X5gcy=QV$g%QtaSY+Oo}8e-w}H(e!!0?Pnd7vHgqG?7o>UG^ zr>h#8oC}Ovrc4n@H z$Pf>!>=@6P%^BG97dqP%a_0my`=(2A mH=cdUGuP5Fps`Vffx%8d>e1286PJKaVDNPHb6Mw<&;$SwHCyli literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_bluefin.png b/mods/ethereal/textures/ethereal_fish_bluefin.png new file mode 100644 index 0000000000000000000000000000000000000000..2eea85dab9b1dd8f92f4b01254428a6580838ea5 GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs#Q>iWSN8%R14DNiSuJ~~1fIC( zx)onIy|=R&*L~c@7&__u|0i9?`>K8c6*HCu`2{mLJiCzwM3BheB*-3N}(B|I!l&h#ONJJIAL%#LimJWnn2u9gW$qd4}DTqABM{EtXrtJ zXx-!~CRSDwF0rS?cd@KeW1OkkC%Uf7Ns*^ZmZxWxp58*emux&;JUp6-nwl@4b|zR~ o61{TjGK+$kw1F14@Z&Is)gPtaxOl`k10BQQ>FVdQ&MBb@0F2>KxBvhE literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_blueram.png b/mods/ethereal/textures/ethereal_fish_blueram.png new file mode 100644 index 0000000000000000000000000000000000000000..7df9beb2de574a651456b4bb4bb6d89ddeb86ba7 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsg8-ipSN8&+Pm>egBunXND9di# zW^(J^nP5S&w$8Zt1ZNl55629@-YmPgOrS89VSM zrwe{wc{kyb3Y+5u)n{IBJe34)FXJ%i&|cLvb5BJq2gC1ua<5mZ=yd~K!{F)a=d#Wz Gp$PzHoL&6@ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_carp.png b/mods/ethereal/textures/ethereal_fish_carp.png new file mode 100644 index 0000000000000000000000000000000000000000..ccfe6c69156c30d6d9916e136175479061732088 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsxd5LKSN8&+t6ljgGhMxsT{ec9 ztea+f?NCK~iROuQ9(qcA?_D-SmId4=Z-kQcC5^Az7geTjZVdY#U%dNV)M<+6-G%-zPZl1t(BhSrEl+8_%afP%* b2Q$NjJ0h>se_y)*bOVE@tDnm{r-UW|I%rD* literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_catfish.png b/mods/ethereal/textures/ethereal_fish_catfish.png new file mode 100644 index 0000000000000000000000000000000000000000..d213fcec920982b17df6d9a8cc6f6a4481c0aa51 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs#Q>iWSN8%RAAj?-OfPLcxxEM0 zT)uj|vo~kM=9$+GggzvDeVN)~v+Blgpkl_7AirP+hi5m^fSfW<7sn8e>&XcUyam1u z#*?KIY|LDF+m`4V1bdzkI1+vIz>16&896Fb4w^PQo(#Ph5plyqV{@b9#WNNrDk>K) z>}_;3IC6FAk*lgpikO;L?hf4LUAd6SUESHUU}03HqO*`QJF_#xVu{HCOgAFJ*c91J dS%vO$F^D9IsR}gN-2l3P!PC{xWt~$(69CnWPwoH! literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_chips.png b/mods/ethereal/textures/ethereal_fish_chips.png new file mode 100644 index 0000000000000000000000000000000000000000..45a96ee25ec9bba0a368d8747cae3b56067342ef GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs^#Gp`SN8&+J3G_AY+;yPu5xvi z$FtKtw>uej_G$mWk@W8EOV1qV%NI|kEsvMIWAX&3g|Q^aFPOpM*^M+HXTGP4V+hCf z)F`on6|TUs((h5@Pv~u zLUZ=T7?@}_IyMI`xpQNWiZHLnk>Q0JUeLhm7>Q-pDt4PEX=&Lt5;XO z>CKA((UR?Rc1~?na*SN8&+(nUM2KYR76!(r*M z3wN?5HiQWW70+^sZwL+4`m|s8|NX)%{f`5I>KRLd{DK)Ap4~_Ta;iLC978y+CnqTI z&X^@-Fk7-A;>^K=E0>+*3`i@8knotYF?i_R2KjM literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_clownfish.png b/mods/ethereal/textures/ethereal_fish_clownfish.png new file mode 100644 index 0000000000000000000000000000000000000000..4a528ed306aeda0fefd645479b4beda2b8a83381 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsxd5LKSN8&+r^O5_LKyz{D*(lU zgM-gLc>4X<@Bi!KEDUv4WZM=4MHx$i{DK)Ap4~_Ta;iOD978y+CnqQ{wH%6^>o-^AZoo6TsZ z^%hWb#v}k=TdKWVO94R^bt-GVVY&=8W3RMd%}@5MXGyJv+xxzw(|_r dR`M)iWSHkEAsUpIbQVS)SN8&+(o(&XcU;s%@tXLe=rbUARa zyji%^C&@ulmF?Msq{l^%9~h}Qwk3UhQ1rOqvw*W9+hw!l;Nr&t;nPjp5-zK_DjYr< z*rT|0hcC+s52jV7{KbWZh0IdRjvNR$Fyp|K6%5-NB~_Fh7I8EB>IgNIn_bEV+RNbS L>gTe~DWM4fZCFd) literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_cooked.png b/mods/ethereal/textures/ethereal_fish_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb9a8fd0efa538cf9ce37c6856bc58ac1bed210 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(abuaMQS*|!WUNXv3V0pI8 z=~k`#OQY^gHm+}Ri+j0I1E`F#B*-tA!Qt7BG$1G4)5S4_<9c!e15+9^8;1c`o1x1> zC%2|k38KfG{1g<^gfBXYIxf%>zR0DnsG7=_cKn;bRHtNSwzP{*>g5y4Hh&PC%8@9b zeDUPQE0RkreO>nm=FBThTFo)z;2g0RJR1+_NM;Ei5oB=KEil(o{gwvuGCv%F3K&a*{DK)Ap4~_Ta?(9r978y+Cnqp82C!)aa5Wh99NXGU z==O}%IU3M-h^dMvE~p+oDX_vR@`$TvB*UQq;}BLOiQopF33=O8)Hm=j zd#{+Zkg4OLl#~uj(4hxnQXCsKO+>O1HLh?n{F}nBzw=Mk5}=g~p00i_>zopr0Fr=3 AS^xk5 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_flathead.png b/mods/ethereal/textures/ethereal_fish_flathead.png new file mode 100644 index 0000000000000000000000000000000000000000..d3221638f711d6fef35813841669b6cb08f11966 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs-2k5uSN8&++#r)38y0tEIK6#x z6SxxWxdKPyF$>bN<|QKo(<3kY6x^!?PP{Ku)}; zi(?4K_2h&FTr-w1Bo}IF`ZgGwPL+_5GcYjVVrrbgRBYM&KsMPi**V$KxtQ&tab{ZP z!iAaZ-tq9H8G1X%IL(PTB^gnhS6*3OsAV9+!294`#D-+XD;s2aRjj!fPQ(kxlFVdQ&MBb@0HUT#o&W#< literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_flounder.png b/mods/ethereal/textures/ethereal_fish_flounder.png new file mode 100644 index 0000000000000000000000000000000000000000..dad645a56e8c152b485d324caa0f884a50cf6da6 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs=>VS)SN8&++0)aaz3kVmZkSV- zU6~lPch~fb=Xc1-35#-A90Mw2ED7=pW^j0RBMr#u@^o=`ut=amU(R~T+rb$ zL2|;$DQh$|G*-zl82JRc7z9|ZVK|Z^5+Y*e$G$O!NwoE1jn7!}>I07c=L!>!IU}_kM2nJ?Dfn1=#Y_sFEyUN<@+~xlA7H-R0KDT-| zOm69e+--+E^?5l+S{~)TKI?3wthG&@)yjKsDvhyerz+a z8)q)3Zfv{q&;b+A7#?=!wpGjbO=kFi(NyIK|X~=SHV>M`V>P<6A6%b2Uz{J3C;yvFYkquMU1Fd54 MboFyt=akR{0GOId>i_@% literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_parrot.png b/mods/ethereal/textures/ethereal_fish_parrot.png new file mode 100644 index 0000000000000000000000000000000000000000..789efc7eb23d56221ccee091fa0e7c7d59ad57ae GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsg8-ipSN8%Rt2x~cYi3$xZcREe z|M&WqcWY&S`11TLv@_0{b^yP|e>C#B> zN=rB`7$VZAVVX7}DIwu>Qo;tKwi{_Z*Fzc3&X9Uo_=a5+=n@7`S3j3^P662RG literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_pike.png b/mods/ethereal/textures/ethereal_fish_pike.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e8262ad40323db6e132405a37e1c39ef135b79 GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsxd5LKSN8&++V<#EJDO7SJ@-uw zSXyg4Z+TrqlK!IyD~()~#bqYE0IFmx3GxeOaCmkj4aiCNba4#fxSpJ_fWbiXz)Y=m z1&-GX*w|DRoFjJJ+`)JvHNj+?0n4V@p-d7zysXA7M@3j;xg}WAy}DF6yHr~(3=BBZ z*g92L8gFPf;861|^$OB0P0(PSbzqUeIU%Nv&7B7sb2Ky=7+!7RU+(N8l?}9#!PC{x JWt~$(697j%L5ctX literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_piranha.png b/mods/ethereal/textures/ethereal_fish_piranha.png new file mode 100644 index 0000000000000000000000000000000000000000..91c05052945c5616916fe0b987cb9c9f88eead8e GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs-2k5uSN8&+XKu{pGYflGw*M`$ z%*sT4KhO zsbAtWC0)Y|3_ipK-QB8T;$rZZfw_DA<7olnjuWEX1T!7Q4=S+tv9Yl^I=VXsx~@3r jv#^WL;I#~^N2wMAx29N`;QLTVpydpnu6{1-oD!M#m)GTJkW&zopr0I8kJqO6_NFTJQevR5%T*^N_e$~2%B#*!evU$Rt8U3KbLh*2~7YvmQGUu literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_redsnapper.png b/mods/ethereal/textures/ethereal_fish_redsnapper.png new file mode 100644 index 0000000000000000000000000000000000000000..57e9f6c40c89b0b5daf98c7b78adc05e5512f800 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsl>na*SN8&+m*rUxU5w8f$Ujeu z*sLw{`|-oCNA@YoaD7~}v?qt*-A;z-Z;pNgs%I<-@(X5gcy=QV$SL)7aSY+Oo}8e- zWT16;rc>Lg0!Kw>WsTs#$cT#qXNrtWd4VS)SN8%ROFRDqJI^JS_BT&n z{p!WLFt4oq_)cwYdGD+uXP`31k|4ie28U-i(twI2MT`vncljS(dsKcJXeEQEtDnm{ Hr-UW|{zge) literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_seahorse.png b/mods/ethereal/textures/ethereal_fish_seahorse.png new file mode 100644 index 0000000000000000000000000000000000000000..8839fc95769858d06503cbdea6e6bdce262770d0 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUbuaL_Vc>91LbE|Y;jv@D z7G3Kn$x%vT>^Dl)e*@JpmIV0)GdMiEkp|=hd%8G=a9mGLNJub9YhXwdXXZG(BtSw* zL4zYzLYs3|ThmOpuC$d2itbOhFl&D4vPR9&*16m=d#Wzp$PzLvN~M= literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_seahorse_blue.png b/mods/ethereal/textures/ethereal_fish_seahorse_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..d33d46ee16980bca5abf1cc1078950c22426d872 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUbuaKqY57z<|CeU&iN=+` zk`~>aarB)CyScSq%^RQ^#*!evU;X}mv~4j zEm*>mD#5Kav#n`nn^W4#1V#0STNpMZxmqwQ9ZpbrBExV|Z3U0%tpL`fEry#pS`t$< iQW&-}FFPio!ocuz7ner%<`@p3@eH1>elF{r5}E*m_B|H> literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_seahorse_green.png b/mods/ethereal/textures/ethereal_fish_seahorse_green.png new file mode 100644 index 0000000000000000000000000000000000000000..d72c9f8a4040bda18e0ad4829a73a78046f399c2 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZbuaKKx-lW;bg$E*u+AH^ zQupOanVXp1@0tfxz*rLG7tG-B>_!@p6YS~Y7{YNqIUymzAgzHRO`MtIuu7nWl7a?D zs)RP@thT0^Ze42Y5)|E2r!#CwQnX-JI-IcLg$%>RWhy+Tw>(&qwis^aYDvsklEJW* fdD$@u6$XaQt2txNnh6^Kjc4$5^>bP0l+XkKc2_vw literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_seahorse_pink.png b/mods/ethereal/textures/ethereal_fish_seahorse_pink.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f87265e1aadfe0df9a359c91e842a1e22a07f4 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZbuaLFQ?d7H`qBf&Q!b_M zemM1_y{PDccY9iZ3K&a*{DK)Ap4~_Ta{N7A978y+CnqE%7^F2Yq&YHk95x7)&{E(? zmC)v#wWDFCTh}s00n4WW>>H94Etr)KC#=wT!*Fq#3Xkb6j;t+)o0VD;Ggwj$xDQ>C bXl7xk>g3q<&EVKvpwSGTu6{1-oD!M<*9SX& literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_seahorse_yellow.png b/mods/ethereal/textures/ethereal_fish_seahorse_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..b4010519498aa5baf0a12fe6227e543b5b10646c GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUbuaLFbEWXWOyf8A=3QEu z`taz~7l*_2>_xkaQuBdo7)yfuf*Bm1-ADs+f;?RuLpZJ{CnO{UBsDOoC9`rk?+oBj zQqbT?)llVHwWDEXR?{lQ1V!hC0qh%+94(lY4lmHic*1aTng)w$l&?h679rs&3sEal|aoxAak*`@nz?D7lI?ps)iBfw> z{)FJkdA@HMdA{4bEab9SZC?4mzTx)DCNq1{8EgTe~DWM4fRpM8G literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_shrimp_cooked.png b/mods/ethereal/textures/ethereal_fish_shrimp_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff78f9da01d578c6009449787e9f34cc7a01ec8 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzs=>VS)SN8&+_sg?C?e3fFq3~w1 z*MUg&C{3Z~Rf-K(Qt$V#y#!RoSQ6wH%;50sMjDWlgsBsWbMRx$v}#+B*-tA!Qt7BG$5zi)5S4_<9g~@L%u@>JggV^SI&4m$!NI+ zyT(b@SqfLCHWd9|t#GGemAHLv?M;RQjkYQ845w?zSzMaYwB)eOMLmV>yUNb3{gv#s z_SQLZ-&ylIb`>m~U37Z3SX1$D!_78!rJhM;b}_1EAAkOvc18M{nr-4&$#dC(Qs@7F aW!|)&uVKfLxk*50FnGH9xvXw25KH(yS#JDJ)5yY}%~aY?=nrMjd4xQmk5>+EQGGE$4i={Y<@# zg@Y0jJU;8>dzTe5cD3zH3EQz_hXljbO*?!F3k!`x+HQp1JFr5BWm{9@-X_Nj46izh d9^K($Sh8NYyDj+U6`(5^JYD@<);T3K0RX^)O%4D6 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_trevally.png b/mods/ethereal/textures/ethereal_fish_trevally.png new file mode 100644 index 0000000000000000000000000000000000000000..c35a18ebd0427f0322ce79d00854d76acb6e839b GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsi2$DvSN8&+Reef#Pb8gNuYd2} zc{@GMf;h300St2lmj48*VJr#q3ubV5b|VeQsql1h4B@z*oS?v^;gG4!rpC~>^j-5>F)=X*)HX0l>IoD}&ft}t(z+loplvtf&D016hB-Th VY>%AiRRX$!!PC{xWt~$(696q-Mg;%> literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fish_trout.png b/mods/ethereal/textures/ethereal_fish_trout.png new file mode 100644 index 0000000000000000000000000000000000000000..de05f6db6de2b96091577dc563a86124633dd94b GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAd3?%E9GuQzsl>na*SN8&+hW40^+ovBr*gtQ1 zokxUz$*hos8kbk69{gW-^5(Uz|0iy}B^LM_sGhMT$S;_|;n|HeAg9>V#W95AdUAq- z;0BEYGrjr@#3nCRXcn3gDi${Fz!Q!~OO`EbpEiw?!SYS2sIm2}Lx)3HBu;VdEcMH#rZJ=$ zXlqJ7NHCC)c0QXZ(qP1rsK$Lj(!kQuZAOw~iaG;>^%B;bk}5@2KtmWjUHx3vIVCg! E0CwRmX8-^I literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_fishing_rod.png b/mods/ethereal/textures/ethereal_fishing_rod.png new file mode 100644 index 0000000000000000000000000000000000000000..e60ff6fc870678f5eed749337a1f83793e45243b GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*t3?v(r4=o2$asfUeuI>ds1;NIjU)dsiW17k(&hn*VWD>O z1A*d5G7}o!1(2{Js!0jJR99|BzhQZU-&t;ucLK6T>T{2Ao literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_frost_tree.png b/mods/ethereal/textures/ethereal_frost_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..80b5f92d077061eb1cddc0f7e0f31b1e43b1458c GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uBt|M5=uG-cHVx4dWV35 zex5FlAsp9}IRd>hQaIjv%{n3QYKr11fk#giP6@nFdda22(x`KNrh}58#||}*7NZ?I zTz44lSjyNLu#LgJ&B1&^lDS!6Tflac1#zlkVGM6-1!bI0X|MuKX7F_Nb6Mw<&;$TZ CZ7v}I literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_frost_tree_sapling.png b/mods/ethereal/textures/ethereal_frost_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c564c2e4b7da1bca9d29fe7722bedd75a83f12 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaKS(^hsi)ilyjGL|+E zPz)O zh9T+Oj=#>-ubK-~km%{+7{YN~_w+{I1_K_Ki=Wx{wK3)_bx&bF!Q%1dLdt(Z3*{Kw z+S?uV6K)Or i>of({_FpuAIA5HLkvH1Ha$6hFG6qjqKbLh*2~7Z4YeAj> literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_frost_wood.png b/mods/ethereal/textures/ethereal_frost_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..001012659814170855c68b9ca6b3be97d6765d58 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uKt-5ja}nXTee#J<(hol z$_f;>_jGX#;kcfh5V5tXQBj0LB0|E!fw5<6nB$SKwNY0Y#L_O@I=~Qm{J_>M(dKJh q>sWbsdAh|NkB04KNMc(S$}rJaXqN8DeQSV5F?hQAxvXNwAW)~vKVg=Z`i=APr^Vd&zJpJ8GD>?qJp44$rj JF6*2Ung9*+Ws(2@ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_giant_redwood_sapling.png b/mods/ethereal/textures/ethereal_giant_redwood_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..183da89f309826d12f42b74a63a513dd6030d0bc GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>ds4oc!KR_Y0rrg>Vc z?118oB|(0{3=Yq3qyahRo-U3d9M_W*67muf5;jyZtCX!}7Si9`*pkaT;eii>&>BVu sCu8O#vlvt)WFN42NDI$7%^J$XaP}Lg$D?i`OP~=9p00i_>zopr015jiX#fBK literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_glostone.png b/mods/ethereal/textures/ethereal_glostone.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bb7f33b83179c51636bf163a5418df46ffec74 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b{rv9MyQfDVT-$#6#LA!F z-sUh=d<9B{dAc};a9r0taZs?qfWzft=`p4w8ygtR1TqxZf35dac$fO$X2^L1%cG@&s7jWjMPoD)en%xJdD_V{>v&K|y1hME2gp|7-Vb6`a-N S$9W%U1B0ilpUXO@geCyEC_>2q literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_bamboo_side.png b/mods/ethereal/textures/ethereal_grass_bamboo_side.png new file mode 100644 index 0000000000000000000000000000000000000000..3220c41a934d21ff11aaf9e1f0d25196291a1563 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW1=8*XK0vZ^l}qokknCwT z|0b-=2lAOqg8YK*8R|uUbKL`SLp)s^LpZKa?YhX@U?AX>`G}#c&8k83NB*hO=3W1_ z;vTVla*UI62yxL-a;Xa1u%)TWU~Y!)lS$^RGRrPE9iHws>)z93m&3hR8;YG*I;>4S d|LYTX+*eg$XUVU!cYx+Ic)I$ztaD0e0s#M4K?48) literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_bamboo_top.png b/mods/ethereal/textures/ethereal_grass_bamboo_top.png new file mode 100644 index 0000000000000000000000000000000000000000..954bf7788332a2cdd61e181f941c30d66816a131 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u04xGDp$MATpOF#Z>4ux z@F-9`+|$J|gyVX0hfhLDY67PyZ=%4*$XDkQG#<@3^gv2X=zxN%RbY#v$CZnnif1NH zp4#{_LoMJ?tKpPHCyQ(zXOA972Iq_}ZRx`z6E)b{oYy%i@wiKd#4=7S6?p!n=7KNK O3IW%^p6dR| RC<2=&oJAD8E literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_cold_top.png b/mods/ethereal/textures/ethereal_grass_cold_top.png new file mode 100644 index 0000000000000000000000000000000000000000..801e581730b104e8ae6b49a894f7e3001b94c8f7 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uJwx(CT`8m?hamc+EErL z=;Z0*7{YN~wCf<}0RtXp|D}xfxhEJTk1D4u5wohe(%<5D+=sE&Iw@Yq+^sVsz(b_& q>zO~hH;PW1=5EBp6_;Hzg>SMdi_gZhNj*T*7(8A5T-G@yGywqK87xZx literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_crystal_side.png b/mods/ethereal/textures/ethereal_grass_crystal_side.png new file mode 100644 index 0000000000000000000000000000000000000000..ee93f7b3276988285a011ccb2fbf12cd5d94eb0e GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=8*XK0wkSuGFri>zIp4!NJK!L~QVl>l~#z%7A`-HvnRoIePzVUc|p8ek-m^DTH#qNVWd|jM( yy8}EV{_7fF^i0~`ze8~1#{}8lRg=3H@5`DantA)=uJ=Gg89ZJ6T-G@yGywo43Nm{D literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_fiery_side.png b/mods/ethereal/textures/ethereal_grass_fiery_side.png new file mode 100644 index 0000000000000000000000000000000000000000..fa64f18e938ef1a33eed3a192a0134cce26ca9ea GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=8*XK0vZbl6AH$-^8h_ z%z+%{k|4iedxm<^-(2^ATn|qd#}JO|Q@b2_4;b(;ua|0Mb><8ylu-F&sQcC}VOr_8 z#{nrT4lfKz`I@3yUFLc8xy;U%7_R)Av6iuuU7Je{dCnZWTk-j|O~_lp9nX$mG6I^( N;OXk;vd$@?2>|UlH;MoN literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_fiery_top.png b/mods/ethereal/textures/ethereal_grass_fiery_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f368584288e2460f958d8839f5d13b5fd7cc2c00 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uJw{^lV!MaB$@XeJ0}Db z4Dxhw4B@!Wdhj4;g8`4j#rVvFi(54;8mhNkYB+0gH3e-I_|=v|h3cEay4?THLz^XgY(ZtDnm{ Hr-UW|Y}7V7 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_gray_side.png b/mods/ethereal/textures/ethereal_grass_gray_side.png new file mode 100644 index 0000000000000000000000000000000000000000..2b112e8b7b832206b07f958d8d4dbc5479b03714 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaJ%GJ#;yq)CewE!whW z%Y>kd`+$7rk|4ie2K)LXp(cMIH^9@yF@)p#+%8AK1_J@+=H`0}3xy_eWn7k8@ZdgI zJL|W}bI&Y#n`$lGpcvTZFmdKI;Vst0D#^x!vFvP literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_grove_top.png b/mods/ethereal/textures/ethereal_grass_grove_top.png new file mode 100644 index 0000000000000000000000000000000000000000..eb391fc4ccd921c4449f4a2408b9e566760dbcba GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u33G?TOu2poDg;ef(3gTR)9XB&Mx6nhPu zCMtf(aN}Zb?|978rh2An9}gqnvPC?4oQgp_!mdYRB>D_@S{it8EZfM)5F^Z=KKH1# QInWXYPgg&ebxsLQ0Ft0K8UO$Q literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_jungle_side.png b/mods/ethereal/textures/ethereal_grass_jungle_side.png new file mode 100644 index 0000000000000000000000000000000000000000..33911e5e7d1171a72525378efc895136bdd86b43 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsKqe6AIV+h5zWM`X zF_#4S1vA*!CkZwA1G%c6E{-7_*OPznv+!7S*8l(iH@)I}{r&v5)%%^-8(Xv(Sr|QF YW%#D69Br^AU?#{YPgg&ebxsLQ0LgJA?EnA( literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_jungle_top.png b/mods/ethereal/textures/ethereal_grass_jungle_top.png new file mode 100644 index 0000000000000000000000000000000000000000..030e865d7c98a3a87d76352e917ea4f9e2bb795b GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9tEP>-v8U?Nzb$)#BG#TR zjv*Y^84VcD|7XbG%VvF@)p#)UH6@0|p{YnP~}EH*jTeadG`KeQO$QV5j$_ zC_$#xEpQ5xdI%%?@k2hLr6nO(A1G~>U6b4Yw2{;Hz@7_M7pix2->;i1{wq${G0(9+ Q6KF1jr>mdKI;Vst0E~?`8~^|S literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_mushroom_top.png b/mods/ethereal/textures/ethereal_grass_mushroom_top.png new file mode 100644 index 0000000000000000000000000000000000000000..5e7367ff580e3eda8d7d3842a33904c3fb8d8c06 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9YnDSsg?G7bdgObch_$DS zV+hA}MgxZP{~4@{819NQ?8#@yzsu0Smm&HN1H)^EtVo8CWem4JGpzl~@Z~YXzx@nu fy$ppp43C?)ToX>KTHo6RG={;`)z4*}Q$iB}g2^Z= literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_grass_prairie_side.png b/mods/ethereal/textures/ethereal_grass_prairie_side.png new file mode 100644 index 0000000000000000000000000000000000000000..17496304bd19ea47b392b349cf884250483f46ab GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=8*XK0va3fn{coQR`;M z!^fAe-xX0SmtY1IWiAQw3$|yd7yZq356F%7ba4#fxIVQlkhj@EfK}d;^@~XW)@Lnzx(xZEpd;$yPp1Hh?Zoz UJu6|m9MBR5Pgg&ebxsLQ00{Fy{Qv*} literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_gray_tree_sapling.png b/mods/ethereal/textures/ethereal_gray_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..bdbe753be1f931707927d3ad9598767cc5592dd8 GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsmb%LBj(Q1|riXSc zSPm3tED7=pW^j0RBMrzg_jGX#;kcfhz`&d)aF9vqMnwaQHv5Exk`e|XMP7$Ij*iz1 s$`Ot%`ZKHmdKI;Vst02uHl-~a#s literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_hearty_stew.png b/mods/ethereal/textures/ethereal_hearty_stew.png new file mode 100644 index 0000000000000000000000000000000000000000..14ca63ecaf79a04aae4dd463bf702285e6e6ce84 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvSN8%RcT@R>6tj##0~t}i zm3`KWv)GDlSn_@T#{<!@^o5_>S=&T1|T<*gg)oE;3DUeBKY=j-3Etv}RNIZo;Eds?qW1+GP%AcGlXMH_0@A3vvdPwwlCobd&t9)D44qb fckUH^`%kP_Efi&&?!Ng7bUlNotDnm{r-UW|g4=8} literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_illumishroom_cyan.png b/mods/ethereal/textures/ethereal_illumishroom_cyan.png new file mode 100644 index 0000000000000000000000000000000000000000..3b88bb12faf54673238ca8a9c69aa2820cf21e00 GIT binary patch literal 561 zcmV-10?z%3P)&iCv z;~fA101tFhPE!C~zmfj)EB+Ap-iKPgvh0$03IG5Bn@L1LR5;6(lG$?XAPhu}HV`}i z|FgHjGq;k7^ANn0tNI|fT3pv3R>F;^l5+ZmU{&UUMNdSs4oODD8uU|6c9d}gqy7Z? zd=YcM=|P{jE)!oPe*!hW0Fk&$hYf}F$X&I(^nKoFqCqnfGnCF!8bwqE#P4iV%PA?Bm^8pw+ED-w5s-+h|7f-ld z-%BKnkvC9bkY?Qditv{ncZ8J4t23Z-c?clr z578-F$p8QV4|GyaQvisuDD>A`{uB6oMWW2d>ZmDi0004+Nkl>+>cwLvA9_cnB{s7BpB4Pwz; zCl<~o_NNeb<}uIRSPT1KF`H$UEi*dQ{6w$^&?4<==>d=nP`1mf{-uymKj-^><#H*s z0Ok$+mMHrgDFF4p;Yy-k`|W}vLMk`Fyx)M7SDbo_Ch_E{u#^;uS!%hw1g?uR4*)j0 zFbheq^^T(qTQjy8fS#P$+*kniUgJ(P&chL;;^agqG9ZBrH0nJIs>~Zq;w5h4fEFaV zwVz(eYZGT*=3@e|uw|t6l|=HmXH?n8@<{tcV^TH#4&g%&pM01vKOhpWu_h#9+%eHD z^r$A;05G0eYogRz%K&O_$HDL$CYjQfbJHXd zE3^Q#tyS%ZyC5vWV~G^<_k`60$>E{ZifzcTl`m1B7wSw}M3Ddh002ovPDHLkV1m>m B_5uI^ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_illumishroom_red.png b/mods/ethereal/textures/ethereal_illumishroom_red.png new file mode 100644 index 0000000000000000000000000000000000000000..960ef604fb5efc73b95f769dea398be2fbecd9c9 GIT binary patch literal 658 zcmV;D0&V??P)5i)~4281?XN5qE6DaTh znBzc48ns;M8pNOTc{>S={eKMfSj$+P@@(%BJ5SR**LAJa9WkhBtrTmI^euOt;sR=o z-}TeFZf}C>q^|-A*DLoR4(s#@#Eh3-4_pzCrapj2KCmMsVY148t`SMEh&{Enc(Y^5 z4flP=qogA4Ojt_Eh!bVoGXBGATbdFhQ(~c!)g4j91w3aOWxfH%6NsXb5%sv4bmSe7 z0=I4ZJTGP6z`~yS0{)h;sp8y$D1a^b+PD2Vjebm9vI~zK*jN$~*xG3A@OBYN-)dT% zVa^ogsni=tSbNhZ+>=Ws3>Y!e2ZGf0I;VE5y=ezR;NHB%%Nt_=KnAL|CioHQ#wsYh&cfyU|$;$Kz0mPNig1kciaGVcs;tCTWucB zU#{yQA?V-&5Jg=cr<;NRMfqBGRckAqluA=E&&4B?+YqRO(!m66yYo~*F)aykGz;}4 sqbOf%MRW97gV6(1iYang2db)uAB80)l);fHHvj+t07*qoM6N<$f+uwwX8-^I literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_jellyfish_salad.png b/mods/ethereal/textures/ethereal_jellyfish_salad.png new file mode 100644 index 0000000000000000000000000000000000000000..96a146589a7186da8e1559039fa6c88badd87ff2 GIT binary patch literal 285 zcmV+&0pk9NP)V!0KykY1n&};lr#S7@gMX7hLb8}2{i`z00000NkvXXu0mjf@k4bF literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_jungle_tree_sapling.png b/mods/ethereal/textures/ethereal_jungle_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1ab18811d3cb120daff4394b3a9a92d418c5c4 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsmO9Fwj`|6eraeoR z=>WwUOM?7@862M7NCR@5JY5_^IIbrrB#2}uBqZ?jCL{>(awH}QJZ2PHB%{Q`v!;*F zL1_u2ivbW=9pDHPILQ6Xk3on>A@Z84gOf=MBZEaEdwOL=cqY&^22WQ%mvv4FO#nhK BCqn=L literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_lemon.png b/mods/ethereal/textures/ethereal_lemon.png new file mode 100644 index 0000000000000000000000000000000000000000..b36626a5f2b35ad743f79575dd1720b43e007057 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaK~UgYrXf#}~aOndg| z6i)TLx>oo;P?o7A$S;^d)pojMJ&@<(>Eal|aXmTV09yp}LY~V3j0R`dh^%5r)R=A6 zAnE4j=9kd6apOj=84Gh#maqsn8cpd{2s(4jO(2%XODkYdskMBqy-LLic3lsB9 zgU>*5#*!evUYfNlx>)2A18R8y_Y*};d={=xf44$rjF6*2U FngBGGIR5|u literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_lemon_leaves.png b/mods/ethereal/textures/ethereal_lemon_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..70db0818843ce72a0f808febe47d983919de2bc7 GIT binary patch literal 491 zcmV{xFz`yPrOxJNY(xt=3O=Q!z7EpdU0LuOh&I-Xcr ztvdHU6xAvsorNLZ76mUSVUSKRbjn)J!14jhfg6+ZeKY?~r_U`GBMS4bkKNm1#XW9D z+&4P=Ydrq^G|ED46t!)KYBx{H@)WgYFE@2ht@Gv)1RmcvZ^@I@QhTjXJu=tf)eGXM zU@FAGzcu{`eDz%H2v)kh{?TSeC_t=dsR>o@Yp2f)z`>fZhP$Jbp;j;8F^k$e`^k&i z?Xv#tJkh(pWqQEG`qlF$w}<%IFgINMx=nZ|zkA0Q$v1|L2g(}M&k68vH3(T1D9vOV zz#klb$V;KwQJW`Ff5V;waXey&73B|1+Y)p~gpcXM{Xh5Fln!w}keZcx1!z5kr>mdK II;Vst01U-WlmGw# literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_light_staff.png b/mods/ethereal/textures/ethereal_light_staff.png new file mode 100644 index 0000000000000000000000000000000000000000..b08a7a111fe8cbb7170b1a3328fcaaa5b0b236b0 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv3GfMVbuaK)wrtshW2VQB9m~qf zn$f1RS6<#}tEkbAwO_w}{ri8#rArI~ZtBHA^^7G!e!&b5&u*jvIrg3|jv*Y^lM@^m zy}SfwX)g9*Jhb8#Vz^e9uGx(te>#2mo bh6@azk~meK$W8ePG>XB~)z4*}Q$iB}DeFKX literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_lightstring.png b/mods/ethereal/textures/ethereal_lightstring.png new file mode 100644 index 0000000000000000000000000000000000000000..26cbad75393595edde138f66a0202e439d6831bf GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bbuaMQv}NO!YnKij+W+F! z^R6GBYCtK*k|4ie28U-i(tw-{PZ!4!j_b0$2YC-0@Ennt%O3E6FJT9_##VNZTW{=x zpW5&}XnxS>a{6GvOQRbx<+t6LnpXI8P=EgA-xFR=UvT!&9DA>J4kLGQUwNRN44$rjF6*2UngF&OQ566H literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_lilac.png b/mods/ethereal/textures/ethereal_lilac.png new file mode 100644 index 0000000000000000000000000000000000000000..5e6c59a7c867e8a1bed3c577732b9e2b277d4476 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SN8&+q+0#iA&d8y9`i|; zJS)nr1C(Mc3GxeOaCmkj4ak||>EaloalUi{BiCUA4%hu^>>HHXJ#KSP*~Fak`tSP? zYpWktYAjzCzt3*?zcFy%Z*6YQY<9Uj3wcA86DIZ4IBr+C!CvD2@y>^|+iA*18E(_O$EMdLdxhYx6?xKO#vlgdd8u-lkO)5S4_<9c#}0Cyq-lN(!`=POQ!HU{SAiIWtW zB@&DdU1e6}nWo9ZlQUPq%z0B4_mqVpTq?2>61G#$NJzwZ%SyP+YHVZEW^QG1+~u>t gNj>FVdQ&MBb@01gg30ssI2 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_mushroom_pore.png b/mods/ethereal/textures/ethereal_mushroom_pore.png new file mode 100644 index 0000000000000000000000000000000000000000..fba8cf45001f27b5ad06486c747ba1895d86397e GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>x$mwb89PS_H6qC6fyR6 zaSY+OE_=#akime%<=}G(&J$jeikcG|7}{d&-kwvs=xAoNY(?vwJN%*XJ=IA8y{{S8 XSIgK$+y9RSYG?3t^>bP0l+XkK)+i;| literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_mushroom_sapling.png b/mods/ethereal/textures/ethereal_mushroom_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..776106218c69f9d6efa54a436f7ff9ccff60b4e1 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvSN8&+)zS)$flN-1%2=Px86xn`f zl0XP=T4yNd9Bf!j0d>%kyTv67S<$W2@pNXN1I_T#%tNNgrWrY)^-~^`u(abqM?H&{ z&6QBIK&%jv=;tKF31~wIP^O;qvx5boVmI<*7G-6j;EbvLk*l7ag-d~X*`=J~XlM-x jF-}C@FE_Bs{PIUWQB5g5r{l3>00000NkvXXu0mjf^rv$N literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_mushroom_trunk.png b/mods/ethereal/textures/ethereal_mushroom_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa650e054184e3c3681b539ea5650e115c30943 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>x~;Xo;-PC^zqd+poo;G xi(?4K_2dmU#~B>kY!zD0h-NS~*(74A7xe+nLL4eaRV-PtF~>inZ4Nh;~< z#4i1dQWL(3*!s^|^n7CZ&gpAjoe?^;@nbQsLfN#6+hu|v9H Ulg-Wypi3A$UHx3vIVCg!0DTQm(f|Me literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_olive_leaves.png b/mods/ethereal/textures/ethereal_olive_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..e125f79f518f88256e6d2751d52e93202ba24c09 GIT binary patch literal 427 zcmV;c0aX5pP)NklwOo!)}1_()nW_o1PjX}#Y5g^Ox4WM`y(HHn6;>&Y-hz3aqs`^)#m)B+a z0!Uc33S}wg^bc(9;?#(H>ssK8ave`YIrGV((`oVsE>cZJ0<%ie=B?^W*>Sn3kaEj= z_$t4+YD--C^|C*d{YIQi$XlbOlArGZLZFXHo3+$n8c3zyg*vVSN>?$=~LoLex3{$QlY@|wZb{{U+R VKo?gliUj}w002ovPDHLkV1ngfxyAqh literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_olive_oil.png b/mods/ethereal/textures/ethereal_olive_oil.png new file mode 100644 index 0000000000000000000000000000000000000000..a692f7f0a30c2f4fcc8d06ff1335d883e9b4bd0e GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaMQvHRTgvsvda-mX97 zKA|E-Wc?8Zpe$oakY6x^!?PP{K#rBCi(?4K_2dKvz71>+8E(nR%p9jpB(ziy@T78R zI$hP!E9 zs5F)7KG6b{WiAQw3ua*Bx0zgb637koba4#fxNdstB5#8O2lEBDbDTZZ6TbX0Kgj4~ z@jc%4;e`47rZ6=uc(Z|bpRgT0I78WPxqhcQtt?4&+r?b^Mol+UBV13N5??l!IwbjY%6P)Z&Jtci+NU(2JH6aFf9lQeo00DSOL_t(2&pnYbZ`&{sg)asqcaY;(NOL$j6h%RPJN!#&O?wZ=b`L zJo<4cidC6X>ehcGillN`7KJK)Kw^?%z%t(}a8+$nOd?O`IZ#*d8{l~-pTF#k;LS|+ zHx5anne#1RcGsX)DIMI&omg<4310RhaE$}bT8Dt3g~Y4_E}*M-i_&uwJV?nHM47k? z;rmN$ys@d52mb^(8qI80B}v`~7+!7-t`^QEjjY>9Bf$IrMy@c@MmcN=A>-Ea;{($Y zxy{gjhSYwZb48OiTSOVdITpYZ5+!157F@hJ?~#p8k8A;&902&>dmJ^(6FeH%vPC`b zbJvIK_+L#|AiuHVJmanUSzB6OELg<8Q{vs- zoZAy8XmouRUC?}y%b?T4q%J1%bjG{1;yA`&UCBfKm%cnz=vnq$V%GdEK@ul;zlCz1 U%G+%68fXK9r>mdKI;Vst09rafDF6Tf literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_orange_leaves.png b/mods/ethereal/textures/ethereal_orange_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..69822b37338fa8b0517456b3cb9cd498517bef4e GIT binary patch literal 412 zcmV;N0b~A&P)K+gNHmD4!T+)@n>rBVc>#O5J~~WcrGzgEw&28 zErv9;k*p=?^JWi}$)LZ$a=obdVc*wT)8}=!1O-rCult}+q!?}`T1D-2yLcaFC1!oQ zfXyy(o(&Ewwm^|1Q{dt!$TkWBeChQvkHN!KXgdK>m!(^o0!4pJ%#h2# zu#Ms0?gkg2EMrNKUoeBivm0qZj)$jkjjrmB#W; QKr1BpK{vV2n#<)G=TUUeqFK3)Iix>FVdQ&MBb@08<4k8~^|S literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_paper_wall.png b/mods/ethereal/textures/ethereal_paper_wall.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab2f4366f1a8d634920aca11181b6b277ac5b77 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZUC|jZxy-pJRP)5@+$o92=%B-g2$w9#S0*UdFFt+yzp9Sasc%!>+TD!z3(Xd|R^!yf Yty?S>#C3>c6VM6ds8Bq!|TFjg|?&bjn z8B2ovf*Bm1-ADs+^gLZ0LpZJ{Cpa(%H_Xs%(QIfmZV>jcSYgG$8j`qaP6Cq(%M=zZ g7C|2230s&MHoCC*-(C?c1=Pvl>FVdQ&MBb@08T(6dH?_b literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_pine_tree_sapling.png b/mods/ethereal/textures/ethereal_pine_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..da406d764cce217b5731205a13ff3cb1cb536343 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaKS(^j_9Q&GwF46rx$ zoRoWirD_^bmZ>DjFPNcx$0yC@K%SeYi(?4K_2dKxrZom_Og#(F2rwjS7)mr~JY!H} zQ=6bOnQ?LxQ-nvWC+C_uS5I&*^X6POpHoeUCE37o!R>=jm{K`3895n@4Ok)r*-K{u PO=R$N^>bP0l+XkKb+<1N literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_redwood_leaves.png b/mods/ethereal/textures/ethereal_redwood_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1779d1fd957cd2ebd5e71a3a3cccadf0b1619c GIT binary patch literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(abuaLd@vxF{wUG6)k@K>a z^{`T(=p|~RC7`aLKcROGP#IfEkY6yv-$TmjUGj5oi33HNJY5_^IIi;^TgZ3FK!o+e zZ?#`q`M1|b7$itC>HKbHZGJ0szfoUxV@(%~HpJ6uJUgNf!C&J{B>9zM)4lbB% za)xn1d2@x3V9v>`4W93UmN@JbO-)`=tu6BA!g|wK8OF16VRrvzC2B7<+_~Jw@2ccd`@Z+(S-f#!daey#0d6-hw8+JfLeBJYD@<);T3K0RRWTSKds&dTCW*6InBrUfQ3 zCxGINB|(0{3=Yq3qyahlo-U3d9M_W*4zSITZfLnGt*|j$c0$EWUX`5e29|WD2?@Lm kLOpy6ix`hRYVu-Wkov|xf0bv^8K71MPgg&ebxsLQ00eR-8UO$Q literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_redwood_trunk.png b/mods/ethereal/textures/ethereal_redwood_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..d061a111dc689a39d0c7e795c859dd2beb1c25a4 GIT binary patch literal 316 zcmV-C0mJ@@P))w_N*;IHaDnok2M9!e_`aB;zre2kt)ES7h$Nj{dQ zK0!>OiiQGMlTuARq0ecXv|GU&Vbx6nE)_O=*XWfBo9z?yWmf6DixE@UM~;T6Qp!KT zo^oZqil+-U_F3FH)W+37UvR54cK|z|dX^MI-BpaV5Z7IyC5uqDL*OHX(PlHp4!@;E z%HOeEhvCLEIHS{0Nr2?^{+q}Q(fT%qe^XgZ#znZepVi!R$O|Q#_2v&5VL+}-=^3p6 O0000 zZ2&Fp3NEagI|O@bU`jWC(thT`zMkH3*CkhbFT5gY@BN$YttKc=z^yInUGI|LapHRQ=D_JY27E!23@k z!>j)XCVc;I&&@pfffidE-*pEzHdQu-AOFjKm&V+xYwieW`>|Z1HHIhPzzYTy7M2DU dVPR%whRV?JZFiQP76n?$;OXk;vd$@?2>?C%M*;u< literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sakura_door.png b/mods/ethereal/textures/ethereal_sakura_door.png new file mode 100644 index 0000000000000000000000000000000000000000..40f59574f02e936f15d23357c9fbaa4f75f3e530 GIT binary patch literal 260 zcmV+f0sH=mP)g$iOd*}cF0If+xK~yNu&5zLygD?z4Ez<>@GC<<80O|yGS%Ljm zsoik!lm25_dgv1Fa-@ZYS@onUP4C|@$W-aM+a7D6%`()QnuZU9-Omm`JN;hAKcFq; zkLG)dshZYCGD}$%2pUXO@geCxJlQ0JW literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sakura_leaves2.png b/mods/ethereal/textures/ethereal_sakura_leaves2.png new file mode 100644 index 0000000000000000000000000000000000000000..c54c4ba0fe00d13181c122411427648925d5a97d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsFK4)2Ilbop|NmiM znC}C{8B2ovf*Bm1-ADs+^gUf1LpZJ{XRNz%?%;t!jpvewjpse%VpDi;z&zpjX@)1c n={NYMB%Y`|cKL|I5-WyFd*m*cX=HW*wK90R`njxgN@xNA@fk7x literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sakura_sapling.png b/mods/ethereal/textures/ethereal_sakura_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..0d611818c9fd49c15ab202a4043cf714634e34bf GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaLV6Bp_B@i>~4WXQ>} zs;hpD?)k|;S;mqezhDN3XE)M-95+uF#}JO|$q5cjXAIgHdKMl^U`W(3vS`o{V|HUx zo1n9qd2$0&gvV4*jx}>`8geZ2_Fz1f(9$V!NTP@FMVUeCp(RrqSQvQInIF4;73l_= O$l&Sf=d#Wzp$PyG$1=(Q literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sakura_trunk.png b/mods/ethereal/textures/ethereal_sakura_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2465aa7df5a6986949e88c1192bdf32812ed1d GIT binary patch literal 305 zcmV-10nYx3P)BDNOb?>16w*JLP``}Pj9FW zdQ0INtdktLZTOm`;6D;7IA(FPZ%4B`Yk<#8?YmakX-HbS)W8r@aDgSF9wnB&T5&DZ zDv})7mnK*CLuW#U6~d#7Pcr-~^mK&hlYvzQnW~z1s70g)&LXMtonUs}zizi9zUS7t zAQ>XwJ#6TH>#`}H;bF|2ix!tYV<{03o3ETM{Jh8FtXXBfXhfAe+?IB zfFMFBS$4;9h{!p5|BTUxJjUzu5L7AU1YT&Txr#hYihu&>}ATZe`>5>-R^V+|E^vFeEPSfjXA_Q7qSx~%No z-Jzb69klIrqVDdAkVCo36{bNwt%nzn1}3r3kwsCgfV37-~ayV bc^~$Fom(DU%CE_C00000NkvXXu0mjf+MJLK literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sakura_wood.png b/mods/ethereal/textures/ethereal_sakura_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..7de297688e41476b1dd9094e85d4d3ee83fdae0a GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T;DG#{=BXE{1=0XK#_7! z7sn8e>$W|Hd`%7luK#&$56LwjaxM_@=IV3kxf-?OqUOs5m+qD}&6iX%(SQFum2Jwc zrgBw{zvmx(yY;N?^ZhjU|0X@|GZwYaR^&B%{VS)SN8&+7i*{AZiwrjyCtn+ zx_?~h_WkF+-oE(f%g5&m4y8b4j3q&S!3+-1ZlnP@6`n4RAsp9}6BdYhFi)1@_2gm(kIc>8E#4I#3?5sKgxad8h@`Bk@(5VDT6&>5fe`r z#}JO|$qCaE7#1?H`HHfI@v=?jW1Gs#qr)u`Au18UE8$WqVIe9Z;wmA*DpJ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_scorched_tree_top.png b/mods/ethereal/textures/ethereal_scorched_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..4dca1e83c422c882bcf5110f90bfd9770f8d53e7 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW?VHdmuOL@lTNM@&YUg0L zV9|VuR_Rwj**H%Z#}JO|y4@E!8w_|{`kQ$K-Y_h@#OS3SAhUquX1%EY+uv1tydQAq zq`rAPX$srsIg=!Lo-`Ikr$tRqcqFbhLv4~(xS|BF?79ZkHDdR_ENasF@-%%dqtzas cLJu*1br#-LPP$B+fHpCBy85}Sb4q9e0AuYuHvj+t literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_seaweed.png b/mods/ethereal/textures/ethereal_seaweed.png new file mode 100644 index 0000000000000000000000000000000000000000..582d12175b4fe26cb09417f32ea89fd9dca79531 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaMoOtfoU6&~8`r(vtM z2;5RvWz7`e!&b5&u*jvIjNp5jv*Y^b$cE88VopCt}iGTu5q~fCC+Pa_7}!w z|NiT9O}%WSvwML=Mtkq8J<4_ro|4n&*trOI|Ju0w#y5!rXZN%oW<6QRCwg|zx^urK xPo8dsIXO8kEiLor&AVoP z!3HSKSQ6wH%;50sMjDV4>FMGa!f`!0!TvzZfdi!t(;E+FF!M7vpOKo)%JW7l>USNd>a zb*AM57ob#zr;B3<$92`7i@b*w1f1m`vNf17I~-vU5!<2g-agp#wfyZ(^F9ikyQ=b} z{i-*&`3cpyBlil|9!t13m!-#NPH#EC=8x4MPd@ZW37nkQ6Yt@nezfJU=FFV!leT$J lR!a3`u2;+bRQGTDzO6+jc`#;OXk;vd$@?2>^PfO1%I8 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sponge_wet.png b/mods/ethereal/textures/ethereal_sponge_wet.png new file mode 100644 index 0000000000000000000000000000000000000000..c3a70f7d396aef3b8f919daed503804142edc52e GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZeYv~sT%GFURT*nC<=aD~ z?o4)gcXFXFGs9}2f@)6}#}JO|yk|G^H7kg;K8(*#+4hk&&*!$J*NwF|WP3}tG4J`W zJmu$;|9nSF7e@r|tn$3auWoDQzuveg-mW2HoANG}Hp%yEf3y~hYTv!GOhaggW6aC4 zv!}!gZW;(FyuQF9r?Hdq{Q{NZTod#2UvF+|R-XF4f7AB+QLp8_FNmn-Y;Fk#I)lN} L)z4*}Q$iB}MQ&Ad literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_spore_grass.png b/mods/ethereal/textures/ethereal_spore_grass.png new file mode 100644 index 0000000000000000000000000000000000000000..af6d0f4330bac47213efe3bac94092d662df91c2 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWbuaJ9MIS zR7yDdtHT&5%UBZR7tG-B>_!@pljZ5+7{YN~w#Sk0hyo8Yd&E1{72n%3-bcnYT(MjD zzy9>Hy*HF^8{KiJRI&bZ$XC7~_ z7t20|PUp!y{(Ez(CikS(opzopr03HY>^Z)<= literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry.png b/mods/ethereal/textures/ethereal_strawberry.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc80eaa695465a7be8e02ba39bb00d072623899 GIT binary patch literal 321 zcmV-H0lxl;P)EGfZ*9;-@Dn&-7ScqIXNG{GrKCpw_1Hd z^$QTIxOr9OCanZEW^}DFbBrIx;Th=r`8_9S+JS?^d;&bm#=+nRC&~e$UsKwqZ&AzK z1FcP4gNi^k*BYh;k~7g70k-J^7a~m#dk>au$0Igr*g|`T_#C7` zX90M~4W>;5_5@n`tqdm(lS~5$edCegDjWe&@*aP5y`5wpL!xBy{$GkB7ys4+6+1K) TUtG0A00000NkvXXu0mjf&N+Bx literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry_1.png b/mods/ethereal/textures/ethereal_strawberry_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3847231e9dd6a435240a89016a83ade8469f6d GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;*aCb)T-^(N;+rgP)~@dciZGT0 z`2{mLJiCzwwr2LJYD@<);T3K0RY}-CAk0q literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry_3.png b/mods/ethereal/textures/ethereal_strawberry_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc3574853411da2ffcb118561bb66b3b4a996bf GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^SN8&+_$G`0Ai(hP+6;Z5 zIAckWUoeBivm0qZj=iUgV~E7%;bOq6=SAeMONbP0l+XkKZ00dd literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry_4.png b/mods/ethereal/textures/ethereal_strawberry_4.png new file mode 100644 index 0000000000000000000000000000000000000000..150554e11ab446a2a61f29d56697276b74a79a34 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv{s5m4SN8&+_$G^O+j9Sd0K?VN zY#pE!V@Z%-FoVOh8)-mJzNd?0h{pN5=Qi>-81S$hD35qBUq|2&lfp*E-|t-(Y>*LP z)qPh}cayCyKxp^9C8j1Uy6^cSnGCBAZ4*^_^<)BPc7V*S6^@@oSH?AzJ6JkK{n~$N zPx*n6-zm6PGZ?qADmkZFtZ(t3Z@upzV`u=I(l?&0XW6h@ zSiKRPn3dOHb0A-0@;AOGf|rbU>|Ou!qtp81Ot1Px=OuH?eZM??-P+%G_LZyV@?}Ib h#5(V{`)FRn@JyXEg+cWGRG^C(JYD@<);T3K0RX66UB>_b literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry_6.png b/mods/ethereal/textures/ethereal_strawberry_6.png new file mode 100644 index 0000000000000000000000000000000000000000..602efd9900333d154b510997879c3b0bcfb6c9bf GIT binary patch literal 240 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvp#Yx{SN8&+_$G`0xw-#AfZ_IS zPu43v#z0xdk|4ie28U-i(tw;EPZ!4!jq_(G?B!)vbjc6OtdPgneqK`(7(SS`x^i9IWmTsRk2q6+s?VJh*jW#iK*JF7p*g&X*X=xIcXci zE5jEYoU_grZ)LglZ9$0z!#Ra@jn9AI+U59s=k(CMTkDscHvjd>YF8<{P(`?dh3pz` kgI~M+xYhQT%RFEX`ofiZM0oK}pt~46UHx3vIVCg!0QIM0r~m)} literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry_7.png b/mods/ethereal/textures/ethereal_strawberry_7.png new file mode 100644 index 0000000000000000000000000000000000000000..98b83ea448cd70444244d01b0ef4f6b497a29791 GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+_$G@dj%NRXAUF5+ zZO{Mz8NS`{`2tkHSQ6wH%;50sMjDVa+tbA{MC1I~38#6P40%}Jb};=hVAXNlnXhMA z?7^t9i22uhMt7#_a#zMDQ+oc)6kk+tufx8f-r4cMw5_Kcdh1pTT$|3!8WHr3D{rcc z*G{W|jcYCS`QBtDSa>8~nDfv$_*`%aXMh?*n0hhWx$Pf3F0Y+ZDqptw8*|dz@VREM zrpalUfw-oQuX4CLFuvc{`Jhdu6%-zxlU#Qoyp+o>gTe~DWM4f DNd9EE literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_strawberry_8.png b/mods/ethereal/textures/ethereal_strawberry_8.png new file mode 100644 index 0000000000000000000000000000000000000000..9a2c4ea96a90c9ac10fe325d3691cb5abe4db5fc GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv(Ey(iSN8&+_$G^241E9p|G$0P za~lK0|Njh!oHXo#3K&a*{DK)Ap4~_Ta%OwFIEHAPKYL-L;9&(G)_~64UnZ5lv}FCh zERn%2q4mvv=Q`n&DNQ>Ly=VB#e{p}kj{S!Jt2I~N%Pk3eTPbJV@>Vusl}^8L*@qV@ zmu9igNLaOAv_UoDocV}4(>>ZOBX9P+uWJ@xz*3{JGZjeyYJJ*)bwqd~ng&B$&9H|mqiwq@N8g(|DJQKiJ a!oYCmAxGIpUk@>$nGBw;elF{r5}E+6T{#E< literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sushi_nigiri.png b/mods/ethereal/textures/ethereal_sushi_nigiri.png new file mode 100644 index 0000000000000000000000000000000000000000..3c80838ed893f438979b60f897b8012baea7717d GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZbuaLFpU3e1`}c2)@*Y2a zeDUJN|3{|=ZCHB&sDQB~$S;_|;n|HeAjibh#W95AdUAq-AP2WYrUJvoGYV`TJ{GDc zR3%hI9xYk2M2JTui7PNLD2Vms#+DTt0_ipkw$iLdZTACPfchCcUHx3vIVCg!0PG$z AK>z>% literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_sushi_tamago.png b/mods/ethereal/textures/ethereal_sushi_tamago.png new file mode 100644 index 0000000000000000000000000000000000000000..c58d5cad095b95d414cd4e0f7f0ccb050f4f1eb1 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZbuaMwbH?TI<2x+&tPF;X zfByVFcJio3Ma4m&0>+XczhDN3XE)M-97|6Z#}JO|$q5RA9MaAij)}>R0%tWea+EX} zgaU%f!dN&}SGGy8t1`9Dm=Y4>bl9QDM@x_Kh$KHlbUf=ZPL+#yfQB%5y85}Sb4q9e E01po?ssI20 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_teriyaki_beef.png b/mods/ethereal/textures/ethereal_teriyaki_beef.png new file mode 100644 index 0000000000000000000000000000000000000000..8a323d3e408db44742b3365db96b9c2ccdb4e315 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvi2$DvSN8&+3}1aGQ9@_#m)%LHo&E@my5Cxz&Rg;S$>!ruE&=}xM0I{n z&lhX`dD(&Fkgh@ciNX3Esq2uw@*!vJaXW>z_;4u0>KVt z7n3EPPCf@7>}{W#^J)8LrUYHV&8HW=6VdTFb|AuSu4iM=0h!%bWTH=|J8&GAEPwmn dX#buQ;#qr@jxKU@FpaemTnlHi$Sz>gViRavVB8XB zX4tUGpkZZ#L$D%Ks3HrHG!|LaB$%e59MZs;rOV7v*vKk>{vy{Eph*m#u6{1-oD!M< D1q3Vi literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_tree_sapling.png b/mods/ethereal/textures/ethereal_tree_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3c1067fb1a03268ba5642b253e58e71e28321e GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDUbuaL7G*Sa1Gi_xnJr#yr zh5&nGhHVUfXBjU7)v%NV`2{nu^Oyfu?eGWky*ynULpZJ{Cpa*@F=%7%d3Y*-A#sNR zOM}KWCNVa#2|C^k-ObDqCwh;vu9;)2!n*7<>$3T*YC%lN8&n)5efkV0nrIw8;@Z&2 a$RO~Lea2C@5C4FsGI+ZBxvXWaraN}*lgsOuIQx7IgKO7Kr pDBx3%V~MnLibiv;PV);MhH5Xq!>^exD*_E+@O1TaS?83{1OVX=Dt`a~ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_wild_onion.png b/mods/ethereal/textures/ethereal_wild_onion.png new file mode 100644 index 0000000000000000000000000000000000000000..cffdde91e0d6efbfcfe8e26f566a7f907c3a0780 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZbuaLF_3G94@89jGC0Hq>f%mQzL)$aftunPH R(m?YVJYD@<);T3K0RX>cIxYYJ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_wild_onion_1.png b/mods/ethereal/textures/ethereal_wild_onion_1.png new file mode 100644 index 0000000000000000000000000000000000000000..00e5a8c68dd861be676d86957349003c712c7b10 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9t9yZu^}3pS%1Qx15yp}r xzhDN3XE)M-96?VP#}JO|$q5Ql90mp)MnIuO3`*IX(tZG044$rjF6*2Ung9WP7PkNZ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_wild_onion_2.png b/mods/ethereal/textures/ethereal_wild_onion_2.png new file mode 100644 index 0000000000000000000000000000000000000000..470e4b1cfabbdc25ee5157c1b870b156a5058f30 GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9t9yZu^}3pS%1Qx15yp}r zzhDN3XE)M-91%|!#}JO|$q5R490mp)Mg}ZE(-^liG#}W(@&G8$;OXk;vd$@?2>?Gf B7eoL6 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_wild_onion_3.png b/mods/ethereal/textures/ethereal_wild_onion_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e8f2c4b5491640b5cfdce209c379a2c4e19b7681 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9t9yZu^}3pS%1Qx15yp}r zzhDN3XE)M-93f8^#}JO|$q5R497YB#OcNOxnEo>yS%3M_37{;4r>mdKI;Vst05yLY Ay#N3J literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_wild_onion_4.png b/mods/ethereal/textures/ethereal_wild_onion_4.png new file mode 100644 index 0000000000000000000000000000000000000000..15e83478985dc2c52014ca6bfb644fe62efa8f40 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9t9yZu^}3pS%1Qx15yp}r zzhDN3XE)M-98pgf#}JO|$q5Qf21W)PMg}Zg41x^IUJO@HdvUt}6)ds*6V7fo!A_=sc*_e zXs01O;XbhK4j?z&)5S4_@YgPMGJcTcyJY{#)fX2nKADtbdCAD4FWTwq Y7k4&ZKER(aFaQ7m07*qoM6N<$f{&DpNdN!< literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_willow_trunk_top.png b/mods/ethereal/textures/ethereal_willow_trunk_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d453034f2da0eed36229cdc0ae90f04f69e338ce GIT binary patch literal 279 zcmV+y0qFjTP)7nAYCAo>_5|eHMvWV zI}0IsQNNl}H&wIF+S!hqmB>h0*={z&;iP^&3?AOnq}GFmdtTKl1h7X)gk0@y;h}!X zy2qBup1=}#i3CvM05jt+V4)%e(3-J002ovPDHLkV1lV5a;X3S literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_willow_twig.png b/mods/ethereal/textures/ethereal_willow_twig.png new file mode 100644 index 0000000000000000000000000000000000000000..00a0b73f17499e361a8387bdc3bc8af05f75892c GIT binary patch literal 1247 zcmV<51R(o~P)Y+NIs=wKB;SJs$QkDSf{sO3X?+%ltl}aMWMDrt-E9`qhE`iF=YS%019+cPE-B> z`9FygVy&myzH?5G000D9NklF+8)-$PGM7ss12>0 zLPgRZOaqpEC>p`RtqbzVAD;2E2LoqCB5X)`sBbLon@~1X+~b3Ph9El)_AJ1N;=*)2E1O zcni>*VKW*b=9621h~9ijKmPRHK#>YsT_%r(Te2Z>**p+Vs9{d~e(tF$Y zhg8SkO0EMQ2+1kn_nRM8DG5)M1eEiMPb=5k`Nu^Z?Fs3h5TG5_k^+~2G+t=9gdWa7jbqn%!YcrJkLW+A z-a{Jt_7r3{f#@DZGD#9eenb&hF*@H*K*W1f(m|9-asW2sQajCPi-6_h_fjlE zfC(T;h71!Jw$iYx;^j9F=+TM|h0x@;W-LhX^M*>GF=C}m2q=Umqc$`HZ<+%ILt|hg zHUTDC>R*R|I!$zxu3GDpJOmh_3CIo(#LqvbPqC@uN?`W}i47=>zk*@&wl z9cFEJgtb`Wv?#9>iab`ka=McWQ)yV$;q11c=;W4nU?r7iI1TE@h_)1P!;tEy*#w81mi30h3va=^3`43Q2LU>`bJ72!8nru zg1rR%4-og`3WYTQ$qei}oO6}bttt<95*I1nbj~3N;H6B})UAGNdxVYS3L0fNIcYZz zhAjI*AN@@_f(Du!R8if`H;2WuUW5jy+PY1&Wgt$`jRIw0AyTtUf}v-PRYyHIAJPmZA8V{2$;(XnY&E zUI9B~+N0HzR{)pSz~S1Ly#U0`&->bkou`1$fE&R2{|4lY{{RhLzw5#&uXF$a002ov JPDHLkV1kWAN3j3^ literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_willow_wood.png b/mods/ethereal/textures/ethereal_willow_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..b312a7fb7a0671eb01cf1c5813770e9b7ddb633d GIT binary patch literal 262 zcmV+h0r~!kP)3!U({{#%OZD)K;A6D|qTw>5wSot^ybopbii|$Uy`9Z-Ju(c_yGX zmTdw#80bQD(**S790N~m2w9hVQ@tfeL96oPq#UjGz~rSqKf!q51$P*0H)BJqCz?xO z8MEJ_fw3fS{Lho!tiI>(z04Axmyl#gvM^I;I?m~HO+R=#yZ-(40-p3~Qkr4~EdT%j M07*qoM6N<$f_yG*RsaA1 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_worm.png b/mods/ethereal/textures/ethereal_worm.png new file mode 100644 index 0000000000000000000000000000000000000000..e17efce592bca2718bb39be7314caf316033a0fa GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@o&cW^SN8&+Lw!9@_U?YRdIj@? zxGO+$#*!evUmalZ%?SSruoEWWHl_slwdfvT&o7&!j_k6+=F!NFX|z_3P~r~kkI?Pj2f44$rj JF6*2UngBD9HKPCk literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_yellow_leaves.png b/mods/ethereal/textures/ethereal_yellow_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6e1c9f7448b53d1a6f935dc8a288d0f2c53a19 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>ds`cmv6mJHqT3{(A= z9|wvvmIV0)GdMiEkp|>Md%8G=a9n2$U|9d3K})jj0>clfvVMlYM@`)sW**UWV@PXY zcVl2PJzdCf(A;eT!v`(b$qW;3GWav}9uaV3aBH~3#=zFJhLM4haR~#1JVU|+hPmd# eHyCD`Gp=xuko5oMaddswg#$GyZHP(*xi!E zl7ZrkB|(0{3=Yq3qyafLo-U3d9M_W*7?{-r4l*g-uxwz_=4WOuR$k1^eA#h2GY?Or xqJwC-a literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_yellow_tree_top.png b/mods/ethereal/textures/ethereal_yellow_tree_top.png new file mode 100644 index 0000000000000000000000000000000000000000..b4cdbb09827bb6b20b969e757981bf4bc88310ee GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU-Ebl1@XKCf8~N>bi<&3c zr{@`5|Fmt|N}n^S3$6pzcQ9CWU;>lV z0oIm=+vkr}#2@C-`DHre?C}GHpT9jB7xf89ZJ6T-G@yGywpr C+*1hv literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/ethereal_yellow_wood.png b/mods/ethereal/textures/ethereal_yellow_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..9b2dc3b2a79bd2ddef9ef83974a6fde0d9d0cb97 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t|iS@!7)0$3*65hS*-vR zwD)vz4B@z*oDi|KsZmjcLn1=L!GW=7YnbDau(eTF8N|{q%sRjjdi=oFEYap`TOD{`NJvWz7`e!&b5&u*jvIia2|jv*Y^lM@`6juo_RWSkKuWLU;{(Z{PvO^;Eb zZPBF8&CDKdo}NdJN}dP^4G9V2ZRya^;%t(1^6F9$R8v${blsr0pd*3dhJ)(SfDTcw dMLahc7%pmXmLE2{LsH?jZ# literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_acacia_leaves.png b/mods/ethereal/textures/moretrees_acacia_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d75b2522d5f5a68f53a9c4bb6644b657af9668 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uI>dsE>Xr_m3oo$_1d(R zlYrukB|(0{3=Yq3qyae=o-U3d9M_X)R7^fNpV8-woM1t-Kpt=T4F#6y%TjI}2T$y1 uVRSlStm4xkP<*yE-=SmXvmWgOEDVdf#X`9Scvb?ds0(!jK-r5W)407A2 zUI2Mc)B=-a9mGL_;dg0fdwDeKU8)WoBWxd?eCMr>m}Y?x36PV ziMwU+L1X=o^9K|bBphCF@bIAn8&2(WZ**K<_n(XHcb&q={Ts{qn`0k0?&pa+vp+{d e!tQ?&1H*z?Ir;wW(v?6v7(8A5T-G@yGywoN?Ly`N literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_birch_sapling.png b/mods/ethereal/textures/moretrees_birch_sapling.png new file mode 100644 index 0000000000000000000000000000000000000000..06238c060a6a11211b109fa53993f117408a7e77 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bbuaKytLAz4?w!F50Wn^N zGyC!`0i_sAg8YIR9G=}s19BogT^vI=uGjh=6l^fy@mj^aug>8}(e#_%AaL>R*&Ii6kw^^=`N)}$Gfzd>34OPleLX5^ gQc3;(psN)OYd5l8KJ2pa4$u+?Pgg&ebxsLQ0RHPjH~;_u literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_birch_trunk.png b/mods/ethereal/textures/moretrees_birch_trunk.png new file mode 100644 index 0000000000000000000000000000000000000000..66f85bf0f76ee582a2d3d1789f9f3816647093dd GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(aeR%!!iJfaE)}(J;HvRwK zpWog-X~_s&FtIV#T30jH`WjGKi>HfY2*-8Zvm3b%8Hl(&ln?s8Y~__uqb-kp*Ui}a z;H_LnO`}NH;tA>kjx{-}cg*i+Zr3m}6>I;#w`<+z4<&UTU$}Q&_e{;@+7r4u*=)fs zA<3;y5j*Gh2P~ND<5A>j;H>@lE$5}m#)ErSs!Uopo5^KozR$XUh4lwP@V zXnJX4d6f5T#)FMO1$mw>jv*Y^bx$AUJ>e7qk=LPYp|KxTw9`oo?6OgaD+;O3Gm!VVX@_j1*3M8CM4{@8MF7k3?_vy0P xnmRQ+@8AxbU$)x2zunVl`?>r4>v{1aj!z*yH6prl6UjfiVUztyKRhHaJJ`zYdam&Bif?35bD+<#&U3qDO&2ReYk)78&qol`;+ E01d`Xh5!Hn literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_coconut.png b/mods/ethereal/textures/moretrees_coconut.png new file mode 100644 index 0000000000000000000000000000000000000000..18cc4dceebb6843b37302028631dc37da457e3cc GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF3h)VW)fZw=;AXHDXK*j@2~=RP z5M!_uVF*@Yu#sR$(qOQcU`W$q$kS!$w_=zjdE+`z7hg$`U-0kWKN-F~{CI!qn%JQpa_;OXKR!f`#>ppA(w`EhJwX160x_k|BjjwC27Hr+bM(ecoXgH~Jav}!sQ z7&p8AxM{8D*VFCTGdp;SM62YQL)!jb790$cuco@Y%n@mkTyr@nMonV_r*VV<%TA4z zoF>K*9fk%58XQc#F&rrdOuQ!B#8MJOSRxa16g5upY?EbTkeV&u%JV;pALteaPgg&e IbxsLQ04_^Y4FCWD literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_coconut_slice.png b/mods/ethereal/textures/moretrees_coconut_slice.png new file mode 100644 index 0000000000000000000000000000000000000000..17380c190e827ee1385be74fe331649966cf367d GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?bbuaKy;$e7k>-M#iCtal& z>ID`k1Em;Cg8YIR9G=}s19B`qT^vI=t|uof5K1UynApR_qjS#7A%P=>qgj%VN2kfn x%j;B=L#AV*a;mcc^9dsn5r)^oEf)e97*1QW%xRC#n*cO~!PC{xWt~$(69DZDD(nCN literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_palm_leaves.png b/mods/ethereal/textures/moretrees_palm_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..e4245ba33602780178f2a3dbb82e475a728d59d0 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uI>dsf_4lVu?#dsno=y%$*g;gk0t{J z8B2ovf*Bm1-ADs+^gLZ0LpZJ{Cpa*yWmDLg#mLM&IgOo}**#ilLI#r%PY<7h62lU< gUJgb5G7}o!12%DxAcmJwPrVpsh)v;SI3_wli(y}D(jbP0l+XkKUTHF7 literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_palm_trunk_top.png b/mods/ethereal/textures/moretrees_palm_trunk_top.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd5a1a6be37f776ff4225639508ce4bbd47bcb0 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^4e$wZy)YqSQ@L58zsl)mXE#H! zTT3gZW*BI?W&8muNcVJc4B@!0d(M%o!GMS5KZ-8zGsUC#ooWbkzLb6Mw<&;$VGj7s|e literal 0 HcmV?d00001 diff --git a/mods/ethereal/textures/moretrees_palm_wood.png b/mods/ethereal/textures/moretrees_palm_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..20c0b3ecad70ee019c88bf0ed3685c7ed4756924 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VWU0-14qbIbzHFQFRa+!zh zfjQNj;+?TT*#u7)#}JO|sy%^R4GtVG?AiaLUoaS5tltv5;1kQe{{}00oA_nr&b*O* zyu;z0iXYpAQ|bqjUn{+sxw|}oQDceKOs4*WIje6<2=9?w#CbG8^YORps;WmtL9D%; fa&wn49${zPBk=a*x@C<(yBIuO{an^LB{Ts5RZ&3x literal 0 HcmV?d00001 diff --git a/mods/ethereal/water.lua b/mods/ethereal/water.lua new file mode 100644 index 0000000..6c761a9 --- /dev/null +++ b/mods/ethereal/water.lua @@ -0,0 +1,181 @@ + +local S = ethereal.intllib + + +-- Ice Brick +minetest.register_node("ethereal:icebrick", { + description = S("Ice Brick"), + tiles = {"ethereal_brick_ice.png"}, + paramtype = "light", + is_ground_content = false, + groups = {cracky = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = default.node_sound_glass_defaults() +}) + +minetest.register_craft({ + output = "ethereal:icebrick 4", + recipe = { + {"default:ice", "default:ice"}, + {"default:ice", "default:ice"} + } +}) + + +-- Snow Brick +minetest.register_node("ethereal:snowbrick", { + description = S("Snow Brick"), + tiles = {"ethereal_brick_snow.png"}, + paramtype = "light", + is_ground_content = false, + groups = {crumbly = 3, puts_out_fire = 1, cools_lava = 1}, + sounds = 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} + }) +}) + +minetest.register_craft({ + output = "ethereal:snowbrick 4", + recipe = { + {"default:snowblock", "default:snowblock"}, + {"default:snowblock", "default:snowblock"} + } +}) + + +-- If Crystal Spike, Snow near Water, change Water to Ice +minetest.register_abm({ + label = "Ethereal freeze water", + nodenames = { + "ethereal:crystal_spike", "default:snow", "default:snowblock", + "ethereal:snowbrick" + }, + neighbors = {"default:water_source", "default:river_water_source"}, + interval = 15, + chance = 4, + catch_up = false, + + action = function(pos, node) + + local near = minetest.find_node_near(pos, 1, + {"default:water_source", "default:river_water_source"}) + + if near then + minetest.swap_node(near, {name = "default:ice"}) + end + end +}) + + +-- If Heat Source near Ice or Snow then melt. +minetest.register_abm({ + label = "Ethereal melt snow/ice", + nodenames = { + "default:ice", "default:snowblock", "default:snow", + "default:dirt_with_snow", "ethereal:snowbrick", "ethereal:icebrick" + }, + neighbors = { + "fire:basic_flame", "default:lava_source", "default:lava_flowing", + "default:furnace_active", "default:torch", "default:torch_wall", + "default:torch_ceiling" + }, + interval = 5, + chance = 4, + catch_up = false, + + action = function(pos, node) + + local water_node = "default:water" + + if pos.y > 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"}) + elseif node.name == "default:dirt_with_dry_grass" then + minetest.swap_node(pos, {name = "default:dirt_with_grass"}) + else + minetest.swap_node(pos, {name = "default:dirt_with_dry_grass"}) + end + end +}) + + +-- when enabled, drop torches that are touching water +if ethereal.torchdrop == true and not minetest.get_modpath("real_torch") then + + minetest.register_abm({ + label = "Ethereal drop torch", + nodenames = {"default:torch", "default:torch_wall", "default: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("fire_extinguish_flame", + {pos = pos, gain = 0.2, max_hear_distance = 10}, true) + + minetest.add_item(pos, {name = "default:torch"}) + end + end + }) +end diff --git a/mods/ethereal/wood.lua b/mods/ethereal/wood.lua new file mode 100644 index 0000000..6ce5027 --- /dev/null +++ b/mods/ethereal/wood.lua @@ -0,0 +1,368 @@ + +local S = ethereal.intllib + +-- basandra wood +minetest.register_node("ethereal:basandra_wood", { + description = S("Basandra Wood"), + tiles = {"ethereal_basandra_bush_wood.png"}, + paramtype2 = "facedir", + is_ground_content = false, + groups = {choppy = 2, oddly_breakable_by_hand = 1}, + sounds = default.node_sound_wood_defaults(), + on_place = minetest.rotate_node +}) + +minetest.register_craft({ + output = "ethereal:basandra_wood 1", + recipe = {{"ethereal:basandra_bush_stem"}} +}) + +-- 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(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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 = { + "ethereal_willow_trunk_top.png", + "ethereal_willow_trunk_top.png", + "ethereal_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 = {"ethereal_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(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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 = { + "ethereal_redwood_trunk_top.png", + "ethereal_redwood_trunk_top.png", + "ethereal_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 = {"ethereal_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(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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, puts_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 = {"ethereal_frost_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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 = { + "ethereal_yellow_tree_top.png", + "ethereal_yellow_tree_top.png", + "ethereal_yellow_tree.png" + }, + groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, puts_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 = {"ethereal_yellow_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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 = { + "ethereal_banana_trunk_top.png", + "ethereal_banana_trunk_top.png", + "ethereal_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 = {"ethereal_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(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +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 = { + "ethereal_scorched_tree_top.png", + "ethereal_scorched_tree_top.png", + "ethereal_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 = { + "ethereal_mushroom_trunk_top.png", + "ethereal_mushroom_trunk_top.png", + "ethereal_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(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +minetest.register_craft({ + output = "ethereal:birch_wood 4", + recipe = {{"ethereal:birch_trunk"}} +}) + + +-- Bamboo +minetest.register_node("ethereal:bamboo", { + description = S("Bamboo"), + drawtype = "plantlike", + tiles = {"ethereal_bamboo_trunk.png"}, + inventory_image = "ethereal_bamboo_trunk.png", + wield_image = "ethereal_bamboo_trunk.png", + paramtype = "light", + sunlight_propagates = true, + walkable = true, + selection_box = { + type = "fixed", + fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15} + }, + collision_box = { + type = "fixed", + fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15} + }, + groups = {choppy = 3, oddly_breakable_by_hand = 1, flammable = 2}, + 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 = 2 +}) + + +-- olive trunk +minetest.register_node("ethereal:olive_trunk", { + description = S("Olive Trunk"), + tiles = { + "ethereal_olive_trunk_top.png", + "ethereal_olive_trunk_top.png", + "ethereal_olive_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 +}) + +-- olive wood +minetest.register_node("ethereal:olive_wood", { + description = S("Olive Wood"), + tiles = {"ethereal_olive_wood.png"}, + is_ground_content = false, + groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 3}, + sounds = default.node_sound_wood_defaults(), + paramtype2 = "facedir", + on_place = minetest.rotate_node +}) + +minetest.register_craft({ + output = "ethereal:olive_wood 4", + recipe = {{"ethereal:olive_trunk"}} +})