From 6f05992c8b234e48c12dc08db98221df3cb76f79 Mon Sep 17 00:00:00 2001
From: Michieal <michieal@apophissoft.com>
Date: Sun, 25 Dec 2022 07:30:31 -0500
Subject: [PATCH] Fix Licensing. Removed Make_Stairs check. Made unified
 protection check. Began work on the second half of scaffolding. Removed
 comments that was no longer needed.

---
 mods/ITEMS/mcl_bamboo/README.md     |   6 +-
 mods/ITEMS/mcl_bamboo/bambootoo.lua |  89 +++++++-------
 mods/ITEMS/mcl_bamboo/init.lua      | 174 +++++++++++++++-------------
 3 files changed, 145 insertions(+), 124 deletions(-)

diff --git a/mods/ITEMS/mcl_bamboo/README.md b/mods/ITEMS/mcl_bamboo/README.md
index 9bd5523d3..a6ef7911d 100644
--- a/mods/ITEMS/mcl_bamboo/README.md
+++ b/mods/ITEMS/mcl_bamboo/README.md
@@ -3,9 +3,9 @@ mcl_bamboo
 
 This mod adds minecraft-like bamboo nodes to your Mineclone 2 world.
 
-Code: Michieal. Original (basic) bamboo code by: Krock.
+Code: Michieal. Original (basic) bamboo code by: Small Joker.
 
-License for code: GPL3; images / textures: CC-BY-SA. 
+License for code / images / textures: CC-BY-SA. 
 Images Created by Michieal, except for: 
 Inventory / wield image: created by RandomLegoBrick#8692 and is CC0.
 
@@ -15,7 +15,7 @@ Optional Dependencies = mcl_flowerpots, mclx_stairs, mcl_doors, mcl_signs, mesec
 
 Special thanks to Nicu for help with the nodebox stalk design.
 
-Krock's bamboo forum topic:
+Small Joker's bamboo forum topic:
 Forum topic: https://forum.minetest.net/viewtopic.php?id=8289
 
 Scaffold inspiration: Cora, because she said that it couldn't be done.
\ No newline at end of file
diff --git a/mods/ITEMS/mcl_bamboo/bambootoo.lua b/mods/ITEMS/mcl_bamboo/bambootoo.lua
index 2df7cd42a..e75f3af8f 100644
--- a/mods/ITEMS/mcl_bamboo/bambootoo.lua
+++ b/mods/ITEMS/mcl_bamboo/bambootoo.lua
@@ -14,7 +14,6 @@ local adj_nodes = {
 	vector.new(1, 0, 0),
 	vector.new(-1, 0, 0),
 }
-local SIDE_SCAFFOLDING = false
 
 local function bambootoo_create_nodes()
 	local bamboo_mosaic = minetest.registered_nodes[bamboo .. "_plank"]
@@ -24,7 +23,6 @@ local function bambootoo_create_nodes()
 	bamboo_mosaic._doc_items_longdesc = S("Bamboo Mosaic Plank")
 	minetest.register_node("mcl_bamboo:bamboo_mosaic", bamboo_mosaic)
 
-	-- crafted by "mcl_stair:slab_bamboo_plank", "mcl_stair:slab_bamboo_block", "mcl_stair:slab_bamboo_stripped"
 	if minetest.get_modpath("mcl_stairs") then
 		if mcl_stairs ~= nil then
 			mcl_stairs.register_stair_and_slab_simple(
@@ -37,47 +35,60 @@ local function bambootoo_create_nodes()
 		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},
-				}
+	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"},
+		drop = "mcl_bamboo:scaffolding",
+		drawtype = "nodebox",
+		paramtype = "light",
+		paramtype2 = "4dir",
+		param2 = 0,
+		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},
 			},
-			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
+		},
+		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,
 
+		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 mcl_bamboo.is_protected(pos, placer) then
+				return
+			end
+
+		end
+
+
+	})
 
 end
 
diff --git a/mods/ITEMS/mcl_bamboo/init.lua b/mods/ITEMS/mcl_bamboo/init.lua
index a6fee7c32..6a5b0b025 100644
--- a/mods/ITEMS/mcl_bamboo/init.lua
+++ b/mods/ITEMS/mcl_bamboo/init.lua
@@ -1,7 +1,8 @@
 -- [bamboo] mod by SmallJoker, Made for MineClone 2 by Michieal (as mcl_bamboo).
--- Parts of mcl_scaffolding were used. Mcl_scaffolding originally created by Cora; heavily reworked for mcl_bamboo by Michieal.
+-- Parts of mcl_scaffolding were used. Mcl_scaffolding originally created by Cora; Fixed and heavily reworked
+-- for mcl_bamboo by Michieal.
 -- Creation date: 12-01-2022 (Dec 1st, 2022)
--- License for everything: GPL3
+-- License for everything: CC-BY-SA 4.0
 -- Bamboo max height: 12-16
 
 -- LOCALS
@@ -13,10 +14,21 @@ local node_sound = mcl_sounds.node_sound_wood_defaults()
 
 -- CONSTS
 local SIDE_SCAFFOLDING = false
-local MAKE_STAIRS = true
 local DEBUG = false
 local DOUBLE_DROP_CHANCE = 8
 
