From db52b4a918409858f9a6174c5f8ec5ae462dd399 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 8 Jun 2022 03:03:03 +0200 Subject: [PATCH] Add dripleaf functionality --- mods/MAPGEN/mcl_lush_caves/init.lua | 211 +++++++++++++++++- mods/MAPGEN/mcl_lush_caves/mod.conf | 3 +- .../mcl_lush_caves_azalea_flowering_side.png | Bin 0 -> 6812 bytes .../mcl_lush_caves_azalea_flowering_top.png | Bin 0 -> 7565 bytes 4 files changed, 206 insertions(+), 8 deletions(-) create mode 100644 mods/MAPGEN/mcl_lush_caves/textures/mcl_lush_caves_azalea_flowering_side.png create mode 100644 mods/MAPGEN/mcl_lush_caves/textures/mcl_lush_caves_azalea_flowering_top.png diff --git a/mods/MAPGEN/mcl_lush_caves/init.lua b/mods/MAPGEN/mcl_lush_caves/init.lua index 68b9c0151..9222ce0ab 100644 --- a/mods/MAPGEN/mcl_lush_caves/init.lua +++ b/mods/MAPGEN/mcl_lush_caves/init.lua @@ -26,6 +26,9 @@ function mcl_lush_caves.makelake(pos,pr) if not nn[1] then return end for i=1,pr:next(1,#nn) do minetest.set_node(nn[i],{name="mcl_core:water_source"}) + if pr:next(1,2) == 1 then + minetest.set_node(nn[i],{name="mcl_lush_caves:dripleaf_big_stem"}) + end end local nnn = minetest.find_nodes_in_area_under_air(p1,p2,{"mcl_core:water_source","group:water"}) for k,v in pairs(nnn) do @@ -202,6 +205,65 @@ minetest.register_node("mcl_lush_caves:cave_vines_lit", { minetest.set_node(pos,{name="mcl_lush_caves:cave_vines"}) end, }) + +local function find_top(pos,node) + local p = pos + repeat + p = vector.offset(p,0,1,0) + until minetest.get_node(p).name ~= node.name + return p +end + +local function get_height(pos,node) + local p = pos + local i = 0 + repeat + i = i + 1 + p = vector.offset(p,0,-1,0) + until minetest.get_node(p).name ~= node.name + return i - 1 +end + +local function dripleaf_grow(pos, node) + local t = find_top(pos,node) + local h = get_height(t,node) + if h >= 5 then return end + minetest.set_node(t,node) + minetest.set_node(vector.offset(t,0,1,0),{name = "mcl_lush_caves:dripleaf_big"}) +end + +minetest.register_node("mcl_lush_caves:dripleaf_big_waterroot", { + drawtype = "plantlike_rooted", + paramtype = "light", + paramtype2 = "leveled", + place_param2 = 16, + tiles = { "default_clay.png" }, + special_tiles = { + { name = "mcl_lush_caves_big_dripleaf_stem.png", + animation = {type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0}, + tileable_vertical = true, + } + }, + inventory_image = "mcl_lush_caves_big_dripleaf_stem.png", + selection_box = { + type = "fixed", + fixed = { + { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, + { -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 }, + } + }, + groups = { handy = 1, dig_immediate = 3, not_in_creative_inventory = 1 }, + drop = "mcl_lush_caves:dripleaf_big_stem", + node_placement_prediction = "", + _mcl_hardness = 0, + _mcl_blast_resistance = 0, + _mcl_silk_touch_drop = true, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if itemstack:get_name() ~= "mcl_dye:white" then return itemstack end + itemstack:take_item(1) + --dripleaf_grow(pos,node) + end +}) minetest.register_node("mcl_lush_caves:dripleaf_big_stem", { description = S("Dripleaf stem"), _doc_items_create_entry = S("Dripleaf stem"), @@ -225,15 +287,30 @@ minetest.register_node("mcl_lush_caves:dripleaf_big_stem", { sounds = mcl_sounds.node_sound_leaves_defaults(), _mcl_blast_resistance = 0, _mcl_blast_hardness = 0, + on_construct = function(pos) + local p = pos + local l = 0 + if minetest.get_item_group(minetest.get_node(pos).name,"water") <= 0 then return end + repeat + l = l + 1 + p = vector.offset(p,0,1,0) + until minetest.get_item_group(minetest.get_node(p).name,"water") <= 0 + minetest.set_node(p,{name = "mcl_lush_caves:dripleaf_big"}) + minetest.set_node(vector.offset(pos,0,-1,0),{ name = "mcl_lush_caves:dripleaf_big_waterroot", param2 = l * 16}) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + if itemstack:get_name() ~= "mcl_dye:white" then return itemstack end + itemstack:take_item(1) + dripleaf_grow(pos,node) + end }) - -minetest.register_node("mcl_lush_caves:dripleaf_big", { +local dripleaf = { description = S("Dripleaf"), _doc_items_create_entry = S("Dripleaf"), _doc_items_entry_name = S("Dripleaf"), _doc_items_longdesc = S("Dripleaf"), paramtype = "light", - place_param2 = 3, + place_param2 = 0, sunlight_propagates = true, walkable = true, drawtype = "nodebox", @@ -257,8 +334,29 @@ minetest.register_node("mcl_lush_caves:dripleaf_big", { sounds = mcl_sounds.node_sound_leaves_defaults(), _mcl_blast_resistance = 0, _mcl_blast_hardness = 0, - --drop = "mcl_lush_caves:glow_berry", -}) +} +local dripleaf_tipped = table.copy(dripleaf) +dripleaf_tipped.walkable = false +dripleaf_tipped.tiles = {"mcl_lush_caves_big_dripleaf_tip.png"} +dripleaf_tipped.on_timer = function(p,e) + minetest.swap_node(p,{name="mcl_lush_caves:dripleaf_big"}) +end + +dripleaf.mesecons = {effector = { + action_on = function(pos, node) + node.param2 = 1 + minetest.swap_node(pos, node) + end, + action_off = function(pos, node) + node.param2 = 0 + minetest.swap_node(pos, node) + end, + rules = mesecon.rules.alldirs, +}} + + +minetest.register_node("mcl_lush_caves:dripleaf_big",dripleaf) +minetest.register_node("mcl_lush_caves:dripleaf_big_tipped",dripleaf_tipped) minetest.register_node("mcl_lush_caves:dripleaf_small_stem", { description = S("Small dripleaf stem"), @@ -406,6 +504,87 @@ minetest.register_node("mcl_lush_caves:azalea_leaves_flowering", { --_mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) }, }) +minetest.register_node("mcl_lush_caves:azalea", { + description = S("Azalea"), + inventory_image = "mcl_lush_caves_azalea_plant.png", + drawtype = "allfaces_optional", +-- drawtype = "nodebox", +-- node_box = { +-- type = "fixed", +-- fixed = { +-- { -16/16, -0/16, -16/16, 16/16, 16/16, 16/16 }, +-- { -2/16, -16/16, -2/16, 2/16, 0/16, 2/16 }, +-- } +-- }, + --tiles = { "blank.png" }, + tiles = { + "mcl_lush_caves_azalea_top.png", + "mcl_lush_caves_azalea_top.png", + "mcl_lush_caves_azalea_side.png", + "mcl_lush_caves_azalea_side.png", + "mcl_lush_caves_azalea_side.png", + "mcl_lush_caves_azalea_side.png", + }, + is_ground_content = false, + groups = { handy=1 }, + sounds = mcl_sounds.node_sound_dirt_defaults(), + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + use_texture_alpha = "clip", +}) + +minetest.register_node("mcl_lush_caves:azalea_flowering", { + description = S("Flowering azalea"), + inventory_image = "mcl_lush_caves_azalea_flowering_top.png", + drawtype = "nodebox", + node_box = { + type = "fixed", + fixed = { + { -16/16, -4/16, -16/16, 16/16, 16/16, 16/16 }, + { -2/16, -16/16, -2/16, 2/16, -4/16, 2/16 }, + } + }, + --tiles = { "blank.png" }, + tiles = { + "mcl_lush_caves_azalea_flowering_top.png", + "mcl_lush_caves_azalea_flowering_top.png", + "mcl_lush_caves_azalea_flowering_side.png", + "mcl_lush_caves_azalea_flowering_side.png", + "mcl_lush_caves_azalea_flowering_side.png", + "mcl_lush_caves_azalea_flowering_side.png", + }, + is_ground_content = false, + groups = { handy=1 }, + sounds = mcl_sounds.node_sound_dirt_defaults(), + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + use_texture_alpha = "clip", +}) +--]] + +minetest.register_node("mcl_lush_caves:azalea_leaves_flowering", { + description = description, + _doc_items_longdesc = longdesc, + _doc_items_hidden = false, + drawtype = "allfaces_optional", + waving = 2, + place_param2 = 1, -- Prevent leafdecay for placed nodes + tiles = { "mcl_lush_caves_azalea_leaves_flowering.png" }, + paramtype = "light", + stack_max = 64, + groups = { + handy = 1, hoey = 1, shearsy = 1, swordy = 1, dig_by_piston = 1, + leaves = 1, leafdecay = leafdecay_distance, deco_block = 1, + flammable = 2, fire_encouragement = 30, fire_flammability = 60, + compostability = 30 + }, + _mcl_shears_drop = true, + sounds = mcl_sounds.node_sound_leaves_defaults(), + _mcl_blast_resistance = 0.2, + _mcl_hardness = 0.2, + _mcl_silk_touch_drop = true, +}) + minetest.register_abm({ @@ -427,9 +606,27 @@ minetest.register_abm({ node.name="mcl_lush_caves:cave_vines_lit" end if minetest.get_node(pd).name == "air" and pd2 == "air" then - minetest.set_node(pd,node) + minetest.swap_node(pd,node) else - minetest.set_node(pos,{name="mcl_lush_caves:cave_vines_lit"}) + minetest.swap_node(pos,{name="mcl_lush_caves:cave_vines_lit"}) end end }) + +local player_dripleaf = {} +minetest.register_globalstep(function(dtime) + for _,p in pairs(minetest.get_connected_players()) do + local pos = p:get_pos() + local n = minetest.get_node(pos) + if n.name == "mcl_lush_caves:dripleaf_big" and n.param2 == 0 then + if not player_dripleaf[p] then player_dripleaf[p] = 0 end + player_dripleaf[p] = player_dripleaf[p] + dtime + if player_dripleaf[p] > 1 then + minetest.swap_node(pos,{name = "mcl_lush_caves:dripleaf_big_tipped"}) + player_dripleaf[p] = nil + local t = minetest.get_node_timer(pos) + t:start(3) + end + end + end +end) diff --git a/mods/MAPGEN/mcl_lush_caves/mod.conf b/mods/MAPGEN/mcl_lush_caves/mod.conf index b4b37b001..9377b2e5c 100644 --- a/mods/MAPGEN/mcl_lush_caves/mod.conf +++ b/mods/MAPGEN/mcl_lush_caves/mod.conf @@ -1,2 +1,3 @@ name = mcl_lush_caves -depends = mcl_sounds +author = cora +depends = mcl_sounds, mesecons diff --git a/mods/MAPGEN/mcl_lush_caves/textures/mcl_lush_caves_azalea_flowering_side.png b/mods/MAPGEN/mcl_lush_caves/textures/mcl_lush_caves_azalea_flowering_side.png new file mode 100644 index 0000000000000000000000000000000000000000..12bc559d8ffcd52324545c0546d81fb5f50dab37 GIT binary patch literal 6812 zcmeHLdpwls9v`gBvhFIOOv6DkX6BuXnaSjSnMy1wq{GZR?=WFz%nXBwT$4no+&0^V zP0DsrR7x1zsi-KFTiZ>$Ds-bld)^r;owH}p>2uDWzv45@`#j&@_jmt2&*#nbTIHs$ zYM_chAk^vZ&ff5UE$K%^3I1#R;x`5Yp|~l|*H7fl5F_~l9-9*mAw{u#2noe-*a$>S z&(pR3$Df#eGZiw&Up^1fDA2Duo?>N}(Kvi}%wwRc{=t%`#~bChr<t9JZLjn z*fReSFEo^!^|z{CplrqwPNtzy!%zIdAi;5rdqMjPPy1tg zHb1B4_BH14?A>;(%+miZI;lfWXFx%OcpiNvUGLTHv<`8vwdcL_ZSkhGCWYtkhV|OR z7RIHXR?BS3Ppg#!ctBozW=!5|iuT&MwWe0j{F0O6x8^4tzg&MpF#e0-8^gsqr~2$i z4O;oN#t$FZDc?D)WyjeS7q)3fRX~FH(V2^(?c3UG#kUnx2}VCyuU(_5tLA7O=6|8Q zj`sFUb?OoW7EkeE+nRO!)ypN{L%I81it ztj;5hws<@IXn(mDUGuV{yxKeUo@?Qyudu~|B`&Wqb>|fgzzW+P+2X^&^RAhu&d)#n zMq;Jqc>l6VgM9q@k%miENe&H7Mt6fxK~8#}=C$mFmrw!N_Wk|6$u$cQsVZk^+ZM?w zkb>2`kX5bAQ^~HQ`Eq*S?yO6af4;}?Fw0!We$|6Y!?1#`z_I$4gZ{{-6reb_ERI z+_Ahr>W)+Q!i__*$jAI6N{B#77p6PsgzLPp`odz}S8Vkat1&9Y4<(*g zFX%6ozfYZS@A%?DtE*sp+X1eCtqZP=N#D6C??xz~q_p0AEQLF~u=U(1yL7^>{#i?D z(akBNL z0`BfD>W}?q_|z_9Rj_j33rLf+Ez#v%du#H2F7%{;3uH(qnN@!V2! zJZt=>t{?X-reJjHL>DFFWnjm3C-wd9qBgg!?HGz`&zjO(uWEK?2bPZq^a2XUbZV7V z2Sb(-$a75)@^qELNp=2;ssrT!UUXp5W)n5-~kXstxs9bBFauc-){YLCh-gi$k zUSv#OdosJAr~F{haCC{*emToAuU8m^STwl{x?E{gUfyI;kblm5hwq$?=qFxoabGb? z{`&J(qARUzb#{ln|Dr_4q8o)lnuFP;>VrFMHS2N~HW-Fiw7AWmj84ofJU*QH#M@I~ zrDyQ{rBwATQL%=PbsKI^6bEE6vf^ne5 zH)=erJ9miw=xQoZ=QBJy9vOA)>h^ z)h;4Y9&Mq5>~(j^Kp^B&IZjSqbSJ0xlNg@Ar3pJ|?#=c_EkWyAP&+l)T9GQ=-&t*$ z8(CmEx6zTaq-H2s@asGR$K5;7NU=LP#W-uV^1P7s3j!4#MinG&ZS;1R<�)q1yKw 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