From ca1a46efa7cacff29d6d8da4f8a89402b0a35248 Mon Sep 17 00:00:00 2001 From: Michieal Date: Tue, 13 Dec 2022 23:32:54 -0500 Subject: [PATCH] A complete re-upload of https://git.minetest.land/MineClone2/MineClone2/pulls/3120 Doing this to just fix it. --- mods/ITEMS/REDSTONE/mesecons_button/init.lua | 4 +- mods/ITEMS/mcl_bamboo/README.md | 19 + mods/ITEMS/mcl_bamboo/init.lua | 774 ++++++++++++++++++ mods/ITEMS/mcl_bamboo/locale/template.txt | 36 + mods/ITEMS/mcl_bamboo/mapgen.lua | 60 ++ mods/ITEMS/mcl_bamboo/mod.conf | 4 + .../backup/mcl_bamboo_door_bottom.png | Bin 0 -> 1967 bytes .../textures/backup/mcl_bamboo_door_top.png | Bin 0 -> 1990 bytes .../textures/backup/mcl_bamboo_door_wield.png | Bin 0 -> 3920 bytes .../mcl_bamboo/textures/mcl_bamboo_bamboo.png | Bin 0 -> 551 bytes .../textures/mcl_bamboo_bamboo_block.png | Bin 0 -> 375 bytes .../mcl_bamboo_bamboo_block_stripped.png | Bin 0 -> 375 bytes .../textures/mcl_bamboo_bamboo_bottom.png | Bin 0 -> 516 bytes .../textures/mcl_bamboo_bamboo_fpm.png | Bin 0 -> 335 bytes .../textures/mcl_bamboo_bamboo_plank.png | Bin 0 -> 427 bytes .../textures/mcl_bamboo_bamboo_shoot.png | Bin 0 -> 189 bytes .../textures/mcl_bamboo_door_bottom.png | Bin 0 -> 1967 bytes .../textures/mcl_bamboo_door_bottom_alt.png | Bin 0 -> 1966 bytes .../textures/mcl_bamboo_door_top.png | Bin 0 -> 1990 bytes .../textures/mcl_bamboo_door_top_alt.png | Bin 0 -> 1982 bytes .../textures/mcl_bamboo_door_wield.png | Bin 0 -> 1394 bytes .../textures/mcl_bamboo_fence_bamboo.png | Bin 0 -> 388 bytes .../textures/mcl_bamboo_fence_gate_bamboo.png | Bin 0 -> 371 bytes .../textures/mcl_bamboo_flower_pot.png | Bin 0 -> 901 bytes .../mcl_bamboo_scaffolding_bottom.png | Bin 0 -> 205 bytes .../textures/mcl_bamboo_scaffolding_top.png | Bin 0 -> 244 bytes .../textures/mcl_bamboo_trapdoor_side.png | Bin 0 -> 650 bytes .../textures/mcl_bamboo_trapdoor_top.png | Bin 0 -> 628 bytes .../textures/mcl_bamboo_trapdoor_wield.png | Bin 0 -> 684 bytes 29 files changed, 895 insertions(+), 2 deletions(-) create mode 100644 mods/ITEMS/mcl_bamboo/README.md create mode 100644 mods/ITEMS/mcl_bamboo/init.lua create mode 100644 mods/ITEMS/mcl_bamboo/locale/template.txt create mode 100644 mods/ITEMS/mcl_bamboo/mapgen.lua create mode 100644 mods/ITEMS/mcl_bamboo/mod.conf create mode 100644 mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_bottom.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_top.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_wield.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_block.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_block_stripped.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_bottom.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_fpm.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_plank.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_shoot.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_bottom.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_bottom_alt.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_top.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_top_alt.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_wield.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_fence_bamboo.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_fence_gate_bamboo.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_flower_pot.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_scaffolding_bottom.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_scaffolding_top.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_trapdoor_side.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_trapdoor_top.png create mode 100644 mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_trapdoor_wield.png diff --git a/mods/ITEMS/REDSTONE/mesecons_button/init.lua b/mods/ITEMS/REDSTONE/mesecons_button/init.lua index fb01b7bb7..fd765eded 100644 --- a/mods/ITEMS/REDSTONE/mesecons_button/init.lua +++ b/mods/ITEMS/REDSTONE/mesecons_button/init.lua @@ -112,7 +112,7 @@ function mesecon.register_button(basename, description, texture, recipeitem, sou if push_by_arrow then tt = tt .. "\n" .. S("Pushable by arrow") end - minetest.register_node("mesecons_button:button_"..basename.."_off", { + minetest.register_node(":mesecons_button:button_"..basename.."_off", { drawtype = "nodebox", tiles = {texture}, wield_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", @@ -147,7 +147,7 @@ function mesecon.register_button(basename, description, texture, recipeitem, sou _mcl_hardness = 0.5, }) - minetest.register_node("mesecons_button:button_"..basename.."_on", { + minetest.register_node(":mesecons_button:button_"..basename.."_on", { drawtype = "nodebox", tiles = {texture}, wield_image = "mesecons_button_wield_mask.png^"..texture.."^mesecons_button_wield_mask.png^[makealpha:255,126,126", diff --git a/mods/ITEMS/mcl_bamboo/README.md b/mods/ITEMS/mcl_bamboo/README.md new file mode 100644 index 000000000..e330cf202 --- /dev/null +++ b/mods/ITEMS/mcl_bamboo/README.md @@ -0,0 +1,19 @@ +mcl_bamboo +========= + +This mod adds simple bamboo nodes to your Mineclone 2 world. + +Code redo for Mineclone 2: Michieal. Original bamboo code by: Krock. + +License for code: GPL3; images / textures: CC-BY-SA. +Images Created by Michieal, except for: +Inventory / wield image: created by RandomLegoBrick#8692 and is CC0. + +Dependencies: mcl_core, mcl_sounds, mcl_tools + +Optional Dependencies = mcl_flowerpots, mclx_stairs, mcl_doors, mcl_signs, mesecons_pressureplates, mcl_fences, mesecons_button + +Special thanks to Nicu for help with the nodebox stalk design. + +Original code's forum topic: +Forum topic: https://forum.minetest.net/viewtopic.php?id=8289 \ No newline at end of file diff --git a/mods/ITEMS/mcl_bamboo/init.lua b/mods/ITEMS/mcl_bamboo/init.lua new file mode 100644 index 000000000..41bbe1c9b --- /dev/null +++ b/mods/ITEMS/mcl_bamboo/init.lua @@ -0,0 +1,774 @@ +-- [bamboo] mod by Krock, modified by SmallJoker, Made for MineClone 2 by Michieal (as mcl_bamboo). +-- Parts of mcl_scaffolding were used. Mcl_scaffolding originally created by Cora; modified for mcl_bamboo by Michieal. +-- Creation date: 12-01-2022 (Dec 1st, 2022) +-- License for everything: GPL3 +-- Bamboo max height: 12-16 + +-- LOCALS +local modname = minetest.get_current_modname() +local S = minetest.get_translator(modname) +local bamboo = "mcl_bamboo:bamboo" +local adj_nodes = { + vector.new(0, 0, 1), + vector.new(0, 0, -1), + vector.new(1, 0, 0), + vector.new(-1, 0, 0), +} +local node_sound = mcl_sounds.node_sound_wood_defaults() + +-- CONSTS +local SIDE_SCAFFOLDING = false +local MAKE_STAIRS = true +local DEBUG = false +local USE_END_CAPS = false + +-- Due to door fix #2736, doors are displayed backwards. When this is fixed, set this variable to false. +local BROKEN_DOORS = true + +-- LOCAL FUNCTIONS +local function create_nodes() + + local bamboo_def= { + description = "Bamboo", + tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo.png"}, + drawtype = "nodebox", + paramtype = "light", + groups = {handy = 1, axey = 1, choppy = 1, flammable = 3}, + sounds = node_sound, + drops = "mcl_bamboo:bamboo", + inventory_image = "mcl_bamboo_bamboo_shoot.png", + wield_image = "mcl_bamboo_bamboo_shoot.png", + _mcl_blast_resistance = 1, + _mcl_hardness = 2, + node_box = { + type = "fixed", + fixed = { + -- {0.1875, -0.5, -0.125, 0.4125, 0.5, 0.0625}, + -- {-0.125, -0.5, 0.125, -0.3125, 0.5, 0.3125}, + -- {-0.25, -0.5, -0.3125, 0, 0.5, -0.125}, + {-0.175, -0.5, -0.195, 0.05, 0.5, 0.030}, + } + }, + + --[[ + Node Box definitions for alternative styles. + {-0.05, -0.5, 0.285, -0.275, 0.5, 0.06}, + {0.25, -0.5, 0.325, 0.025, 0.5, 0.100}, + {-0.125, -0.5, 0.125, -0.3125, 0.5, 0.3125}, + --]] + + on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + local node = minetest.get_node(pointed_thing.under) + local pos = pointed_thing.under + if DEBUG then + minetest.log("mcl_bamboo::Node placement data:") + minetest.log(dump(pointed_thing)) + minetest.log(dump(node)) + end + + if DEBUG then + minetest.log("mcl_bamboo::Checking for protected placement of bamboo.") + end + local pname = placer:get_player_name() + if minetest.is_protected(pos, pname) then + minetest.record_protection_violation(pos, pname) + return + end + if DEBUG then + minetest.log("mcl_bamboo::placement of bamboo is not protected.") + end + + -- 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 + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + + if node.name ~= "mcl_bamboo:bamboo" then + if node.name ~= "mcl_flowerpots:flower_pot" then + if minetest.get_item_group(node.name, "dirt") == 0 then + return itemstack + end + end + end + + if DEBUG then + minetest.log("mcl_bamboo::placing bamboo directly.") + end + return minetest.item_place(itemstack, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + + end, + + on_destruct = function(pos) + -- Node destructor; called before removing node. + local new_pos = vector.offset(pos, 0, 1, 0) + local node_above = minetest.get_node(new_pos) + if node_above and node_above.name == "mcl_bamboo:bamboo" then + if node_above and node_above.name == "mcl_bamboo:bamboo" then + local sound_params = { + pos = new_pos, + gain = 1.0, -- default + max_hear_distance = 10, -- default, uses a Euclidean metric + } + + minetest.remove_node(new_pos) + minetest.sound_play(node_sound.dug, sound_params, true) + local istack = ItemStack("mcl_bamboo:bamboo") + minetest.add_item(new_pos, istack) + end + end + end, + } + minetest.register_node("mcl_bamboo: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.on_place = function(itemstack, placer, pointed_thing) + if pointed_thing.type ~= "node" then + return itemstack + end + local node = minetest.get_node(pointed_thing.under) + local pos = pointed_thing.under + if DEBUG then + minetest.log("mcl_bamboo::Node placement data:") + minetest.log(dump(pointed_thing)) + minetest.log(dump(node)) + end + + if DEBUG then + minetest.log("mcl_bamboo::Checking for protected placement of bamboo.") + end + local pname = placer:get_player_name() + if pname then + if minetest.is_protected(pos, pname) then + minetest.record_protection_violation(pos, pname) + return + end + --not for player use. + if minetest.is_creative_enabled(pname) == false then + itemstack:set_count(0) + return itemstack + end + end + if DEBUG then + minetest.log("mcl_bamboo::placement of bamboo is not protected.") + end + + if node.name ~= "mcl_bamboo:bamboo" then + return itemstack + end + + if DEBUG then + minetest.log("mcl_bamboo::placing bamboo directly.") + end + return minetest.item_place(itemstack, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + end, + + minetest.register_node("mcl_bamboo:bamboo_top", bamboo_top) + + local bamboo_block_def = { + description = "Bamboo Block", + tiles = {"mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_bottom.png", "mcl_bamboo_bamboo_block.png"}, + groups = {handy = 1, building_block = 1, axey = 1, flammable = 2, material_wood = 1, fire_encouragement = 5, fire_flammability = 5}, + sounds = node_sound, + paramtype2 = "facedir", + drops = "mcl_bamboo:bamboo_block", + _mcl_blast_resistance = 3, + _mcl_hardness = 2, + _mcl_stripped_variant = "mcl_bamboo:bamboo_block_stripped", -- this allows us to use the built in Axe's strip block. + on_place = function(itemstack, placer, pointed_thing) + + local pos = pointed_thing.under + + local pname = placer:get_player_name() + if minetest.is_protected(pos, pname) then + minetest.record_protection_violation(pos, pname) + return + end + + -- Use pointed node's on_rightclick function first, if present + local node = minetest.get_node(pointed_thing.under) + 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 + return minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack + end + end + + return minetest.item_place(itemstack, placer, pointed_thing, minetest.dir_to_facedir(vector.direction(pointed_thing.above, pointed_thing.under))) + end, + + } + + -- basic bamboo nodes. + 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 = "Bamboo Block" + 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"), + _doc_items_longdesc = S("Bamboo Plank"), + _doc_items_hidden = false, + tiles = {"mcl_bamboo_bamboo_plank.png"}, + stack_max = 64, + is_ground_content = false, + groups = {handy = 1, axey = 1, flammable = 3, wood = 1, building_block = 1, material_wood = 1, fire_encouragement = 5, fire_flammability = 20}, + sounds = mcl_sounds.node_sound_wood_defaults(), + _mcl_blast_resistance = 3, + _mcl_hardness = 2, + }) + + -- specific bamboo nodes... + if minetest.get_modpath("mcl_flowerpots") then + if DEBUG then + minetest.log("mcl_bamboo::FlowerPot Section Entrance. Modpath exists.") + end + if mcl_flowerpots ~= nil then + -- Flower-potted Bamboo... + local flwr_name = "mcl_bamboo:bamboo" + local flwr_def = {name = "bamboo_plant", + desc = S("Bamboo"), + image = "mcl_bamboo_bamboo_fpm.png", -- use with "register_potted_cube" + -- "mcl_bamboo_flower_pot.png", -- use with "register_potted_flower" + } + + mcl_flowerpots.register_potted_cube(flwr_name, flwr_def) + -- mcl_flowerpots.register_potted_flower(flwr_name, flwr_def) + minetest.register_alias("bamboo_flower_pot", "mcl_flowerpots:flower_pot_bamboo_plant") + end + end + + if minetest.get_modpath("mcl_doors") then + if mcl_doors then + local top_door_tiles = {} + local bot_door_tiles = {} + + if BROKEN_DOORS then + top_door_tiles = {"mcl_bamboo_door_top_alt.png", "mcl_bamboo_door_top.png"} + bot_door_tiles = {"mcl_bamboo_door_bottom_alt.png", "mcl_bamboo_door_bottom.png"} + else + top_door_tiles = {"mcl_bamboo_door_top.png", "mcl_bamboo_door_top.png"} + bot_door_tiles = {"mcl_bamboo_door_bottom.png", "mcl_bamboo_door_bottom.png"} + end + + local name = "mcl_bamboo:bamboo_door" + local def = { + description = S("Bamboo Door."), + inventory_image = "mcl_bamboo_door_wield.png", + wield_image = "mcl_bamboo_door_wield.png", + groups = {handy = 1, axey = 1, material_wood = 1, flammable = -1}, + _mcl_hardness = 3, + _mcl_blast_resistance = 3, + tiles_bottom = bot_door_tiles, + tiles_top = top_door_tiles, + sounds = mcl_sounds.node_sound_wood_defaults(), + } + + --[[ Registers a door + -- name: The name of the door + -- def: a table with the folowing fields: + -- description + -- inventory_image + -- groups + -- tiles_bottom: the tiles of the bottom part of the door {front, side} + -- tiles_top: the tiles of the bottom part of the door {front, side} + -- If the following fields are not defined the default values are used + -- node_box_bottom + -- node_box_top + -- selection_box_bottom + -- selection_box_top + -- only_placer_can_open: if true only the player who placed the door can + -- open it + -- only_redstone_can_open: if true, the door can only be opened by redstone, + -- not by rightclicking it + --]] + + mcl_doors:register_door(name, def) + + name = "mcl_bamboo:bamboo_trapdoor" + local trap_def = { + description = S("Bamboo Trapdoor."), + inventory_image = "mcl_bamboo_door_complete.png", + groups = {}, + tile_front = "mcl_bamboo_trapdoor_top.png", + tile_side = "mcl_bamboo_trapdoor_side.png", + _doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."), + _doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."), + wield_image = "mcl_bamboo_trapdoor_wield.png", + inventory_image = "mcl_bamboo_trapdoor_wield.png", + groups = {handy = 1, axey = 1, mesecon_effector_on = 1, material_wood = 1, flammable = -1}, + _mcl_hardness = 3, + _mcl_blast_resistance = 3, + sounds = mcl_sounds.node_sound_wood_defaults(), + } + + mcl_doors:register_trapdoor(name, trap_def) + + minetest.register_alias("bamboo_door", "mcl_bamboo:bamboo_door") + minetest.register_alias("bamboo_trapdoor", "mcl_bamboo:bamboo_trapdoor") + end + end + + if MAKE_STAIRS then + if minetest.get_modpath("mcl_stairs") then + if mcl_stairs ~= nil then + mcl_stairs.register_stair_and_slab_simple( + "bamboo_block", + "mcl_bamboo:bamboo_block", + S("Bamboo Stair"), + S("Bamboo Slab"), + S("Double Bamboo Slab") + ) + mcl_stairs.register_stair_and_slab_simple( + "bamboo_stripped", + "mcl_bamboo:bamboo_block_stripped", + S("Stripped Bamboo Stair"), + S("Stripped Bamboo Slab"), + S("Double Stripped Bamboo Slab") + ) + mcl_stairs.register_stair_and_slab_simple( + "bamboo_plank", + "mcl_bamboo:bamboo_plank", + S("Bamboo Plank Stair"), + S("Bamboo Plank Slab"), + S("Double Bamboo Plank Slab") + ) + end + end + end + + if minetest.get_modpath("mesecons_pressureplates") then + + if mesecon ~= nil and mesecon.register_pressure_plate ~= nil then + -- make sure that pressure plates are installed. + + -- Bamboo Pressure Plate... + + -- Register a Pressure Plate (api command doc.) + -- basename: base name of the pressure plate + -- description: description displayed in the player's inventory + -- textures_off:textures of the pressure plate when inactive + -- textures_on: textures of the pressure plate when active + -- image_w: wield image of the pressure plate + -- image_i: inventory image of the pressure plate + -- recipe: crafting recipe of the pressure plate + -- sounds: sound table (like in minetest.register_node) + -- plusgroups: group memberships (attached_node=1 and not_in_creative_inventory=1 are already used) + -- activated_by: optimal table with elements denoting by which entities this pressure plate is triggered + -- Possible table fields: + -- * player=true: Player + -- * mob=true: Mob + -- By default, is triggered by all entities + -- longdesc: Customized long description for the in-game help (if omitted, a dummy text is used) + + mesecon.register_pressure_plate( + "mcl_bamboo:pressure_plate_bamboo_wood", + S("Bamboo Pressure Plate"), + {"mcl_bamboo_bamboo_plank.png"}, + {"mcl_bamboo_bamboo_plank.png"}, + "mcl_bamboo_bamboo_plank.png", + nil, + {{"mcl_bamboo:bamboo_plank", "mcl_bamboo:bamboo_plank"}}, + mcl_sounds.node_sound_wood_defaults(), + {axey = 1, material_wood = 1}, + nil, + S("A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.")) + + minetest.register_craft({ + type = "fuel", + recipe = "mcl_bamboo:pressure_plate_bamboo_wood_off", + burntime = 15 + }) + minetest.register_alias("bamboo_pressure_plate", "mcl_bamboo:pressure_plate_bamboo_wood") + + end + end + + if minetest.get_modpath("mcl_signs") then + if DEBUG then + minetest.log("mcl_bamboo::Signs Section Entrance. Modpath exists.") + end + if mcl_signs ~= nil then + -- Bamboo Signs... + mcl_signs.register_sign_custom("mcl_bamboo", "_bamboo", "mcl_signs_sign_greyscale.png", + "#f6dc91", "default_sign_greyscale.png", "default_sign_greyscale.png", + S("Bamboo Sign")) + mcl_signs.register_sign_craft("mcl_bamboo", "mcl_bamboo:bamboo_plank", "_bamboo") + minetest.register_alias("bamboo_sign", "mcl_signs:wall_sign_bamboo") + end + end + + if minetest.get_modpath("mcl_fences") then + if DEBUG then + minetest.log("mcl_bamboo::Fences Section Entrance. Modpath exists.") + end + 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} + local wood_connect = {"group:fence_wood"} + + local fence_id = mcl_fences.register_fence(id, S("Bamboo Fence"), "mcl_bamboo_fence_bamboo.png", wood_groups, + 2, 15, wood_connect, node_sound) + 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 + + local craft_wood = "mcl_bamboo:bamboo_plank" + minetest.register_craft({ + output = "mcl_bamboo:" .. id .. " 3", + recipe = { + {craft_wood, "mcl_core:stick", craft_wood}, + {craft_wood, "mcl_core:stick", craft_wood}, + } + }) + minetest.register_craft({ + output = "mcl_bamboo:" .. id_gate, + recipe = { + {"mcl_core:stick", craft_wood, "mcl_core:stick"}, + {"mcl_core:stick", craft_wood, "mcl_core:stick"}, + } + }) + -- mcl_fences.register_fence("nether_brick_fence", S("Nether Brick Fence"), "mcl_fences_fence_nether_brick.png", {pickaxey=1, deco_block=1, fence_nether_brick=1}, 2, 30, {"group:fence_nether_brick"}, mcl_sounds.node_sound_stone_defaults()) + minetest.register_alias("bamboo_fence", "mcl_fences:" .. id) + minetest.register_alias("bamboo_fence_gate", "mcl_fences:" .. id_gate) + end + + if minetest.get_modpath("mesecons_button") then + if mesecon ~= nil then + mesecon.register_button( + "bamboo", + S("Bamboo Button"), + "mcl_bamboo_bamboo_plank.png", + "mcl_bamboo:bamboo_plank", + node_sound, + {material_wood = 1, handy = 1, pickaxey = 1}, + 1, + false, + S("A bamboo button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second."), + "mesecons_button_push") + end + end + + minetest.register_node("mcl_bamboo:scaffolding", { + description = S("Scaffolding"), + doc_items_longdesc = S("Scaffolding block used to climb up or out across areas."), + doc_items_hidden = false, + tiles = {"mcl_bamboo_scaffolding_top.png", "mcl_bamboo_scaffolding_top.png", "mcl_bamboo_scaffolding_bottom.png"}, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + }, + buildable_to = false, + is_ground_content = false, + walkable = false, + climbable = true, + physical = true, + node_placement_prediction = "", + groups = {handy = 1, axey = 1, flammable = 3, building_block = 1, material_wood = 1, fire_encouragement = 5, fire_flammability = 20, falling_node = 1, stack_falling = 1}, + sounds = mcl_sounds.node_sound_wood_defaults(), + _mcl_blast_resistance = 0, + _mcl_hardness = 0, + on_place = function(itemstack, placer, ptd) + if SIDE_SCAFFOLDING then + -- count param2 up when placing to the sides. Fall when > 6 + local ctrl = placer:get_player_control() + if ctrl and ctrl.sneak then + local pp2 = minetest.get_node(ptd.under).param2 + local np2 = pp2 + 1 + if minetest.get_node(vector.offset(ptd.above, 0, -1, 0)).name == "air" then + minetest.set_node(ptd.above, {name = "mcl_bamboo:scaffolding_horizontal", param2 = np2}) + itemstack:take_item(1) + end + if np2 > 6 then + minetest.check_single_for_falling(ptd.above) + end + return itemstack + end + end + + --place on solid nodes + local node = minetest.get_node(ptd.under) + if itemstack:get_name() ~= node.name then + minetest.set_node(ptd.above, {name = "mcl_bamboo:scaffolding", param2 = 0}) + itemstack:take_item(1) + return itemstack + end + + --build up when placing on existing scaffold + local h = 0 + local pos = ptd.under + repeat + pos.y = pos.y + 1 + h = h + 1 + local cn = minetest.get_node(pos) + if cn.name == "air" then + minetest.set_node(pos, node) + itemstack:take_item(1) + placer:set_wielded_item(itemstack) + return itemstack + end + until cn.name ~= node.name or h >= 32 + end, + on_destruct = function(pos) + -- Node destructor; called before removing node. + local new_pos = vector.offset(pos, 0, 1, 0) + local node_above = minetest.get_node(new_pos) + if node_above and node_above.name == "mcl_bamboo:scaffolding" then + if node_above and node_above.name == "mcl_bamboo:scaffolding" then + local sound_params = { + pos = new_pos, + gain = 1.0, -- default + max_hear_distance = 10, -- default, uses a Euclidean metric + } + + minetest.remove_node(new_pos) + minetest.sound_play(node_sound.dug, sound_params, true) + local istack = ItemStack("mcl_bamboo:scaffolding") + minetest.add_item(new_pos, istack) + end + end + end, + + }) + + if SIDE_SCAFFOLDING then + --currently, disabled. + minetest.register_node("mcl_bamboo:scaffolding_horizontal", { + description = S("Scaffolding (horizontal)"), + doc_items_longdesc = S("Scaffolding block used to climb up or out across areas."), + doc_items_hidden = false, + tiles = {"mcl_bamboo_scaffolding_top.png", "mcl_bamboo_scaffolding_top.png", "mcl_bamboo_scaffolding_bottom.png"}, + drawtype = "nodebox", + paramtype = "light", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.375, 0.5, -0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, -0.375}, + {0.375, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, 0.375, -0.375, 0.5, 0.5}, + {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, + } + }, + selection_box = { + type = "fixed", + fixed = { + {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, + }, + }, + groups = {handy = 1, axey = 1, flammable = 3, building_block = 1, material_wood = 1, fire_encouragement = 5, fire_flammability = 20, not_in_creative_inventory = 1, falling_node = 1}, + _mcl_after_falling = function(pos) + if minetest.get_node(pos).name == "mcl_bamboo:scaffolding_horizontal" then + if minetest.get_node(vector.offset(pos, 0, 0, 0)).name ~= "mcl_bamboo:scaffolding" then + minetest.remove_node(pos) + minetest.add_item(pos, "mcl_bamboo:scaffolding") + else + minetest.set_node(vector.offset(pos, 0, 1, 0), {name = "mcl_bamboo:scaffolding"}) + end + end + end + }) + end +end + +local function register_craftings() + -- Craftings + + minetest.register_craft({ + output = bamboo .. "_block", + recipe = { + {bamboo, bamboo, bamboo}, + {bamboo, bamboo, bamboo}, + {bamboo, bamboo, bamboo}, + } + }) + + minetest.register_craft({ + output = bamboo .. "_plank 2", + recipe = { + {bamboo .. "_block"}, + } + }) + + minetest.register_craft({ + output = "mcl_core:stick", + recipe = { + {bamboo}, + {bamboo}, + } + }) + + minetest.register_craft({ + output = "mcl_bamboo:scaffolding 6", + recipe = {{bamboo, "mcl_mobitems:string", bamboo}, + {bamboo, "", bamboo}, + {bamboo, "", bamboo}} + }) + + minetest.register_craft({ + output = "mcl_bamboo:bamboo_door 3", + recipe = { + {bamboo .. "_plank", bamboo .. "_plank"}, + {bamboo .. "_plank", bamboo .. "_plank"}, + {bamboo .. "_plank", bamboo .. "_plank"} + } + }) + + minetest.register_craft({ + output = "mcl_bamboo:bamboo_trapdoor 2", + recipe = { + {bamboo .. "_plank", bamboo .. "_plank", bamboo .. "_plank"}, + {bamboo .. "_plank", bamboo .. "_plank", bamboo .. "_plank"}, + } + }) + + -- Fuels + minetest.register_craft({ + type = "fuel", + recipe = "mcl_bamboo:bamboo_door", + burntime = 10, + }) + + minetest.register_craft({ + type = "fuel", + recipe = "mcl_bamboo:bamboo_trapdoor", + burntime = 15, + }) + + minetest.register_craft({ + type = "fuel", + recipe = bamboo, + burntime = 2.5, -- supposed to be 1/2 that of a stick, per minecraft wiki as of JE 1.19.3 + }) + + minetest.register_craft({ + type = "fuel", + recipe = bamboo .. "_block", + burntime = 15, + }) + + minetest.register_craft({ + type = "fuel", + recipe = bamboo .. "_block_stripped", + burntime = 15, + }) + + minetest.register_craft({ + type = "fuel", + recipe = bamboo .. "_plank", + burntime = 7.5, + }) + + minetest.register_craft({ + type = "fuel", + recipe = "mcl_bamboo:scaffolding", + burntime = 20 + }) +end + +create_nodes() +register_craftings() + +-- MAPGEN +dofile(minetest.get_modpath(modname) .. "/mapgen.lua") + +--ABMs +minetest.register_abm({ + nodenames = {"mcl_bamboo:bamboo"}, + interval = 40, + chance = 40, + action = function(pos, node) + local soil_pos = nil + if minetest.get_node_light(pos) < 8 then + return + end + local found_soil = false + for py = -1, -16, -1 do + local chk_pos = vector.offset(pos, 0, py, 0) + local name = minetest.get_node(chk_pos).name + if minetest.get_item_group(name, "soil") ~= 0 then + found_soil = true + soil_pos = chk_pos + break + elseif name ~= "mcl_bamboo:bamboo" then + break + end + end + if not found_soil then + return + end + for py = 1, 14 do + local npos = vector.offset(pos, 0, py, 0) + local name = minetest.get_node(npos).name + if vector.distance(soil_pos, npos) >= 15 then + -- stop growing check. + if USE_END_CAPS then + if name == "air" then + minetest.set_node(npos, {name = "mcl_bamboo:bamboo_top"}) + end + end + break + end + if name == "air" then + minetest.set_node(npos, {name = "mcl_bamboo:bamboo"}) + break + elseif name ~= "mcl_bamboo:bamboo" then + break + end + end + end, +}) + +-- Base Aliases. +minetest.register_alias("bamboo_block", "mcl_bamboo:bamboo_block") +minetest.register_alias("bamboo_strippedblock", "mcl_bamboo:bamboo_block_stripped") +minetest.register_alias("bamboo", "mcl_bamboo:bamboo") +minetest.register_alias("bamboo_plank", "mcl_bamboo:bamboo_plank") + +minetest.register_alias("mcl_stairs:stair_bamboo", "mcl_stairs:stair_bamboo_block") +minetest.register_alias("bamboo:bamboo", "mcl_bamboo:bamboo") + +--[[ +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 in alternative bamboo styles to simulate random placement. (see commented out nde box definitions. +todo -- make endcap node for bamboo, so that they can be 12-16 nodes high and stop growing. +todo -- mash all of that together so that it drops as one item, and chooses what version to be, in on_place. +todo -- Raft +todo -- Raft with Chest. +todo -- Add in Extras. +todo: Added a new "Mosaic" plank variant that is unique to Bamboo called Bamboo Mosaic + It can be crafted with 1x2 Bamboo Slabs in a vertical strip + You can craft Stair and Slab variants of Bamboo Mosaic + Bamboo Mosaic blocks cannot be used as a crafting ingredient where other wooden blocks are used, but they can be + used as fuel. +--]] \ No newline at end of file diff --git a/mods/ITEMS/mcl_bamboo/locale/template.txt b/mods/ITEMS/mcl_bamboo/locale/template.txt new file mode 100644 index 000000000..1701a4a05 --- /dev/null +++ b/mods/ITEMS/mcl_bamboo/locale/template.txt @@ -0,0 +1,36 @@ +# textdomain: mcl_bamboo + + +### init.lua ### + +A bamboo button is a redstone component made out of stone which can be pushed to provide redstone power. When pushed, it powers adjacent redstone components for 1 second.= + +A wooden pressure plate is a redstone component which supplies its surrounding blocks with redstone power while any movable object (including dropped items, players and mobs) rests on top of it.= + +Bamboo= +Bamboo Button= +Bamboo Door.= +Bamboo Fence= +Bamboo Fence Gate= +Bamboo Plank= +Bamboo Plank Slab= +Bamboo Plank Stair= +Bamboo Pressure Plate= +Bamboo Sign= +Bamboo Slab= +Bamboo Stair= +Bamboo Trapdoor.= +Double Bamboo Plank Slab= +Double Bamboo Slab= +Double Stripped Bamboo Slab= +Nether Brick Fence= +Scaffolding= +Scaffolding (horizontal)= +Scaffolding block used to climb up or out across areas.= +Stripped Bamboo Slab= +Stripped Bamboo Stair= + +To open or close the trapdoor, rightclick it or send a redstone signal to it.= + +Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder.= + diff --git a/mods/ITEMS/mcl_bamboo/mapgen.lua b/mods/ITEMS/mcl_bamboo/mapgen.lua new file mode 100644 index 000000000..8fa61ca54 --- /dev/null +++ b/mods/ITEMS/mcl_bamboo/mapgen.lua @@ -0,0 +1,60 @@ +local item_water, item_dirt, item_grass + +item_water = "mcl_core:water_source" +item_dirt = "mcl_core:dirt" +item_grass = "mcl_core:dirt_with_grass" +local function make_bamboo(pos, size) + for y = 0, size - 1 do + local p = {x = pos.x, y = pos.y + y, z = pos.z} + if minetest.get_node(p).name ~= "air" then + return + end + minetest.set_node(p, {name = "mcl_bamboo:bamboo"}) + end +end + +minetest.register_on_generated(function(minp, maxp, seed) + if maxp.y < 2 and minp.y > 0 then + return + end + + local c_grass = minetest.get_content_id(item_grass) + local n_bamboo = minetest.get_perlin(8234, 3, 0.6, 100) + + local vm = minetest.get_voxel_manip() + local emin, emax = vm:read_from_map(minp, maxp) + local area = VoxelArea:new {MinEdge = emin, MaxEdge = emax} + local data = vm:get_data() + + local rand = PseudoRandom(seed % 8000) + for z = minp.z + 2, maxp.z - 2, 4 do + for x = minp.x + 2, maxp.x - 2, 4 do + local bamboo_amount = math.floor(n_bamboo:get_2d({x = x, y = z}) * 7 - 3) + for i = 1, bamboo_amount do + local p_pos = { + x = rand:next(x - 2, x + 2), + y = 0, + z = rand:next(z - 2, z + 2) + } + + local found = false + local node = -1 + for y = 4, 0, -1 do + p_pos.y = y + node = data[area:index(p_pos.x, p_pos.y, p_pos.z)] + if node == c_grass then + found = true + break + end + end + + if found and + minetest.find_node_near(p_pos, 5, {"group:water", item_water}) then + p_pos.y = p_pos.y + 1 + make_bamboo(p_pos, rand:next(4, 12)) + end + end + end + end +end +) diff --git a/mods/ITEMS/mcl_bamboo/mod.conf b/mods/ITEMS/mcl_bamboo/mod.conf new file mode 100644 index 000000000..d4b93a7d9 --- /dev/null +++ b/mods/ITEMS/mcl_bamboo/mod.conf @@ -0,0 +1,4 @@ +name = mcl_bamboo +depends = mcl_core, mcl_sounds, mcl_tools +optional_depends = mcl_flowerpots, mclx_stairs, mcl_doors, mcl_signs, mesecons_pressureplates, mcl_fences, mesecons_button +author = Michieal \ No newline at end of file diff --git a/mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_bottom.png b/mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..286cdd381a2d74b3af8e38d950bca77b07bb524f GIT binary patch literal 1967 zcmV;g2T=HlP){Hd!N1bTHpHKi>FJ1&qJrb`r2D}9v(e-_{OWl7r*{2 zQ+0CZ@b53*{^nm!R~>%-gHM+WesKHnhd+JoZ;$e4Kl;AUedW3J@zLEo$KQVG^e5l> zBm#Hm>-B@fSO4^%WjgrA_g{YLTc3K@GdKSH>%Sg#&0p`H#h<>&F0B# zU*_jvfr!xZdq1#WpPDmqY{koJ+1|T-{+=fmMjlcX0v+AEx7e$@3n%h7-#oqdV0-`Q ztiRaRP4uzvEa>*w`ir=K@9@^VIr!M>UwH|o>~<*-FBY>sK9{nLtU!n{ZU$VRH92Qh zt%e)##PuiReWIc{J3-B~HcLj{0{ z%&e~K7$Zahxcl~^CrWMGTA$sWtAwHOB&9?|FFd{X!iSz;pJ07*yx%U4&M$VQL;x1Y z7J58pMqqLP9_oj8-+J&Z?ShsCk!~Egy+I|&MCbzry&teKU+tqwtgIL-6T-DDJb|YT`FzOg$Bq9LrPPt#1jXxj2tvoakuTIFP24Hjm=FWV&-uiq|dI^ox=@Afo_-8qKq!$4ES=n+~?wY zL2fL?R5~j|%kMu(i!vL>u@rG8+G__Jn#HWDD$7b<#{_kEvlL8}OW@mwo4b#SjKg}{ z58E>K%0$$4T?iqiB+dekP2G({Z0oDnmP}0up=la-UnsY!iZK$AN4`2^5y4|k(}+mF zgDROB5n;lF%H6|Yvs6(dzs?3Zg zBEpkZL_KIAREg^7DLAX;5Q6m`VoyYTDbt70IH(6jZmk>>!IIdKfqsV_gqZ;_vs=||`l3n@H;W{(5>;hp)e=K_;tECeHsZZ5{D zszXf7A`(K_3_FXAiHNv+nh=pqn7OJd07PVF?jB$vIwtOJW+8;8N<{&IQW?F73r7%u zkz#5SKo*&U66R8Y#4BM04b$i!1etr#S})YbjjUS+G4~a>`-zkuHtNF08ZDB z5Ev7lL?Kt!@{ug8}NCfm(ywLyv002ovPDHLkV1nIC BupIyZ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_top.png b/mods/ITEMS/mcl_bamboo/textures/backup/mcl_bamboo_door_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8aba3c825e77c61dc8bcb2603c0f527484932ffd GIT binary patch literal 1990 zcmV;%2RZnOP)^CwQT z^4fV`c;OTeJa&|4fAVP-7D_IhJ5_|9XO- zeff57y?sAt&#v;w!v}fw+!i8gFfp)WC~VEv84XKR4XTR80MLXM6O|BVq?8a5Qr!{_ zETq89*H~-GjYVU^5Wxz@7`*qWM$|%)6aW#S$_h%C;n)^cMO7(^f|L>fDJ4{Ou2e)Z zrUMm1z&VE+Xi1m7aZ#+bgb=XS&d)>yRmC}nwHAq@SR;td+1xT*TNXH%VT>UUJMrlJ07&dc5v>lMV@T8RRK4)4tq%cEci&4cILjsB-qhIBSLJ|-Y z5tDGLN(g~g6OB>&c|J#Z*Jr;73Lm*2tQZQQTE2s~Dcto*xDT)bC5F-NTiJI9VBn&& zmT!S~0WUr9T||T!y3nV8p=GR{51;$ZuSg2sSumifdmyQz z3f>9Y9gvb@MCJfADet}abHut~*0gvFII!x;jK>*=YnldtXbh8$HC(m>H51GwZ2r*w zkG@HO|3RMq&c_s>O*x2SgF%c#QcF`uLYt5*%aBVLGaL@dvg|U#{NJ)|gL7coh)Z2+ zw{1JWA^>$vND4$X>|7eLL5pgEM%6_L2f}}jPvTGs`#Gc^?&{6 zGOt{zIOpc6YmAwH12{=a+t&CtFw2!)y@GyzBZTSYW?X?Z5oS#wFu{9|X(LGkN<=W0 zJkJs5s70xI8B6>3qRC!84~V60YgD$2mw+(|gLWafSPQy%IcA&dmsP$i6)^^@kRzA$ z6~Tx>Fafs9q^gpI4T^S(k$BYrC=Ih3Y@T7g!(nI&OUNuD+bz<2PmGbO>?6ILt0~49 zvWz!d`6VeXXxA2P9k5%lIbB6UxFiI6#Q-7#0gQIpmghN2>_}*gp{dh64U5tvrXa=$ zdNtH{bAk7CWEbf=XzEJ0q@)anB_=82EE@t7H|qdgB_0Zf^#FBYi3&}t)WOh3gE*TY zCYszcX)U&Y9hwH9?rKGVq%HjjwX3kX@8*sM%CKDtQ%dx+KEu96tz*#3vGyv~0S9Fd ztbKDNo1evGsq31vp~h<;>xFifXv5ar0Z)GGqw1Y>?N}j21-f=@oy=QroM)81Y(C75 z<)+<3_KrL*D_E#XiprCfwi`;bEJNa$@r4zvU!ZL_aIOo%ouB!9M{X-8iwPUJW_`_oddGH7K&`!5Fe*6tS@y&zmALKm#yDu=C%{aGm zinViV5*O~_z@(GAOtS5~R|Gu&cTu$FHkGUdgsJ{!x|vO1Y??3I(4qculP z&A4gL^_+U)x14$P9JjsuX2vG)#M8&Id4U>8syG>t$ricGN#bxW$M$pDGc`@q@Yvxq zY~J^MnwT+;iQ(piljDG!OeVB#OCsXJ8h77)fF>yipLv0kFRe0O8MC#z#c0ni{9wSb zBd>7t?RWCEZ~U5KF{5n~U=a~^4l1h5VRDbz-Z84GqSv3%9}W2M2M$mTdOZH*aZWU_ zX=}vi8Ag?47y0;mZbod4xGnbWU1C>EG?PTr%)mH=9EagY-+PqZ%R4!6{cg&<2gYLj zlvl?yzVfB_VXTms87?y{j7F3_%WeCYcMnDWH{QkMOE3{oKcn~RaIe4M#u)laGH9SXzFg0 zs;UYy$G)ZA9Jq0r!z*iuagZ05<&mRFIms$!+ohTDC@rR~nQS&h6yqI>gB`4HOpzS= z{Ss#rz1pzT2ZDN>&B^VMrCobSG4kiXJj>CSUt?yKUXfV1R;Y@Cp7%KKJ^d=D9rWOeTztV|lPhFbYkeC<>PL>|}2>SA_8gThz02M0=S5= zg2f@W;rv<+w!zYENE;?lUuK8h!}P*B%L}JzoMGUHl!G4iEMT&dzC@l Y7pX2x^ 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 pV>GPZVmA7(9YCLLcU z9e-9`KW5zkHiJM8gCI_WU{1qeE~5}`;}9O>P%h(89+NO`({Mhs2wt-YezQn^^GH7P zNCAr|ev2qU%V+`17=Ej00qYn+n^+;+IAPlaVY_${y96K-wNDUrNECBO5_d|La7vMM zPLXs;m2yp!cFT})%aU==l=aAx_sCZ8%#riXQ}D@G3M^5JJs)do)#y==$e|Da|37;gq0jwV`l*BFO6Bq|)0T^trp)V=Zs#t2bAIC1 z!*${>D_XX!(=1%|xT14an_g$h6Q}a$Wsb5dT{(p1AOAnbTeVP!-D*=;Z*p|d@pX&8 zsy(@4xIXga3)`iA=TD!QcKy(cA2pk|Jx-kV(qrDTZ(mw38VdhvGh6nL`Rf$1w(y^e Re*;~};OXk;vd$@?2>?38fF}R| literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_block_stripped.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_block_stripped.png new file mode 100644 index 0000000000000000000000000000000000000000..b9418a27b10d677645eb8e4819f904364d5c7ef3 GIT binary patch literal 375 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfoB*E?*YrY$oKl9Ia)!K8hQe}& z!fJ-%N`~TEhKdG;iYA7NW`?R3hU!*^npVb|cE;LPhT3-Kx(?R54z{{Z*7|ma`cC%7 zPNv2#=B6%|rf#+tAnIXh?PhQ7;b`sUY3t!?>*a3i<812#lKkzxJnenF9TNmQ`vp2D z2zE^n>YgavJz1oCie%4Z(Voc?JyS*cr-@CNAu(Zw^prXB?9nv`f$p5<>Eak75pH_) zHdCX62=X>&gDS2yI9 zv)gMWUskkkS*KaJ>TyZusm-TI0 z{8dflisAamlP_$S_MJcMaqji07e8t?Z+onGvgFLXW#7JNFIE=()n>NrA2YLp*nIo% SMy@~?GI+ZBxvX|U< literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_bottom.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..96f7c7974592a618901c864ab2aafa9fbcb5b66e GIT binary patch literal 516 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMf!vLQUSD$3<{CcUP3d#IZ$>eIQ z$U>8}V#&N>$?Q_ej0(xp8p+%W$&6CTvPQ|)F3E}}sn#~hie|~iR>|r%Ad<>1k?Ncv z)z&K6)hSs~E7jH}+0h}DkuO=+AeCJ!+0iLk-6~ntD%sH`S=lU^TP)eyF4@^B+1@VM z)h*T9Ayr!?m0cy(&?Z^iCRNia+1w_XT`XBrBiY?0Rah=r)gsy6DOuhqS=lO?T`ASp zA=TU+Kck;@`fVRV-{c!oZpDtRkcm zq%udA&Ek|>fz7#v^+|O>Q$k;ex{CTuRXRkB*-tA!Qt7BG$3car;B5Vh5ynCj(mp|cvy5DHXU91^5BY}|J}J~ zNJ$A>q$odQ5RPD2QE1olKwI{Vkk+Qj`>PKs3kvD6IK7{+tZ9A63xUTW6RIW(ywo}| zX(`vGJ3*|Oc`KVtwud;*iY{Adw!OtrlReDy_(s8d>w7m?Io(@(nB(nNk<`AOo7J|y zaEX+@rZ_iUD|tquTy$h(<(-6DmgSpb<=_5qi(Xi)_2=o%54#ub%{u*DNI9p!LZ^oD X*I7wJS%uk&pm6bY^>bP0l+XkK+nRc@ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_plank.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_plank.png new file mode 100644 index 0000000000000000000000000000000000000000..cd19288f9aee17dc1a4dddb61f173bf6e2aa85f7 GIT binary patch literal 427 zcmV;c0aX5pP)4AV!K5C=B$QyY1(ti=su0#C9xcMl-`MB&X=E=7I}876<3@+joF? z>~XvRj-?D36DmVPv^xw}gpbvi&-*yPcH6Igk70T?t>FPQvUfkJwA60by_B5P9#eS} z+*xK)YjaR*LL6)B1snHwKq>0E&&8U`(!3KAIad5+&p&_t%W%FiTo#7lYX<;a?C|s; zT6^(!6GiKs&qOa;iD?Qac&2qFpNO8Oo~FAQgfNfpevwb3=F_pr`ugD_0<1%Mr%8ej{|U|UrcC@BVbbg<2_Q3XV_71Mb>v+#Zo zV+?BU9?5x#aZ^bul_QmuX&jS#K~qo2UGfP|JH7#o@LNX#!Yxa_Wa)Sc!B?Qa9^k77 zwLP4R2hmL~Vb=z=eNGeMD}$*04*+!|gq0i#ggloV#U4t!I?Cdq*w#AE;f002ovPDHLkV1iNzwA%mx literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_shoot.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_bamboo_shoot.png new file mode 100644 index 0000000000000000000000000000000000000000..0d1226cb3295f93d1dcd3b59845d15e30d21e8dd GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPFv4DbnY1=3b=N=}&??xC`NRfb`u zDiK}gakZN1{aWesoThJZGrDkK5l|6hNswPKgTu2MX+Vybr;B3bP0l+XkK+v+uN literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_bottom.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..286cdd381a2d74b3af8e38d950bca77b07bb524f GIT binary patch literal 1967 zcmV;g2T=HlP){Hd!N1bTHpHKi>FJ1&qJrb`r2D}9v(e-_{OWl7r*{2 zQ+0CZ@b53*{^nm!R~>%-gHM+WesKHnhd+JoZ;$e4Kl;AUedW3J@zLEo$KQVG^e5l> zBm#Hm>-B@fSO4^%WjgrA_g{YLTc3K@GdKSH>%Sg#&0p`H#h<>&F0B# zU*_jvfr!xZdq1#WpPDmqY{koJ+1|T-{+=fmMjlcX0v+AEx7e$@3n%h7-#oqdV0-`Q ztiRaRP4uzvEa>*w`ir=K@9@^VIr!M>UwH|o>~<*-FBY>sK9{nLtU!n{ZU$VRH92Qh zt%e)##PuiReWIc{J3-B~HcLj{0{ z%&e~K7$Zahxcl~^CrWMGTA$sWtAwHOB&9?|FFd{X!iSz;pJ07*yx%U4&M$VQL;x1Y z7J58pMqqLP9_oj8-+J&Z?ShsCk!~Egy+I|&MCbzry&teKU+tqwtgIL-6T-DDJb|YT`FzOg$Bq9LrPPt#1jXxj2tvoakuTIFP24Hjm=FWV&-uiq|dI^ox=@Afo_-8qKq!$4ES=n+~?wY zL2fL?R5~j|%kMu(i!vL>u@rG8+G__Jn#HWDD$7b<#{_kEvlL8}OW@mwo4b#SjKg}{ z58E>K%0$$4T?iqiB+dekP2G({Z0oDnmP}0up=la-UnsY!iZK$AN4`2^5y4|k(}+mF zgDROB5n;lF%H6|Yvs6(dzs?3Zg zBEpkZL_KIAREg^7DLAX;5Q6m`VoyYTDbt70IH(6jZmk>>!IIdKfqsV_gqZ;_vs=||`l3n@H;W{(5>;hp)e=K_;tECeHsZZ5{D zszXf7A`(K_3_FXAiHNv+nh=pqn7OJd07PVF?jB$vIwtOJW+8;8N<{&IQW?F73r7%u zkz#5SKo*&U66R8Y#4BM04b$i!1etr#S})YbjjUS+G4~a>`-zkuHtNF08ZDB z5Ev7lL?Kt!@{ug8}NCfm(ywLyv002ovPDHLkV1nIC BupIyZ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_bottom_alt.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_bottom_alt.png new file mode 100644 index 0000000000000000000000000000000000000000..00bd07b0bfa2c5293b4c6502a8d547c2e4b6cee2 GIT binary patch literal 1966 zcmV;f2T}NmP)7aeh|^#uB7!dz{5OQ?NS%vQ!3Tmm z$|M1GDj1PS1Vs@{>`vN#Rae!$_nf`=dRRHq-$&p3>T^$Bzi??je*DF!-uvsjFMs#7 zAAIYDvwHX0Pd>VOdw6ZNx6kOAh~R-azIx-| zzxv(1k34_vQ=fS(E*Hzaz5OiN%r<5F;VY}H8{8d}7-QSEW=2E++`URYK9i%59UWb~{OIGW_|{wR9KU_* zi(h#5(_i_z!_DxYUEnr^m^j2?vr!9s(R9-G4Pw*qKxPb>bIaY$n`;Y( z_Zi4;u1Alv074gdro&R!00`#@fSRY2nx-)`W^Ox<5oX4d`Jzh=0|+7HoSB)3#&HBt zN&!Gbh8W8>OycK1_rXtmU=P3>zx+7>Qv=X6jk_}wz*f0UWyp2G2IBd=z1pv03h&&! zf90_&A?5wO#{au*VSV2tHjpv)sq`0!om6M6tW7y;>F->UKS(CUVeN%k}FAvFmfrM^`SgJLSgR0T5A$v1kFn=gOetx}K~D zDdRg2>OXIt*1)2ig1MQx#{}}$vNlcAEoP&QwA(vVtx`%^)Y)SPY3zAp)l^t2xw)S0 zaa}H#fHNjUWM--~Y#}0D*Wn=%xiDjoOhhrpJ~azvckj9`guv8Y*k8uJ-IOtQt$@Wj zr4&NgY&Jy1L&UlP5oxZitTzFaqC;x6bMD@Ds|&GR=S|Mp-MiRjV)BJ#A=f*L(vWst zT7<^ThyukhOKlj<-3bk+;BE9KQ6RLVt|E9MA~Z3xrfF1_nTcq--F9=UwT2M>cirl^EH*f{fVJC~vB&64CBre!!S@qFMpp z;bRRu{VEYErn= zNv$=d)X##M6A>n67GnfJM2rbDn;A2gf`f%~>P3twnWE5eOc81_DutF~^I*O8_Yo0u z?MTD!{-PSG769%pkp<-L5aw948CBp~MRVy|bgLBr5mC)%3{R%PHYEg@m1Z7}!->-p zFjX<}T*rf}m)VS&m5n&ARx4^|%nTBCbDJ=8hADxW-M!X|hjPvUY_i>M@82Co1QT}; zAsio{0TB=BgopsJgWNe9LI`A(QtR#_!pua8NTpP%)wy+dW=^{^QgL^3K-9cMll!;N z0HJdT4&B^7juhRUC@>)~MNgsD8nNh_c<=5503igQF!Of1J>6zZVvNHuFf#yV#^m_^ z8f51%@rM8~0CyJ=cPAouzxm#~VwP+5i8=@A6GvtSP{t=$aHlFf(_@Bt#D|cQ-R40?;%KGuwoS(!||G1QUyVI&MP2i9d7-Cb1y&SP~XMW8?c)XHqOAXW})kpW75Dii@k5Sz1k zV1p4h>pYGn1h~7IVdCz64|m687*9chiMwOcwrxr&#)wJZ_rov%Ff$&8VZB~s!puZ; z28i1^RW&o|=_u_s(ansR`|gT|jS@sFA(|Oe;xTVSD~7-wfHH3KaG|(T;;7uu7;vi*Rf|&srnMk230Eo!Xp@8^sXQ>1u z;?S0E6J&?q7aan?-PLl10qkZ>#BQf!A%igf2fA4uDR7#ACjbBd07*qoM6N<$f{^pB AVgLXD literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_top.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_top.png new file mode 100644 index 0000000000000000000000000000000000000000..8aba3c825e77c61dc8bcb2603c0f527484932ffd GIT binary patch literal 1990 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 QP5=M^07*qoM6N<$f`Q4grT_o{ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_wield.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_door_wield.png new file mode 100644 index 0000000000000000000000000000000000000000..6d61e8fcfa0b99a8cd258c3451533e54f46d2d35 GIT binary patch literal 1394 zcmV-&1&#WNP)SKKn5d=|D z5wv|!RFwE2R!c>s7)=q3O~JM{+F+cv8OJo5WM(pR@A z%T=Cw>MHl0SY&o(mPfvKk#C=W$^F0jvLAqV!tMw}0<9!G1tK{qwhRzxha`!#ZHt$Z zDn^p`h(cb3{mSnT(4f>#k!+jTBm{8Ia877YvfR_@bU_=O86nRpyBR9b>lXV0?2G7< zvfC=X+bwVX*r#}uAM)ab7s(U+YMdL{Ih}i1nEvS4?BsF`-3UqJeHI!%di7X z;l2PxQQ*8V$`15>G9O^rWi)Q7TP6q4HX?b>Oy}@{0K~V%qKB$d#wiS;nNi)kMcpU` zP_3OaFAg=sY;Q-b1i~kz%jkCu{ zvnTlKBTw*^hu_Povp?g7Uw)QX*I&Uo&}Vjbna3XcBVpL%jVJHo)SFLC4lp=8!#mz^H$Ds4z*t%?@tJ2d zzQy999w{Z3UjI5q+Z(Js|1=+b@BxD640FeBnt}q~I`=e>ufGK5p%jiS50OwZ?3XMb zpTTE2H`dp21g>4X$&;6^P;>&j>e2BOX5b_DuVQscl@dWbOG|>toD}u>%(<`vb%|?mP2w z04_XxeR6=12~w62atf5ga|KN`CS;x?M~7H|UfCcL$g+&2#-(#V0^p&yElv*b+J?b7 zhcpF8=lV!q;G3Gf$j~}LKN3P91mWyA&$Ifbqb#hRB4-P9P#E5 zpHJb(L?c_H+jw81mEjS*33=9`(_O@SEF(P)?%o3SLQlAN(~XEcRpsC&83R7tXz z5!G6pbJ$FcI>+L0fYD%P)OAJe1v6u(9`6hAAHkkoA%%>FSpWb407*qoM6N<$g1W1o AD*ylh literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_fence_bamboo.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_fence_bamboo.png new file mode 100644 index 0000000000000000000000000000000000000000..1193b6b2f7acc5d48186bf08eccdff6300a9087e GIT binary patch literal 388 zcmV-~0ek+5P)G5}Eh^BP>lS9bt_ zXt@FaEH7>W0QOW#j6HV#VgCl=1mBw77FoH1sWwu;R2ylaqC|YsR0ve2lU_eeV2|&F zf<66qL9GEWK;s1N);1r(xoen!4uA!o&rv|i#&rp~Co_uILk!H8WIUB!`Ukw2CA`cYTi(GiyV_ iAvYrb#?06^o8d0+7` ze{PbDu>1r7KMbrpXz(&!^6pO>wD?m#Cl8`l@2t`yhG{wgfU^%f+V1YTT9TD)DUJwn zTaRj6&k2x@_C`FjG!-t z{GA}rK)0i7`LSr*4i{ym&%&nJ`~~?~wNbX!J||x-q2_C)=K1Tr@K?(J;NKh^mCMER R#QOjM002ovPDHLkV1nFZrUw83 literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_flower_pot.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_flower_pot.png new file mode 100644 index 0000000000000000000000000000000000000000..599c170373f619adcfb0db119539bced863093ef GIT binary patch literal 901 zcmV;01A6?4P)@SDgS?o&Z>#0a%{_Sf2-2 zpaNW&7F?MZU84+MqYGe}8ep9fW1bpip%iAQ4rrnzYp5=9s6uhADsiq7aj_b8vJ`c* z7kIE9c(WUNv=n-@8G5uEdbBWmgdKabEqk*dd$b#SwI6)88GW2beXu@#vN(OSHGQ=m zeYGNfu{M6UCx5R;f44M$xFdhKC4agmfT~o0wcLWs9Xh`KZMVrKGoWf+B#!#HbSe(a7oX1O?%1xfETAs&Yp2<+2 z%vztxN1()GpvhIB%vzzvW}(VsqQ-Qh$ZDd?U!u!kqsV5X%wD9+Wu(h%q|9KX%xk5u zV5Q7srq5xgvu3BtYNyO`r_E%i&S9s{Y^Tp_sIXzEwPvWcW~sJlsm)`mv~a4nrqD4_ssz*^$7+Hz% ztt%f80#cF;7W1Q#4Fw8pH%GO_@`x3xJ1mh^fCbK>2?W1<861o(uyOCky?c=b>@VA+ bYJmd)DWMm`HkAm%00000NkvXXu0mjf_n)Fr literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_scaffolding_bottom.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_scaffolding_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..46cddd712f2326ddb6a5ce6c0ff97a05e1bbb322 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHVEbxddW?`Tkf%Vo8Q`lfm=>Q?>?99vYo*MsD`m5$S;_|;n|HeAji+s#W93K zmh~VbW3vGd!-k9ljB?Kw$g|+9&t9EY1WvhQZU-&t;ucLK6U=FjRB^ literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_trapdoor_side.png b/mods/ITEMS/mcl_bamboo/textures/mcl_bamboo_trapdoor_side.png new file mode 100644 index 0000000000000000000000000000000000000000..444c54bdd07d6f4103e672ee5e54b33d22b3495a GIT binary patch literal 650 zcmV;50(Jd~P)1;Mw*IFpJp$hU^1d=F{5iTq-HCnWjCc~ zET&~Ere-*&XE~{1FREfNs%S2%YCNlFHmhkbtZFc>X)>>AEwP+ivVlIcZ8@}VI<;>* z#EwSGl}*cA!60!D;E)i|W8?>fD6uzi8{hZR^8p>%(m8#c=GxZ0y8s?Zj&B$8_z{ zX70#y@5y%W%XRS0dGX73@yv7a%zN?8dGXGA@zR0u(u48Tc=E|@^2&Ac&3y9CcJk19 z^44|p$ZYh>bM(w?^w50t(S7vSd-ct0_RDSd(th{MZuiV^_s(+n)qeNedic(G_|k#+ z+kgAws{PM`|ImtVkjb6^0007XQchC<_f<-&hX4Qo@JU2LR2Ww^j@erQaTtZqmwk&# zls#0WY{{5u`HiiRvPZUP&}jMpueW+fg-Xj%Jp7xYjmJ{DWAL zDmQnLy!?o;eqcRv9r}*BgZ)5ys>6q+Y$t)}hZqG@>pps+nvSEK;R0>4DTDsPrHFUVrz@HmgrFlzqA>lp%ggPVJj}G_?+atYQ<5? zCh@%D-6RkZF>=;IW(?P}Ri(D>}f<~ESIG<)OpkOkhYB8g0GNfiJrDZpzXDp^=E2d^Rr)N2-VK1s; zFsf)Ss%ku|XEv*8FRN-YtZFc=XDhC0GOuYZvVlIcZ8@}qK+2R#%au*bnoiA>N6wm0 z&YDrrmPyZA!60!D;E)i|W8?>fD6uzi8{hZR^8p>%(sB#BJ@wYVF5#@5^-W%XRP2 zfbhj@@WyNK%60I~dGW?;@ymAc%zN?8b@9%6@zR0u(t`2QgYnaS@ziYb)OhmAZSu{0 z^3Hbh(0TIKb@Rw<^vrDZ(0ugKee~CR_RVqj(th{MZui@I_|ACv(t-HffBWL9{m+8` z(2BL))vN#j00MMUPE!E)RZ6Od0002vNkl3W2-cNX zRZvq_(bQ6u(GxdHU~to5XJBNoV*nyX1}WnhhIlzH7e)(4#&kwIMmtHa( z0}xp-2$@GSWEyY>F$RIO04V|66b37O4v+~TV8Os|8Oso*DFHMM3>X>298(#>l|>LL zgzY04T-A6GX7D&VF(j&sB5dI`Gi2~m5Cpq}5#$a|YgUE`C2539*&Ub}WW}W>tQ|akoEef5V#13hmdC$Ig&%S(gV>iyifz7&hbYL>dxOwZrZI4?doMkbgXCjHJgaFcFVbU z%ei>Vxp~XQk<7Sr%(!*TyMWBQgUq{z%)EWfy@1WSbIrVg&Aoxmy@JiZip{@{&A^V$ zz>v_tiqFEF&%>V2#jDW8hS0@~(8j6I#;VZ9tI@`((Z{dR$FR}J zu+qPedo#D<0000FbW%=J009940s;a91O^BS68HCQxF|6I007uYL_t&-8BM`wBSKLC zfZ>;nND3KQrR=?38AV1>l0&Y&>Dv1^$Dhaj#b+ic5ev;%NkDz_37