From a6e4de2b6b9564ab4129988a9405466bbb2abfc3 Mon Sep 17 00:00:00 2001 From: kay27 Date: Thu, 17 Mar 2022 05:40:28 +0400 Subject: [PATCH 1/7] #256 Lift up clouds for valleys --- mods/CORE/mcl_mapgen/init.lua | 2 +- mods/CORE/mcl_worlds/init.lua | 20 ++++++++++++++++++++ mods/ENVIRONMENT/mcl_weather/skycolor.lua | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mods/CORE/mcl_mapgen/init.lua b/mods/CORE/mcl_mapgen/init.lua index 4aca65f54..fc0a98c6b 100644 --- a/mods/CORE/mcl_mapgen/init.lua +++ b/mods/CORE/mcl_mapgen/init.lua @@ -325,7 +325,7 @@ minetest.register_on_generated(function(minp, maxp, chunkseed) -- mcl_mapgen.register_mapgen_lvm(function(vm_context), order_number) -- -- -- for _, v in pairs(queue_chunks_lvm) do - vm_context = v.f(vm_context) + v.f(vm_context) end -- -- -- mcl_mapgen.register_mapgen(function(minp, maxp, chunkseed, vm_context), order_number) -- diff --git a/mods/CORE/mcl_worlds/init.lua b/mods/CORE/mcl_worlds/init.lua index eb366013e..d31913599 100644 --- a/mods/CORE/mcl_worlds/init.lua +++ b/mods/CORE/mcl_worlds/init.lua @@ -152,3 +152,23 @@ minetest.register_globalstep(function(dtime) dimtimer = 0 end end) + +function mcl_worlds.get_cloud_parameters() + if mcl_mapgen.name == "valleys" then + return { + height = 384, + speed = {x=-2, z=0}, + thickness=5, + color="#FFF0FEF", + ambient = "#201060", + } + else + -- MC-style clouds: Layer 127, thickness 4, fly to the “West” + return { + height = mcl_worlds.layer_to_y(127), + speed = {x=-2, z=0}, + thickness = 4, + color = "#FFF0FEF", + } + end +end diff --git a/mods/ENVIRONMENT/mcl_weather/skycolor.lua b/mods/ENVIRONMENT/mcl_weather/skycolor.lua index 6b89c33be..93e92defc 100644 --- a/mods/ENVIRONMENT/mcl_weather/skycolor.lua +++ b/mods/ENVIRONMENT/mcl_weather/skycolor.lua @@ -241,7 +241,7 @@ local function initsky(player) end -- MC-style clouds: Layer 127, thickness 4, fly to the “West” - player:set_clouds({height=mcl_worlds.layer_to_y(127), speed={x=-2, z=0}, thickness=4, color="#FFF0FEF"}) + player:set_clouds(mcl_worlds:get_cloud_parameters() or {height=mcl_worlds.layer_to_y(127), speed={x=-2, z=0}, thickness=4, color="#FFF0FEF"}) end minetest.register_on_joinplayer(initsky) From 4f0dbec948e847089d163a6e2a9e1db6dbe47922 Mon Sep 17 00:00:00 2001 From: kay27 Date: Fri, 18 Mar 2022 01:07:06 +0400 Subject: [PATCH 2/7] Use Perlin noise to initialize chorus growth --- mods/MAPGEN/mcl_biomes/init.lua | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 56a3cfe11..8ad8700f0 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -22,6 +22,10 @@ local OCEAN_MIN = -15 local DEEP_OCEAN_MAX = OCEAN_MIN - 1 local DEEP_OCEAN_MIN = -31 +local minetest_get_perlin = minetest.get_perlin +local math_floor = math.floor +local math_abs = math.abs + --[[ Special biome field: _mcl_biome_type: Rough categorization of biomes: One of "snowy", "cold", "medium" and "hot" Based off ]] @@ -3922,6 +3926,16 @@ local function register_decorations() end -- Decorations in non-Overworld dimensions + +local chorus_noise_params = { + offset = -0.012, + scale = 0.024, + spread = {x = 100, y = 100, z = 100}, + seed = 257, + octaves = 3, + persistence = 0.6, +} + local function register_dimension_decorations() --[[ NETHER ]] -- TODO: Nether @@ -3935,14 +3949,7 @@ local function register_dimension_decorations() place_on = {"mcl_end:end_stone", "air"}, flags = "all_floors", sidelen = 16, - noise_params = { - offset = -0.012, - scale = 0.024, - spread = {x = 100, y = 100, z = 100}, - seed = 257, - octaves = 3, - persist = 0.6 - }, + noise_params = chorus_noise_params, y_min = mcl_mapgen.end_.min, y_max = mcl_mapgen.end_.max, decoration = "mcl_end:chorus_flower", @@ -3962,6 +3969,8 @@ end -- Detect mapgen to select functions -- +local chorus_perlin_noise + if not mcl_mapgen.singlenode then if not superflat then if not mcl_mapgen.v6 then @@ -3994,8 +4003,10 @@ if not mcl_mapgen.singlenode then vm_context.gennotify = vm_context.gennotify or minetest.get_mapgen_object("gennotify") local gennotify = vm_context.gennotify for _, pos in pairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do + chorus_perlin_noise = chorus_perlin_noise or minetest_get_perlin(chorus_noise_params) local realpos = { x = pos.x, y = pos.y + 1, z = pos.z } - local pr = PseudoRandom(vm_context.blockseed) + local noise = chorus_perlin_noise:get_3d(realpos) + local pr = PseudoRandom(math_floor(math_abs(noise * 32767)) % 32768) minetest.after(1, mcl_end.grow_chorus_plant, realpos, false, pr) end return vm_context @@ -4003,4 +4014,3 @@ if not mcl_mapgen.singlenode then end end - From c2823246610b916b05811bd4e82f2da9326be132 Mon Sep 17 00:00:00 2001 From: Mark Roth Date: Sun, 20 Mar 2022 01:07:42 +0200 Subject: [PATCH 3/7] #248 move compostability rating to items groups instead of the list in the mod --- mods/ITEMS/mcl_cake/init.lua | 298 +++++++++++------------ mods/ITEMS/mcl_composters/init.lua | 107 +------- mods/ITEMS/mcl_core/craftitems.lua | 2 +- mods/ITEMS/mcl_core/nodes_base.lua | 8 +- mods/ITEMS/mcl_core/nodes_cactuscane.lua | 4 +- mods/ITEMS/mcl_core/nodes_climb.lua | 2 +- mods/ITEMS/mcl_core/nodes_trees.lua | 7 +- mods/ITEMS/mcl_dye/init.lua | 2 +- mods/ITEMS/mcl_farming/beetroot.lua | 4 +- mods/ITEMS/mcl_farming/carrots.lua | 2 +- mods/ITEMS/mcl_farming/melon.lua | 6 +- mods/ITEMS/mcl_farming/potatoes.lua | 4 +- mods/ITEMS/mcl_farming/pumpkin.lua | 8 +- mods/ITEMS/mcl_farming/sweet_berry.lua | 2 +- mods/ITEMS/mcl_farming/wheat.lua | 11 +- mods/ITEMS/mcl_flowers/init.lua | 14 +- mods/ITEMS/mcl_mushroom/init.lua | 16 +- mods/ITEMS/mcl_mushrooms/huge.lua | 4 +- mods/ITEMS/mcl_mushrooms/small.lua | 4 +- mods/ITEMS/mcl_nether/init.lua | 2 +- mods/ITEMS/mcl_nether/nether_wart.lua | 2 +- mods/ITEMS/mcl_ocean/kelp.lua | 6 +- mods/ITEMS/mcl_ocean/sea_pickle.lua | 2 +- mods/ITEMS/mcl_ocean/seagrass.lua | 2 +- 24 files changed, 214 insertions(+), 305 deletions(-) diff --git a/mods/ITEMS/mcl_cake/init.lua b/mods/ITEMS/mcl_cake/init.lua index 104071064..6a7c1f6ca 100644 --- a/mods/ITEMS/mcl_cake/init.lua +++ b/mods/ITEMS/mcl_cake/init.lua @@ -1,149 +1,149 @@ ---[[ -#!#!#!#Cake mod created by Jordan4ibanez#!#!# -#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!# -]]-- - -local CAKE_HUNGER_POINTS = 2 - -local S = minetest.get_translator(minetest.get_current_modname()) - -local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"} -local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16} -local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16} -local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16} -local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16} -local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16} -local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16} - -local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16} - -minetest.register_craft({ - output = "mcl_cake:cake", - recipe = { - {"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"}, - {"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"}, - {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, - }, - replacements = { - {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, - {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, - {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, - }, -}) - -minetest.register_node("mcl_cake:cake", { - description = S("Cake"), - _tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS), - _doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."), - _doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."), - tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"}, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - inventory_image = "cake.png", - wield_image = "cake.png", - paramtype = "light", - is_ground_content = false, - drawtype = "nodebox", - selection_box = { - type = "fixed", - fixed = full_cake - }, - node_box = { - type = "fixed", - fixed = full_cake - }, - stack_max = 1, - groups = {handy=1, cake=7, food=2,no_eat_delay=1, attached_node=1, dig_by_piston=1, comparator_signal=14}, - drop = "", - on_rightclick = function(pos, node, clicker, itemstack) - -- Cake is subject to protection - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"}) - -- Check if we were allowed to eat - if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then - minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0}) - end - end, - sounds = mcl_sounds.node_sound_leaves_defaults(), - - _food_particles = false, - _mcl_saturation = 0.4, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, -}) - -local register_slice = function(level, nodebox, desc) - local this = "mcl_cake:cake_"..level - local after_eat = "mcl_cake:cake_"..(level-1) - local on_rightclick - if level > 1 then - on_rightclick = function(pos, node, clicker, itemstack) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"}) - -- Check if we were allowed to eat - if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then - minetest.add_node(pos,{type="node",name=after_eat,param2=0}) - end - end - else - -- Last slice - on_rightclick = function(pos, node, clicker, itemstack) - local name = clicker:get_player_name() - if minetest.is_protected(pos, name) then - minetest.record_protection_violation(pos, name) - return - end - local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"}) - -- Check if we were allowed to eat - if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then - minetest.remove_node(pos) - minetest.check_for_falling(pos) - end - end - end - - minetest.register_node(this, { - description = desc, - _doc_items_create_entry = false, - tiles = cake_texture, - use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, - paramtype = "light", - is_ground_content = false, - drawtype = "nodebox", - selection_box = { - type = "fixed", - fixed = nodebox, - }, - node_box = { - type = "fixed", - fixed = nodebox, - }, - groups = {handy=1, cake=level, food=2,no_eat_delay=1,attached_node=1,not_in_creative_inventory=1,dig_by_piston=1,comparator_signal=level*2}, - drop = "", - on_rightclick = on_rightclick, - sounds = mcl_sounds.node_sound_leaves_defaults(), - - _food_particles = false, - _mcl_saturation = 0.4, - _mcl_blast_resistance = 0.5, - _mcl_hardness = 0.5, - }) - - if minetest.get_modpath("doc") then - doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level) - end -end - -register_slice(6, slice_6, S("Cake (6 Slices Left)")) -register_slice(5, slice_5, S("Cake (5 Slices Left)")) -register_slice(4, slice_4, S("Cake (4 Slices Left)")) -register_slice(3, slice_3, S("Cake (3 Slices Left)")) -register_slice(2, slice_2, S("Cake (2 Slices Left)")) -register_slice(1, slice_1, S("Cake (1 Slice Left)")) +--[[ +#!#!#!#Cake mod created by Jordan4ibanez#!#!# +#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!# +]]-- + +local CAKE_HUNGER_POINTS = 2 + +local S = minetest.get_translator(minetest.get_current_modname()) + +local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"} +local slice_1 = { -7/16, -8/16, -7/16, -5/16, 0/16, 7/16} +local slice_2 = { -7/16, -8/16, -7/16, -3/16, 0/16, 7/16} +local slice_3 = { -7/16, -8/16, -7/16, -1/16, 0/16, 7/16} +local slice_4 = { -7/16, -8/16, -7/16, 1/16, 0/16, 7/16} +local slice_5 = { -7/16, -8/16, -7/16, 3/16, 0/16, 7/16} +local slice_6 = { -7/16, -8/16, -7/16, 5/16, 0/16, 7/16} + +local full_cake = { -7/16, -8/16, -7/16, 7/16, 0/16, 7/16} + +minetest.register_craft({ + output = "mcl_cake:cake", + recipe = { + {"mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket", "mcl_mobitems:milk_bucket"}, + {"mcl_core:sugar", "mcl_throwing:egg", "mcl_core:sugar"}, + {"mcl_farming:wheat_item", "mcl_farming:wheat_item", "mcl_farming:wheat_item"}, + }, + replacements = { + {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, + {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, + {"mcl_mobitems:milk_bucket", "mcl_buckets:bucket_empty"}, + }, +}) + +minetest.register_node("mcl_cake:cake", { + description = S("Cake"), + _tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS), + _doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."), + _doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."), + tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"}, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + inventory_image = "cake.png", + wield_image = "cake.png", + paramtype = "light", + is_ground_content = false, + drawtype = "nodebox", + selection_box = { + type = "fixed", + fixed = full_cake + }, + node_box = { + type = "fixed", + fixed = full_cake + }, + stack_max = 1, + groups = {handy=1, cake=7, food=2, no_eat_delay=1, compostability=100, attached_node=1, dig_by_piston=1, comparator_signal=14}, + drop = "", + on_rightclick = function(pos, node, clicker, itemstack) + -- Cake is subject to protection + local name = clicker:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return + end + local newcake = minetest.do_item_eat(2, ItemStack("mcl_cake:cake_6"), ItemStack("mcl_cake:cake"), clicker, {type="nothing"}) + -- Check if we were allowed to eat + if newcake:get_name() ~= "mcl_cake:cake" or minetest.is_creative_enabled(clicker:get_player_name()) then + minetest.add_node(pos,{type="node",name="mcl_cake:cake_6",param2=0}) + end + end, + sounds = mcl_sounds.node_sound_leaves_defaults(), + + _food_particles = false, + _mcl_saturation = 0.4, + _mcl_blast_resistance = 0.5, + _mcl_hardness = 0.5, +}) + +local register_slice = function(level, nodebox, desc) + local this = "mcl_cake:cake_"..level + local after_eat = "mcl_cake:cake_"..(level-1) + local on_rightclick + if level > 1 then + on_rightclick = function(pos, node, clicker, itemstack) + local name = clicker:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return + end + local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"}) + -- Check if we were allowed to eat + if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then + minetest.add_node(pos,{type="node",name=after_eat,param2=0}) + end + end + else + -- Last slice + on_rightclick = function(pos, node, clicker, itemstack) + local name = clicker:get_player_name() + if minetest.is_protected(pos, name) then + minetest.record_protection_violation(pos, name) + return + end + local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"}) + -- Check if we were allowed to eat + if newcake:get_name() ~= this or minetest.is_creative_enabled(clicker:get_player_name()) then + minetest.remove_node(pos) + minetest.check_for_falling(pos) + end + end + end + + minetest.register_node(this, { + description = desc, + _doc_items_create_entry = false, + tiles = cake_texture, + use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false, + paramtype = "light", + is_ground_content = false, + drawtype = "nodebox", + selection_box = { + type = "fixed", + fixed = nodebox, + }, + node_box = { + type = "fixed", + fixed = nodebox, + }, + groups = {handy=1, cake=level, food=2, no_eat_delay=1, compostability=100, attached_node=1, not_in_creative_inventory=1, dig_by_piston=1, comparator_signal=level*2}, + drop = "", + on_rightclick = on_rightclick, + sounds = mcl_sounds.node_sound_leaves_defaults(), + + _food_particles = false, + _mcl_saturation = 0.4, + _mcl_blast_resistance = 0.5, + _mcl_hardness = 0.5, + }) + + if minetest.get_modpath("doc") then + doc.add_entry_alias("nodes", "mcl_cake:cake", "nodes", "mcl_cake:cake_"..level) + end +end + +register_slice(6, slice_6, S("Cake (6 Slices Left)")) +register_slice(5, slice_5, S("Cake (5 Slices Left)")) +register_slice(4, slice_4, S("Cake (4 Slices Left)")) +register_slice(3, slice_3, S("Cake (3 Slices Left)")) +register_slice(2, slice_2, S("Cake (2 Slices Left)")) +register_slice(1, slice_1, S("Cake (1 Slice Left)")) diff --git a/mods/ITEMS/mcl_composters/init.lua b/mods/ITEMS/mcl_composters/init.lua index a3e219bb2..6c0450b2f 100644 --- a/mods/ITEMS/mcl_composters/init.lua +++ b/mods/ITEMS/mcl_composters/init.lua @@ -32,108 +32,6 @@ minetest.register_craft({ } }) -local compostability = { - ["mcl_cake:cake"] = 100, - ["mcl_farming:pumpkin_pie"] = 100, - - ["mcl_farming:potato_item_baked"] = 85, - ["mcl_farming:bread"] = 85, - ["mcl_farming:cookie"] = 85, - ["mcl_farming:hay_block"] = 85, - -- mushroom cap block have 64 variants, wtf!? - ["mcl_mushrooms:brown_mushroom_block_cap_111111"] = 85, - ["mcl_mushrooms:red_mushroom_block_cap_111111"] = 85, - ["mcl_nether:nether_wart_block"] = 85, - ["mcl_mushroom:warped_wart_block"] = 85, - - ["mcl_core:apple"] = 65, - -- missing: azalea - ["mcl_farming:beetroot_item"] = 65, - -- missing: big dripleaf - ["mcl_farming:carrot_item"] = 65, - -- what's up with cocoa beans? - ["mcl_dye:brown"] = 65, - ["mcl_flowers:fern"] = 65, - ["mcl_flowers:double_fern"] = 65, - ["mcl_flowers:allium"] = 65, - ["mcl_flowers:azure_bluet"] = 65, - ["mcl_flowers:blue_orchid"] = 65, - ["mcl_flowers:dandelion"] = 65, - ["mcl_flowers:lilac"] = 65, - ["mcl_flowers:oxeye_daisy"] = 65, - ["mcl_flowers:poppy"] = 65, - ["mcl_flowers:tulip_orange"] = 65, - ["mcl_flowers:tulip_pink"] = 65, - ["mcl_flowers:tulip_red"] = 65, - ["mcl_flowers:tulip_white"] = 65, - ["mcl_flowers:peony"] = 65, - ["mcl_flowers:rose_bush"] = 65, - ["mcl_flowers:sunflower"] = 65, - ["mcl_flowers:waterlily"] = 65, - ["mcl_farming:melon"] = 65, - ["mcl_core:moss"] = 65, - -- mushroom aliases below? - ["mcl_farming:mushroom_brown"] = 65, - ["mcl_mushrooms:mushroom_brown"] = 65, - ["mcl_farming:mushroom_red"] = 65, - ["mcl_mushrooms:mushroom_red"] = 65, - ["mcl_mushrooms:brown_mushroom_block_stem_full"] = 65, - ["mcl_mushrooms:red_mushroom_block_stem_full"] = 65, - -- nether wart - ["mcl_farming:potato_item"] = 65, - ["mcl_farming:pumpkin"] = 65, - ["mcl_farming:pumpkin_face_light"] = 65, - ["mcl_ocean:sea_pickle_"] = 65, - ["mcl_mushroom:shroomlight"] = 65, - -- missing: spore blossom - ["mcl_farming:wheat_item"] = 65, - ["mcl_mushroom:crimson_fungus"] = 65, - ["mcl_mushroom:warped_fungus"] = 65, - ["mcl_mushroom:crimson_roots"] = 65, - ["mcl_mushroom:warped_roots"] = 65, - - ["mcl_core:cactus"] = 50, - ["mcl_ocean:dried_kelp_block"] = 50, - -- missing: flowering azalea leaves - -- missing: glow lichen - ["mcl_farming:melon_item"] = 50, - ["mcl_mushroom:nether_sprouts"] = 50, - ["mcl_core:reeds"] = 50, - ["mcl_flowers:double_grass"] = 50, - ["mcl_core:vine"] = 50, - -- missing: weeping vines - ["mcl_mushroom:twisting_vines"] = 50, - - ["mcl_flowers:tallgrass"] = 30, - ["mcl_farming:beetroot_seeds"] = 30, - ["mcl_core:dirt_with_grass"] = 30, - ["mcl_core:tallgrass"] = 30, - ["mcl_ocean:dried_kelp"] = 30, - ["mcl_ocean:kelp"] = 30, - ["mcl_core:leaves"] = 30, - ["mcl_core:acacialeaves"] = 30, - ["mcl_core:birchleaves"] = 30, - ["mcl_core:darkleaves"] = 30, - ["mcl_core:jungleleaves"] = 30, - ["mcl_core:spruceleaves"] = 30, - -- - ["mcl_farming:melon_seeds"] = 30, - ["mcl_core:moss_carpet"] = 30, - ["mcl_farming:pumpkin_seeds"] = 30, - ["mcl_core:sapling"] = 30, - ["mcl_core:acaciasapling"] = 30, - ["mcl_core:birchsapling"] = 30, - ["mcl_core:darksapling"] = 30, - ["mcl_core:junglesapling"] = 30, - ["mcl_core:sprucesapling"] = 30, - ["mcl_ocean:seagrass"] = 30, - -- missing: small dripleaf - ["mcl_sweet_berry:sweet_berry"] = 30, - ["mcl_farming:sweet_berry"] = 30, - ["mcl_farming:wheat_seeds"] = 30, - -} - local function composter_add_item(pos, node, player, itemstack, pointed_thing) -- -- handler for filling the composter when rightclicked @@ -147,8 +45,9 @@ local function composter_add_item(pos, node, player, itemstack, pointed_thing) return itemstack end local itemname = itemstack:get_name() - local chance = compostability[itemname] - if chance then + local chance = minetest.get_item_group(itemname, "compostability") + + if chance > 0 then if not minetest.is_creative_enabled(player:get_player_name()) then itemstack:take_item() end diff --git a/mods/ITEMS/mcl_core/craftitems.lua b/mods/ITEMS/mcl_core/craftitems.lua index 85a078766..26519ab7e 100644 --- a/mods/ITEMS/mcl_core/craftitems.lua +++ b/mods/ITEMS/mcl_core/craftitems.lua @@ -139,7 +139,7 @@ minetest.register_craftitem("mcl_core:apple", { stack_max = 64, on_place = minetest.item_eat(4), on_secondary_use = minetest.item_eat(4), - groups = { food = 2, eatable = 4 }, + groups = { food = 2, eatable = 4, compostability=65 }, _mcl_saturation = 2.4, }) diff --git a/mods/ITEMS/mcl_core/nodes_base.lua b/mods/ITEMS/mcl_core/nodes_base.lua index 900675688..eed6ab906 100644 --- a/mods/ITEMS/mcl_core/nodes_base.lua +++ b/mods/ITEMS/mcl_core/nodes_base.lua @@ -369,7 +369,7 @@ minetest.register_node("mcl_core:dirt_with_grass", { color = "#8EB971", is_ground_content = true, stack_max = 64, - groups = {handy=1,shovely=1,dirt=2,grass_block=1, grass_block_no_snow=1, soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, spreading_dirt_type=1, enderman_takable=1, building_block=1}, + groups = {handy=1,shovely=1,dirt=2,grass_block=1, grass_block_no_snow=1, soil=1, soil_sapling=2, soil_sugarcane=1, cultivatable=2, spreading_dirt_type=1, enderman_takable=1, building_block=1, compostability=30}, drop = "mcl_core:dirt", sounds = mcl_sounds.node_sound_dirt_defaults({ footstep = {name="default_grass_footstep", gain=0.1}, @@ -473,7 +473,7 @@ minetest.register_node("mcl_core:moss", { tiles = {"mcl_core_moss_block.png"}, is_ground_content = true, stack_max = 64, - groups = {handy=1, hoey=1}, + groups = {handy=1, hoey=1, compostability=65}, --sounds = TODO: add sound _mcl_blast_resistance = 0.1, _mcl_hardness = 0.1, @@ -1096,7 +1096,7 @@ minetest.register_node("mcl_core:moss", { tiles = {"mcl_core_moss_block.png"}, is_ground_content = true, stack_max = 64, - groups = {handy=1, hoey=1}, + groups = {handy=1, hoey=1, compostability=65}, --sounds = TODO: add sound _mcl_blast_resistance = 0.1, _mcl_hardness = 0.1, @@ -1153,7 +1153,7 @@ minetest.register_node("mcl_core:moss_carpet", { {-8/16, -8/16, -8/16, 8/16, -7/16, 8/16}, }, }, - groups = {handy=1, hoey=1}, + groups = {handy=1, hoey=1, compostability=30}, --sounds = TODO: add sound _mcl_blast_resistance = 0.1, _mcl_hardness = 0.1, diff --git a/mods/ITEMS/mcl_core/nodes_cactuscane.lua b/mods/ITEMS/mcl_core/nodes_cactuscane.lua index e61d6df80..cea73da11 100644 --- a/mods/ITEMS/mcl_core/nodes_cactuscane.lua +++ b/mods/ITEMS/mcl_core/nodes_cactuscane.lua @@ -12,7 +12,7 @@ minetest.register_node("mcl_core:cactus", { tiles = {"mcl_core_cactus_top.png", "mcl_core_cactus_bottom.png", "mcl_core_cactus_side.png"}, is_ground_content = true, stack_max = 64, - groups = {handy=1, attached_node=1, plant=1, deco_block=1, dig_by_piston=1, enderman_takable=1}, + groups = {handy=1, attached_node=1, plant=1, deco_block=1, dig_by_piston=1, enderman_takable=1, compostability=50}, sounds = mcl_sounds.node_sound_wood_defaults(), paramtype = "light", sunlight_propagates = true, @@ -79,7 +79,7 @@ minetest.register_node("mcl_core:reeds", { }, }, stack_max = 64, - groups = {dig_immediate=3, craftitem=1, deco_block=1, plant=1, non_mycelium_plant=1, dig_by_piston=1}, + groups = {dig_immediate=3, craftitem=1, deco_block=1, plant=1, non_mycelium_plant=1, dig_by_piston=1, compostability=50}, sounds = mcl_sounds.node_sound_leaves_defaults(), node_placement_prediction = "", drop = "mcl_core:reeds", -- to prevent color inheritation diff --git a/mods/ITEMS/mcl_core/nodes_climb.lua b/mods/ITEMS/mcl_core/nodes_climb.lua index 9505bb19a..d99954e3f 100644 --- a/mods/ITEMS/mcl_core/nodes_climb.lua +++ b/mods/ITEMS/mcl_core/nodes_climb.lua @@ -104,7 +104,7 @@ minetest.register_node("mcl_core:vine", { type = "wallmounted", }, stack_max = 64, - groups = {handy=1,axey=1,shearsy=1,swordy=1, flammable=2,deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=15, fire_flammability=100}, + groups = {handy=1,axey=1,shearsy=1,swordy=1, flammable=2,deco_block=1,destroy_by_lava_flow=1,dig_by_piston=1, fire_encouragement=15, fire_flammability=100, compostability=50}, sounds = mcl_sounds.node_sound_leaves_defaults(), drop = "", _mcl_shears_drop = true, diff --git a/mods/ITEMS/mcl_core/nodes_trees.lua b/mods/ITEMS/mcl_core/nodes_trees.lua index a5ef7aa97..060879e17 100644 --- a/mods/ITEMS/mcl_core/nodes_trees.lua +++ b/mods/ITEMS/mcl_core/nodes_trees.lua @@ -162,7 +162,8 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d deco_block=1, dig_by_piston=1, fire_encouragement=30, - fire_flammability=60 + fire_flammability=60, + compostability=30 }, drop = get_drops(0), _mcl_shears_drop = true, @@ -194,7 +195,7 @@ local function register_sapling(subname, description, longdesc, tt_help, texture fixed = selbox }, stack_max = 64, - groups = {dig_immediate=3, plant=1,sapling=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1}, + groups = {dig_immediate=3, plant=1,sapling=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,dig_by_piston=1,destroy_by_lava_flow=1,deco_block=1, compostability=30}, sounds = mcl_sounds.node_sound_leaves_defaults(), on_construct = function(pos) local meta = minetest.get_meta(pos) @@ -275,4 +276,4 @@ register_leaves("birchleaves", S("Birch Leaves"), S("Birch leaves are grown from -- Node aliases minetest.register_alias("default:acacia_tree", "mcl_core:acaciatree") -minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves") \ No newline at end of file +minetest.register_alias("default:acacia_leaves", "mcl_core:acacialeaves") diff --git a/mods/ITEMS/mcl_dye/init.lua b/mods/ITEMS/mcl_dye/init.lua index f5e282a8c..ca0ca6fe1 100644 --- a/mods/ITEMS/mcl_dye/init.lua +++ b/mods/ITEMS/mcl_dye/init.lua @@ -78,7 +78,7 @@ dyelocal.dyes = { {"dark_green", "dye_dark_green", S("Cactus Green"),{dye=1, craftitem=1, basecolor_green=1, excolor_green=1, unicolor_dark_green=1}}, {"green", "mcl_dye_lime", S("Lime Dye"), {dye=1, craftitem=1, basecolor_green=1, excolor_green=1, unicolor_green=1}}, {"yellow", "dye_yellow", S("Dandelion Yellow"), {dye=1, craftitem=1, basecolor_yellow=1, excolor_yellow=1, unicolor_yellow=1}}, - {"brown", "mcl_dye_brown", S("Cocoa Beans"), {dye=1, craftitem=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1}}, + {"brown", "mcl_dye_brown", S("Cocoa Beans"), {dye=1, craftitem=1, basecolor_brown=1, excolor_orange=1, unicolor_dark_orange=1, compostability=65}}, {"orange", "dye_orange", S("Orange Dye"), {dye=1, craftitem=1, basecolor_orange=1, excolor_orange=1, unicolor_orange=1}}, {"red", "dye_red", S("Rose Red"), {dye=1, craftitem=1, basecolor_red=1, excolor_red=1, unicolor_red=1}}, {"magenta", "dye_magenta", S("Magenta Dye"), {dye=1, craftitem=1, basecolor_magenta=1, excolor_red_violet=1,unicolor_red_violet=1}}, diff --git a/mods/ITEMS/mcl_farming/beetroot.lua b/mods/ITEMS/mcl_farming/beetroot.lua index e312aa262..187f34eb4 100644 --- a/mods/ITEMS/mcl_farming/beetroot.lua +++ b/mods/ITEMS/mcl_farming/beetroot.lua @@ -5,7 +5,7 @@ minetest.register_craftitem("mcl_farming:beetroot_seeds", { _tt_help = S("Grows on farmland"), _doc_items_longdesc = S("Grows into a beetroot plant. Chickens like beetroot seeds."), _doc_items_usagehelp = S("Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds."), - groups = { craftitem=1 }, + groups = { craftitem=1, compostability=30 }, inventory_image = "mcl_farming_beetroot_seeds.png", wield_image = "mcl_farming_beetroot_seeds.png", on_place = function(itemstack, placer, pointed_thing) @@ -133,7 +133,7 @@ minetest.register_craftitem("mcl_farming:beetroot_item", { wield_image = "mcl_farming_beetroot.png", on_place = minetest.item_eat(1), on_secondary_use = minetest.item_eat(1), - groups = { food = 2, eatable = 1 }, + groups = { food = 2, eatable = 1, compostability=65 }, _mcl_saturation = 1.2, }) diff --git a/mods/ITEMS/mcl_farming/carrots.lua b/mods/ITEMS/mcl_farming/carrots.lua index 7983c58a2..bdecdefed 100644 --- a/mods/ITEMS/mcl_farming/carrots.lua +++ b/mods/ITEMS/mcl_farming/carrots.lua @@ -86,7 +86,7 @@ minetest.register_craftitem("mcl_farming:carrot_item", { _doc_items_longdesc = S("Carrots can be eaten and planted. Pigs and rabbits like carrots."), _doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."), inventory_image = "farming_carrot.png", - groups = { food = 2, eatable = 3 }, + groups = { food = 2, eatable = 3, compostability=65 }, _mcl_saturation = 3.6, on_secondary_use = minetest.item_eat(3), on_place = function(itemstack, placer, pointed_thing) diff --git a/mods/ITEMS/mcl_farming/melon.lua b/mods/ITEMS/mcl_farming/melon.lua index b3e49a61f..91df5d919 100644 --- a/mods/ITEMS/mcl_farming/melon.lua +++ b/mods/ITEMS/mcl_farming/melon.lua @@ -7,7 +7,7 @@ minetest.register_craftitem("mcl_farming:melon_seeds", { _doc_items_longdesc = S("Grows into a melon stem which in turn grows melons. Chickens like melon seeds."), _doc_items_usagehelp = S("Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds."), stack_max = 64, - groups = { craftitem=1 }, + groups = { craftitem=1, compostability=30 }, inventory_image = "mcl_farming_melon_seeds.png", on_place = function(itemstack, placer, pointed_thing) return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:melontige_1") @@ -21,7 +21,7 @@ local melon_base_def = { _doc_items_longdesc = S("A melon is a block which can be grown from melon stems, which in turn are grown from melon seeds. It can be harvested for melon slices."), stack_max = 64, tiles = {"farming_melon_top.png", "farming_melon_top.png", "farming_melon_side.png", "farming_melon_side.png", "farming_melon_side.png", "farming_melon_side.png"}, - groups = {handy=1,axey=1, plant=1,building_block=1,enderman_takable=1,dig_by_piston=1}, + groups = {handy=1,axey=1, plant=1,building_block=1,enderman_takable=1,dig_by_piston=1, compostability=65}, drop = { max_items = 1, items = { @@ -134,7 +134,7 @@ minetest.register_craftitem("mcl_farming:melon_item", { inventory_image = "farming_melon.png", on_place = minetest.item_eat(2), on_secondary_use = minetest.item_eat(2), - groups = { food = 2, eatable = 2 }, + groups = { food = 2, eatable = 2, compostability=50 }, _mcl_saturation = 1.2, }) diff --git a/mods/ITEMS/mcl_farming/potatoes.lua b/mods/ITEMS/mcl_farming/potatoes.lua index 79cd13115..a4f6a4360 100644 --- a/mods/ITEMS/mcl_farming/potatoes.lua +++ b/mods/ITEMS/mcl_farming/potatoes.lua @@ -91,7 +91,7 @@ minetest.register_craftitem("mcl_farming:potato_item", { _doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."), _doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."), inventory_image = "farming_potato.png", - groups = { food = 2, eatable = 1 }, + groups = { food = 2, eatable = 1, compostability=65 }, _mcl_saturation = 0.6, stack_max = 64, on_secondary_use = minetest.item_eat(1), @@ -112,7 +112,7 @@ minetest.register_craftitem("mcl_farming:potato_item_baked", { inventory_image = "farming_potato_baked.png", on_place = minetest.item_eat(5), on_secondary_use = minetest.item_eat(5), - groups = { food = 2, eatable = 5 }, + groups = { food = 2, eatable = 5, compostability = 85 }, _mcl_saturation = 6.0, }) diff --git a/mods/ITEMS/mcl_farming/pumpkin.lua b/mods/ITEMS/mcl_farming/pumpkin.lua index 0eb71ac91..72d0057dc 100644 --- a/mods/ITEMS/mcl_farming/pumpkin.lua +++ b/mods/ITEMS/mcl_farming/pumpkin.lua @@ -15,7 +15,7 @@ minetest.register_craftitem("mcl_farming:pumpkin_seeds", { _doc_items_usagehelp = S("Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds."), stack_max = 64, inventory_image = "mcl_farming_pumpkin_seeds.png", - groups = { craftitem=1 }, + groups = { craftitem=1, compostability=30 }, on_place = function(itemstack, placer, pointed_thing) return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:pumpkin_1") end @@ -99,7 +99,7 @@ local pumpkin_base_def = { stack_max = 64, paramtype2 = "facedir", tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png"}, - groups = {handy=1,axey=1, plant=1,building_block=1, dig_by_piston=1, enderman_takable=1}, + groups = {handy=1,axey=1, plant=1,building_block=1, dig_by_piston=1, enderman_takable=1, compostability=65}, sounds = mcl_sounds.node_sound_wood_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 1, @@ -192,7 +192,7 @@ minetest.register_node("mcl_farming:pumpkin_face_light", { paramtype2 = "facedir", light_source = minetest.LIGHT_MAX, tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face_light.png"}, - groups = {handy=1,axey=1, building_block=1, dig_by_piston=1 }, + groups = {handy=1,axey=1, building_block=1, dig_by_piston=1, compostability=65 }, sounds = mcl_sounds.node_sound_wood_defaults(), on_construct = function(pos) -- Attempt to spawn iron golem or snow golem @@ -230,7 +230,7 @@ minetest.register_craftitem("mcl_farming:pumpkin_pie", { wield_image = "mcl_farming_pumpkin_pie.png", on_place = minetest.item_eat(8), on_secondary_use = minetest.item_eat(8), - groups = { food = 2, eatable = 8 }, + groups = { food = 2, eatable = 8, compostability=100 }, _mcl_saturation = 4.8, }) diff --git a/mods/ITEMS/mcl_farming/sweet_berry.lua b/mods/ITEMS/mcl_farming/sweet_berry.lua index d74739aaa..f215851e3 100644 --- a/mods/ITEMS/mcl_farming/sweet_berry.lua +++ b/mods/ITEMS/mcl_farming/sweet_berry.lua @@ -31,7 +31,7 @@ minetest.register_craftitem("mcl_farming:sweet_berry", { inventory_image = "mcl_farming_sweet_berry.png", _mcl_saturation = 0.2, stack_max = 64, - groups = { food = 2, eatable = 1 }, + groups = { food = 2, eatable = 1, compostability=30 }, on_secondary_use = minetest.item_eat(1), on_place = function(itemstack, placer, pointed_thing) local new = mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_sweet_berry:sweet_berry_bush_0") diff --git a/mods/ITEMS/mcl_farming/wheat.lua b/mods/ITEMS/mcl_farming/wheat.lua index da1b84b2d..0e81f42bf 100644 --- a/mods/ITEMS/mcl_farming/wheat.lua +++ b/mods/ITEMS/mcl_farming/wheat.lua @@ -9,7 +9,7 @@ minetest.register_craftitem("mcl_farming:wheat_seeds", { Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds. ]]), - groups = { craftitem=1 }, + groups = { craftitem=1, compostability=30 }, inventory_image = "mcl_farming_wheat_seeds.png", on_place = function(itemstack, placer, pointed_thing) return mcl_farming:place_seed(itemstack, placer, pointed_thing, "mcl_farming:wheat_1") @@ -104,7 +104,7 @@ minetest.register_craftitem("mcl_farming:wheat_item", { _doc_items_longdesc = S("Wheat is used in crafting. Some animals like wheat."), _doc_items_usagehelp = S("Use the “Place” key on an animal to try to feed it wheat."), inventory_image = "farming_wheat_harvested.png", - groups = { craftitem = 1 }, + groups = { craftitem = 1, compostability=65 }, }) minetest.register_craft({ @@ -125,7 +125,7 @@ minetest.register_craftitem("mcl_farming:cookie", { description = S("Cookie"), _doc_items_longdesc = S("This is a food item which can be eaten."), inventory_image = "farming_cookie.png", - groups = {food=2, eatable=2}, + groups = {food=2, eatable=2, compostability=85}, _mcl_saturation = 0.4, on_place = minetest.item_eat(2), on_secondary_use = minetest.item_eat(2), @@ -136,7 +136,7 @@ minetest.register_craftitem("mcl_farming:bread", { description = S("Bread"), _doc_items_longdesc = S("This is a food item which can be eaten."), inventory_image = "farming_bread.png", - groups = {food=2, eatable=5}, + groups = {food=2, eatable=5, compostability=85}, _mcl_saturation = 6.0, on_place = minetest.item_eat(5), on_secondary_use = minetest.item_eat(5), @@ -156,8 +156,7 @@ minetest.register_node("mcl_farming:hay_block", { stack_max = 64, paramtype2 = "facedir", on_place = mcl_util.rotate_axis, - groups = {handy=1, hoey=1, flammable=2, fire_encouragement=60, - fire_flammability=20, building_block=1, fall_damage_add_percent=-80}, + groups = {handy=1, hoey=1, compostability=85, flammable=2, fire_encouragement=60, fire_flammability=20, building_block=1, fall_damage_add_percent=-80}, sounds = mcl_sounds.node_sound_leaves_defaults(), on_rotate = on_rotate, _mcl_blast_resistance = 0.5, diff --git a/mods/ITEMS/mcl_flowers/init.lua b/mods/ITEMS/mcl_flowers/init.lua index 14e0df5cb..9c04ebcf5 100644 --- a/mods/ITEMS/mcl_flowers/init.lua +++ b/mods/ITEMS/mcl_flowers/init.lua @@ -80,7 +80,7 @@ function mcl_flowers.register_simple_flower(name, def) walkable = false, stack_max = 64, drop = def.drop, - groups = {dig_immediate=3,flammable=2,fire_encouragement=60,fire_flammability=100,plant=1,flower=1,place_flowerlike=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, + groups = {dig_immediate=3,flammable=2,fire_encouragement=60,fire_flammability=100,plant=1,flower=1,place_flowerlike=1,non_mycelium_plant=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65}, sounds = mcl_sounds.node_sound_leaves_defaults(), node_placement_prediction = "", on_place = on_place_flower, @@ -143,7 +143,7 @@ local def_tallgrass = { walkable = false, buildable_to = true, is_ground_content = true, - groups = {handy=1,shearsy=1, flammable=3,fire_encouragement=60,fire_flammability=100,attached_node=1,plant=1,place_flowerlike=2,non_mycelium_plant=1,dig_by_water=1,destroy_by_lava_flow=1,deco_block=1}, + groups = {handy=1,shearsy=1, flammable=3,fire_encouragement=60,fire_flammability=100,attached_node=1,plant=1,place_flowerlike=2,non_mycelium_plant=1,dig_by_water=1,destroy_by_lava_flow=1,deco_block=1, compostability=30}, sounds = mcl_sounds.node_sound_leaves_defaults(), drop = wheat_seed_drop, _mcl_shears_drop = true, @@ -163,6 +163,7 @@ def_fern._doc_items_longdesc = S("Ferns are small plants which occur naturally i def_fern.tiles = { "mcl_flowers_fern.png" } def_fern.inventory_image = "mcl_flowers_fern_inv.png" def_fern.wield_image = "mcl_flowers_fern_inv.png" +def_fern.groups.compostability=65 def_fern.selection_box = { type = "fixed", fixed = { -6/16, -0.5, -6/16, 6/16, 5/16, 6/16 }, @@ -205,6 +206,13 @@ local function add_large_plant(name, desc, longdesc, bottom_img, top_img, inv_im bottom_groups.not_in_creative_inventory = 1 create_entry = false end + -- some special cases for the composter group + if name == "double_fern" or "peony" or "rose_bush" or "lilac" or "sunflower" then + bottom_groups.compostability = 65 + end + if name == "double_grass" then + bottom_groups.compostability = 50 + end -- Drop itself by default local drop_bottom, drop_top if not drop then @@ -410,7 +418,7 @@ minetest.register_node("mcl_flowers:waterlily", { liquids_pointable = true, walkable = true, sunlight_propagates = true, - groups = {dig_immediate = 3, plant=1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1, deco_block=1, dig_by_boat=1}, + groups = {dig_immediate = 3, plant=1, dig_by_water = 1,destroy_by_lava_flow=1, dig_by_piston = 1, deco_block=1, dig_by_boat=1, compostability=65}, sounds = mcl_sounds.node_sound_leaves_defaults(), node_placement_prediction = "", node_box = { diff --git a/mods/ITEMS/mcl_mushroom/init.lua b/mods/ITEMS/mcl_mushroom/init.lua index a1a2f45c2..9e44fdcf3 100644 --- a/mods/ITEMS/mcl_mushroom/init.lua +++ b/mods/ITEMS/mcl_mushroom/init.lua @@ -32,7 +32,7 @@ minetest.register_node("mcl_mushroom:warped_fungus", { sunlight_propagates = true, paramtype = "light", walkable = false, - groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1}, + groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, compostability=65}, light_source = 1, selection_box = { @@ -67,7 +67,7 @@ minetest.register_node("mcl_mushroom:twisting_vines", { walkable = false, climbable = true, buildable_to = true, - groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=50}, selection_box = { type = "fixed", fixed = { -3/16, -0.5, -3/16, 3/16, 0.5, 3/16 }, @@ -108,7 +108,7 @@ minetest.register_node("mcl_mushroom:nether_sprouts", { paramtype = "light", walkable = false, buildable_to = true, - groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=50}, selection_box = { type = "fixed", fixed = { -4/16, -0.5, -4/16, 4/16, 0, 4/16 }, @@ -130,7 +130,7 @@ minetest.register_node("mcl_mushroom:warped_roots", { paramtype = "light", walkable = false, buildable_to = true, - groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=65}, selection_box = { type = "fixed", fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 }, @@ -144,7 +144,7 @@ minetest.register_node("mcl_mushroom:warped_roots", { minetest.register_node("mcl_mushroom:warped_wart_block", { description = S("Warped Wart Block"), tiles = {"warped_wart_block.png"}, - groups = {handy=1,hoe=7,swordy=1, deco_block=1, }, + groups = {handy=1,hoe=7,swordy=1, compostability=85, deco_block=1, }, stack_max = 64, _mcl_hardness = 2, }) @@ -152,7 +152,7 @@ minetest.register_node("mcl_mushroom:warped_wart_block", { minetest.register_node("mcl_mushroom:shroomlight", { description = S("Shroomlight"), tiles = {"shroomlight.png"}, - groups = {handy=1,hoe=7,swordy=1, leaves=1, deco_block=1, }, + groups = {handy=1,hoe=7,swordy=1, leaves=1, deco_block=1, compostability=65, }, stack_max = 64, _mcl_hardness = 2, -- this is 15 in Minecraft @@ -305,7 +305,7 @@ minetest.register_node("mcl_mushroom:crimson_fungus", { sunlight_propagates = true, paramtype = "light", walkable = false, - groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, + groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65}, light_source = 1, selection_box = { @@ -339,7 +339,7 @@ minetest.register_node("mcl_mushroom:crimson_roots", { paramtype = "light", walkable = false, buildable_to = true, - groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1}, + groups = {dig_immediate=3,vines=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,deco_block=1, shearsy = 1, compostability=65}, selection_box = { type = "fixed", fixed = { -6/16, -0.5, -6/16, 6/16, -4/16, 6/16 }, diff --git a/mods/ITEMS/mcl_mushrooms/huge.lua b/mods/ITEMS/mcl_mushrooms/huge.lua index 617f12810..83bc6a910 100644 --- a/mods/ITEMS/mcl_mushrooms/huge.lua +++ b/mods/ITEMS/mcl_mushrooms/huge.lua @@ -3,7 +3,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) local vector = vector local template = { - groups = {handy=1,axey=1, building_block = 1, material_wood = 1, flammable = -1 }, + groups = {handy=1,axey=1, building_block = 1, material_wood = 1, flammable = -1, compostability=85 }, sounds = mcl_sounds.node_sound_wood_defaults(), is_ground_content = true, _mcl_blast_resistance = 0.2, @@ -51,6 +51,7 @@ local function register_mushroom(color, species_id, template, d_cap, d_stem, d_s stem_full.tiles = { "mcl_mushrooms_mushroom_block_skin_stem.png" } stem_full.groups.huge_mushroom = species_id stem_full.groups.huge_mushroom_stem = 2 + stem_full.groups.compostability=65 minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem_full", stem_full) -- Stem @@ -60,6 +61,7 @@ local function register_mushroom(color, species_id, template, d_cap, d_stem, d_s stem.tiles = { "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_inside.png", "mcl_mushrooms_mushroom_block_skin_stem.png" } stem.groups.huge_mushroom = species_id stem.groups.huge_mushroom_stem = 1 + stem.groups.compostability=65 minetest.register_node("mcl_mushrooms:"..color.."_mushroom_block_stem", stem) -- Mushroom block (cap) diff --git a/mods/ITEMS/mcl_mushrooms/small.lua b/mods/ITEMS/mcl_mushrooms/small.lua index c6d7edcdc..6fdc80c16 100644 --- a/mods/ITEMS/mcl_mushrooms/small.lua +++ b/mods/ITEMS/mcl_mushrooms/small.lua @@ -38,7 +38,7 @@ minetest.register_node("mcl_mushrooms:mushroom_brown", { sunlight_propagates = true, paramtype = "light", walkable = false, - groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, + groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65}, sounds = mcl_sounds.node_sound_leaves_defaults(), light_source = 1, selection_box = { @@ -62,7 +62,7 @@ minetest.register_node("mcl_mushrooms:mushroom_red", { sunlight_propagates = true, paramtype = "light", walkable = false, - groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1}, + groups = {dig_immediate=3,mushroom=1,attached_node=1,dig_by_water=1,destroy_by_lava_flow=1,dig_by_piston=1,enderman_takable=1,deco_block=1, compostability=65}, sounds = mcl_sounds.node_sound_leaves_defaults(), selection_box = { type = "fixed", diff --git a/mods/ITEMS/mcl_nether/init.lua b/mods/ITEMS/mcl_nether/init.lua index 2d6fbcecc..35da05553 100644 --- a/mods/ITEMS/mcl_nether/init.lua +++ b/mods/ITEMS/mcl_nether/init.lua @@ -202,7 +202,7 @@ minetest.register_node("mcl_nether:nether_wart_block", { stack_max = 64, tiles = {"mcl_nether_nether_wart_block.png"}, is_ground_content = false, - groups = {handy=1, hoey=1, building_block=1}, + groups = {handy=1, hoey=1, building_block=1, compostability=85}, sounds = mcl_sounds.node_sound_leaves_defaults( { footstep={name="default_dirt_footstep", gain=0.7}, diff --git a/mods/ITEMS/mcl_nether/nether_wart.lua b/mods/ITEMS/mcl_nether/nether_wart.lua index 90af6bdd6..e7452a211 100644 --- a/mods/ITEMS/mcl_nether/nether_wart.lua +++ b/mods/ITEMS/mcl_nether/nether_wart.lua @@ -150,7 +150,7 @@ minetest.register_craftitem("mcl_nether:nether_wart_item", { end end end, - groups = { craftitem = 1, brewitem=1 }, + groups = { craftitem = 1, brewitem=1, compostability=30 }, }) local names = {"mcl_nether:nether_wart_0", "mcl_nether:nether_wart_1", "mcl_nether:nether_wart_2"} diff --git a/mods/ITEMS/mcl_ocean/kelp.lua b/mods/ITEMS/mcl_ocean/kelp.lua index 422f475ac..fbdb12448 100644 --- a/mods/ITEMS/mcl_ocean/kelp.lua +++ b/mods/ITEMS/mcl_ocean/kelp.lua @@ -741,7 +741,7 @@ minetest.register_craftitem("mcl_ocean:kelp", { inventory_image = "mcl_ocean_kelp_item.png", wield_image = "mcl_ocean_kelp_item.png", on_place = kelp.kelp_on_place, - groups = { deco_block = 1 }, + groups = { deco_block = 1, compostability=30 }, }) if mod_doc then @@ -756,7 +756,7 @@ minetest.register_craftitem("mcl_ocean:dried_kelp", { _doc_items_longdesc = S("Dried kelp is a food item."), inventory_image = "mcl_ocean_dried_kelp.png", wield_image = "mcl_ocean_dried_kelp.png", - groups = { food = 2, eatable = 1 }, + groups = { food = 2, eatable = 1, compostability=30 }, on_place = minetest.item_eat(1), on_secondary_use = minetest.item_eat(1), _mcl_saturation = 0.6, @@ -773,7 +773,7 @@ minetest.register_node("mcl_ocean:dried_kelp_block", { description = S("Dried Kelp Block"), _doc_items_longdesc = S("A decorative block that serves as a great furnace fuel."), tiles = { "mcl_ocean_dried_kelp_top.png", "mcl_ocean_dried_kelp_bottom.png", "mcl_ocean_dried_kelp_side.png" }, - groups = { handy = 1, hoey = 1, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60 }, + groups = { handy = 1, hoey = 1, building_block = 1, flammable = 2, fire_encouragement = 30, fire_flammability = 60, compostability=50 }, sounds = mcl_sounds.node_sound_leaves_defaults(), paramtype2 = "facedir", on_place = mcl_util.rotate_axis, diff --git a/mods/ITEMS/mcl_ocean/sea_pickle.lua b/mods/ITEMS/mcl_ocean/sea_pickle.lua index d215fd3b3..435dc10f0 100644 --- a/mods/ITEMS/mcl_ocean/sea_pickle.lua +++ b/mods/ITEMS/mcl_ocean/sea_pickle.lua @@ -106,7 +106,7 @@ for s=1,4 do }, inventory_image = img, wield_image = img, - groups = { dig_immediate = 3, deco_block = 1, sea_pickle=1, not_in_creative_inventory=nici }, + groups = { dig_immediate = 3, deco_block = 1, sea_pickle=1, not_in_creative_inventory=nici, compostability=65 }, -- Light level: 6 at size 1, +3 for each additional stage light_source = math.min(6 + (s-1)*3, minetest.LIGHT_MAX), selection_box = { diff --git a/mods/ITEMS/mcl_ocean/seagrass.lua b/mods/ITEMS/mcl_ocean/seagrass.lua index 5fd382775..52c506f81 100644 --- a/mods/ITEMS/mcl_ocean/seagrass.lua +++ b/mods/ITEMS/mcl_ocean/seagrass.lua @@ -85,7 +85,7 @@ minetest.register_craftitem("mcl_ocean:seagrass", { inventory_image = "mcl_ocean_seagrass.png^[verticalframe:12:0", wield_image = "mcl_ocean_seagrass.png^[verticalframe:12:0", on_place = seagrass_on_place, - groups = { deco_block = 1 }, + groups = { deco_block = 1, compostability=30 }, }) -- Seagrass nodes: seagrass on a surface node From ed656a095d3dce45b5fe4485c8b11a3d85bdc317 Mon Sep 17 00:00:00 2001 From: kay27 Date: Sun, 20 Mar 2022 07:06:59 +0400 Subject: [PATCH 4/7] Restore rabbit textures --- mods/ENTITIES/mcl_mobs/api/api.lua | 1 + mods/ENTITIES/mcl_mobs/api/spawning.lua | 21 +- mods/ENTITIES/mobs_mc/rabbit.lua | 304 +++++++++++------------- mods/MISC/mcl_commands/summon.lua | 40 +++- 4 files changed, 198 insertions(+), 168 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api/api.lua b/mods/ENTITIES/mcl_mobs/api/api.lua index c72dca0bd..e4eb81b39 100644 --- a/mods/ENTITIES/mcl_mobs/api/api.lua +++ b/mods/ENTITIES/mcl_mobs/api/api.lua @@ -401,6 +401,7 @@ function mobs:register_mob(name, def) ignited_by_sunlight = def.ignited_by_sunlight or false, eye_height = def.eye_height or 1.5, defuse_reach = def.defuse_reach or 4, + spawn = def.spawn, -- End of MCL2 extensions on_spawn = def.on_spawn, diff --git a/mods/ENTITIES/mcl_mobs/api/spawning.lua b/mods/ENTITIES/mcl_mobs/api/spawning.lua index 424989426..7fb6983f4 100644 --- a/mods/ENTITIES/mcl_mobs/api/spawning.lua +++ b/mods/ENTITIES/mcl_mobs/api/spawning.lua @@ -267,6 +267,8 @@ function mobs:spawn_setup(def) local day_toggle = def.day_toggle local on_spawn = def.on_spawn local check_position = def.check_position + local group_size_min = def.group_size_min or 1 + local group_size_max = def.group_size_max or 1 -- chance/spawn number override in minetest.conf for registered mob local numbers = minetest.settings:get(name) @@ -300,10 +302,23 @@ function mobs:spawn_setup(def) day_toggle = day_toggle, check_position = check_position, on_spawn = on_spawn, + group_size_min = group_size_min, + group_size_max = group_size_max, } summary_chance = summary_chance + chance end +function mobs.spawn_mob(name, pos) + local def = minetest.registered_entities[name] + if not def then return end + if def.spawn then + return def.spawn(pos) + end + return minetest.add_entity(pos, name) +end + +local spawn_mob = mobs.spawn_mob + function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_light, max_light, interval, chance, aoc, min_height, max_height, day_toggle, on_spawn) -- Do mobs spawn at all? @@ -341,6 +356,8 @@ function mobs:spawn_specific(name, dimension, type_of_spawning, biomes, min_ligh spawn_dictionary[key]["min_height"] = min_height spawn_dictionary[key]["max_height"] = max_height spawn_dictionary[key]["day_toggle"] = day_toggle + spawn_dictionary[key]["group_size_min"] = 1 + spawn_dictionary[key]["group_size_max"] = 3 summary_chance = summary_chance + chance end @@ -442,9 +459,9 @@ if mobs_spawn then and (mob_def.check_position and mob_def.check_position(spawning_position) or true) then --everything is correct, spawn mob - local object = minetest.add_entity(spawning_position, mob_def.name) + local object = spawn_mob(mob_def.name, spawning_position) if object then - return mob_def.on_spawn and mob_def.on_spawn(object, pos) + return mob_def.on_spawn and mob_def.on_spawn(object, spawning_position) end end current_summary_chance = current_summary_chance - mob_chance diff --git a/mods/ENTITIES/mobs_mc/rabbit.lua b/mods/ENTITIES/mobs_mc/rabbit.lua index 51235a3f9..34c568a30 100644 --- a/mods/ENTITIES/mobs_mc/rabbit.lua +++ b/mods/ENTITIES/mobs_mc/rabbit.lua @@ -2,118 +2,27 @@ local S = minetest.get_translator(minetest.get_current_modname()) -local rabbit = { - description = S("Rabbit"), - type = "animal", - spawn_class = "passive", - passive = true, - reach = 1, - rotate = 270, - hp_min = 3, - hp_max = 3, - xp_min = 1, - xp_max = 3, - collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.49, 0.2}, +local mob_name = "mobs_mc:rabbit" - visual = "mesh", - mesh = "mobs_mc_rabbit.b3d", - textures = { +local textures = { {"mobs_mc_rabbit_brown.png"}, {"mobs_mc_rabbit_gold.png"}, {"mobs_mc_rabbit_white.png"}, {"mobs_mc_rabbit_white_splotched.png"}, {"mobs_mc_rabbit_salt.png"}, {"mobs_mc_rabbit_black.png"}, - }, - visual_size = {x=1.5, y=1.5}, - sounds = { - random = "mobs_mc_rabbit_random", - damage = "mobs_mc_rabbit_hurt", - death = "mobs_mc_rabbit_death", - attack = "mobs_mc_rabbit_attack", - eat = "mobs_mc_animal_eat_generic", - distance = 16, - }, - makes_footstep_sound = false, - walk_velocity = 1, - run_velocity = 3.7, - follow_velocity = 1.1, - floats = 1, - runaway = true, - jump = true, - drops = { - {name = mobs_mc.items.rabbit_raw, chance = 1, min = 0, max = 1, looting = "common",}, - {name = mobs_mc.items.rabbit_hide, chance = 1, min = 0, max = 1, looting = "common",}, - {name = mobs_mc.items.rabbit_foot, chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,}, - }, - fear_height = 4, - animation = { - speed_normal = 25, speed_run = 50, - stand_start = 0, stand_end = 0, - walk_start = 0, walk_end = 20, - run_start = 0, run_end = 20, - }, - -- Follow (yellow) dangelions, carrots and golden carrots - follow = mobs_mc.follow.rabbit, - view_range = 8, - -- Eat carrots and reduce their growth stage by 1 - replace_rate = 10, - replace_what = mobs_mc.replace.rabbit, - on_rightclick = function(self, clicker) - -- Feed, tame protect or capture - if mobs:feed_tame(self, clicker, 1, true, true) then return end - end, - do_custom = function(self) - -- Easter egg: Change texture if rabbit is named “Toast” - if self.nametag == "Toast" and not self._has_toast_texture then - self._original_rabbit_texture = self.base_texture - self.base_texture = { "mobs_mc_rabbit_toast.png" } - self.object:set_properties({ textures = self.base_texture }) - self._has_toast_texture = true - elseif self.nametag ~= "Toast" and self._has_toast_texture then - self.base_texture = self._original_rabbit_texture - self.object:set_properties({ textures = self.base_texture }) - self._has_toast_texture = false - end - end, } -mobs:register_mob("mobs_mc:rabbit", rabbit) +local sounds = { + random = "mobs_mc_rabbit_random", + damage = "mobs_mc_rabbit_hurt", + death = "mobs_mc_rabbit_death", + attack = "mobs_mc_rabbit_attack", + eat = "mobs_mc_animal_eat_generic", + distance = 16, +} --- The killer bunny (Only with spawn egg) -local killer_bunny = table.copy(rabbit) -killer_bunny.description = S("Killer Bunny") -killer_bunny.type = "monster" -killer_bunny.spawn_class = "hostile" -killer_bunny.attack_type = "dogfight" -killer_bunny.specific_attack = { "player", "mobs_mc:wolf", "mobs_mc:dog" } -killer_bunny.damage = 8 -killer_bunny.passive = false --- 8 armor points -killer_bunny.armor = 50 -killer_bunny.textures = { "mobs_mc_rabbit_caerbannog.png" } -killer_bunny.view_range = 16 -killer_bunny.replace_rate = nil -killer_bunny.replace_what = nil -killer_bunny.on_rightclick = nil -killer_bunny.run_velocity = 6 -killer_bunny.do_custom = function(self) - if not self._killer_bunny_nametag_set then - self.nametag = S("The Killer Bunny") - self._killer_bunny_nametag_set = true - end -end - -mobs:register_mob("mobs_mc:killer_bunny", killer_bunny) - --- Mob spawning rules. --- Different skins depending on spawn location <- we'll get to this when the spawning algorithm is fleshed out - -mobs:spawn_specific( -"mobs_mc:rabbit", -"overworld", -"ground", -{ +local biome_list = { "FlowerForest_beach", "Forest_beach", "StoneBeach", @@ -161,73 +70,148 @@ mobs:spawn_specific( "MesaBryce", "JungleEdge", "SavannaM", -}, -9, -minetest.LIGHT_MAX+1, -30, -15000, -8, -mobs_mc.spawn_height.overworld_min, -mobs_mc.spawn_height.overworld_max) - ---[[ -local spawn = { - name = "mobs_mc:rabbit", - neighbors = {"air"}, - chance = 15000, - active_object_count = 10, - min_light = 0, - max_light = minetest.LIGHT_MAX+1, - min_height = mobs_mc.spawn_height.overworld_min, - max_height = mobs_mc.spawn_height.overworld_max, } -local spawn_desert = table.copy(spawn) -spawn_desert.nodes = mobs_mc.spawn.desert -spawn_desert.on_spawn = function(self, pos) - local texture = "mobs_mc_rabbit_gold.png" - self.base_texture = { "mobs_mc_rabbit_gold.png" } - self.object:set_properties({textures = self.base_texture}) -end -mobs:spawn(spawn_desert) - -local spawn_snow = table.copy(spawn) -spawn_snow.nodes = mobs_mc.spawn.snow -spawn_snow.on_spawn = function(self, pos) +local function spawn_rabbit(pos) + local biome_data = minetest.get_biome_data(pos) + local biome_name = biome_data and minetest.get_biome_name(biome_data.biome) or "" + local mob = minetest.add_entity(pos, mob_name) + local self = mob:get_luaentity() local texture - local r = math.random(1, 100) - -- 80% white fur - if r <= 80 then - texture = "mobs_mc_rabbit_white.png" - -- 20% black and white fur + if biome_name:find("Desert") then + texture = "mobs_mc_rabbit_gold.png" else - texture = "mobs_mc_rabbit_white_splotched.png" + local r = math.random(1, 100) + if biome_name:find("Ice") or biome_name:find("snow") or biome_name:find("Cold") then + -- 80% white fur + if r <= 80 then + texture = "mobs_mc_rabbit_white.png" + -- 20% black and white fur + else + texture = "mobs_mc_rabbit_white_splotched.png" + end + else + -- 50% brown fur + if r <= 50 then + texture = "mobs_mc_rabbit_brown.png" + -- 40% salt fur + elseif r <= 90 then + texture = "mobs_mc_rabbit_salt.png" + -- 10% black fur + else + texture = "mobs_mc_rabbit_black.png" + end + end end - self.base_texture = { texture } - self.object:set_properties({textures = self.base_texture}) + self.base_texture = {texture} + self.object:set_properties({textures = {texture}}) end -mobs:spawn(spawn_snow) -local spawn_grass = table.copy(spawn) -spawn_grass.nodes = mobs_mc.spawn.grassland -spawn_grass.on_spawn = function(self, pos) - local texture - local r = math.random(1, 100) - -- 50% brown fur - if r <= 50 then - texture = "mobs_mc_rabbit_brown.png" - -- 40% salt fur - elseif r <= 90 then - texture = "mobs_mc_rabbit_salt.png" - -- 10% black fur - else - texture = "mobs_mc_rabbit_black.png" +local function do_custom_rabbit(self) + -- Easter egg: Change texture if rabbit is named “Toast” + if self.nametag == "Toast" and not self._has_toast_texture then + self._original_rabbit_texture = self.base_texture + self.base_texture = { "mobs_mc_rabbit_toast.png" } + self.object:set_properties({ textures = self.base_texture }) + self._has_toast_texture = true + elseif self.nametag ~= "Toast" and self._has_toast_texture then + self.base_texture = self._original_rabbit_texture + self.object:set_properties({ textures = self.base_texture }) + self._has_toast_texture = false end - self.base_texture = { texture } - self.object:set_properties({textures = self.base_texture}) end -mobs:spawn(spawn_grass) -]]-- + +local rabbit = { + description = S("Rabbit"), + type = "animal", + spawn_class = "passive", + passive = true, + reach = 1, + rotate = 270, + hp_min = 3, + hp_max = 3, + xp_min = 1, + xp_max = 3, + collisionbox = {-0.2, -0.01, -0.2, 0.2, 0.49, 0.2}, + visual = "mesh", + mesh = "mobs_mc_rabbit.b3d", + textures = textures, + visual_size = {x=1.5, y=1.5}, + sounds = sounds, + makes_footstep_sound = false, + walk_velocity = 1, + run_velocity = 3.7, + follow_velocity = 1.1, + floats = 1, + runaway = true, + jump = true, + drops = { + {name = mobs_mc.items.rabbit_raw, chance = 1, min = 0, max = 1, looting = "common",}, + {name = mobs_mc.items.rabbit_hide, chance = 1, min = 0, max = 1, looting = "common",}, + {name = mobs_mc.items.rabbit_foot, chance = 10, min = 0, max = 1, looting = "rare", looting_factor = 0.03,}, + }, + fear_height = 4, + animation = { + speed_normal = 25, speed_run = 50, + stand_start = 0, stand_end = 0, + walk_start = 0, walk_end = 20, + run_start = 0, run_end = 20, + }, + -- Follow (yellow) dangelions, carrots and golden carrots + follow = mobs_mc.follow.rabbit, + view_range = 8, + -- Eat carrots and reduce their growth stage by 1 + replace_rate = 10, + replace_what = mobs_mc.replace.rabbit, + on_rightclick = function(self, clicker) + -- Feed, tame protect or capture + if mobs:feed_tame(self, clicker, 1, true, true) then return end + end, + do_custom = do_custom_rabbit, + spawn = spawn_rabbit +} + +mobs:register_mob(mob_name, rabbit) + +-- The killer bunny (Only with spawn egg) +local killer_bunny = table.copy(rabbit) +killer_bunny.description = S("Killer Bunny") +killer_bunny.type = "monster" +killer_bunny.spawn_class = "hostile" +killer_bunny.attack_type = "dogfight" +killer_bunny.specific_attack = { "player", "mobs_mc:wolf", "mobs_mc:dog" } +killer_bunny.damage = 8 +killer_bunny.passive = false +-- 8 armor points +killer_bunny.armor = 50 +killer_bunny.textures = { "mobs_mc_rabbit_caerbannog.png" } +killer_bunny.view_range = 16 +killer_bunny.replace_rate = nil +killer_bunny.replace_what = nil +killer_bunny.on_rightclick = nil +killer_bunny.run_velocity = 6 +killer_bunny.do_custom = function(self) + if not self._killer_bunny_nametag_set then + self.nametag = S("The Killer Bunny") + self._killer_bunny_nametag_set = true + end +end + +mobs:register_mob("mobs_mc:killer_bunny", killer_bunny) + +-- Mob spawning rules. +-- Different skins depending on spawn location <- we customized spawn function + +mobs:spawn_setup({ + name = mob_name, + min_light = 9, + chance = 1000, + aoc = 8, + biomes = biome_list, + group_size_max = 1, + baby_min = 1, + baby_max = 2, +}) -- Spawn egg mobs:register_egg("mobs_mc:rabbit", S("Rabbit"), "mobs_mc_spawn_icon_rabbit.png", 0) diff --git a/mods/MISC/mcl_commands/summon.lua b/mods/MISC/mcl_commands/summon.lua index 69da0a66c..2a2792f5f 100644 --- a/mods/MISC/mcl_commands/summon.lua +++ b/mods/MISC/mcl_commands/summon.lua @@ -3,13 +3,41 @@ local S = minetest.get_translator(minetest.get_current_modname()) local orig_func = minetest.registered_chatcommands["spawnentity"].func local cmd = table.copy(minetest.registered_chatcommands["spawnentity"]) cmd.func = function(name, param) - local ent = minetest.registered_entities[param] - if minetest.settings:get_bool("only_peaceful_mobs", false) and ent and ent._cmi_is_mob and ent.type == "monster" then - return false, S("Only peaceful mobs allowed!") - else - local bool, msg = orig_func(name, param) - return bool, msg + local params = param:split(" ") + if not params[1] or params[3] then + return false, S("Usage: /spawnentity [,,]") end + local entity_name = params[1] + local pos = params[2] + local entity_def = minetest.registered_entities[entity_name] + if not entity_def then + entity_name = "mobs_mc:" .. entity_name + entity_def = minetest.registered_entities[entity_name] + if not entity_def then + return false, S("Error: Unknown entity name") + end + end + if entity_def._cmi_is_mob then + if minetest.settings:get_bool("only_peaceful_mobs", false) and entity_def.type == "monster" then + return false, S("Only peaceful mobs allowed!") + end + mobs.spawn_mob( + entity_name, + pos + and minetest.string_to_pos(pos) + or vector.add( + minetest.get_player_by_name(name):get_pos(), + { + x = math.random()-0.5, + y = math.random(), + z = math.random()-0.5 + } + ) + ) + return true, S("Mob @1 spawned", entity_name) + end + local bool, msg = orig_func(name, param) + return bool, msg end minetest.unregister_chatcommand("spawnentity") minetest.register_chatcommand("summon", cmd) \ No newline at end of file From 6c196ae63ae5b61e1958393e2a33020018cfb242 Mon Sep 17 00:00:00 2001 From: Mark Roth Date: Sun, 20 Mar 2022 14:07:57 +0200 Subject: [PATCH 5/7] Add compostability to GROUPS.md --- GROUPS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/GROUPS.md b/GROUPS.md index 0aba2c7da..c65b2eb46 100644 --- a/GROUPS.md +++ b/GROUPS.md @@ -71,6 +71,7 @@ Please read to learn how digging times * `coral_block=X`: Coral block (1 = alive, 2 = dead) * `coral_species=X`: Specifies the species of a coral; equal X means equal species * `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching +* `compostability`: Amount from 1 to 100 that defines the percentage of likelyhood that the composter will advance a level. #### Footnotes From 6be3d2e0d4f261028dc7b67a77f20877fe5cccf7 Mon Sep 17 00:00:00 2001 From: kay27 Date: Mon, 21 Mar 2022 05:36:02 +0400 Subject: [PATCH 6/7] Add mcl_antispam --- mods/PLAYER/mcl_antispam/init.lua | 113 ++++++++++++++++++++++++++++++ mods/PLAYER/mcl_antispam/mod.conf | 2 + settingtypes.txt | 14 ++++ 3 files changed, 129 insertions(+) create mode 100644 mods/PLAYER/mcl_antispam/init.lua create mode 100644 mods/PLAYER/mcl_antispam/mod.conf diff --git a/mods/PLAYER/mcl_antispam/init.lua b/mods/PLAYER/mcl_antispam/init.lua new file mode 100644 index 000000000..21f550694 --- /dev/null +++ b/mods/PLAYER/mcl_antispam/init.lua @@ -0,0 +1,113 @@ +local ban_spammers = true +local kick_spammers = true +local revoke_shout_for_spammers = true +local limit_messages = 10 +local limit_message_length = 200 +local block_special_chars = true +local enable_antispam = ban_spammers or kick_spammers or revoke_shout_for_spammers + +local function update_settings() + ban_spammers = minetest.settings:get_bool("ban_spammers", true) + kick_spammers = minetest.settings:get_bool("kick_spammers", true) + revoke_shout_for_spammers = minetest.settings:get_bool("revoke_shout_for_spammers", true) + limit_messages = tonumber(minetest.settings:get("limit_messages") or 10) + limit_message_length = tonumber(minetest.settings:get("limit_message_length") or 200) + block_special_chars = minetest.settings:get_bool("block_special_chars", true) + enable_antispam = ban_spammers or kick_spammers or revoke_shout_for_spammers + minetest.after(7, update_settings) +end +update_settings() + +local last_messages = {} +local exceeders = {} +local special_users = {} + +local function ban(name) + if revoke_shout_for_spammers then + local privs = minetest.get_player_privs(name) + if privs then + privs.shoud = nil + privs.noclip = true + minetest.set_player_privs(name, privs) + end + end + if ban_spammers then + minetest.ban_player(name) + elseif kick_spammers then + minetest.kick_player(name) + end +end + +local last_char = string.char(127) + +local function on_chat_message(name, message) + if not enable_antispam then return end + local length = message:len() + if last_messages.job then + last_messages.job:cancel() + last_messages.job = nil + end + if last_messages.name and last_messages.name == name then + last_messages.count = last_messages.count + 1 + last_messages.summary_length = last_messages.summary_length + length + if last_messages.count >= limit_messages then + ban(name) + end + else + last_messages.name = name + last_messages.count = 1 + last_messages.summary_length = length + end + last_messages.job = minetest.after(300, function() + last_messages.name = nil + last_messages.job = nil + end) + if limit_message_length > 0 and message:len() > limit_message_length then + if exceeders[name] then + exceeders[name] = exceeders[name] + 1 + if exceeders[name] > limit_messages then + ban(name) + end + else + exceeders[name] = 1 + end + message = message:sub(1, limit_message_length) .. ">8 >8 >8" + minetest.chat_send_all("<" .. name .. "> " .. message) + return true + else + if exceeders[name] then + exceeders[name] = nil + end + end + if block_special_chars then + local sc = false + local msg = "" + for i = 1, #message do + local c = message:sub(i,i) + if c >= " " and c <= last_char then + msg = msg .. c + else + sc = true + end + end + if sc then + if special_users[name] then + special_users[name] = special_users[name] + 1 + if special_users[name] > limit_messages then + ban(name) + end + else + special_users[name] = 1 + end + message = msg + minetest.chat_send_all("<" .. name .. "> " .. message) + return true + else + if special_users[name] then + special_users[name] = nil + end + end + end +end + +minetest.register_on_chat_message(on_chat_message) diff --git a/mods/PLAYER/mcl_antispam/mod.conf b/mods/PLAYER/mcl_antispam/mod.conf new file mode 100644 index 000000000..ef259eab0 --- /dev/null +++ b/mods/PLAYER/mcl_antispam/mod.conf @@ -0,0 +1,2 @@ +name = mcl_antispam +author = kay27 diff --git a/settingtypes.txt b/settingtypes.txt index dca03b7e1..fc1d26c67 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -165,6 +165,20 @@ kick_cheaters (Kick Cheaters) bool false # Cheat kicking threshold kick_threshold (Cheat Kicking Threshold) int 10 +[Antispam] +# Maximum player messages in a sequence +limit_messages (Maximum player messages in a sequence) int 10 +# Maximum message length +limit_message_length (Maximum message length) int 200 +# Block special characters +block_special_chars (Block special characters) bool true +# Ban spammers +ban_spammers (Ban spammers) bool true +# Kick spammers +kick_spammers (Kick spammers) bool true +# Revoke shout priv for spammers +revoke_shout_for_spammers (Revoke shout priv for spammers) bool true + [Debugging] # If enabled, this will show the itemstring of an item in the description. mcl_item_id_debug (Item ID Debug) bool false From 44d8caf3b7bde1c920133cd7fa030cb04a56a970 Mon Sep 17 00:00:00 2001 From: kay27 Date: Mon, 21 Mar 2022 14:28:58 +0400 Subject: [PATCH 7/7] Fix mcl_antispam --- mods/PLAYER/mcl_antispam/init.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mods/PLAYER/mcl_antispam/init.lua b/mods/PLAYER/mcl_antispam/init.lua index 21f550694..ef568b94d 100644 --- a/mods/PLAYER/mcl_antispam/init.lua +++ b/mods/PLAYER/mcl_antispam/init.lua @@ -26,8 +26,7 @@ local function ban(name) if revoke_shout_for_spammers then local privs = minetest.get_player_privs(name) if privs then - privs.shoud = nil - privs.noclip = true + privs.shout = nil minetest.set_player_privs(name, privs) end end