From ef7fb0d2e3d33a2c9aa91e7428a487bfc304dd11 Mon Sep 17 00:00:00 2001 From: Michieal Date: Tue, 3 Jan 2023 01:38:12 -0500 Subject: [PATCH] Cleaned up the code. Fixed side placement of bamboo against bamboo. Dinked with the random number generator some more. Condensed some more of the code duplication (WIP). Added in MCL_Log function. Finally settled on a decent looking Bamboo top. --- mods/ITEMS/mcl_bamboo/bamboo_base.lua | 130 +++++++++--------- mods/ITEMS/mcl_bamboo/bamboo_items.lua | 40 ++---- mods/ITEMS/mcl_bamboo/globals.lua | 17 ++- mods/ITEMS/mcl_bamboo/init.lua | 3 +- .../mcl_bamboo/textures/mcl_bamboo_endcap.png | Bin 941 -> 257 bytes 5 files changed, 86 insertions(+), 104 deletions(-) diff --git a/mods/ITEMS/mcl_bamboo/bamboo_base.lua b/mods/ITEMS/mcl_bamboo/bamboo_base.lua index e30c377f7..11a4bab79 100644 --- a/mods/ITEMS/mcl_bamboo/bamboo_base.lua +++ b/mods/ITEMS/mcl_bamboo/bamboo_base.lua @@ -8,18 +8,17 @@ local modname = minetest.get_current_modname() local S = minetest.get_translator(modname) local bamboo = "mcl_bamboo:bamboo" -local bamboo_one = bamboo .."_1" -local bamboo_two = bamboo.."_2" -local bamboo_three = bamboo.."_3" +local bamboo_one = bamboo .. "_1" +local bamboo_two = bamboo .. "_2" +local bamboo_three = bamboo .. "_3" local node_sound = mcl_sounds.node_sound_wood_defaults() -- CONSTS local DOUBLE_DROP_CHANCE = 8 -local DEBUG = false local strlen = string.len local substr = string.sub -local pr = PseudoRandom(os.time() * 12 + 15766) -- switched from math.random() to PseudoRandom because the random wasn't very random. +local pr = PseudoRandom((os.time() + 15766) * 12) -- switched from math.random() to PseudoRandom because the random wasn't very random. local on_rotate if minetest.get_modpath("screwdriver") then @@ -93,34 +92,29 @@ local bamboo_def = { local node = minetest.get_node(pointed_thing.under) local pos = pointed_thing.under local nodename = node.name + -- check the nodename to see if it is one of the bamboo's + local bamboo_node = substr(nodename, 1, strlen(bamboo)) - if DEBUG then - minetest.log("mcl_bamboo::Node placement data:") - minetest.log(dump(pointed_thing)) - minetest.log(node.name) - end + mcl_bamboo.mcl_log("Node placement data:") + mcl_bamboo.mcl_log(dump(pointed_thing)) + mcl_bamboo.mcl_log(node.name) - if DEBUG then - minetest.log("mcl_bamboo::Checking for protected placement of bamboo.") - end + mcl_bamboo.mcl_log("Checking for protected placement of bamboo.") if mcl_bamboo.is_protected(pos, placer) then return end - if DEBUG then - minetest.log("mcl_bamboo::placement of bamboo is not protected.") - end + mcl_bamboo.mcl_log("placement of bamboo is not protected.") + -- Use pointed node's on_rightclick function first, if present if placer and not placer:get_player_control().sneak then if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - if DEBUG then - minetest.log("mcl_bamboo::attempting placement of bamboo via targeted node's on_rightclick.") - end + mcl_bamboo.mcl_log("attempting placement of bamboo via targeted node's on_rightclick.") return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack end end - if nodename ~= bamboo and nodename ~= bamboo_one and nodename ~= bamboo_two and nodename ~= bamboo_three then + if bamboo_node ~= bamboo and nodename ~= "mcl_bamboo:bamboo_endcap" then -- not bamboo... if nodename ~= "mcl_flowerpots:flower_pot" then local found = false @@ -131,14 +125,13 @@ local bamboo_def = { end end if not found then - return itemstack + return end end end - if DEBUG then - minetest.log("mcl_bamboo::placing bamboo directly.") - end + mcl_bamboo.mcl_log("placing bamboo directly.") + local dir = vector.subtract(pointed_thing.under, pointed_thing.above) local wdir = minetest.dir_to_wallmounted(dir) local fdir = minetest.dir_to_facedir(dir) @@ -152,54 +145,33 @@ local bamboo_def = { -- return the missing item, so that we can lower the code -- complexity and duplication. itemstack:set_count(itemstack:get_count() + 1) - return minetest.item_place(itemstack, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + return minetest.item_place(itemstack, placer, pointed_thing, fdir) elseif nodename == bamboo_one then place_item:set_name(bamboo_one) - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + minetest.item_place(place_item, placer, pointed_thing, fdir) return itemstack, pointed_thing.under elseif nodename == bamboo_two then place_item:set_name(bamboo_two) - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + minetest.item_place(place_item, placer, pointed_thing, fdir) return itemstack, pointed_thing.under elseif nodename == bamboo_three then place_item:set_name(bamboo_three) - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + minetest.item_place(place_item, placer, pointed_thing, fdir) return itemstack, pointed_thing.under else local placed_type = pr:next(0, 3) -- randomly choose which one to place. - if DEBUG then - minetest.log("MCL_BAMBOO::Place_Bamboo_Shoot--Type: " .. placed_type) - end + mcl_bamboo.mcl_log("Place_Bamboo_Shoot--Type: " .. placed_type) if placed_type == 0 then - place_item=ItemStack(bamboo) - if DEBUG then - minetest.log("Bamboo place_item definition (current):\n" .. dump(place_item:to_table())) - end - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) - return itemstack, pointed_thing.under + place_item = ItemStack(bamboo) elseif placed_type == 1 then - place_item=ItemStack(bamboo_one) - if DEBUG then - minetest.log("Bamboo place_item definition (current):\n" .. dump(place_item:to_table())) - end - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) - return itemstack, pointed_thing.under + place_item = ItemStack(bamboo_one) elseif placed_type == 2 then - place_item=ItemStack(bamboo_two) - if DEBUG then - minetest.log("Bamboo place_item definition (current):\n" .. dump(place_item:to_table())) - end - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) - return itemstack, pointed_thing.under + place_item = ItemStack(bamboo_two) elseif placed_type == 3 then - place_item=ItemStack(bamboo_three) - if DEBUG then - minetest.log("Bamboo place_item definition (current):\n" .. dump(place_item:to_table())) - end - minetest.item_place(place_item, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) - return itemstack, pointed_thing.under + place_item = ItemStack(bamboo_three) end - return false + minetest.item_place(place_item, placer, pointed_thing, fdir) + return itemstack, pointed_thing.under end end, @@ -207,7 +179,7 @@ local bamboo_def = { -- Node destructor; called before removing node. local new_pos = vector.offset(pos, 0, 1, 0) local node_above = minetest.get_node(new_pos) - local mboo = substr(node_above.name, strlen(node_above.name) - 3, strlen(node_above.name)) + local bamboo_node = substr(node_above.name, 1, strlen(bamboo)) local istack = ItemStack(bamboo) local sound_params = { pos = new_pos, @@ -215,7 +187,7 @@ local bamboo_def = { max_hear_distance = 10, -- default, uses a Euclidean metric } - if node_above and (mboo == "mboo" or mboo == "oo_1" or mboo == "oo_2" or mboo == "oo_3") then + if node_above and (bamboo_node == bamboo and node_above.name ~= "mcl_bamboo:bamboo_endcap") then minetest.remove_node(new_pos) minetest.sound_play(node_sound.dug, sound_params, true) if pr:next(1, DOUBLE_DROP_CHANCE) == 1 then @@ -236,11 +208,25 @@ minetest.register_node(bamboo, bamboo_def) local bamboo_top = table.copy(bamboo_def) bamboo_top.groups = {not_in_creative_inventory = 1, handy = 1, axey = 1, choppy = 1, flammable = 3} -bamboo_top.tiles = {"mcl_bamboo_flower_pot.png"} -bamboo_top.drawtype = "plantlike" -bamboo_top.paramtype2 = "meshoptions" -bamboo_top.param2 = 34 +bamboo_top.tiles = {"mcl_bamboo_endcap.png"} +bamboo_top.drawtype = "plantlike_rooted" --"plantlike" +--bamboo_top.paramtype2 = "meshoptions" +--bamboo_top.param2 = 2 + +bamboo_top.special_tiles = {{name = "mcl_bamboo_endcap.png"}} bamboo_top.nodebox = nil +bamboo_top.selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.05, 0.5, 0.5}, + } +} +bamboo_top.collision_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.05, 0.5, 0.5}, + } +} bamboo_top.on_place = function(itemstack, _, _) -- Should never occur... but, if it does, then nix it. @@ -286,7 +272,8 @@ minetest.register_node("mcl_bamboo:bamboo_block", bamboo_block_def) local bamboo_stripped_block = table.copy(bamboo_block_def) bamboo_stripped_block.on_rightclick = nil bamboo_stripped_block.description = S("Stripped Bamboo Block") -bamboo_stripped_block.tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_block_stripped.png"} +bamboo_stripped_block.tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", + "mcl_bamboo_bamboo_block_stripped.png"} minetest.register_node("mcl_bamboo:bamboo_block_stripped", bamboo_stripped_block) minetest.register_node("mcl_bamboo:bamboo_plank", { description = S("Bamboo Plank"), @@ -301,10 +288,19 @@ minetest.register_node("mcl_bamboo:bamboo_plank", { _mcl_hardness = 2, }) --- Bamboo Part 2 Base nodes. --- Bamboo alternative node types. Note that the table.copy's are very important! if you use a common node def and --- make changes, even after registering them, the changes overwrite the previous node definitions, and in this case, --- you will end up with 4 nodes all being type 3. +-- Bamboo Part 2 Base nodes. +-- Bamboo Mosaic +local bamboo_mosaic = table.copy(minetest.registered_nodes[bamboo .. "_plank"]) +bamboo_mosaic.tiles = {"mcl_bamboo_bamboo_plank.png"} +bamboo_mosaic.groups = {handy = 1, axey = 1, flammable = 3, fire_encouragement = 5, fire_flammability = 20} +bamboo_mosaic.description = S("Bamboo Mosaic Plank") +bamboo_mosaic._doc_items_longdesc = S("Bamboo Mosaic Plank") +minetest.register_node("mcl_bamboo:bamboo_mosaic", bamboo_mosaic) + +--[[ Bamboo alternative node types. Note that the table.copy's are very important! if you use a common node def and +make changes, even after registering them, the changes overwrite the previous node definitions, and in this case, +you will end up with 4 nodes all being type 3. --]] + local bamboo_one_def = table.copy(bamboo_def) bamboo_one_def.node_box = { type = "fixed", diff --git a/mods/ITEMS/mcl_bamboo/bamboo_items.lua b/mods/ITEMS/mcl_bamboo/bamboo_items.lua index bc91ba2d4..6c8707df3 100644 --- a/mods/ITEMS/mcl_bamboo/bamboo_items.lua +++ b/mods/ITEMS/mcl_bamboo/bamboo_items.lua @@ -18,26 +18,12 @@ local adj_nodes = { -- Due to door fix #2736, doors are displayed backwards. When this is fixed, set this variable to false. local BROKEN_DOORS = true local SIDE_SCAFFOLDING = false -local DEBUG = false local node_sound = mcl_sounds.node_sound_wood_defaults() - --- Bamboo Mosaic -local bamboo_mosaic = table.copy(minetest.registered_nodes[bamboo .. "_plank"]) -bamboo_mosaic.tiles = {"mcl_bamboo_bamboo_plank.png"} -bamboo_mosaic.groups = {handy = 1, axey = 1, flammable = 3, fire_encouragement = 5, fire_flammability = 20} -bamboo_mosaic.description = S("Bamboo Mosaic Plank") -bamboo_mosaic._doc_items_longdesc = S("Bamboo Mosaic Plank") -minetest.register_node("mcl_bamboo:bamboo_mosaic", bamboo_mosaic) - - - -- specific bamboo nodes (Items)... Pt. 1 if minetest.get_modpath("mcl_flowerpots") then - if DEBUG then - minetest.log("mcl_bamboo::FlowerPot Section Entrance. Modpath exists.") - end + mcl_bamboo.mcl_log("FlowerPot Section Entrance. Modpath exists.") if mcl_flowerpots ~= nil then -- Flower-potted Bamboo... local flwr_name = "mcl_bamboo:bamboo" @@ -195,9 +181,7 @@ if minetest.get_modpath("mesecons_pressureplates") then end if minetest.get_modpath("mcl_signs") then - if DEBUG then - minetest.log("mcl_bamboo::Signs Section Entrance. Modpath exists.") - end + mcl_bamboo.mcl_log("Signs Section Entrance. Modpath exists.") if mcl_signs ~= nil then -- Bamboo Signs... mcl_signs.register_sign_custom("mcl_bamboo", "_bamboo", "mcl_signs_sign_greyscale.png", @@ -209,9 +193,8 @@ if minetest.get_modpath("mcl_signs") then end if minetest.get_modpath("mcl_fences") then - if DEBUG then - minetest.log("mcl_bamboo::Fences Section Entrance. Modpath exists.") - end + mcl_bamboo.mcl_log("Fences Section Entrance. Modpath exists.") + local id = "bamboo_fence" local id_gate = "bamboo_fence_gate" local wood_groups = {handy = 1, axey = 1, flammable = 2, fence_wood = 1, fire_encouragement = 5, fire_flammability = 20} @@ -222,10 +205,8 @@ if minetest.get_modpath("mcl_fences") then local gate_id = mcl_fences.register_fence_gate(id, S("Bamboo Fence Gate"), "mcl_bamboo_fence_gate_bamboo.png", wood_groups, 2, 15, node_sound) -- note: about missing params.. will use defaults. - if DEBUG then - minetest.log(dump(fence_id)) - minetest.log(dump(gate_id)) - end + mcl_bamboo.mcl_log(dump(fence_id)) + mcl_bamboo.mcl_log(dump(gate_id)) local craft_wood = "mcl_bamboo:bamboo_plank" minetest.register_craft({ @@ -329,18 +310,13 @@ minetest.register_node("mcl_bamboo:scaffolding", { return itemstack end end - if DEBUG then - minetest.log("mcl_bamboo::Checking for protected placement of scaffolding.") - end + mcl_bamboo.mcl_log("Checking for protected placement of scaffolding.") local node = minetest.get_node(ptd.under) local pos = ptd.under if mcl_bamboo.is_protected(pos, placer) then return end - if DEBUG then - minetest.log("mcl_bamboo::placement of scaffolding is not protected.") - end - + mcl_bamboo.mcl_log("placement of scaffolding is not protected.") --place on solid nodes if itemstack:get_name() ~= node.name then minetest.set_node(ptd.above, {name = scaff_node_name, param2 = 0}) diff --git a/mods/ITEMS/mcl_bamboo/globals.lua b/mods/ITEMS/mcl_bamboo/globals.lua index d5db13fb3..cace016a9 100644 --- a/mods/ITEMS/mcl_bamboo/globals.lua +++ b/mods/ITEMS/mcl_bamboo/globals.lua @@ -13,6 +13,11 @@ local strlen = string.len local substr = string.sub local rand = math.random math.randomseed((os.time() + 31) * 31415) -- try to make a valid seed +local BAMBOO_MAX_HEIGHT = 16 -- base height check. + +local BAMBOO_SOIL_DIST = BAMBOO_MAX_HEIGHT * -1 +local BAM_MAX_HEIGHT_STPCHK = BAMBOO_MAX_HEIGHT - 5 +local BAM_MAX_HEIGHT_TOP = BAMBOO_MAX_HEIGHT - 1 --Bamboo can be planted on moss blocks, grass blocks, dirt, coarse dirt, rooted dirt, gravel, mycelium, podzol, sand, red sand, or mud mcl_bamboo.bamboo_dirt_nodes = { @@ -40,9 +45,6 @@ function mcl_bamboo.is_protected(pos, placer) end function mcl_bamboo.grow_bamboo(pos, _) - local BAMBOO_SOIL_DIST = -16 - local BAM_MAX_HEIGHT_STPCHK = 11 - local BAM_MAX_HEIGHT_TOP = 15 local chk_pos local soil_pos @@ -130,3 +132,12 @@ function mcl_bamboo.add_groups(name, ...) addall(...) return minetest.override_item(name, {groups = groups}) end + +function mcl_bamboo.mcl_log(m, l) + if DEBUG then + if not l then + minetest.log("[mcl_bamboo]: " .. m) + end + minetest.log(l, "[mcl_bamboo]: " .. m) + end +end diff --git a/mods/ITEMS/mcl_bamboo/init.lua b/mods/ITEMS/mcl_bamboo/init.lua index 93191f49c..20ef64ecf 100644 --- a/mods/ITEMS/mcl_bamboo/init.lua +++ b/mods/ITEMS/mcl_bamboo/init.lua @@ -47,8 +47,7 @@ minetest.register_alias("mcl_scaffolding:scaffolding_horizontal", "mcl_bamboo:sc --[[ todo -- make scaffolds do side scaffold blocks, so that they jut out. todo -- Also, make those blocks collapse (break) when a nearby connected scaffold breaks. -todo -- Add Flourish to the endcap node for bamboo. Fix the flourish to not look odd or plain. -todo -- mash all of that together so that it drops as one item. +todo -- fix the random height for bamboo. Use metadata for storing the height, on_place. todo -- fix scaffolding placing, instead of using on_rightclick first. waiting on specific things: diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_endcap.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_endcap.png index dea7059b4d94cc7b814f071c45d021469288d7c1..c278fc62f41d953730be652ac76543991691e7a4 100644 GIT binary patch delta 140 zcmZ3>-pDjTnUf(Qz$e6&fq`+NW^Bdp_m7V;0NEu$e!&b5&u*jvIsTq5jv*3~tOpr+ zfxJTsO*NbAy%}>hFs|6hv|t-k!#0K+H*PSPrm_aC7TpjSy>X#i^qK{38=10Baha`J rn-siaZGg#^*4A5FQngoHyQal=(~Ms-t64(?Xc&X1tDnm{r-UW|B7QP3 delta 830 zcmV-E1Ht@(0<8y-BL)K2P)t-skt|(*L5%=HivmTE07#7(Ns$6el?F_e08N+$P?!Kv zm<3Ro22h#;QJMf!mLF1^08*O*R-Oe{lL%Lx09T#>Se*e_p8;5(2Uws2T$mPInHOE7 z3|^xPV3`_Voe^W68fBprW~dHmq9kjmE^(+rajhzGt`c#v8g;T1b+Z?EupW4Svm1J} z6neB7dbAsQv@m;w9ec7Zd$S;Wv>SW1AAGhMeVj*qus(gVIDNAw={paBY(Ihf4U}ss#JitCxNq7g1R+>vQLA$F@&{3h_^|Ix0*QzfO|AWs<;uT9Uy;lEF@syZMVrKGoWf+B#!#HbSe(a7oX1O?%1xfETAs&Yp2<*up3GXG$w#2X zW1z`Zpv+pK#b%+(W1_}%qR48Z%U`0)V57)pqs(5U%Vng?YoyFzq|9rjuVAIjW2Vnx zr?Y0K%4(;~ai`5>r_N!g&TOa8YpAecsI_LOwq~ieXsOL(s^}UHXO#wd_lerp@v_uam3P7PSnP^O+(g7|V zWEV7z5`dK6@X-Ye?(RL2N@|G+w%b%C;$Ke07*qo IM6N<$f?hY9jsO4v