diff --git a/.luacheckrc b/.luacheckrc index b210396..0d7c5df 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -89,4 +89,7 @@ read_globals = { "mcl_util", "mcl_doors", "mcl_vars", + "mcl_buckets", + "mcl_worlds", + "bucket" } diff --git a/LICENSE.txt b/LICENSE.txt index 31df625..de7c772 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1377,6 +1377,43 @@ https://freesound.org/people/Rudmer_Rotteveel/sounds/590950/ - everness_extinguish_flame.1.ogg +**CC-BY-4.0, by nuFF3**, https://freesound.org + +- everness_footstep.1.ogg +- everness_footstep.2.ogg +- everness_footstep.3.ogg +- everness_footstep.4.ogg +- everness_footstep.5.ogg +- everness_footstep.6.ogg + +**CC-BY-4.0, by Anikadl**, https://freesound.org + +- everness_hit.1.ogg +- everness_hit.2.ogg +- everness_hit.3.ogg +- everness_hit.4.ogg +- everness_hit.5.ogg +- everness_hit.6.ogg + +**CC0-1.0, by kyles**, https://freesound.org, mixed with default_place_node_hard.1.ogg by Mito551 (CC-BY-SA 3.0) + +- everness_place.1.ogg +- everness_place.2.ogg +- everness_place.3.ogg + +**CC0-1.0, by Kinoton**, https://freesound.org, mixed with default_hard_footstep.1.ogg by Erdie (CC-BY-SA 3.0) + +- everness_dug.1.ogg +- everness_dug.2.ogg +- everness_dug.3.ogg + +**CC0-1.0, by Nox_Sound**, https://freesound.org/people/Nox_Sound/sounds/576593/ + +- everness_water_footstep.1.ogg +- everness_water_footstep.2.ogg +- everness_water_footstep.3.ogg +- everness_water_footstep.4.ogg + ### Models **CC-BY-SA-4.0, by SaKeL** @@ -1449,8 +1486,8 @@ https://freesound.org/people/Rudmer_Rotteveel/sounds/590950/ - everness_coral_tree_from_sapling.mts - everness_coral_tree.lua - everness_coral_tree.mts -- everness_coral_volcano_x_clay.lua -- everness_coral_volcano_x_clay.mts +- everness_coral_volcano_everness.lua +- everness_coral_volcano_everness.mts - everness_coral_volcano.lua - everness_coral_volcano.mts - everness_crystal_bush.lua diff --git a/api.lua b/api.lua index ed4fb8a..824fbe3 100644 --- a/api.lua +++ b/api.lua @@ -368,6 +368,14 @@ end -- Sounds -- +function Everness.node_sound_defaults(table) + table = table or {} + table.footstep = table.footstep or { name = '', gain = 1.0 } + table.dug = table.dug or { name = 'everness_stone_hit', gain = 1.0 } + table.place = table.place or { name = 'everness_stone_dug', gain = 0.6 } + return table +end + function Everness.node_sound_frosted_snow_defaults(table) table = table or {} table.footstep = table.footstep or { name = 'everness_frosted_snow_footstep', gain = 0.2 } @@ -512,6 +520,22 @@ function Everness.node_sound_gravel_defaults(table) return table end +function Everness.node_sound_ceramic_defaults(table) + table = table or {} + table.footstep = table.footstep or { name = 'everness_ceramic_footstep', gain = 0.2 } + table.dig = table.dig or { name = 'everness_ceramic_hit', gain = 1.0 } + table.dug = table.dug or { name = 'everness_ceramic_dug', gain = 1.0 } + table.place = table.place or { name = 'everness_ceramic_place', gain = 1.0 } + return table +end + +function Everness.node_sound_water_defaults(table) + table = table or {} + table.footstep = table.footstep or { name = 'everness_water_footstep', gain = 0.05 } + Everness.node_sound_defaults(table) + return table +end + -- -- Forsted Cave Icicles -- @@ -1422,3 +1446,40 @@ function Everness.cool_lava(pos, node, dtime_s, prev_cool_lava_action) prev_cool_lava_action(pos, node, dtime_s) end end +function Everness.get_pot_formspec(pos, label, model_texture) + local spos = pos.x .. ',' .. pos.y .. ',' .. pos.z + local hotbar_bg = '' + local list_bg = '' + + for i = 0, 7, 1 do + hotbar_bg = hotbar_bg .. 'image[' .. 0 + i .. ', ' .. 4.85 .. ';1,1;everness_chest_ui_bg_hb_slot.png]' + end + + for row = 0, 2, 1 do + for i = 0, 7, 1 do + list_bg = list_bg .. 'image[' .. 0 + i .. ',' .. 6.08 + row .. ';1,1;everness_chest_ui_bg_slot.png]' + end + end + + local model = 'model[0,0.5;2.5,2.5;everness_ceramic_pot;everness_ceramic_pot.obj;' .. model_texture .. ';0,0;true;false;]' + + local formspec = { + 'size[8,9]', + 'listcolors[#FFFFFF00;#FFFFFF1A;#5E5957]', + 'background[5,5;1,1;everness_chest_ui_bg.png;true]', + 'list[nodemeta:' .. spos .. ';main;0.5,3;1,1;]', + 'list[current_player;main;0,4.85;8,1;]', + 'list[current_player;main;0,6.08;8,3;8]', + 'listring[nodemeta:' .. spos .. ';main]', + 'listring[current_player;main]', + list_bg, + hotbar_bg, + 'image[0.5,3;1,1;everness_chest_ui_bg_hb_slot.png]', + 'label[2.5,0.5;' .. minetest.formspec_escape(label) .. ']', + model + } + + formspec = table.concat(formspec, '') + + return formspec +end diff --git a/assets/everness_ceramic_pot.blend b/assets/everness_ceramic_pot.blend new file mode 100644 index 0000000..5aaa8ef Binary files /dev/null and b/assets/everness_ceramic_pot.blend differ diff --git a/assets/everness_lotus_flower.blend b/assets/everness_lotus_flower.blend new file mode 100644 index 0000000..e0a0888 Binary files /dev/null and b/assets/everness_lotus_flower.blend differ diff --git a/crafting.lua b/crafting.lua index 694ffca..7e1c405 100644 --- a/crafting.lua +++ b/crafting.lua @@ -623,6 +623,13 @@ minetest.register_craft({ } }) +minetest.register_craft({ + output = 'default:paper', + recipe = { + { 'everness:lotus_leaf_3', 'everness:lotus_leaf_3', 'everness:lotus_leaf_3' }, + } +}) + -- Crystals minetest.register_craft({ @@ -813,6 +820,12 @@ minetest.register_craft({ burntime = 370, }) +minetest.register_craft({ + type = 'fuel', + recipe = 'everness:lotus_leaf_3', + burntime = 1, +}) + -- -- Cooking recipes -- @@ -942,12 +955,24 @@ minetest.register_craft({ minetest.register_craft({ output = 'everness:mineral_stone_brick_with_flower_growth 6', recipe = { - { 'everness:mineral_stone_brick', 'everness:mineral_stone_brick', 'everness:mineral_stone_brick'}, + { 'everness:mineral_stone_brick_with_growth', 'everness:mineral_stone_brick_with_growth', 'everness:mineral_stone_brick_with_growth'}, { 'group:flower', 'group:flower', 'group:flower'}, - { 'everness:mineral_stone_brick', 'everness:mineral_stone_brick', 'everness:mineral_stone_brick'} + { 'everness:mineral_stone_brick_with_growth', 'everness:mineral_stone_brick_with_growth', 'everness:mineral_stone_brick_with_growth'} } }) +minetest.register_craft({ + type = 'cooking', + output = 'everness:lotus_leaf_3', + recipe = 'everness:lotus_leaf', +}) + +minetest.register_craft({ + type = 'cooking', + output = 'everness:lotus_leaf_3', + recipe = 'everness:lotus_leaf_2', +}) + -- -- Saplings -- diff --git a/functions.lua b/functions.lua index eb515bf..f485910 100644 --- a/functions.lua +++ b/functions.lua @@ -716,7 +716,7 @@ minetest.register_abm({ -- minetest.register_abm({ - label = 'everness:rising_souls', + label = 'everness:rising_crystals', nodenames = { 'group:rising_crystals' }, neighbors = { 'group:water' }, interval = 16, @@ -807,7 +807,96 @@ minetest.register_abm({ catch_up = false, action = function(pos, node) minetest.swap_node(pos, { name = 'everness:water_geyser_active' }) - minetest.get_node_timer(pos):start(1) + + local meta = minetest.get_meta(pos) + local partcile_time = math.random(5, 15) + + -- player + for _, object in ipairs(minetest.get_objects_in_area(vector.new(pos.x - 0.5, pos.y - 0.5, pos.z - 0.5), vector.new(pos.x + 0.5, pos.y + 1, pos.z + 0.5))) do + if object:is_player() + and object:get_hp() > 0 + then + object:add_velocity(vector.new(0, math.random(27, 32), 0)) + end + end + + -- particles + local particlespawner_def = { + amount = 80, + time = partcile_time, + minpos = vector.new(pos.x, pos.y + 1.5, pos.z), + maxpos = vector.new(pos.x, pos.y + 2, pos.z), + minvel = vector.new(0, 13, 0), + maxvel = vector.new(0, 15, 0), + minacc = vector.new(0, -1, 1), + maxacc = vector.new(0, -3, 2), + minexptime = 3, + maxexptime = 5, + minsize = 5, + maxsize = 7, + texture = 'water_geyser_particle.png', + vertical = true, + collisiondetection = true, + collision_removal = true + } + + if minetest.has_feature({ dynamic_add_media_table = true, particlespawner_tweenable = true }) then + -- new syntax, above v5.6.0 + particlespawner_def = { + amount = 80, + time = partcile_time, + size = { + min = 5, + max = 7, + }, + exptime = { + min = 3, + max = 5 + }, + pos = { + min = vector.new(pos.x, pos.y + 1.5, pos.z), + max = vector.new(pos.x, pos.y + 2, pos.z) + }, + vel = { + min = vector.new(0, 13, 0), + max = vector.new(0, 15, 0) + }, + acc = { + min = vector.new(0, -1, 1), + max = vector.new(0, -3, 2) + }, + texture = { + name = 'water_geyser_particle.png', + scale_tween = { + 5, 10, + style = 'fwd', + reps = 1 + }, + alpha_tween = { + 1, 0, + style = 'fwd', + reps = 1 + }, + blend = 'alpha', + }, + vertical = true, + collisiondetection = true, + collision_removal = true + } + end + + local particle_id = minetest.add_particlespawner(particlespawner_def) + meta:set_int('particle_id', particle_id) + + minetest.sound_play({ + name = 'everness_water_geyser', + gain = 1.5, + pitch = math.random(10, 30) / 10 + }, { + pos = pos + }) + + minetest.get_node_timer(pos):start(partcile_time) end }) @@ -892,6 +981,140 @@ minetest.register_lbm({ end }) +-- Activate timers on lotus flowers +minetest.register_lbm({ + -- Descriptive label for profiling purposes (optional). + -- Definitions with identical labels will be listed as one. + label = 'everness_lotus_flower_timers', + + -- Identifier of the LBM, should follow the modname: convention + name = 'everness:everness_lotus_flower_timers', + + -- List of node names to trigger the LBM on. + -- Names of non-registered nodes and groups (as group:groupname) + -- will work as well. + nodenames = { + 'everness:lotus_flower_white', + 'everness:lotus_flower_purple', + 'everness:lotus_flower_pink' + }, + + -- Whether to run the LBM's action every time a block gets activated, + -- and not only the first time the block gets activated after the LBM + -- was introduced. + run_at_every_load = true, + + -- Function triggered for each qualifying node. + -- `dtime_s` is the in-game time (in seconds) elapsed since the block + -- was last active + action = function(pos, node, dtime_s) + local timer = minetest.get_node_timer(pos) + + if not timer:is_started() then + minetest.get_node_timer(pos):start(1) + end + end +}) + +-- Spread lotus flowers and leafs around them +minetest.register_abm({ + label = 'Lotus Flowers and Leafs spread', + nodenames = { + 'everness:lotus_flower_white', + 'everness:lotus_flower_purple', + 'everness:lotus_flower_pink', + 'everness:lotus_leaf', + 'everness:lotus_leaf_2' + }, + neighbors = { + 'everness:lotus_flower_white', + 'everness:lotus_flower_purple', + 'everness:lotus_flower_pink', + 'everness:lotus_leaf', + 'everness:lotus_leaf_2' + }, + max_y = Everness.settings.biomes.everness_mineral_waters.y_max, + min_y = Everness.settings.biomes.everness_mineral_waters.y_min, + interval = 13, + chance = 300, + action = function(pos, node) + local under = minetest.get_node(vector.new(pos.x, pos.y - 1, pos.z)) + local def = minetest.registered_nodes[under.name] or {} + + if def.liquidtype ~= 'source' and minetest.get_item_group(under.name, 'water') == 0 then + return + end + + local light = minetest.get_node_light(pos) + + if not light or light < 13 then + return + end + + local pos0 = vector.subtract(pos, 4) + local pos1 = vector.add(pos, 4) + local flower_node_names = { + 'everness:lotus_flower_white', + 'everness:lotus_flower_purple', + 'everness:lotus_flower_pink' + } + local leaf_node_names = { + 'everness:lotus_leaf', + 'everness:lotus_leaf_2' + } + local node_name = flower_node_names[math.random(1, #flower_node_names)] + local found_flower_positions = minetest.find_nodes_in_area(pos0, pos1, flower_node_names) + + -- Testing shows that a threshold of 1 result in an appropriate maximum + -- density of approximately 7 flowers per 9x9 area. + if #found_flower_positions > 1 then + -- Spread leafs + local rand_flower_pos = found_flower_positions[math.random(1, #found_flower_positions)] + pos0 = vector.subtract(rand_flower_pos, 4) + pos1 = vector.add(rand_flower_pos, 4) + local found_leaf_positions = minetest.find_nodes_in_area(pos0, pos1, leaf_node_names) + + if #found_leaf_positions > 25 then + return + end + + node_name = leaf_node_names[math.random(1, #leaf_node_names)] + end + + local water_positions = minetest.find_nodes_in_area_under_air(pos0, pos1, 'group:water') + + table.shuffle(water_positions) + -- Sort with the closest first + table.sort(water_positions, function(a, b) + return vector.distance(a, pos) < vector.distance(b, pos) + end) + + local water_pos + + -- find water source since we are looking only for `group:water` + for _, p in ipairs(water_positions) do + local n = minetest.get_node(p) + local d = minetest.registered_nodes[n.name] or {} + + if d.liquidtype == 'source' then + water_pos = p + break + end + end + + if not water_pos then + return + end + + local water_above = vector.new(water_pos.x, water_pos.y + 1, water_pos.z) + light = minetest.get_node_light(water_above) + + if light and light >= 13 then + minetest.set_node(water_above, { name = node_name }) + end + end +}) + -- Override lava cooling to include some variations of obsidian minetest.register_on_mods_loaded(function() for _, abm in pairs(minetest.registered_abms) do diff --git a/init.lua b/init.lua index 69085a7..29c9500 100644 --- a/init.lua +++ b/init.lua @@ -195,7 +195,10 @@ if minetest.get_modpath('doors') and minetest.global_exists('doors') then dofile(path .. '/doors.lua') end -dofile(path .. '/buckets.lua') +if not minetest.get_modpath('bucket') and not minetest.get_modpath('mcl_buckets') then + dofile(path .. '/buckets.lua') +end + dofile(path .. '/tools.lua') dofile(path .. '/craftitems.lua') dofile(path .. '/crafting.lua') @@ -236,7 +239,13 @@ if minetest.get_modpath('mcl_core') and minetest.global_exists('mcl_core') then dofile(path .. '/mod_support_mcl.lua') end -Everness.set_loot_chest_items() +-- Minetest Game +dofile(path .. '/mod_support_mtg.lua') + +minetest.register_on_mods_loaded(function() + Everness.set_loot_chest_items() +end) + local mod_end_time = (minetest.get_us_time() - mod_start_time) / 1000000 diff --git a/mapgen_bamboo_forest.lua b/mapgen_bamboo_forest.lua index 5c0a3bb..fc85ba5 100644 --- a/mapgen_bamboo_forest.lua +++ b/mapgen_bamboo_forest.lua @@ -260,7 +260,7 @@ local c_everness_bamboo_5 = minetest.get_content_id('everness:bamboo_5') local d_everness_bamboo_forest_large_bamboo = minetest.get_decoration_id('everness:bamboo_forest_large_bamboo') -minetest.set_gen_notify('decoration', { d_everness_bamboo_forest_large_bamboo }) +minetest.set_gen_notify({ decoration = true }, { d_everness_bamboo_forest_large_bamboo }) minetest.register_on_generated(function(minp, maxp, blockseed) -- Load the voxelmanip with the result of engine mapgen diff --git a/mapgen_baobab_savanna.lua b/mapgen_baobab_savanna.lua index 70f0c7f..a8c778c 100644 --- a/mapgen_baobab_savanna.lua +++ b/mapgen_baobab_savanna.lua @@ -178,7 +178,7 @@ local deco_ids_baobab = { } if #deco_ids_baobab > 1 then - minetest.set_gen_notify('decoration', deco_ids_baobab) + minetest.set_gen_notify({ decoration = true }, deco_ids_baobab) end minetest.register_on_generated(function(minp, maxp, blockseed) diff --git a/mapgen_coral_forest.lua b/mapgen_coral_forest.lua index 23342c2..16838c3 100644 --- a/mapgen_coral_forest.lua +++ b/mapgen_coral_forest.lua @@ -259,7 +259,7 @@ register_coral_grass_decoration(0.03, 0.03, 1) local deco_id_coral_bones_tree = minetest.get_decoration_id('everness:coral_forest_coral_bones_tree') local coral_bones_tree_size = { x = 16, y = 35, z = 16 } -minetest.set_gen_notify('decoration', { deco_id_coral_bones_tree }) +minetest.set_gen_notify({ decoration = true }, { deco_id_coral_bones_tree }) minetest.register_on_generated(function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object('gennotify') diff --git a/mapgen_frosted_icesheet_under.lua b/mapgen_frosted_icesheet_under.lua index 65405e7..3b479fe 100644 --- a/mapgen_frosted_icesheet_under.lua +++ b/mapgen_frosted_icesheet_under.lua @@ -316,7 +316,7 @@ minetest.register_decoration({ local deco_id_frosted_icicle_large_ceiling = minetest.get_decoration_id('everness:frosted_icicle_large_ceiling') local deco_id_frosted_icicle_large_floor = minetest.get_decoration_id('everness:frosted_icicle_large_floor') -minetest.set_gen_notify('decoration', { deco_id_frosted_icicle_large_ceiling, deco_id_frosted_icicle_large_floor }) +minetest.set_gen_notify({ decoration = true }, { deco_id_frosted_icicle_large_ceiling, deco_id_frosted_icicle_large_floor }) minetest.register_on_generated(function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object('gennotify') diff --git a/mapgen_mineral_waters.lua b/mapgen_mineral_waters.lua index 52bba72..de7bfe8 100644 --- a/mapgen_mineral_waters.lua +++ b/mapgen_mineral_waters.lua @@ -64,17 +64,18 @@ minetest.register_ore({ -- -- Register decorations +-- placeholder node `everness:crystal_stone` will be replaced in VM -- minetest.register_decoration({ - name = 'everness:palm_tree_1', - deco_type = 'schematic', + name = 'everness:palm_trees', + deco_type = 'simple', place_on = { 'everness:mineral_sand' }, sidelen = 16, noise_params = { offset = 0, - scale = 0.02, - spread = { x = 200, y = 200, z = 200 }, + scale = 0.005, + spread = { x = 250, y = 250, z = 250 }, seed = 329, octaves = 3, persist = 0.6 @@ -82,48 +83,32 @@ minetest.register_decoration({ biomes = { 'everness_mineral_waters' }, y_max = y_max, y_min = y_min, - schematic = minetest.get_modpath('everness') .. '/schematics/everness_palm_tree.mts', - flags = 'place_center_x, place_center_z', - spawn_by = { - 'everness:mineral_water_source', - 'everness:mineral_stone_brick', - 'everness:mineral_stone_brick_with_growth', - 'everness:mineral_stone_brick_with_flower_growth', - 'everness:mineral_sandstone', - 'everness:mineral_sandstone_block' - }, - num_spawn_by = 1, - check_offset = -1, + decoration = { 'everness:crystal_stone' }, }) minetest.register_decoration({ - name = 'everness:palm_tree_2', - deco_type = 'schematic', + name = 'everness:pots', + deco_type = 'simple', place_on = { 'everness:mineral_sand' }, sidelen = 16, noise_params = { offset = 0, - scale = 0.02, - spread = { x = 200, y = 200, z = 200 }, - seed = 329, + scale = 0.002, + spread = { x = 250, y = 250, z = 250 }, + seed = 2, octaves = 3, - persist = 0.6 + persist = 0.66 }, biomes = { 'everness_mineral_waters' }, y_max = y_max, y_min = y_min, - schematic = minetest.get_modpath('everness') .. '/schematics/everness_palm_tree.mts', - flags = 'place_center_x, place_center_z', - spawn_by = { - 'everness:mineral_water_source', - 'everness:mineral_stone_brick', - 'everness:mineral_stone_brick_with_growth', - 'everness:mineral_stone_brick_with_flower_growth', - 'everness:mineral_sandstone', - 'everness:mineral_sandstone_block' - }, - num_spawn_by = 1, - check_offset = 1, + decoration = { 'everness:crystal_stone' }, + _decoration = { + 'everness:ceramic_pot_1', + 'everness:ceramic_pot_2', + 'everness:ceramic_pot_3', + 'everness:ceramic_pot_4' + } }) minetest.register_decoration({ @@ -142,17 +127,33 @@ minetest.register_decoration({ biomes = { 'everness_mineral_waters' }, y_max = y_max, y_min = y_min, - decoration = { 'everness:water_geyser' }, - spawn_by = { - 'everness:mineral_water_source', - 'everness:mineral_stone_brick', - 'everness:mineral_stone_brick_with_growth', - 'everness:mineral_stone_brick_with_flower_growth', - 'everness:mineral_sandstone', - 'everness:mineral_sandstone_block' + decoration = { 'everness:crystal_stone' }, + spawn_by = { 'air' }, + num_spawn_by = 16, + check_offset = 1, +}) + +minetest.register_decoration({ + name = 'everness:rose_bush', + deco_type = 'simple', + place_on = { 'everness:mineral_sand' }, + sidelen = 16, + noise_params = { + offset = -0.004, + scale = 0.01, + spread = { x = 100, y = 100, z = 100 }, + seed = 137, + octaves = 3, + persist = 0.7, }, - num_spawn_by = 1, - check_offset = -1, + biomes = { 'everness_mineral_waters' }, + y_max = y_max, + y_min = y_min, + decoration = { 'everness:crystal_stone' }, + _decoration = { 'everness:rose_bush' }, + spawn_by = { 'air' }, + num_spawn_by = 16, + check_offset = 1, }) -- @@ -170,9 +171,28 @@ local c_everness_mineral_sandstone = minetest.get_content_id('everness:mineral_s local c_everness_mineral_sandstone_block = minetest.get_content_id('everness:mineral_sandstone_block') local c_everness_mineral_waters_marker = minetest.get_content_id('everness:mineral_waters_marker') local c_everness_mineral_stone_with_coal = minetest.get_content_id('everness:mineral_stone_with_coal') - +local c_everness_lotus_flower_white = minetest.get_content_id('everness:lotus_flower_white') +local c_everness_lotus_flower_purple = minetest.get_content_id('everness:lotus_flower_purple') +local c_everness_lotus_flower_pink = minetest.get_content_id('everness:lotus_flower_pink') +local c_everness_lotus_lotus_leaf = minetest.get_content_id('everness:lotus_leaf') +local c_everness_lotus_lotus_leaf_2 = minetest.get_content_id('everness:lotus_leaf_2') +local c_everness_lotus_lotus_leaf_3 = minetest.get_content_id('everness:lotus_leaf_3') +local c_everness_ceramic_pot_1 = minetest.get_content_id('everness:ceramic_pot_1') +local c_everness_ceramic_pot_2 = minetest.get_content_id('everness:ceramic_pot_2') +local c_everness_ceramic_pot_3 = minetest.get_content_id('everness:ceramic_pot_3') +local c_everness_ceramic_pot_4 = minetest.get_content_id('everness:ceramic_pot_4') +local c_everness_mineral_water_weed_1 = minetest.get_content_id('everness:mineral_water_weed_1') +local c_everness_mineral_water_weed_2 = minetest.get_content_id('everness:mineral_water_weed_2') +local c_everness_mineral_water_weed_3 = minetest.get_content_id('everness:mineral_water_weed_3') +-- Biome IDs local biome_id_everness_mineral_waters = minetest.get_biome_id('everness_mineral_waters') +-- Decoration IDs +local d_everness_palm_trees = minetest.get_decoration_id('everness:palm_trees') +local d_everness_water_geyser = minetest.get_decoration_id('everness:water_geyser') +local d_everness_pots = minetest.get_decoration_id('everness:pots') +local d_rose_bush = minetest.get_decoration_id('everness:rose_bush') +-- Pool building blocks variations local pool_build_nodes = { { c_everness_mineral_stone, @@ -185,6 +205,26 @@ local pool_build_nodes = { c_everness_mineral_sandstone_block } } +local c_lotus_flowers = { + c_everness_lotus_flower_white, + c_everness_lotus_flower_purple, + c_everness_lotus_flower_pink +} +local c_lotus_leaves = { + c_everness_lotus_lotus_leaf, + c_everness_lotus_lotus_leaf_2, + c_everness_lotus_lotus_leaf_3 +} +local c_pots = { + c_everness_ceramic_pot_1, + c_everness_ceramic_pot_2, + c_everness_ceramic_pot_3, + c_everness_ceramic_pot_4 +} +local c_water_weeds = { + c_everness_mineral_water_weed_1, + c_everness_mineral_water_weed_2 +} local function find_irecursive(table, c_id) local found = false @@ -203,28 +243,79 @@ local function find_irecursive(table, c_id) return found end +local function place_decoration(pos, vm, area, data, deco_id, callback) + local deco_def = minetest.registered_decorations[deco_id] + + if not deco_def then + return + end + + -- Position of the 'place_on' node + local vi = area:indexp(pos) + local place_on_valid = false + local data_node_name = minetest.get_name_from_content_id(data[vi]) + local placeholder_node_name = type(deco_def.decoration) == 'string' and deco_def.decoration or deco_def.decoration[1] + + if type(deco_def.place_on) == 'string' then + if deco_def.place_on == data_node_name and data[vi + area.ystride * 2] == minetest.CONTENT_AIR then + place_on_valid = true + end + else + for i, v in ipairs(deco_def.place_on) do + if v == data_node_name and data[vi + area.ystride * 2] == minetest.CONTENT_AIR then + place_on_valid = true + break + end + end + end + + local pos_above = vector.new(pos.x, pos.y + 1, pos.z) + local node_above = vm:get_node_at(pos_above) + + if node_above.name == placeholder_node_name then + if place_on_valid then + callback(pos_above, deco_def) + else + vm:set_node_at(pos_above, { name = 'air' }) + end + end +end + -- Localize data buffer table outside the loop, to be re-used for all -- mapchunks, therefore minimising memory use local data = {} +local p2data = {} + +minetest.set_gen_notify({ decoration = true }, { + d_everness_palm_trees, + d_everness_water_geyser, + d_everness_pots, + d_rose_bush +}) -- Called after generating a piece of world. Modifying nodes inside the area is a bit faster than usual. minetest.register_on_generated(function(minp, maxp, blockseed) -- Start time of mapchunk generation. -- local t0 = os.clock() - local rand = PcgRandom(blockseed) - -- Load the voxelmanip with the result of engine mapgen - local vm, emin, emax = minetest.get_mapgen_object('voxelmanip') -- Returns an array containing the biome IDs of nodes in the most recently generated chunk by the current mapgen local biomemap = minetest.get_mapgen_object('biomemap') - -- 'area' is used later to get the voxelmanip indexes for positions - local area = VoxelArea:new({ MinEdge = emin, MaxEdge = emax }) - -- Get the content ID data from the voxelmanip in the form of a flat array. - -- Set the buffer parameter to use and reuse 'data' for this. - vm:get_data(data) - if maxp.y >= y_min then - -- Above sea level + -- Above sea level + if maxp.y >= y_min and table.indexof(biomemap, biome_id_everness_mineral_waters) ~= -1 then + local rand = PcgRandom(blockseed) local rand_version = rand:next(1, 2) + -- Load the voxelmanip with the result of engine mapgen + local vm, emin, emax = minetest.get_mapgen_object('voxelmanip') + -- Returns a table mapping requested generation notification types to arrays of positions at which the corresponding generated structures are located within the current chunk + local gennotify = minetest.get_mapgen_object('gennotify') + -- 'area' is used later to get the voxelmanip indexes for positions + local area = VoxelArea:new({ MinEdge = emin, MaxEdge = emax }) + -- Get the content ID data from the voxelmanip in the form of a flat array. + -- Set the buffer parameter to use and reuse 'data' for this. + vm:get_data(data) + vm:get_param2_data(p2data) + + local pot_pos = {} if rand_version == 1 then -- @@ -243,7 +334,6 @@ minetest.register_on_generated(function(minp, maxp, blockseed) data[ai + area.ystride] == minetest.CONTENT_AIR and node_def and node_def.walkable - and table.indexof(biomemap, biome_id_everness_mineral_waters) ~= -1 then local length = 5 + rand:next(0, 10) local width = 5 + rand:next(0, 10) @@ -449,11 +539,263 @@ minetest.register_on_generated(function(minp, maxp, blockseed) end end + -- Place decorations after generating (2nd pass) + for y = minp.y, maxp.y do + for z = minp.z, maxp.z do + for x = minp.x, maxp.x do + local ai = area:index(x, y, z) + -- + -- Place Lotus Flowers and Leaves + -- + if + data[ai] == c_everness_mineral_water_source + -- spawn around water + and data[ai + 1 + area.zstride] == c_everness_mineral_water_source + and data[ai + 1 - area.zstride] == c_everness_mineral_water_source + and data[ai + 1] == c_everness_mineral_water_source + and data[ai - 1] == c_everness_mineral_water_source + and data[ai - 1 + area.zstride] == c_everness_mineral_water_source + and data[ai - 1 - area.zstride] == c_everness_mineral_water_source + and data[ai + area.zstride] == c_everness_mineral_water_source + and data[ai - area.zstride] == c_everness_mineral_water_source + -- make sure there is space above + and data[ai + area.ystride] == minetest.CONTENT_AIR + -- spawn around air above + and data[ai + area.ystride + 1] == minetest.CONTENT_AIR + and data[ai + area.ystride + 1 + area.zstride] == minetest.CONTENT_AIR + and data[ai + area.ystride + 1 - area.zstride] == minetest.CONTENT_AIR + and data[ai + area.ystride - 1] == minetest.CONTENT_AIR + and data[ai + area.ystride - 1 + area.zstride] == minetest.CONTENT_AIR + and data[ai + area.ystride - 1 - area.zstride] == minetest.CONTENT_AIR + and data[ai + area.ystride + area.zstride] == minetest.CONTENT_AIR + and data[ai + area.ystride - area.zstride] == minetest.CONTENT_AIR + then + if rand:next(0, 100) < 2 then + data[ai + area.ystride] = c_lotus_flowers[rand:next(1, #c_lotus_flowers)] + + -- Place Lotus Leaves around Flowers + local radius = 3 + local chance_max = 80 + + for i = -radius, radius do + for j = -radius, radius do + local idx = ai + i + (area.zstride * j) + area.ystride + local distance = math.round(vector.distance(area:position(ai), area:position(idx))) + local chance = math.round(chance_max / distance) + + if chance > chance_max then + chance = chance_max + end + + if + rand:next(0, 100) < chance + and data[idx] == minetest.CONTENT_AIR + and data[idx - area.ystride] == c_everness_mineral_water_source + then + data[idx] = c_lotus_leaves[rand:next(1, #c_lotus_leaves)] + end + end + end + elseif rand:next(0, 100) < 4 then + data[ai + area.ystride] = c_lotus_leaves[rand:next(1, #c_lotus_leaves)] + + -- add some more leaves around the leaf + for i = -1, 1 do + for j = -1, 1 do + local idx = ai + i + (area.zstride * j) + area.ystride + + if + rand:next(0, 100) < 25 + and data[idx] == minetest.CONTENT_AIR + and data[idx - area.ystride] == c_everness_mineral_water_source + then + data[idx] = c_lotus_leaves[rand:next(1, #c_lotus_leaves)] + end + end + end + end + end + + -- + -- Place Seaweed + -- + if + data[ai] == c_everness_mineral_water_source + and data[ai + area.ystride] == c_everness_mineral_water_source + and rand:next(0, 100) < 33 + then + local c_weed = c_water_weeds[rand:next(1, #c_water_weeds)] + + if rand:next(0, 100) < 5 then + -- Weed with light source with a bit less probability + c_weed = c_everness_mineral_water_weed_3 + end + + if data[ai + 1] == c_everness_mineral_stone then + data[ai + 1] = c_weed + data[ai + 1] = c_weed + data[ai + 1] = c_weed + p2data[ai + 1] = 2 + elseif data[ai - 1] == c_everness_mineral_stone then + data[ai - 1] = c_weed + data[ai - 1] = c_weed + data[ai - 1] = c_weed + p2data[ai - 1] = 3 + elseif data[ai + area.zstride] == c_everness_mineral_stone then + data[ai + area.zstride] = c_weed + data[ai + area.zstride] = c_weed + data[ai + area.zstride] = c_weed + p2data[ai + area.zstride] = 4 + elseif data[ai - area.zstride] == c_everness_mineral_stone then + data[ai - area.zstride] = c_weed + data[ai - area.zstride] = c_weed + data[ai - area.zstride] = c_weed + p2data[ai - area.zstride] = 5 + elseif data[ai - area.ystride] == c_everness_mineral_stone then + data[ai - area.ystride] = c_weed + data[ai - area.ystride] = c_weed + data[ai - area.ystride] = c_weed + p2data[ai - area.ystride] = 1 + end + end + + -- + -- Place pots under water + -- + if + data[ai] == c_everness_mineral_water_source + -- spawn around water + and data[ai + 1 + area.zstride] == c_everness_mineral_water_source + and data[ai + 1 - area.zstride] == c_everness_mineral_water_source + and data[ai + 1] == c_everness_mineral_water_source + and data[ai - 1] == c_everness_mineral_water_source + and data[ai - 1 + area.zstride] == c_everness_mineral_water_source + and data[ai - 1 - area.zstride] == c_everness_mineral_water_source + and data[ai + area.zstride] == c_everness_mineral_water_source + and data[ai - area.zstride] == c_everness_mineral_water_source + -- spawn around water above + and data[ai + area.ystride] == c_everness_mineral_water_source + and data[ai + area.ystride + 1] == c_everness_mineral_water_source + and data[ai + area.ystride + 1 + area.zstride] == c_everness_mineral_water_source + and data[ai + area.ystride + 1 - area.zstride] == c_everness_mineral_water_source + and data[ai + area.ystride - 1] == c_everness_mineral_water_source + and data[ai + area.ystride - 1 + area.zstride] == c_everness_mineral_water_source + and data[ai + area.ystride - 1 - area.zstride] == c_everness_mineral_water_source + and data[ai + area.ystride + area.zstride] == c_everness_mineral_water_source + and data[ai + area.ystride - area.zstride] == c_everness_mineral_water_source + -- spawn on solid node below + and data[ai - area.ystride] ~= c_everness_mineral_water_source + then + if rand:next(0, 100) < 1 then + table.insert(pot_pos, vector.new(area:position(ai))) + end + end + end + end + end + vm:set_data(data) - -- Generate all registered decorations within the VoxelManip `vm` and in the area from `pos1` to `pos2` - minetest.generate_decorations(vm) + vm:set_param2_data(p2data) + + -- + -- Place Decorations + -- + + -- + -- Palm Trees + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_palm_trees or '')] or {}) do + place_decoration(pos, vm, area, data, 'everness:palm_trees', function(p) + minetest.place_schematic_on_vmanip( + vm, + p, + minetest.get_modpath('everness') .. '/schematics/everness_palm_tree.mts', + nil, + nil, + true, + 'place_center_x, place_center_z' + ) + end) + end + + -- + -- Water Geyser + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_water_geyser or '')] or {}) do + place_decoration(pos, vm, area, data, 'everness:water_geyser', function(p) + vm:set_node_at(p, { name = 'everness:water_geyser' }) + end) + end + + -- + -- Rose Bush + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_rose_bush or '')] or {}) do + place_decoration(pos, vm, area, data, 'everness:rose_bush', function(p) + vm:set_node_at(p, { name = 'everness:rose_bush' }) + end) + end + + -- + -- Pots (above water) + -- + for _, pos in ipairs(gennotify['decoration#' .. (d_everness_pots or '')] or {}) do + place_decoration(pos, vm, area, data, 'everness:pots', function(p, deco_def) + if deco_def._decoration then + -- Use `minetest.set_node` so we can set inventory on node construct + minetest.set_node(p, { name = deco_def._decoration[rand:next(1, #deco_def._decoration)] }) + + local inv = minetest.get_inventory({ type = 'node', pos = p }) + local item_def = Everness.loot_chest.default[rand:next(1, #Everness.loot_chest.default)] + + if not minetest.registered_items[item_def.name] then + return + end + + if rand:next(0, 100) <= item_def.chance then + local stack = ItemStack(item_def.name) + + if minetest.registered_tools[item_def.name] then + stack:set_wear(rand:next(1, 65535)) + else + stack:set_count(rand:next(1, item_def.max_count)) + end + + inv:set_stack('main', 1, stack) + end + end + end) + end + + -- + -- Pots (under water) + -- + for _, v in ipairs(pot_pos) do + -- Use `minetest.set_node` so we can set inventory on node construct + minetest.set_node(v, { name = minetest.get_name_from_content_id(c_pots[rand:next(1, #c_pots)]) }) + + local inv = minetest.get_inventory({ type = 'node', pos = v }) + local item_def = Everness.loot_chest.default[rand:next(1, #Everness.loot_chest.default)] + + if not minetest.registered_items[item_def.name] then + return + end + + if rand:next(0, 100) <= item_def.chance then + local stack = ItemStack(item_def.name) + + if minetest.registered_tools[item_def.name] then + stack:set_wear(rand:next(1, 65535)) + else + stack:set_count(rand:next(1, item_def.max_count)) + end + + inv:set_stack('main', 1, stack) + end + end + -- Set the lighting within the `VoxelManip` to a uniform value - vm:set_lighting({ day = 0, night = 0 }) + vm:set_lighting({ day = 0, night = 0 }, minp, maxp) -- Calculate lighting for what has been created. vm:calc_lighting() -- Liquid nodes were placed so set them flowing. diff --git a/mod_support_mcl.lua b/mod_support_mcl.lua index fdb7a8e..1948647 100644 --- a/mod_support_mcl.lua +++ b/mod_support_mcl.lua @@ -1079,3 +1079,19 @@ minetest.register_craft({ { 'everness:dry_wood', 'everness:dry_wood' }, } }) + +-- +-- Buckets +-- + +mcl_buckets.register_liquid({ + source_place = 'everness:mineral_water_source', + source_take = { 'everness:mineral_water_source' }, + bucketname = 'everness:bucket_mineral_water', + inventory_image = 'everness_mcl_bucket_mineral_water.png', + name = S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'), + longdesc = S('A bucket can be used to collect and release liquids. This one is filled with mineral water.'), + usagehelp = S('Place it to empty the bucket and create a mineral water source.'), + tt_help = S('Places a mineral water source'), + groups = { water_bucket = 1 }, +}) diff --git a/mod_support_mtg.lua b/mod_support_mtg.lua new file mode 100644 index 0000000..9e38f64 --- /dev/null +++ b/mod_support_mtg.lua @@ -0,0 +1,32 @@ +--[[ + Everness. Never ending discovery in Everness mapgen. + Copyright (C) 2024 SaKeL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + +--]] + +local S = minetest.get_translator(minetest.get_current_modname()) + +-- +-- Buckets +-- + +if minetest.get_modpath('bucket') then + bucket.register_liquid( + 'everness:mineral_water_source', + 'everness:mineral_water_flowing', + 'everness:bucket_mineral_water', + 'everness_mtg_bucket_mineral_water.png', + S('Mineral') .. ' ' .. S('Water') .. ' ' .. S('Bucket'), + { tool = 1, water_bucket = 1 } + ) +end diff --git a/models/everness_ceramic_pot.obj b/models/everness_ceramic_pot.obj new file mode 100644 index 0000000..6755b36 --- /dev/null +++ b/models/everness_ceramic_pot.obj @@ -0,0 +1,375 @@ +# Blender v2.83.20 OBJ File: 'everness_ceramic_pot.blend' +# www.blender.org +mtllib everness_ceramic_pot.mtl +o everness_ceramic_pot.vox +v -0.375000 -0.499000 0.375000 +v -0.437500 -0.436500 0.437500 +v -0.437500 0.501000 0.125000 +v -0.250000 0.501000 0.125000 +v -0.250000 0.501000 -0.250000 +v -0.312500 0.563500 0.312500 +v -0.312500 0.751000 -0.312500 +v 0.375000 -0.499000 0.375000 +v 0.437500 -0.436500 0.437500 +v 0.437500 0.501000 0.437500 +v 0.312500 0.563500 0.312500 +v -0.375000 -0.436500 0.375000 +v 0.375000 -0.436500 0.375000 +v -0.250000 0.501000 0.437500 +v -0.250000 0.501000 0.250000 +v -0.250000 0.563500 0.250000 +v 0.250000 0.563500 0.250000 +v -0.312500 0.751000 0.312500 +v -0.187500 0.751000 0.312500 +v 0.312500 0.751000 0.312500 +v -0.187500 0.751000 -0.187500 +v 0.187500 0.751000 -0.187500 +v -0.375000 -0.436500 -0.375000 +v -0.250000 -0.436500 -0.375000 +v 0.375000 -0.499000 -0.375000 +v -0.437500 -0.436500 -0.437500 +v 0.437500 0.501000 -0.437500 +v -0.312500 0.563500 -0.312500 +v 0.062500 0.563500 -0.312500 +v -0.062500 0.751000 0.187500 +v 0.312500 0.751000 -0.312500 +v -0.375000 -0.499000 -0.375000 +v -0.437500 -0.436500 -0.375000 +v -0.250000 -0.436500 -0.437500 +v 0.375000 -0.436500 -0.375000 +v 0.437500 -0.436500 -0.437500 +v -0.312500 0.563500 -0.250000 +v -0.250000 0.563500 -0.250000 +v 0.062500 0.563500 -0.250000 +v 0.250000 0.563500 -0.250000 +v 0.312500 0.563500 -0.312500 +v -0.437500 0.501000 0.437500 +v 0.250000 0.501000 0.250000 +v 0.250000 0.501000 -0.250000 +v -0.437500 0.501000 -0.437500 +v -0.062500 0.751000 0.312500 +v -0.187500 0.751000 0.187500 +v 0.187500 0.751000 0.187500 +v 0.437500 -0.436500 0.437500 +v 0.437500 -0.436500 -0.437500 +v 0.437500 0.501000 0.437500 +v 0.437500 0.501000 -0.437500 +v -0.375000 -0.499000 0.375000 +v -0.437500 -0.436500 0.437500 +v -0.437500 0.501000 0.125000 +v -0.250000 0.501000 0.125000 +v -0.250000 0.501000 -0.250000 +v -0.312500 0.563500 0.312500 +v -0.312500 0.751000 -0.312500 +v 0.375000 -0.499000 0.375000 +v 0.437500 -0.436500 0.437500 +v 0.437500 0.501000 0.437500 +v 0.312500 0.563500 0.312500 +v -0.187500 0.626000 -0.187500 +v -0.375000 -0.436500 0.375000 +v 0.375000 -0.436500 0.375000 +v -0.250000 0.501000 0.437500 +v -0.250000 0.501000 0.250000 +v -0.250000 0.563500 0.250000 +v 0.250000 0.563500 0.250000 +v 0.187500 0.626000 -0.187500 +v -0.312500 0.751000 0.312500 +v -0.187500 0.751000 0.312500 +v 0.312500 0.751000 0.312500 +v -0.187500 0.751000 -0.187500 +v 0.187500 0.751000 -0.187500 +v -0.375000 -0.436500 -0.375000 +v -0.250000 -0.436500 -0.375000 +v 0.375000 -0.499000 -0.375000 +v -0.437500 -0.436500 -0.437500 +v 0.437500 0.501000 -0.437500 +v -0.312500 0.563500 -0.312500 +v 0.062500 0.563500 -0.312500 +v -0.187500 0.626000 0.187500 +v -0.062500 0.751000 0.187500 +v 0.312500 0.751000 -0.312500 +v -0.375000 -0.499000 -0.375000 +v -0.437500 -0.436500 -0.375000 +v -0.250000 -0.436500 -0.437500 +v 0.375000 -0.436500 -0.375000 +v 0.437500 -0.436500 -0.437500 +v -0.312500 0.563500 -0.250000 +v -0.250000 0.563500 -0.250000 +v 0.062500 0.563500 -0.250000 +v 0.250000 0.563500 -0.250000 +v 0.312500 0.563500 -0.312500 +v -0.437500 0.501000 0.437500 +v 0.250000 0.501000 0.250000 +v 0.250000 0.501000 -0.250000 +v -0.437500 0.501000 -0.437500 +v 0.187500 0.626000 0.187500 +v -0.062500 0.751000 0.312500 +v -0.187500 0.751000 0.187500 +v 0.187500 0.751000 0.187500 +v 0.437500 -0.436500 0.437500 +v 0.437500 -0.436500 -0.437500 +v 0.437500 0.501000 0.437500 +v 0.437500 0.501000 -0.437500 +vt 0.437500 0.250000 +vt 0.375000 0.218750 +vt 0.437500 0.218750 +vt 0.000000 0.000000 +vt 0.093750 0.000000 +vt 0.093750 0.046875 +vt 0.437500 0.000000 +vt 0.437500 0.218750 +vt 0.343750 0.171875 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.843750 0.218750 +vt 0.843750 0.015625 +vt 0.812500 0.031250 +vt 0.625000 0.375000 +vt 0.312500 0.375000 +vt 0.562500 0.343750 +vt 0.468750 0.203125 +vt 0.812500 0.031250 +vt 0.468750 0.031250 +vt 0.531250 0.218750 +vt 0.531250 0.203125 +vt 0.468750 0.203125 +vt 0.906250 0.234375 +vt 0.937500 0.375000 +vt 0.937500 0.218750 +vt 0.812500 0.375000 +vt 0.812500 0.359375 +vt 0.656250 0.359375 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.000000 0.000000 +vt 0.031250 0.390625 +vt 0.437500 0.390625 +vt 0.281250 0.625000 +vt 0.093750 0.640625 +vt 0.093750 0.625000 +vt 0.281250 0.625000 +vt 0.062500 0.687500 +vt 0.062500 0.640625 +vt 0.093750 0.640625 +vt 0.062500 0.218750 +vt 0.250000 0.250000 +vt 0.250000 0.218750 +vt 0.843750 0.687500 +vt 0.781250 0.703125 +vt 0.468750 0.687500 +vt 0.343750 0.937500 +vt 0.093750 0.953125 +vt 0.093750 0.937500 +vt 0.062500 0.343750 +vt 0.250000 0.375000 +vt 0.062500 0.375000 +vt 0.875000 0.390625 +vt 0.531250 0.625000 +vt 0.031250 0.375000 +vt 0.406250 0.390625 +vt 0.031250 0.390625 +vt 0.781250 0.625000 +vt 0.531250 0.640625 +vt 0.531250 0.625000 +vt 0.406250 0.687500 +vt 0.031250 0.703125 +vt 0.031250 0.687500 +vt 0.312500 0.343750 +vt 0.250000 0.250000 +vt 0.312500 0.250000 +vt 0.812500 0.640625 +vt 0.812500 0.687500 +vt 0.625000 0.687500 +vt 0.437500 0.937500 +vt 0.437500 0.703125 +vt 0.781250 0.703125 +vt 0.625000 0.953125 +vt 0.531250 0.937500 +vt 0.781250 0.937500 +vt 0.500000 1.000000 +vt 0.500000 0.953125 +vt 0.625000 0.953125 +vt 0.062500 0.250000 +vt 0.000000 0.281250 +vt 0.062500 0.343750 +vt 0.375000 0.953125 +vt 0.062500 1.000000 +vt 0.062500 0.953125 +vt 0.250000 0.343750 +vt 0.062500 0.343750 +vt 0.843750 0.375000 +vt 0.468750 0.390625 +vt 0.468750 0.375000 +vt 0.437500 0.937500 +vt 0.000000 0.703125 +vt 0.437500 0.703125 +vt 0.375000 0.250000 +vt 0.093750 0.078125 +vt 0.000000 0.078125 +vt 0.343750 0.046875 +vt 0.000000 0.218750 +vt 0.093750 0.171875 +vt 0.812500 0.203125 +vt 0.437500 0.015625 +vt 0.437500 0.203125 +vt 0.468750 0.031250 +vt 0.312500 0.218750 +vt 0.375000 0.343750 +vt 0.562500 0.250000 +vt 0.625000 0.218750 +vt 0.812500 0.203125 +vt 0.437500 0.218750 +vt 0.625000 0.218750 +vt 0.625000 0.359375 +vt 0.656250 0.234375 +vt 0.906250 0.359375 +vt 0.625000 0.375000 +vt 0.437500 0.625000 +vt 0.000000 0.625000 +vt 0.000000 0.390625 +vt 0.343750 0.625000 +vt 0.343750 0.640625 +vt 0.375000 0.640625 +vt 0.375000 0.687500 +vt 0.062500 0.250000 +vt 0.843750 0.703125 +vt 0.468750 0.703125 +vt 0.343750 0.953125 +vt 0.250000 0.343750 +vt 0.875000 0.625000 +vt 0.406250 0.375000 +vt 0.781250 0.640625 +vt 0.406250 0.703125 +vt 0.562500 0.687500 +vt 0.500000 0.640625 +vt 0.500000 0.687500 +vt 0.875000 0.703125 +vt 0.875000 0.937500 +vt 0.781250 0.953125 +vt 0.531250 0.953125 +vt 0.812500 0.953125 +vt 0.812500 1.000000 +vt -0.000000 0.250000 +vt 0.000000 0.343750 +vt 0.375000 1.000000 +vt 0.843750 0.390625 +vt 0.000000 0.937500 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +usemtl pot +s off +f 30/1/1 19/2/1 46/3/1 +f 42/4/1 14/5/1 15/6/1 +f 10/7/1 27/8/1 44/9/1 +f 27/10/2 51/11/2 52/12/2 +f 36/13/3 9/14/3 13/15/3 +f 31/16/1 7/17/1 22/18/1 +f 32/19/3 8/20/3 1/21/3 +f 34/22/3 24/23/3 23/24/3 +f 17/25/3 41/26/3 11/27/3 +f 29/28/3 39/29/3 38/30/3 +f 10/31/2 49/32/2 51/11/2 +f 36/33/2 52/12/2 50/34/2 +f 9/35/2 50/34/2 49/32/2 +f 88/36/4 54/37/4 55/38/4 +f 93/39/4 57/40/4 56/41/4 +f 59/42/4 82/43/4 92/44/4 +f 76/45/4 101/46/4 104/47/4 +f 87/48/5 78/49/5 79/50/5 +f 99/51/6 70/52/6 98/53/6 +f 84/54/6 75/55/6 103/56/6 +f 61/57/2 67/58/2 54/37/2 +f 87/59/4 65/60/4 77/61/4 +f 98/62/2 69/63/2 68/64/2 +f 79/65/6 66/66/6 60/67/6 +f 75/68/2 71/69/2 76/70/2 +f 63/71/2 74/72/2 102/73/2 +f 81/74/5 91/75/5 89/76/5 +f 94/77/5 99/78/5 57/79/5 +f 86/80/5 96/81/5 83/82/5 +f 84/83/5 85/84/5 101/85/5 +f 96/86/6 74/87/6 63/88/6 +f 84/83/1 71/89/1 64/90/1 +f 60/91/2 65/92/2 53/93/2 +f 108/94/6 105/95/6 106/96/6 +f 30/1/1 47/97/1 19/2/1 +f 4/98/1 3/99/1 15/6/1 +f 3/99/1 42/4/1 15/6/1 +f 43/100/1 15/6/1 14/5/1 +f 45/101/1 3/99/1 5/102/1 +f 3/99/1 4/98/1 5/102/1 +f 43/100/1 14/5/1 10/7/1 +f 45/101/1 5/102/1 44/9/1 +f 44/9/1 43/100/1 10/7/1 +f 27/8/1 45/101/1 44/9/1 +f 27/10/2 10/31/2 51/11/2 +f 24/23/3 34/22/3 35/103/3 +f 34/22/3 36/13/3 35/103/3 +f 2/104/3 33/105/3 12/106/3 +f 33/105/3 23/24/3 12/106/3 +f 2/104/3 12/106/3 13/15/3 +f 13/15/3 35/103/3 36/13/3 +f 9/14/3 2/104/3 13/15/3 +f 7/17/1 18/107/1 47/97/1 +f 18/107/1 19/2/1 47/97/1 +f 47/97/1 21/108/1 7/17/1 +f 30/1/1 46/3/1 48/109/1 +f 46/3/1 20/110/1 48/109/1 +f 22/18/1 48/109/1 20/110/1 +f 7/17/1 21/108/1 22/18/1 +f 22/18/1 20/110/1 31/16/1 +f 32/19/3 25/111/3 8/20/3 +f 33/105/3 26/112/3 23/24/3 +f 26/112/3 34/22/3 23/24/3 +f 6/113/3 37/114/3 16/115/3 +f 37/114/3 38/30/3 16/115/3 +f 39/29/3 29/28/3 40/116/3 +f 29/28/3 41/26/3 40/116/3 +f 11/27/3 6/113/3 16/115/3 +f 17/25/3 40/116/3 41/26/3 +f 11/27/3 16/115/3 17/25/3 +f 37/114/3 28/117/3 38/30/3 +f 28/117/3 29/28/3 38/30/3 +f 10/31/2 9/35/2 49/32/2 +f 36/33/2 27/10/2 52/12/2 +f 9/35/2 36/33/2 50/34/2 +f 97/118/4 55/38/4 54/37/4 +f 55/38/4 100/119/4 88/36/4 +f 100/119/4 80/120/4 88/36/4 +f 68/121/4 69/122/4 56/41/4 +f 69/122/4 93/39/4 56/41/4 +f 58/123/4 72/124/4 92/44/4 +f 72/124/4 59/42/4 92/44/4 +f 76/45/4 71/125/4 101/46/4 +f 77/126/5 78/49/5 87/48/5 +f 78/49/5 90/127/5 79/50/5 +f 99/51/6 95/128/6 70/52/6 +f 84/54/6 64/129/6 75/55/6 +f 62/130/2 67/58/2 61/57/2 +f 67/58/2 97/118/2 54/37/2 +f 87/59/4 53/131/4 65/60/4 +f 98/62/2 70/132/2 69/63/2 +f 79/65/6 90/133/6 66/66/6 +f 75/68/2 64/129/2 71/69/2 +f 102/73/2 73/134/2 58/135/2 +f 73/134/2 72/136/2 58/135/2 +f 102/73/2 58/135/2 63/71/2 +f 89/76/5 80/137/5 100/138/5 +f 100/138/5 81/74/5 89/76/5 +f 57/79/5 93/139/5 94/77/5 +f 94/77/5 95/140/5 99/78/5 +f 82/141/5 59/142/5 83/82/5 +f 59/142/5 86/80/5 83/82/5 +f 103/143/5 85/84/5 84/83/5 +f 85/84/5 104/144/5 101/85/5 +f 96/86/6 86/145/6 74/87/6 +f 84/83/1 101/46/1 71/89/1 +f 60/91/2 66/146/2 65/92/2 +f 108/94/6 107/147/6 105/95/6 diff --git a/models/everness_lotus_flower.obj b/models/everness_lotus_flower.obj new file mode 100644 index 0000000..ad1ed26 --- /dev/null +++ b/models/everness_lotus_flower.obj @@ -0,0 +1,235 @@ +# Blender v2.83.20 OBJ File: 'everness_lotus_flower.blend' +# www.blender.org +mtllib everness_lotus_flower.mtl +o Cube +v -0.308107 -0.055472 -0.746216 +v -0.009900 -0.499000 -0.342751 +v 0.655918 0.011755 -0.265300 +v -0.732371 -0.055472 -0.321952 +v -0.328906 -0.499000 -0.023745 +v -0.308107 -0.055472 0.698725 +v 0.231654 0.011755 -0.689564 +v 0.288417 -0.055942 0.698836 +v 0.712681 -0.055942 0.274572 +v -0.732371 -0.055472 0.274461 +v -0.486053 -0.100909 -0.211530 +v -0.160819 -0.498639 -0.160819 +v 0.211530 -0.100909 -0.486054 +v 0.160819 -0.498639 -0.160819 +v -0.486053 -0.100909 0.211530 +v -0.160819 -0.498639 0.160819 +v 0.211530 -0.100909 0.486053 +v 0.160819 -0.498639 0.160819 +v -0.211530 -0.100909 -0.486054 +v 0.486054 -0.100909 0.211530 +v 0.486054 -0.100909 -0.211530 +v -0.211530 -0.100909 0.486053 +v 0.160592 -0.498186 0.160592 +v 0.160592 -0.177003 0.160592 +v -0.160592 -0.498186 0.160592 +v -0.160592 -0.177003 0.160592 +v 0.160592 -0.498186 -0.160592 +v 0.160592 -0.177003 -0.160592 +v -0.160592 -0.498186 -0.160592 +v -0.160592 -0.177003 -0.160592 +v 0.309302 -0.499453 -0.023720 +v -0.009875 -0.499453 0.295457 +v 0.000000 -0.330263 0.355694 +v 0.000000 0.589835 0.355694 +v -0.355694 -0.330263 -0.000000 +v -0.355694 0.589835 -0.000000 +v 0.355694 -0.330263 -0.000000 +v 0.355694 0.589835 -0.000000 +v 0.000000 -0.330263 -0.355694 +v 0.000000 0.589835 -0.355694 +v 0.500438 -0.055472 -0.534084 +v 0.149602 -0.499000 -0.183248 +v 0.548643 -0.154723 -0.000000 +v 0.160819 -0.498639 -0.000000 +v 0.000000 -0.154723 -0.548643 +v 0.000000 -0.498639 -0.160819 +v -0.160819 -0.498639 -0.000000 +v -0.548642 -0.154723 -0.000000 +v 0.000000 -0.498639 0.160819 +v 0.000000 -0.154723 0.548642 +v -0.169403 -0.499000 0.135758 +v -0.567776 -0.135591 0.534130 +v -0.169403 -0.499000 -0.183248 +v -0.567776 -0.135591 -0.581621 +v 0.548086 -0.136060 0.534241 +v 0.150919 -0.498639 0.137074 +vt 0.500000 0.750000 +vt -0.000000 0.500000 +vt 0.000000 0.750000 +vt 0.500000 0.750000 +vt -0.000000 0.500000 +vt 0.000000 0.750000 +vt 0.000000 0.250000 +vt 0.500000 0.250000 +vt 0.250000 0.000000 +vt 0.500000 0.750000 +vt 0.000000 0.500000 +vt 0.000000 0.750000 +vt 0.000000 1.000000 +vt 0.875000 0.812500 +vt 0.500000 0.625000 +vt 0.500000 0.812500 +vt 0.875000 0.812500 +vt 0.500000 0.625000 +vt 0.500000 0.812500 +vt 0.875000 0.625000 +vt 0.500000 0.250000 +vt 0.875000 0.250000 +vt 0.875000 0.625000 +vt 0.500000 0.250000 +vt 0.875000 0.250000 +vt 0.875000 0.625000 +vt 0.500000 0.250000 +vt 0.875000 0.250000 +vt 0.875000 0.625000 +vt 0.500000 0.250000 +vt 0.875000 0.250000 +vt 0.500000 0.250000 +vt 0.875000 0.250000 +vt 0.000000 1.000000 +vt 0.875000 0.812500 +vt 0.500000 1.000000 +vt 0.875000 1.000000 +vt 0.500000 0.625000 +vt 0.500000 0.812500 +vt 0.500000 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.812500 +vt 0.500000 0.625000 +vt 0.500000 0.812500 +vt 0.500000 1.000000 +vt 0.875000 1.000000 +vt 0.500000 1.000000 +vt 0.875000 1.000000 +vt -0.000000 1.000000 +vt 0.500000 1.000000 +vt 0.000000 1.000000 +vt 0.500000 0.750000 +vt 0.000000 0.750000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 0.500000 0.500000 +vt -0.000000 0.000000 +vt 0.500000 0.500000 +vt 0.500000 0.000000 +vt 0.500000 0.500000 +vt 0.500000 1.000000 +vt 0.875000 0.625000 +vt 0.875000 0.625000 +vt 0.500000 0.625000 +vt 0.500000 0.625000 +vt 0.500000 0.625000 +vt 0.500000 0.625000 +vt 0.500000 1.000000 +vt 0.875000 0.625000 +vt 0.875000 0.625000 +vt 0.500000 1.000000 +vt 0.500000 0.500000 +vt 0.500000 0.000000 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 -0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 0.000000 +vt 1.000000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.000000 +vn -0.3842 0.8402 -0.3827 +vn 0.3847 0.8403 -0.3819 +vn 0.0000 1.0000 0.0000 +vn -0.4713 0.7455 0.4713 +vn 0.3833 0.8403 -0.3833 +vn 0.0000 0.7482 0.6635 +vn 0.6635 0.7482 -0.0000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn -0.4699 0.7455 0.4726 +vn -0.6979 0.6171 -0.3635 +vn -0.6635 0.7482 -0.0000 +vn 0.6979 0.6171 0.3635 +vn -0.0000 0.7482 -0.6635 +vn 0.3635 0.6171 -0.6979 +vn -0.3635 0.6171 0.6979 +vn -0.1925 0.7280 -0.6580 +vn 0.3833 0.8403 0.3833 +vn -0.6580 0.7280 -0.1925 +vn 0.1928 0.7276 -0.6584 +vn 0.0014 1.0000 0.0014 +vn -0.2680 0.6247 0.7334 +vn 0.6580 0.7280 -0.1925 +vn 0.3635 0.6171 0.6979 +vn 0.6979 0.6171 -0.3635 +vn -0.7337 0.6243 0.2683 +vn -0.6979 0.6171 0.3635 +vn -0.3635 0.6171 -0.6979 +vn -0.3827 0.8402 -0.3842 +vn 0.1925 0.7280 0.6580 +vn 0.6580 0.7280 0.1925 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +g Cube_Cube_lotus +usemtl lotus +s off +f 55/1/1 31/2/1 56/3/1 +f 52/4/2 32/5/2 51/6/2 +f 51/7/3 42/8/3 53/9/3 +f 41/10/4 2/11/4 42/12/4 +f 5/13/5 52/4/5 51/6/5 +f 45/14/6 12/15/6 46/16/6 +f 48/17/7 16/18/7 47/19/7 +f 24/20/8 25/21/8 23/22/8 +f 26/23/9 29/24/9 25/25/9 +f 30/26/10 27/27/10 29/28/10 +f 28/29/11 23/30/11 27/31/11 +f 26/23/3 28/32/3 30/33/3 +f 31/34/12 41/10/12 42/12/12 +f 43/35/13 18/36/13 20/37/13 +f 43/35/14 14/38/14 44/39/14 +f 48/17/15 12/40/15 11/41/15 +f 50/42/16 18/43/16 49/44/16 +f 50/42/17 16/45/17 22/46/17 +f 45/14/18 14/47/18 13/48/18 +f 55/1/19 32/49/19 8/50/19 +f 2/51/20 54/52/20 53/53/20 +f 54/52/20 5/54/20 53/53/20 +f 55/1/21 9/55/21 31/2/21 +f 52/4/22 6/56/22 32/5/22 +f 53/9/3 5/57/3 51/7/3 +f 51/7/23 32/5/23 31/58/23 +f 42/8/3 2/59/3 53/9/3 +f 51/7/23 31/58/23 42/8/23 +f 41/10/24 7/60/24 2/11/24 +f 5/13/25 10/61/25 52/4/25 +f 45/14/26 19/62/26 12/15/26 +f 48/17/27 15/63/27 16/18/27 +f 24/20/8 26/64/8 25/21/8 +f 26/23/9 30/65/9 29/24/9 +f 30/26/10 28/66/10 27/27/10 +f 28/29/11 24/67/11 23/30/11 +f 26/23/3 24/67/3 28/32/3 +f 31/34/28 3/68/28 41/10/28 +f 43/35/14 44/39/14 18/36/14 +f 43/35/29 21/69/29 14/38/29 +f 48/17/7 47/19/7 12/40/7 +f 50/42/30 17/70/30 18/43/30 +f 50/42/16 49/44/16 16/45/16 +f 45/14/6 46/16/6 14/47/6 +f 55/1/31 56/3/31 32/49/31 +f 2/51/32 1/71/32 54/52/32 +f 54/52/33 4/72/33 5/54/33 +g Cube_Cube_flies +usemtl flies +f 33/73/34 34/74/34 36/75/34 35/76/34 +f 35/76/35 36/75/35 40/77/35 39/78/35 +f 39/79/36 40/80/36 38/81/36 37/82/36 +f 37/82/37 38/81/37 34/74/37 33/73/37 diff --git a/nodes.lua b/nodes.lua index 75ae1f4..6d4d5ab 100644 --- a/nodes.lua +++ b/nodes.lua @@ -332,7 +332,9 @@ Everness:register_node('everness:coral_sandstone', { normal_sandstone = 1, building_block = 1, material_stone = 1, - stone = 1 + stone = 1, + -- Everness + everness_sandstone = 1 }, _mcl_blast_resistance = 0.8, _mcl_hardness = 0.8, @@ -1956,6 +1958,8 @@ Everness:register_node('everness:mineral_sandstone', { normal_sandstone = 1, building_block = 1, material_stone = 1, + -- Everness + everness_sandstone = 1 }, _mcl_blast_resistance = 0.8, _mcl_hardness = 0.8, @@ -2487,6 +2491,7 @@ Everness:register_node('everness:japanese_shrine_lootchest_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:jungle_temple_lootchest_marker', { @@ -2496,6 +2501,7 @@ Everness:register_node('everness:jungle_temple_lootchest_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:haunted_house_lootchest_marker', { @@ -2505,6 +2511,7 @@ Everness:register_node('everness:haunted_house_lootchest_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:quartz_temple_lootchest_marker', { @@ -2514,6 +2521,7 @@ Everness:register_node('everness:quartz_temple_lootchest_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:forsaken_desert_temple_marker', { @@ -2523,6 +2531,7 @@ Everness:register_node('everness:forsaken_desert_temple_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:forsaken_desert_temple_2_marker', { @@ -2532,6 +2541,7 @@ Everness:register_node('everness:forsaken_desert_temple_2_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:frosted_icicle_large_ceiling_marker', { @@ -2541,6 +2551,7 @@ Everness:register_node('everness:frosted_icicle_large_ceiling_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:frosted_icicle_large_floor_marker', { @@ -2550,6 +2561,7 @@ Everness:register_node('everness:frosted_icicle_large_floor_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:coral_forest_deep_ocean_house_marker', { @@ -2559,6 +2571,7 @@ Everness:register_node('everness:coral_forest_deep_ocean_house_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:cursed_lands_deep_ocean_skull_marker', { @@ -2568,6 +2581,7 @@ Everness:register_node('everness:cursed_lands_deep_ocean_skull_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:frosted_icesheet_igloo_marker', { @@ -2577,6 +2591,7 @@ Everness:register_node('everness:frosted_icesheet_igloo_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:crystal_forest_deep_ocean_ruins_marker', { @@ -2586,6 +2601,7 @@ Everness:register_node('everness:crystal_forest_deep_ocean_ruins_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) Everness:register_node('everness:mineral_waters_marker', { @@ -2595,6 +2611,7 @@ Everness:register_node('everness:mineral_waters_marker', { groups = { dig_immediate = 2, not_in_creative_inventory = 1 }, _mcl_hardness = 0.2, paramtype2 = 'facedir', + drop = '' }) -- Everness default blocks @@ -3656,6 +3673,468 @@ Everness:register_node('everness:cave_flower_with_particles', { use_texture_alpha = 'blend', }) +local lotus_flower_def = { + drawtype = 'mesh', + mesh = 'everness_lotus_flower.obj', + paramtype = 'light', + paramtype2 = 'meshoptions', + place_param2 = 8, + is_ground_content = false, + walkable = true, + selection_box = { + type = 'fixed', + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 } + }, + collision_box = { + type = 'fixed', + fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 }, + }, + node_placement_prediction = '', + groups = { + -- MTG + snappy = 3, + -- MCL + deco_block = 1, + dig_by_piston = 1, + dig_immediate = 3, + dig_by_water = 1, + destroy_by_lava_flow = 1, + enderman_takable = 1, + place_flowerlike = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + -- X Farming + compostability = 65, + -- ALL + flower = 1, + flammable = 1 + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + sunlight_propagates = true, + light_source = 3, + liquids_pointable = true, + floodable = true, + use_texture_alpha = 'blend' +} + +for _, color in ipairs({ 'pink', 'purple', 'white' }) do + local def = table.copy(lotus_flower_def) + + def.description = S('Lotus') .. ' ' .. S('Flower') .. ' ' .. S(color) + def.short_description = S('Lotus') .. ' ' .. S('Flower') .. ' ' .. S(color) + def.tiles = { + { name = 'everness_lotus_flower_' .. color .. '_mesh.png' }, + { name = 'everness_lotus_flower_mesh_not_animated.png' } + } + def.inventory_image = 'everness_lotus_flower_' .. color .. '_item.png' + def.wield_image = 'everness_lotus_flower_' .. color .. '_item.png' + + def.on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) + end + + if def + and def.liquidtype == 'source' + and minetest.get_item_group(node.name, 'water') > 0 + then + local player_name = placer and placer:get_player_name() or '' + + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, { name = 'everness:lotus_flower_' .. color, param2 = math.random(0, 3) }) + minetest.get_node_timer(pos):start(1) + + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, 'Node is protected') + minetest.record_protection_violation(pos, player_name) + end + else + itemstack = minetest.item_place(itemstack, placer, pointed_thing) + end + + return itemstack + end + + def.on_flood = function(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack('everness:lotus_flower_' .. color .. ' 1')) + -- Remove the node + return false + end + + def.on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) <= 11 then + minetest.set_node(pos, { name = 'everness:lotus_flower_' .. color .. '_animated' }) + end + + minetest.get_node_timer(pos):start(math.random(25, 35)) + end + + -- Animated Def + local def_anim = table.copy(def) + + def_anim.description = S('Lotus') .. ' ' .. S('Flower') .. ' ' .. S(color) .. ' ' .. S('Animated') + def_anim.short_description = S('Lotus') .. ' ' .. S('Flower') .. ' ' .. S(color) .. ' ' .. S('Animated') + def_anim.tiles = { + { name = 'everness_lotus_flower_' .. color .. '_mesh.png' }, + { + name = 'everness_lotus_flower_' .. color .. '_mesh_animated.png', + animation = { + type = 'vertical_frames', + aspect_w = 64, + aspect_h = 32, + length = 2 + }, + backface_culling = false + } + } + def_anim.light_source = 6 + def_anim.groups = { + -- MTG + snappy = 3, + -- MCL + deco_block = 1, + dig_by_piston = 1, + dig_immediate = 3, + dig_by_water = 1, + destroy_by_lava_flow = 1, + place_flowerlike = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + -- ALL + flammable = 1, + not_in_creative_inventory = 1 + } + def_anim.drop = 'everness:lotus_flower_' .. color + + def_anim.on_timer = function(pos, elapsed) + if minetest.get_node_light(pos) > 11 then + minetest.set_node(pos, { name = 'everness:lotus_flower_' .. color }) + end + + minetest.get_node_timer(pos):start(math.random(25, 35)) + end + + Everness:register_node('everness:lotus_flower_' .. color, def) + Everness:register_node('everness:lotus_flower_' .. color .. '_animated', def_anim) +end + +Everness:register_node('everness:lotus_leaf', { + description = S('Lotus') .. ' ' .. S('Leaf'), + short_description = S('Lotus') .. ' ' .. S('Leaf'), + drawtype = 'nodebox', + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + 'everness_lotus_leaf_y.png', + 'everness_lotus_leaf_y.png^[transformFY' + }, + inventory_image = 'everness_lotus_leaf_item.png', + wield_image = 'everness_lotus_leaf_item.png', + paramtype = 'light', + paramtype2 = 'facedir', + is_ground_content = false, + walkable = true, + node_box = { + type = 'fixed', + fixed = { + { -0.4375, -0.4688, -0.4375, 0.4375, -0.4688, 0.4375 }, + { -0.4375, -0.4688, -0.4375, -0.4375, -0.4063, 0.4375 }, + { 0.4375, -0.4688, -0.4375, 0.4375, -0.4063, 0.4375 }, + { -0.4375, -0.4688, -0.4375, 0.4375, -0.4063, -0.4375 }, + { -0.4375, -0.4688, 0.4375, -0.0625, -0.4063, 0.4375 }, + { 0.0625, -0.4688, 0.4375, 0.4375, -0.4063, 0.4375 }, + } + }, + selection_box = { + type = 'fixed', + fixed = { -0.5, -0.4688, -0.5, 0.5, -0.375, 0.5 } + }, + collision_box = { + type = 'fixed', + fixed = { -0.5, -0.4688, -0.5, 0.5, -0.375, 0.5 }, + }, + node_placement_prediction = '', + groups = { + -- MTG + snappy = 3, + -- MCL + deco_block = 1, + dig_by_piston = 1, + dig_immediate = 3, + dig_by_water = 1, + destroy_by_lava_flow = 1, + enderman_takable = 1, + place_flowerlike = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + -- X Farming + compostability = 65, + -- ALL + flora = 1, + flammable = 1 + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + sunlight_propagates = true, + liquids_pointable = true, + floodable = true, + use_texture_alpha = 'clip', + + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) + end + + if def + and def.liquidtype == 'source' + and minetest.get_item_group(node.name, 'water') > 0 + then + local player_name = placer and placer:get_player_name() or '' + + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = 'everness:lotus_leaf', param2 = math.random(0, 3)}) + + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, 'Node is protected') + minetest.record_protection_violation(pos, player_name) + end + else + itemstack = minetest.item_place(itemstack, placer, pointed_thing) + end + + return itemstack + end, + + on_flood = function(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack('everness:lotus_leaf 1')) + -- Remove the node + return false + end +}) + +Everness:register_node('everness:lotus_leaf_2', { + description = S('Lotus') .. ' ' .. S('Leaf'), + short_description = S('Lotus') .. ' ' .. S('Leaf'), + drawtype = 'nodebox', + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + 'everness_lotus_leaf_2_y.png', + 'everness_lotus_leaf_2_y.png^[transformFY' + }, + inventory_image = 'everness_lotus_leaf_2_item.png', + wield_image = 'everness_lotus_leaf_2_item.png', + paramtype = 'light', + paramtype2 = 'facedir', + is_ground_content = false, + walkable = true, + node_box = { + type = 'fixed', + fixed = { + { -0.4375, -0.4688, -0.4375, 0.4375, -0.4688, 0.4375 }, + { -0.4375, -0.4688, -0.4375, -0.4375, -0.4063, 0.4375 }, + { 0.4375, -0.4688, -0.4375, 0.4375, -0.4063, 0.4375 }, + { -0.4375, -0.4688, -0.4375, 0.4375, -0.4063, -0.4375 }, + { -0.4375, -0.4688, 0.4375, -0.0625, -0.4063, 0.4375 }, + { 0.0625, -0.4688, 0.4375, 0.4375, -0.4063, 0.4375 }, + } + }, + selection_box = { + type = 'fixed', + fixed = { -0.5, -0.4688, -0.5, 0.5, -0.375, 0.5 } + }, + collision_box = { + type = 'fixed', + fixed = { -0.5, -0.4688, -0.5, 0.5, -0.375, 0.5 }, + }, + node_placement_prediction = '', + groups = { + -- MTG + snappy = 3, + -- MCL + deco_block = 1, + dig_by_piston = 1, + dig_immediate = 3, + dig_by_water = 1, + destroy_by_lava_flow = 1, + enderman_takable = 1, + place_flowerlike = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + -- X Farming + compostability = 65, + -- ALL + flora = 1, + flammable = 1 + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + sunlight_propagates = true, + liquids_pointable = true, + floodable = true, + use_texture_alpha = 'clip', + + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) + end + + if def + and def.liquidtype == 'source' + and minetest.get_item_group(node.name, 'water') > 0 + then + local player_name = placer and placer:get_player_name() or '' + + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = 'everness:lotus_leaf_2', param2 = math.random(0, 3)}) + + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, 'Node is protected') + minetest.record_protection_violation(pos, player_name) + end + else + itemstack = minetest.item_place(itemstack, placer, pointed_thing) + end + + return itemstack + end, + + on_flood = function(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack('everness:lotus_leaf_2 1')) + -- Remove the node + return false + end +}) + +Everness:register_node('everness:lotus_leaf_3', { + description = S('Lotus') .. ' ' .. S('Leaf') .. ' ' .. S('Dry'), + short_description = S('Lotus') .. ' ' .. S('Leaf') .. ' ' .. S('Dry'), + drawtype = 'nodebox', + -- Textures of node; +Y, -Y, +X, -X, +Z, -Z + tiles = { + 'everness_lotus_leaf_3_y.png', + 'everness_lotus_leaf_3_y.png^[transformFY' + }, + inventory_image = 'everness_lotus_leaf_3_item.png', + wield_image = 'everness_lotus_leaf_3_item.png', + paramtype = 'light', + paramtype2 = 'facedir', + is_ground_content = false, + walkable = true, + node_box = { + type = 'fixed', + fixed = { + { -0.4375, -0.4688, -0.4375, 0.4375, -0.4688, 0.4375 }, + { -0.4375, -0.4688, -0.4375, -0.4375, -0.4063, 0.4375 }, + { 0.4375, -0.4688, -0.4375, 0.4375, -0.4063, 0.4375 }, + { -0.4375, -0.4688, -0.4375, 0.4375, -0.4063, -0.4375 }, + { -0.4375, -0.4688, 0.4375, -0.0625, -0.4063, 0.4375 }, + { 0.0625, -0.4688, 0.4375, 0.4375, -0.4063, 0.4375 }, + } + }, + selection_box = { + type = 'fixed', + fixed = { -0.5, -0.4688, -0.5, 0.5, -0.375, 0.5 } + }, + collision_box = { + type = 'fixed', + fixed = { -0.5, -0.4688, -0.5, 0.5, -0.375, 0.5 }, + }, + node_placement_prediction = '', + groups = { + -- MTG + snappy = 3, + -- MCL + deco_block = 1, + dig_by_piston = 1, + dig_immediate = 3, + dig_by_water = 1, + destroy_by_lava_flow = 1, + enderman_takable = 1, + place_flowerlike = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + -- X Farming + compostability = 65, + -- ALL + flora = 1, + flammable = 1 + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + sunlight_propagates = true, + liquids_pointable = true, + floodable = true, + use_texture_alpha = 'clip', + + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.above + local node = minetest.get_node(pointed_thing.under) + local def = minetest.registered_nodes[node.name] + + if def and def.on_rightclick then + return def.on_rightclick(pointed_thing.under, node, placer, itemstack, pointed_thing) + end + + if def + and def.liquidtype == 'source' + and minetest.get_item_group(node.name, 'water') > 0 + then + local player_name = placer and placer:get_player_name() or '' + + if not minetest.is_protected(pos, player_name) then + minetest.set_node(pos, {name = 'everness:lotus_leaf_3', param2 = math.random(0, 3)}) + + if not minetest.is_creative_enabled(player_name) then + itemstack:take_item() + end + else + minetest.chat_send_player(player_name, 'Node is protected') + minetest.record_protection_violation(pos, player_name) + end + else + itemstack = minetest.item_place(itemstack, placer, pointed_thing) + end + + return itemstack + end, + + on_flood = function(pos, oldnode, newnode) + minetest.add_item(pos, ItemStack('everness:lotus_leaf_3 1')) + -- Remove the node + return false + end +}) + Everness:register_node('everness:forsaken_fire', { description = S('Forsaken Fire'), short_description = S('Forsaken Fire'), @@ -8814,7 +9293,7 @@ local function coral_on_place(itemstack, placer, pointed_thing, params) end node_under.name = itemstack:get_name() - minetest.set_node(pos_under, node_under) + minetest.set_node(pos_under, { name = node_under.name, param2 = params.param2 or node_under.param2}) if not minetest.is_creative_enabled(player_name) then itemstack:take_item() end @@ -9750,6 +10229,166 @@ Everness:register_node('everness:coral_skeleton', { sounds = Everness.node_sound_stone_defaults(), }) +Everness:register_node('everness:mineral_water_weed_1', { + description = S('Mineral Water Weed'), + drawtype = 'plantlike_rooted', + waving = 1, + paramtype = 'light', + tiles = { 'everness_mineral_stone.png^[sheet:2x2:1,1' }, + special_tiles = { { name = 'everness_mineral_water_weed_1.png', tileable_vertical = true } }, + inventory_image = 'everness_mineral_water_weed_1.png', + wield_image = 'everness_mineral_water_weed_1.png', + paramtype2 = 'wallmounted', + groups = { + -- MTG + snappy = 3, + -- MCL + dig_immediate = 3, + deco_block = 1, + coral = 1, + }, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + selection_box = { + type = 'fixed', + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + { -1 / 2 + 1 / 16, 0.5, -1 / 2 + 1 / 16, 1 / 2 - 1 / 16, 1, 1 / 2 - 1 / 16 } + }, + }, + node_dig_prediction = 'everness:mineral_stone', + node_placement_prediction = '', + sounds = Everness.node_sound_stone_defaults({ + dig = { name = 'everness_plant_hit', gain = 0.2 }, + dug = { name = 'everness_grass_footstep', gain = 0.25 }, + }), + on_place = function(itemstack, placer, pointed_thing) + local fdir = placer and minetest.dir_to_wallmounted(placer:get_look_dir()) or 0 + + coral_on_place( + itemstack, + placer, + pointed_thing, + { + ignore_water = true, + node_under_name = 'everness:mineral_stone', + param2 = fdir + } + ) + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, { name = 'everness:mineral_stone' }) + end, +}) + +Everness:register_node('everness:mineral_water_weed_2', { + description = S('Mineral Water Weed'), + drawtype = 'plantlike_rooted', + waving = 1, + paramtype = 'light', + tiles = { 'everness_mineral_stone.png^[sheet:2x2:1,1' }, + special_tiles = { { name = 'everness_mineral_water_weed_2.png', tileable_vertical = true } }, + inventory_image = 'everness_mineral_water_weed_2.png', + wield_image = 'everness_mineral_water_weed_2.png', + paramtype2 = 'wallmounted', + groups = { + -- MTG + snappy = 3, + -- MCL + dig_immediate = 3, + deco_block = 1, + coral = 1, + }, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + selection_box = { + type = 'fixed', + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + { -1 / 2 + 1 / 16, 0.5, -1 / 2 + 1 / 16, 1 / 2 - 1 / 16, 1, 1 / 2 - 1 / 16 } + }, + }, + node_dig_prediction = 'everness:mineral_stone', + node_placement_prediction = '', + sounds = Everness.node_sound_stone_defaults({ + dig = { name = 'everness_plant_hit', gain = 0.2 }, + dug = { name = 'everness_grass_footstep', gain = 0.25 }, + }), + on_place = function(itemstack, placer, pointed_thing) + local fdir = placer and minetest.dir_to_wallmounted(placer:get_look_dir()) or 0 + + coral_on_place( + itemstack, + placer, + pointed_thing, + { + ignore_water = true, + node_under_name = 'everness:mineral_stone', + param2 = fdir + } + ) + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, { name = 'everness:mineral_stone' }) + end, +}) + +Everness:register_node('everness:mineral_water_weed_3', { + description = S('Mineral Water Weed'), + drawtype = 'plantlike_rooted', + waving = 1, + paramtype = 'light', + light_source = 7, + tiles = { 'everness_mineral_stone.png^[sheet:2x2:1,1' }, + special_tiles = { { name = 'everness_mineral_water_weed_3.png', tileable_vertical = true } }, + inventory_image = 'everness_mineral_water_weed_3.png', + wield_image = 'everness_mineral_water_weed_3.png', + paramtype2 = 'wallmounted', + groups = { + -- MTG + snappy = 3, + -- MCL + dig_immediate = 3, + deco_block = 1, + coral = 1, + }, + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + selection_box = { + type = 'fixed', + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + { -1 / 2 + 1 / 16, 0.5, -1 / 2 + 1 / 16, 1 / 2 - 1 / 16, 1, 1 / 2 - 1 / 16 } + }, + }, + node_dig_prediction = 'everness:mineral_stone', + node_placement_prediction = '', + sounds = Everness.node_sound_stone_defaults({ + dig = { name = 'everness_plant_hit', gain = 0.2 }, + dug = { name = 'everness_grass_footstep', gain = 0.25 }, + }), + on_place = function(itemstack, placer, pointed_thing) + local fdir = placer and minetest.dir_to_wallmounted(placer:get_look_dir()) or 0 + + coral_on_place( + itemstack, + placer, + pointed_thing, + { + ignore_water = true, + node_under_name = 'everness:mineral_stone', + param2 = fdir + } + ) + end, + after_dig_node = function(pos, oldnode, oldmetadata, digger) + minetest.set_node(pos, { name = 'everness:mineral_stone' }) + end, +}) + -- -- Meshes -- @@ -9848,6 +10487,45 @@ Everness:register_node('everness:forsythia_bush', { use_texture_alpha = 'clip', }) +-- Rose Bush + +Everness:register_node('everness:rose_bush', { + description = S('Rose Bush'), + short_description = S('Rose Bush'), + drawtype = 'mesh', + mesh = 'everness_forsythia_mesh.obj', + tiles = { 'everness_rose_bush_mesh.png' }, + inventory_image = 'everness_rose_bush_item.png', + wield_image = 'everness_rose_bush_item.png', + paramtype = 'light', + is_ground_content = false, + walkable = true, + groups = { + -- MTG + snappy = 3, + flora = 1, + -- MCL + handy = 1, + shearsy = 1, + deco_block = 1, + plant = 1, + non_mycelium_plant = 1, + fire_encouragement = 60, + fire_flammability = 100, + dig_by_water = 1, + destroy_by_lava_flow = 1, + compostability = 30, + -- ALL + attached_node = 1, + flammable = 2, + }, + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + sounds = Everness.node_sound_leaves_defaults(), + sunlight_propagates = true, + use_texture_alpha = 'clip', +}) + -- Glowing Pillar Everness:register_node('everness:glowing_pillar', { @@ -10487,7 +11165,6 @@ Everness:register_node('everness:coral_forest_deep_ocean_lantern', { light_source = 14, }) - -- -- Liquids -- @@ -10539,7 +11216,7 @@ Everness:register_node('everness:mineral_water_source', { }, liquid_renewable = false, liquid_range = 2, - sounds = default.node_sound_water_defaults(), + sounds = Everness.node_sound_water_defaults(), }) Everness:register_node('everness:mineral_water_flowing', { @@ -10591,7 +11268,7 @@ Everness:register_node('everness:mineral_water_flowing', { not_in_creative_inventory = 1, cools_lava = 1 }, - sounds = default.node_sound_water_defaults(), + sounds = Everness.node_sound_water_defaults(), }) Everness:register_node('everness:water_geyser', { @@ -10626,7 +11303,7 @@ Everness:register_node('everness:water_geyser_active', { drawtype = 'mesh', mesh = 'everness_water_geyser.obj', tiles = { - 'everness_mineral_stone.png^[multiply:#E0D3DC:127' + 'everness_mineral_stone.png^[colorize:#E0D3DC:127' }, paramtype = 'light', -- wield_image = 'everness_lumabus_vine_end_bottom.png', @@ -10646,96 +11323,16 @@ Everness:register_node('everness:water_geyser_active', { climbable = false, _mcl_blast_resistance = 6, _mcl_hardness = 1.5, + move_resistance = 2, + damage_per_second = 1, sounds = Everness.node_sound_stone_defaults(), on_timer = function(pos, elapsed) - local meta = minetest.get_meta(pos) - local partcile_time = math.random(5, 15) + local n = minetest.get_node(pos) - -- player - for _, object in ipairs(minetest.get_objects_in_area(vector.new(pos.x - 0.5, pos.y - 0.5, pos.z - 0.5), vector.new(pos.x + 0.5, pos.y + 1, pos.z + 0.5))) do - if object:is_player() - and object:get_hp() > 0 - then - object:add_velocity(vector.new(0, math.random(27, 32), 0)) - end + if n and n.name == 'everness:water_geyser_active' then + minetest.swap_node(pos, { name = 'everness:water_geyser' }) end - -- particles - local particlespawner_def = { - amount = 80, - time = partcile_time, - minpos = vector.new(pos.x, pos.y + 1.5, pos.z), - maxpos = vector.new(pos.x, pos.y + 2, pos.z), - minvel = vector.new(0, 13, 0), - maxvel = vector.new(0, 15, 0), - minacc = vector.new(0, -1, 1), - maxacc = vector.new(0, -3, 2), - minexptime = 3, - maxexptime = 5, - minsize = 20, - maxsize = 30, - texture = 'water_geyser_particle.png', - vertical = true, - collisiondetection = true, - collision_removal = true - } - - if minetest.has_feature({ dynamic_add_media_table = true, particlespawner_tweenable = true }) then - -- new syntax, above v5.6.0 - particlespawner_def = { - amount = 80, - time = partcile_time, - size = { - min = 5, - max = 7, - }, - exptime = { - min = 3, - max = 5 - }, - pos = { - min = vector.new(pos.x, pos.y + 1.5, pos.z), - max = vector.new(pos.x, pos.y + 2, pos.z) - }, - vel = { - min = vector.new(0, 13, 0), - max = vector.new(0, 15, 0) - }, - acc = { - min = vector.new(0, -1, 1), - max = vector.new(0, -3, 2) - }, - texture = { - name = 'water_geyser_particle.png', - scale_tween = { - 5, 10, - style = 'fwd', - reps = 1 - }, - alpha_tween = { - 1, 0, - style = 'fwd', - reps = 1 - }, - blend = 'alpha', - }, - vertical = true, - collisiondetection = true, - collision_removal = true - } - end - - local particle_id = minetest.add_particlespawner(particlespawner_def) - meta:set_int('particle_id', particle_id) - - minetest.after(partcile_time, function(v_pos) - local n = minetest.get_node(v_pos) - - if n and n.name == 'everness:water_geyser_active' then - minetest.swap_node(v_pos, { name = 'everness:water_geyser' }) - end - end, pos) - return false end, on_destruct = function(pos) @@ -10748,3 +11345,275 @@ Everness:register_node('everness:water_geyser_active', { end end }) + +for i, v in ipairs({ 'blank', 'flowers', 'lines', 'tribal' }) do + Everness:register_node('everness:ceramic_pot_' .. i, { + description = S('Ceramic') .. ' ' .. S('Pot') .. ' ' .. S(v), + drawtype = 'mesh', + mesh = 'everness_ceramic_pot.obj', + tiles = { 'everness_ceramic_pot_' .. i .. '_mesh.png' }, + wield_scale = { x = 2, y = 2, z = 2 }, + is_ground_content = false, + paramtype = 'light', + sunlight_propagates = true, + use_texture_alpha = 'clip', + paramtype2 = '4dir', + groups = { + -- MTG + cracky = 3, + -- MCL + pickaxey = 1, + building_block = 1, + material_stone = 1, + -- ALL + oddly_breakable_by_hand = 3 + }, + _mcl_blast_resistance = 6, + _mcl_hardness = 1.5, + _mcl_silk_touch_drop = true, + sounds = Everness.node_sound_ceramic_defaults(), + on_construct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + meta:set_string('infotext', S('Ceramic') .. ' ' .. S('Pot') .. ' ' .. S(v)) + meta:set_string('owner', '') + inv:set_size('main', 1) + end, + after_place_node = function(pos, placer, itemstack, pointed_thing) + local meta = minetest.get_meta(pos) + + meta:set_string('owner', placer:get_player_name() or '') + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local p_name = clicker:get_player_name() + + if minetest.is_protected(pos, p_name) then + return itemstack + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local inv_stack = inv:get_stack('main', 1) + local label_copy = { + S('Ceramic') .. ' ' .. S('Pot') .. ' ' .. S(v) + } + + if meta:get_string('owner') ~= '' then + label_copy[#label_copy + 1] = ' (' .. S('owned by') .. ' ' .. meta:get_string('owner') .. ')' + end + + label_copy[#label_copy + 1] = '\n' .. inv_stack:get_description() + + label_copy = table.concat(label_copy, '') + + minetest.show_formspec(p_name, 'everness:ceramic_pot_' .. i, Everness.get_pot_formspec(pos, label_copy, 'everness_ceramic_pot_' .. i .. '_mesh.png')) + + minetest.sound_play('everness_ceramic_hit', { gain = 1.0, pos = pos, max_hear_distance = 10 }, true) + end, + on_blast = function(pos, intensity) + if minetest.is_protected(pos, '') then + return + end + + local drops = {} + local inv = minetest.get_meta(pos):get_inventory() + local n = #drops + + for i = 1, inv:get_size('main') do + local stack = inv:get_stack('main', i) + if stack:get_count() > 0 then + drops[n + 1] = stack:to_table() + n = n + 1 + end + end + + drops[#drops + 1] = 'everness:ceramic_pot_' .. i + minetest.remove_node(pos) + return drops + end, + on_destruct = function(pos) + local inv = minetest.get_meta(pos):get_inventory() + + for i = 1, inv:get_size('main') do + local stack = inv:get_stack('main', i) + + if stack:get_count() > 0 then + local obj = minetest.add_item(pos, stack) + + if obj then + obj:get_luaentity().collect = true + obj:set_acceleration({ x = 0, y = -10, z = 0 }) + obj:set_velocity({ + x = 0, + y = 5, + z = 0 + }) + end + end + end + end, + + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + + return stack:get_count() + end, + + allow_metadata_inventory_take = function(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + + return stack:get_count() + end, + + on_metadata_inventory_put = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local inv_stack = inv:get_stack('main', 1) + local label_copy = { + S('Ceramic') .. ' ' .. S('Pot') .. ' ' .. S(v) + } + + if meta:get_string('owner') ~= '' then + label_copy[#label_copy + 1] = ' (' .. S('owned by') .. ' ' .. meta:get_string('owner') .. ')' + end + + label_copy[#label_copy + 1] = '\n' .. inv_stack:get_description() + + label_copy = table.concat(label_copy, '') + + minetest.show_formspec(player:get_player_name(), 'everness:ceramic_pot_' .. i, Everness.get_pot_formspec(pos, label_copy, 'everness_ceramic_pot_' .. i .. '_mesh.png')) + end, + + on_metadata_inventory_take = function(pos, listname, index, stack, player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local inv_stack = inv:get_stack('main', 1) + local label_copy = { + S('Ceramic') .. ' ' .. S('Pot') .. ' ' .. S(v) + } + + if meta:get_string('owner') ~= '' then + label_copy[#label_copy + 1] = ' (' .. S('owned by') .. ' ' .. meta:get_string('owner') .. ')' + end + + label_copy[#label_copy + 1] = '\n' .. inv_stack:get_description() + + label_copy = table.concat(label_copy, '') + + minetest.show_formspec(player:get_player_name(), 'everness:ceramic_pot_' .. i, Everness.get_pot_formspec(pos, label_copy, 'everness_ceramic_pot_' .. i .. '_mesh.png')) + end + }) +end + +local fence_collision_extra = minetest.settings:get_bool('enable_fence_tall') and 3/8 or 0 + +Everness:register_node('everness:sand_castle_wall', { + description = S('Sand') .. ' ' .. S('Castle') .. ' ' .. S('Wall'), + drawtype = 'nodebox', + node_box = { + type = 'connected', + fixed = { + -- Main pillar + { -0.2500, -0.5000, -0.2500, 0.2500, 0.3750, 0.2500 }, + -- Main pillar tops + { -0.2500, 0.3750, -0.2500, -0.1875, 0.4375, 0.2500 }, + { 0.1875, 0.3750, -0.2500, 0.2500, 0.4375, 0.2500 }, + { -0.1875, 0.3750, -0.2500, 0.1875, 0.4375, -0.1875 }, + { -0.1875, 0.3750, 0.1875, 0.1875, 0.4375, 0.2500 }, + { -0.2500, 0.4375, 0.1875, -0.1875, 0.5000, 0.2500 }, + { -0.1250, 0.4375, 0.1875, -0.06250, 0.5000, 0.2500 }, + { 0.06250, 0.4375, 0.1875, 0.1250, 0.5000, 0.2500 }, + { 0.1875, 0.4375, 0.1875, 0.2500, 0.5000, 0.2500 }, + { 0.1875, 0.4375, -0.2500, 0.2500, 0.5000, -0.1875 }, + { 0.1875, 0.4375, -0.1250, 0.2500, 0.5000, -0.06250 }, + { 0.1875, 0.4375, 0.06250, 0.2500, 0.5000, 0.1250 }, + { -0.2500, 0.4375, -0.2500, -0.1875, 0.5000, -0.1875 }, + { -0.2500, 0.4375, -0.1250, -0.1875, 0.5000, -0.06250 }, + { -0.2500, 0.4375, 0.06250, -0.1875, 0.5000, 0.1250 }, + { -0.1250, 0.4375, -0.2500, -0.06250, 0.5000, -0.1875 }, + { 0.06250, 0.4375, -0.2500, 0.1250, 0.5000, -0.1875 }, + }, + connect_front = { + -- Connected side + { -0.1875, -0.5000, -0.5000, 0.1875, 0.3125, -0.2500 }, + -- Connected side tops + { -0.1875, 0.3750, -0.5000, -0.1250, 0.4375, -0.4375 }, + { -0.1875, 0.3750, -0.3750, -0.1250, 0.4375, -0.3125 }, + { -0.1875, 0.3125, -0.5000, -0.1250, 0.3750, -0.2500 }, + { 0.1250, 0.3750, -0.3750, 0.1875, 0.4375, -0.3125 }, + { 0.1250, 0.3750, -0.5000, 0.1875, 0.4375, -0.4375 }, + { 0.1250, 0.3125, -0.5000, 0.1875, 0.3750, -0.2500 }, + }, + + connect_back = { + -- Connected side + { -0.1875, -0.5000, 0.2500, 0.1875, 0.3125, 0.5000 }, + -- Connected side tops + { -0.1875, 0.3750, 0.4375, -0.1250, 0.4375, 0.5000 }, + { -0.1875, 0.3750, 0.3125, -0.1250, 0.4375, 0.3750 }, + { -0.1875, 0.3125, 0.2500, -0.1250, 0.3750, 0.5000 }, + { 0.1250, 0.3750, 0.3125, 0.1875, 0.4375, 0.3750 }, + { 0.1250, 0.3750, 0.4375, 0.1875, 0.4375, 0.5000 }, + { 0.1250, 0.3125, 0.2500, 0.1875, 0.3750, 0.5000 }, + }, + + connect_left = { + -- Connected side + { -0.2500, 0.3125, 0.1875, -0.5000, -0.5000, -0.1875 }, + -- Connected side tops + { -0.4375, 0.4375, -0.1250, -0.5000, 0.3750, -0.1875 }, + { -0.3125, 0.4375, -0.1250, -0.3750, 0.3750, -0.1875 }, + { -0.2500, 0.3750, -0.1250, -0.5000, 0.3125, -0.1875 }, + { -0.3125, 0.4375, 0.1875, -0.3750, 0.3750, 0.1250 }, + { -0.4375, 0.4375, 0.1875, -0.5000, 0.3750, 0.1250 }, + { -0.2500, 0.3750, 0.1875, -0.5000, 0.3125, 0.1250 }, + }, + connect_right = { + -- Connected side + { 0.2500, -0.5000, -0.1875, 0.5000, 0.3125, 0.1875 }, + -- Connected side tops + { 0.4375, 0.3750, 0.1250, 0.5000, 0.4375, 0.1875 }, + { 0.3125, 0.3750, 0.1250, 0.3750, 0.4375, 0.1875 }, + { 0.2500, 0.3125, 0.1250, 0.5000, 0.3750, 0.1875 }, + { 0.3125, 0.3750, -0.1875, 0.3750, 0.4375, -0.1250 }, + { 0.4375, 0.3750, -0.1875, 0.5000, 0.4375, -0.1250 }, + { 0.2500, 0.3125, -0.1875, 0.5000, 0.3750, -0.1250 }, + }, + }, + selection_box = { + type = 'connected', + fixed = { -1/4, -1/2, -1/4, 1/4, 1/2 + fence_collision_extra, 1/4 }, + connect_front = { -1/4, -1/2, -1/2, 1/4, 1/2 + fence_collision_extra, -1/4 }, + connect_left = { -1/2, -1/2, -1/4, -1/4, 1/2 + fence_collision_extra, 1/4 }, + connect_back = { -1/4, -1/2, 1/4, 1/4, 1/2 + fence_collision_extra, 1/2 }, + connect_right = { 1/4, -1/2, -1/4, 1/2, 1/2 + fence_collision_extra, 1/4 }, + }, + collision_box = { + type = 'connected', + fixed = { -1/4, -1/2, -1/4, 1/4, 1/2 + fence_collision_extra, 1/4 }, + connect_front = { -1/4, -1/2, -1/2, 1/4, 1/2 + fence_collision_extra, -1/4 }, + connect_left = { -1/2, -1/2, -1/4, -1/4, 1/2 + fence_collision_extra, 1/4 }, + connect_back = { -1/4, -1/2, 1/4, 1/4, 1/2 + fence_collision_extra, 1/2 }, + connect_right = { 1/4, -1/2, -1/4, 1/2, 1/2 + fence_collision_extra, 1/4 }, + }, + connects_to = { + 'group:wall', + 'group:stone', + 'group:fence', + 'group:everness_sandstone' + }, + paramtype = 'light', + is_ground_content = false, + tiles = { 'everness_mineral_sandstone.png' }, + walkable = true, + groups = { + cracky = 3, + wall = 1, + stone = 2 + }, + sounds = Everness.node_sound_stone_defaults(), +}) diff --git a/skybox.lua b/skybox.lua index 5a56b44..e215852 100644 --- a/skybox.lua +++ b/skybox.lua @@ -690,13 +690,7 @@ local skybox_defs = { fog_sun_tint = '#FDA47E', fog_moon_tint = '#FAE0EB' } - }, - -- sun_parameters = { - -- texture = 'everness_bamboo_forest_sun.png', - -- scale = 1.57, - -- tonemap = 'everness_bamboo_forest_sun_tonemap.png', - -- sunrise = 'everness_bamboo_forest_sunrisebg.png', - -- }, + } }, } diff --git a/sounds/everness_ceramic_dug.1.ogg b/sounds/everness_ceramic_dug.1.ogg new file mode 100644 index 0000000..bbb4f3c Binary files /dev/null and b/sounds/everness_ceramic_dug.1.ogg differ diff --git a/sounds/everness_ceramic_dug.2.ogg b/sounds/everness_ceramic_dug.2.ogg new file mode 100644 index 0000000..abdf27b Binary files /dev/null and b/sounds/everness_ceramic_dug.2.ogg differ diff --git a/sounds/everness_ceramic_dug.3.ogg b/sounds/everness_ceramic_dug.3.ogg new file mode 100644 index 0000000..6a5c78f Binary files /dev/null and b/sounds/everness_ceramic_dug.3.ogg differ diff --git a/sounds/everness_ceramic_footstep.1.ogg b/sounds/everness_ceramic_footstep.1.ogg new file mode 100644 index 0000000..93eb080 Binary files /dev/null and b/sounds/everness_ceramic_footstep.1.ogg differ diff --git a/sounds/everness_ceramic_footstep.2.ogg b/sounds/everness_ceramic_footstep.2.ogg new file mode 100644 index 0000000..be874a9 Binary files /dev/null and b/sounds/everness_ceramic_footstep.2.ogg differ diff --git a/sounds/everness_ceramic_footstep.3.ogg b/sounds/everness_ceramic_footstep.3.ogg new file mode 100644 index 0000000..da82c89 Binary files /dev/null and b/sounds/everness_ceramic_footstep.3.ogg differ diff --git a/sounds/everness_ceramic_footstep.4.ogg b/sounds/everness_ceramic_footstep.4.ogg new file mode 100644 index 0000000..6d60785 Binary files /dev/null and b/sounds/everness_ceramic_footstep.4.ogg differ diff --git a/sounds/everness_ceramic_footstep.5.ogg b/sounds/everness_ceramic_footstep.5.ogg new file mode 100644 index 0000000..2e97fba Binary files /dev/null and b/sounds/everness_ceramic_footstep.5.ogg differ diff --git a/sounds/everness_ceramic_footstep.6.ogg b/sounds/everness_ceramic_footstep.6.ogg new file mode 100644 index 0000000..21f04f6 Binary files /dev/null and b/sounds/everness_ceramic_footstep.6.ogg differ diff --git a/sounds/everness_ceramic_hit.1.ogg b/sounds/everness_ceramic_hit.1.ogg new file mode 100644 index 0000000..7e2d85f Binary files /dev/null and b/sounds/everness_ceramic_hit.1.ogg differ diff --git a/sounds/everness_ceramic_hit.2.ogg b/sounds/everness_ceramic_hit.2.ogg new file mode 100644 index 0000000..93423d2 Binary files /dev/null and b/sounds/everness_ceramic_hit.2.ogg differ diff --git a/sounds/everness_ceramic_hit.3.ogg b/sounds/everness_ceramic_hit.3.ogg new file mode 100644 index 0000000..41a41d9 Binary files /dev/null and b/sounds/everness_ceramic_hit.3.ogg differ diff --git a/sounds/everness_ceramic_hit.4.ogg b/sounds/everness_ceramic_hit.4.ogg new file mode 100644 index 0000000..c1f332f Binary files /dev/null and b/sounds/everness_ceramic_hit.4.ogg differ diff --git a/sounds/everness_ceramic_hit.5.ogg b/sounds/everness_ceramic_hit.5.ogg new file mode 100644 index 0000000..bfafaf4 Binary files /dev/null and b/sounds/everness_ceramic_hit.5.ogg differ diff --git a/sounds/everness_ceramic_hit.6.ogg b/sounds/everness_ceramic_hit.6.ogg new file mode 100644 index 0000000..8a45d51 Binary files /dev/null and b/sounds/everness_ceramic_hit.6.ogg differ diff --git a/sounds/everness_ceramic_place.1.ogg b/sounds/everness_ceramic_place.1.ogg new file mode 100644 index 0000000..644628a Binary files /dev/null and b/sounds/everness_ceramic_place.1.ogg differ diff --git a/sounds/everness_ceramic_place.2.ogg b/sounds/everness_ceramic_place.2.ogg new file mode 100644 index 0000000..f5f41e2 Binary files /dev/null and b/sounds/everness_ceramic_place.2.ogg differ diff --git a/sounds/everness_ceramic_place.3.ogg b/sounds/everness_ceramic_place.3.ogg new file mode 100644 index 0000000..8c24447 Binary files /dev/null and b/sounds/everness_ceramic_place.3.ogg differ diff --git a/sounds/everness_water_footstep.1.ogg b/sounds/everness_water_footstep.1.ogg new file mode 100644 index 0000000..22b340d Binary files /dev/null and b/sounds/everness_water_footstep.1.ogg differ diff --git a/sounds/everness_water_footstep.2.ogg b/sounds/everness_water_footstep.2.ogg new file mode 100644 index 0000000..30f0ded Binary files /dev/null and b/sounds/everness_water_footstep.2.ogg differ diff --git a/sounds/everness_water_footstep.3.ogg b/sounds/everness_water_footstep.3.ogg new file mode 100644 index 0000000..f4cc3da Binary files /dev/null and b/sounds/everness_water_footstep.3.ogg differ diff --git a/sounds/everness_water_footstep.4.ogg b/sounds/everness_water_footstep.4.ogg new file mode 100644 index 0000000..7ab3524 Binary files /dev/null and b/sounds/everness_water_footstep.4.ogg differ diff --git a/sounds/everness_water_geyser.1.ogg b/sounds/everness_water_geyser.1.ogg new file mode 100644 index 0000000..80da2ef Binary files /dev/null and b/sounds/everness_water_geyser.1.ogg differ diff --git a/textures/everness_ceramic_pot_1_mesh.png b/textures/everness_ceramic_pot_1_mesh.png new file mode 100644 index 0000000..bdddd0e Binary files /dev/null and b/textures/everness_ceramic_pot_1_mesh.png differ diff --git a/textures/everness_ceramic_pot_2_mesh.png b/textures/everness_ceramic_pot_2_mesh.png new file mode 100644 index 0000000..5a203f4 Binary files /dev/null and b/textures/everness_ceramic_pot_2_mesh.png differ diff --git a/textures/everness_ceramic_pot_3_mesh.png b/textures/everness_ceramic_pot_3_mesh.png new file mode 100644 index 0000000..b1b2f6a Binary files /dev/null and b/textures/everness_ceramic_pot_3_mesh.png differ diff --git a/textures/everness_ceramic_pot_4_mesh.png b/textures/everness_ceramic_pot_4_mesh.png new file mode 100644 index 0000000..def40d2 Binary files /dev/null and b/textures/everness_ceramic_pot_4_mesh.png differ diff --git a/textures/everness_lotus_flower_mesh_not_animated.png b/textures/everness_lotus_flower_mesh_not_animated.png new file mode 100644 index 0000000..8bbd738 Binary files /dev/null and b/textures/everness_lotus_flower_mesh_not_animated.png differ diff --git a/textures/everness_lotus_flower_pink_item.png b/textures/everness_lotus_flower_pink_item.png new file mode 100644 index 0000000..6b82d35 Binary files /dev/null and b/textures/everness_lotus_flower_pink_item.png differ diff --git a/textures/everness_lotus_flower_pink_mesh.png b/textures/everness_lotus_flower_pink_mesh.png new file mode 100644 index 0000000..60f6197 Binary files /dev/null and b/textures/everness_lotus_flower_pink_mesh.png differ diff --git a/textures/everness_lotus_flower_pink_mesh_animated.png b/textures/everness_lotus_flower_pink_mesh_animated.png new file mode 100644 index 0000000..f84dabd Binary files /dev/null and b/textures/everness_lotus_flower_pink_mesh_animated.png differ diff --git a/textures/everness_lotus_flower_purple_item.png b/textures/everness_lotus_flower_purple_item.png new file mode 100644 index 0000000..477e708 Binary files /dev/null and b/textures/everness_lotus_flower_purple_item.png differ diff --git a/textures/everness_lotus_flower_purple_mesh.png b/textures/everness_lotus_flower_purple_mesh.png new file mode 100644 index 0000000..a4a8cb0 Binary files /dev/null and b/textures/everness_lotus_flower_purple_mesh.png differ diff --git a/textures/everness_lotus_flower_purple_mesh_animated.png b/textures/everness_lotus_flower_purple_mesh_animated.png new file mode 100644 index 0000000..b471ff3 Binary files /dev/null and b/textures/everness_lotus_flower_purple_mesh_animated.png differ diff --git a/textures/everness_lotus_flower_white_item.png b/textures/everness_lotus_flower_white_item.png new file mode 100644 index 0000000..e576fdc Binary files /dev/null and b/textures/everness_lotus_flower_white_item.png differ diff --git a/textures/everness_lotus_flower_white_mesh.png b/textures/everness_lotus_flower_white_mesh.png new file mode 100644 index 0000000..390a675 Binary files /dev/null and b/textures/everness_lotus_flower_white_mesh.png differ diff --git a/textures/everness_lotus_flower_white_mesh_animated.png b/textures/everness_lotus_flower_white_mesh_animated.png new file mode 100644 index 0000000..761b7ff Binary files /dev/null and b/textures/everness_lotus_flower_white_mesh_animated.png differ diff --git a/textures/everness_lotus_leaf_2_item.png b/textures/everness_lotus_leaf_2_item.png new file mode 100644 index 0000000..d6254f0 Binary files /dev/null and b/textures/everness_lotus_leaf_2_item.png differ diff --git a/textures/everness_lotus_leaf_2_y.png b/textures/everness_lotus_leaf_2_y.png new file mode 100644 index 0000000..3df1af8 Binary files /dev/null and b/textures/everness_lotus_leaf_2_y.png differ diff --git a/textures/everness_lotus_leaf_3_item.png b/textures/everness_lotus_leaf_3_item.png new file mode 100644 index 0000000..08687e6 Binary files /dev/null and b/textures/everness_lotus_leaf_3_item.png differ diff --git a/textures/everness_lotus_leaf_3_y.png b/textures/everness_lotus_leaf_3_y.png new file mode 100644 index 0000000..8f9bc49 Binary files /dev/null and b/textures/everness_lotus_leaf_3_y.png differ diff --git a/textures/everness_lotus_leaf_item.png b/textures/everness_lotus_leaf_item.png new file mode 100644 index 0000000..4225c8b Binary files /dev/null and b/textures/everness_lotus_leaf_item.png differ diff --git a/textures/everness_lotus_leaf_y.png b/textures/everness_lotus_leaf_y.png new file mode 100644 index 0000000..7545fc9 Binary files /dev/null and b/textures/everness_lotus_leaf_y.png differ diff --git a/textures/everness_mcl_bucket_mineral_water.png b/textures/everness_mcl_bucket_mineral_water.png new file mode 100644 index 0000000..42f6e8e Binary files /dev/null and b/textures/everness_mcl_bucket_mineral_water.png differ diff --git a/textures/everness_mineral_sandstone.png b/textures/everness_mineral_sandstone.png index d1b7f27..f65d049 100644 Binary files a/textures/everness_mineral_sandstone.png and b/textures/everness_mineral_sandstone.png differ diff --git a/textures/everness_mineral_water_weed_1.png b/textures/everness_mineral_water_weed_1.png new file mode 100644 index 0000000..d7cc49a Binary files /dev/null and b/textures/everness_mineral_water_weed_1.png differ diff --git a/textures/everness_mineral_water_weed_2.png b/textures/everness_mineral_water_weed_2.png new file mode 100644 index 0000000..19239a9 Binary files /dev/null and b/textures/everness_mineral_water_weed_2.png differ diff --git a/textures/everness_mineral_water_weed_3.png b/textures/everness_mineral_water_weed_3.png new file mode 100644 index 0000000..c8764cc Binary files /dev/null and b/textures/everness_mineral_water_weed_3.png differ diff --git a/textures/everness_mtg_bucket_mineral_water.png b/textures/everness_mtg_bucket_mineral_water.png new file mode 100644 index 0000000..93dc1d3 Binary files /dev/null and b/textures/everness_mtg_bucket_mineral_water.png differ diff --git a/textures/everness_rose_bush_item.png b/textures/everness_rose_bush_item.png new file mode 100644 index 0000000..dc82375 Binary files /dev/null and b/textures/everness_rose_bush_item.png differ diff --git a/textures/everness_rose_bush_mesh.png b/textures/everness_rose_bush_mesh.png new file mode 100644 index 0000000..d6ba255 Binary files /dev/null and b/textures/everness_rose_bush_mesh.png differ