+mcl_bamboo ={}
+
+--- pos: node position; placer: ObjectRef that is placing the item
+--- returns: true if protected, otherwise false.
+function mcl_bamboo.is_protected(pos, placer)
+	local name = placer:get_player_name()
+	if minetest.is_protected(pos, name) then
+		minetest.record_protection_violation(pos, name)
+		return true
+	end
+	return false
+end
 
 --Bamboo can be planted on moss blocks, grass blocks, dirt, coarse dirt, rooted dirt, gravel, mycelium, podzol, sand, red sand, or mud
 local bamboo_dirt_nodes = {
@@ -38,7 +50,7 @@ local BROKEN_DOORS = true
 -- LOCAL FUNCTIONS
 
 -- Add Groups function, courtesy of Warr1024.
-function addgroups(name, ...)
+function mcl_bamboo.addgroups(name, ...)
 	local def = minetest.registered_items[name] or error(name .. " not found")
 	local groups = {}
 	for k, v in pairs(def.groups) do
@@ -124,9 +136,7 @@ local function create_nodes()
 			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)
+			if mcl_bamboo.is_protected(pos, placer) then
 				return
 			end
 			if DEBUG then
@@ -224,9 +234,7 @@ local function create_nodes()
 
 			local pos = pointed_thing.under
 
-			local pname = placer:get_player_name()
-			if minetest.is_protected(pos, pname) then
-				minetest.record_protection_violation(pos, pname)
+			if mcl_bamboo.is_protected(pos, placer) then
 				return
 			end
 
@@ -335,47 +343,45 @@ local function create_nodes()
 		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")
-				)
+	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")
+			)
 
-				-- let's add plank slabs to the wood_slab group.
-				local bamboo_plank_slab = "mcl_stairs:slab_bamboo_plank"
-				local node_groups = {
-					wood_slab = 1,
-					building_block = 1,
-					slab = 1,
-					axey = 1,
-					handy = 1,
-					stair = 1,
-					flammable = 1,
-					fire_encouragement = 5,
-					fire_flammability = 20
-				}
+			-- let's add plank slabs to the wood_slab group.
+			local bamboo_plank_slab = "mcl_stairs:slab_bamboo_plank"
+			local node_groups = {
+				wood_slab = 1,
+				building_block = 1,
+				slab = 1,
+				axey = 1,
+				handy = 1,
+				stair = 1,
+				flammable = 1,
+				fire_encouragement = 5,
+				fire_flammability = 20
+			}
 
-				minetest.override_item(bamboo_plank_slab, {groups = node_groups})
-			end
+			minetest.override_item(bamboo_plank_slab, {groups = node_groups})
 		end
 	end
 
@@ -502,6 +508,8 @@ local function create_nodes()
 		tiles = {"mcl_bamboo_scaffolding_top.png", "mcl_bamboo_scaffolding_top.png", "mcl_bamboo_scaffolding_bottom.png"},
 		drawtype = "nodebox",
 		paramtype = "light",
+		paramtype2 = "4dir",
+		param2 = 0,
 		use_texture_alpha = "clip",
 		node_box = {
 			type = "fixed",
@@ -552,9 +560,7 @@ local function create_nodes()
 			end
 			local node = minetest.get_node(ptd.under)
 			local pos = ptd.under
-			local pname = placer:get_player_name()
-			if minetest.is_protected(pos, pname) then
-				minetest.record_protection_violation(pos, pname)
+			if mcl_bamboo.is_protected(pos, placer) then
 				return
 			end
 			if DEBUG then
@@ -715,37 +721,41 @@ local function register_craftings()
 		burntime = 20
 	})
 
-	minetest.register_craft({
-		type = "fuel",
-		recipe = "mcl_stairs:slab_bamboo_plank",
-		burntime = 7.5,
-	})
-	minetest.register_craft({
-		type = "fuel",
-		recipe = "mcl_stairs:slab_bamboo_block",
-		burntime = 7.5,
-	})
-	minetest.register_craft({
-		type = "fuel",
-		recipe = "mcl_stairs:slab_bamboo_stripped",
-		burntime = 7.5,
-	})
+	if minetest.get_modpath("mcl_stairs") then
+		if mcl_stairs ~= nil then
+			minetest.register_craft({
+				type = "fuel",
+				recipe = "mcl_stairs:slab_bamboo_plank",
+				burntime = 7.5,
+			})
+			minetest.register_craft({
+				type = "fuel",
+				recipe = "mcl_stairs:slab_bamboo_block",
+				burntime = 7.5,
+			})
+			minetest.register_craft({
+				type = "fuel",
+				recipe = "mcl_stairs:slab_bamboo_stripped",
+				burntime = 7.5,
+			})
 
-	minetest.register_craft({
-		type = "fuel",
-		recipe = "mcl_stairs:stair_bamboo_plank",
-		burntime = 15,
-	})
-	minetest.register_craft({
-		type = "fuel",
-		recipe = "mcl_stairs:stair_bamboo_block",
-		burntime = 15,
-	})
-	minetest.register_craft({
-		type = "fuel",
-		recipe = "mcl_stairs:stair_bamboo_stripped",
-		burntime = 15,
-	})
+			minetest.register_craft({
+				type = "fuel",
+				recipe = "mcl_stairs:stair_bamboo_plank",
+				burntime = 15,
+			})
+			minetest.register_craft({
+				type = "fuel",
+				recipe = "mcl_stairs:stair_bamboo_block",
+				burntime = 15,
+			})
+			minetest.register_craft({
+				type = "fuel",
+				recipe = "mcl_stairs:stair_bamboo_stripped",
+				burntime = 15,
+			})
+		end
+	end
 
 	minetest.register_craft({
 		type = "fuel",