Compare commits
	
		
			83 Commits
		
	
	
		
			0.4.16
			...
			2018-09-13
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					25fef974e3 | ||
| 
						 | 
					4980844320 | ||
| 
						 | 
					fc781daca0 | ||
| 
						 | 
					5b631142aa | ||
| 
						 | 
					eb6089a03e | ||
| 
						 | 
					41455647a2 | ||
| 
						 | 
					55fea4f6ca | ||
| 
						 | 
					a8729575ab | ||
| 
						 | 
					9e69a6db73 | ||
| 
						 | 
					54ce73b616 | ||
| 
						 | 
					8a5bc0e038 | ||
| 
						 | 
					d6ff137657 | ||
| 
						 | 
					a4ca53cc05 | ||
| 
						 | 
					017326dbed | ||
| 
						 | 
					31bf6b8c40 | ||
| 
						 | 
					b526ec1714 | ||
| 
						 | 
					7e98534179 | ||
| 
						 | 
					8132cfc6f8 | ||
| 
						 | 
					39984c356b | ||
| 
						 | 
					eb2b3d7980 | ||
| 
						 | 
					08bbd0f592 | ||
| 
						 | 
					3597c2c1aa | ||
| 
						 | 
					5db791deb4 | ||
| 
						 | 
					8ccbe6abc4 | ||
| 
						 | 
					cafba3bc53 | ||
| 
						 | 
					ac10702849 | ||
| 
						 | 
					fe2acaaa1e | ||
| 
						 | 
					bfda7c49fd | ||
| 
						 | 
					4d9c4c2410 | ||
| 
						 | 
					1471a0cba9 | ||
| 
						 | 
					eabd237252 | ||
| 
						 | 
					9d4ac9bd9a | ||
| 
						 | 
					5efa9af1b7 | ||
| 
						 | 
					7d40724d39 | ||
| 
						 | 
					5e6307ea3a | ||
| 
						 | 
					8882ab8e19 | ||
| 
						 | 
					3021248538 | ||
| 
						 | 
					4eaf265e65 | ||
| 
						 | 
					228e25e123 | ||
| 
						 | 
					ddcb08fe62 | ||
| 
						 | 
					972d30dd38 | ||
| 
						 | 
					cc9276841e | ||
| 
						 | 
					f2f49a3aac | ||
| 
						 | 
					b92c9e065b | ||
| 
						 | 
					ea77ac32ea | ||
| 
						 | 
					14697ef71b | ||
| 
						 | 
					9921efeeef | ||
| 
						 | 
					87e3c9f9ce | ||
| 
						 | 
					095e34ad7f | ||
| 
						 | 
					6c9da755f3 | ||
| 
						 | 
					c786e3ae05 | ||
| 
						 | 
					48be7ddef1 | ||
| 
						 | 
					2c5be0735a | ||
| 
						 | 
					36e5e319e3 | ||
| 
						 | 
					57b988c185 | ||
| 
						 | 
					d6f660b72a | ||
| 
						 | 
					7b4db2fc5a | ||
| 
						 | 
					b45ace825d | ||
| 
						 | 
					9d2704c0c2 | ||
| 
						 | 
					d7a4054dda | ||
| 
						 | 
					f03e71397a | ||
| 
						 | 
					6349c53824 | ||
| 
						 | 
					c60607aa0d | ||
| 
						 | 
					78ec2119f6 | ||
| 
						 | 
					c247318dd8 | ||
| 
						 | 
					9693d9dd46 | ||
| 
						 | 
					23d1365939 | ||
| 
						 | 
					f391bc59b0 | ||
| 
						 | 
					790557f6ce | ||
| 
						 | 
					c9c4214bff | ||
| 
						 | 
					914aee41fe | ||
| 
						 | 
					ec83040d10 | ||
| 
						 | 
					9bb4222aa5 | ||
| 
						 | 
					67ddc87d2c | ||
| 
						 | 
					970636571e | ||
| 
						 | 
					4ee5b6b87f | ||
| 
						 | 
					1f2676b8f6 | ||
| 
						 | 
					ad4790f74c | ||
| 
						 | 
					7925897748 | ||
| 
						 | 
					459c02548e | ||
| 
						 | 
					1eb1e87f08 | ||
| 
						 | 
					27eae09d93 | ||
| 
						 | 
					761b18c17e | 
@@ -4,7 +4,9 @@ allow_defined_top = true
 | 
			
		||||
read_globals = {
 | 
			
		||||
	"DIR_DELIM",
 | 
			
		||||
	"minetest", "core",
 | 
			
		||||
	"unpack",
 | 
			
		||||
	"dump",
 | 
			
		||||
	table = { fields = { "copy", "getn" } },
 | 
			
		||||
	"vector", "nodeupdate",
 | 
			
		||||
	"VoxelManip", "VoxelArea",
 | 
			
		||||
	"PseudoRandom", "ItemStack",
 | 
			
		||||
@@ -17,6 +19,7 @@ read_globals = {
 | 
			
		||||
	"mesecon",
 | 
			
		||||
	"unifieddyes",
 | 
			
		||||
	"creative",
 | 
			
		||||
	"homedecor_i18n",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
globals = {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										57
									
								
								building_blocks/alias.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,57 @@
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs") then
 | 
			
		||||
	minetest.register_alias("building_blocks:slab_tar", "stairs:slab_Tar")
 | 
			
		||||
	minetest.register_alias("building_blocks:stair_tar", "stairs:stair_Tar")
 | 
			
		||||
	minetest.register_alias("building_blocks:slab_marble", "stairs:slab_Marble")
 | 
			
		||||
	minetest.register_alias("building_blocks:stair_marble", "stairs:stair_Marble")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("moreblocks") then
 | 
			
		||||
	stairsplus:register_alias_all("building_blocks", "tar", "building_blocks", "Tar")
 | 
			
		||||
	stairsplus:register_alias_all("building_blocks", "marble", "building_blocks", "Marble")
 | 
			
		||||
	for _, i in ipairs(stairsplus.shapes_list) do
 | 
			
		||||
		local class = i[1]
 | 
			
		||||
		local cut = i[2]
 | 
			
		||||
		minetest.unregister_item("moreblocks:"..class.."tar"..cut)
 | 
			
		||||
		minetest.register_alias("moreblocks:"..class.."tar"..cut, "building_blocks:"..class.."tar"..cut)
 | 
			
		||||
	end
 | 
			
		||||
	minetest.unregister_item("moreblocks:tar")
 | 
			
		||||
	minetest.register_alias("moreblocks:tar", "building_blocks:Tar")
 | 
			
		||||
	stairsplus:register_alias_all("moreblocks", "tar", "building_blocks", "Tar")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("adobe", "building_blocks:Adobe")
 | 
			
		||||
minetest.register_alias("fakegrass", "building_blocks:fakegrass")
 | 
			
		||||
minetest.register_alias("hardwood", "building_blocks:hardwood")
 | 
			
		||||
minetest.register_alias("tar_knife", "building_blocks:knife")
 | 
			
		||||
minetest.register_alias("marble", "building_blocks:Marble")
 | 
			
		||||
minetest.register_alias("building_blocks_roofing", "building_blocks:Roofing")
 | 
			
		||||
minetest.register_alias("sticks", "building_blocks:sticks")
 | 
			
		||||
minetest.register_alias("building_blocks:faggot", "building_blocks:sticks")
 | 
			
		||||
minetest.register_alias("tar", "building_blocks:Tar")
 | 
			
		||||
 | 
			
		||||
if not minetest.get_modpath("technic") then
 | 
			
		||||
	minetest.register_node( ":technic:granite", {
 | 
			
		||||
		    description = S("Granite"),
 | 
			
		||||
		    tiles = { "technic_granite.png" },
 | 
			
		||||
		    is_ground_content = true,
 | 
			
		||||
		    groups = {cracky=1},
 | 
			
		||||
		    sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	})
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = "technic:granite 9",
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{ "group:tar_block", "group:marble", "group:tar_block" },
 | 
			
		||||
			{ "group:marble", "group:tar_block", "group:marble" },
 | 
			
		||||
			{ "group:tar_block", "group:marble", "group:tar_block" }
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
	if minetest.get_modpath("moreblocks") then
 | 
			
		||||
		stairsplus:register_all("technic", "granite", "technic:granite", {
 | 
			
		||||
				description=S("Granite"),
 | 
			
		||||
				groups={cracky=1, not_in_creative_inventory=1},
 | 
			
		||||
				tiles={"technic_granite.png"},
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
default
 | 
			
		||||
homedecor_i18n
 | 
			
		||||
moreblocks?
 | 
			
		||||
stairs?
 | 
			
		||||
 
 | 
			
		||||
@@ -1,633 +1,7 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
local modpath = minetest.get_modpath("building_blocks")
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:Adobe", {
 | 
			
		||||
	tiles = {"building_blocks_Adobe.png"},
 | 
			
		||||
	description = S("Adobe"),
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:Roofing", {
 | 
			
		||||
	tiles = {"building_blocks_Roofing.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	description = S("Roof block"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:terrycloth_towel 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"farming:string", "farming:string", "farming:string"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Tarmac_spread 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:tar_block", "group:tar_block"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:gravel_spread 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:gravel", "default:gravel", "default:gravel"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:brobble_spread 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:brick", "default:cobble", "default:brick"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Fireplace 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:steel_ingot", "building_blocks:sticks", "default:steel_ingot"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Adobe 3',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:sand"},
 | 
			
		||||
		{"default:clay"},
 | 
			
		||||
		{"group:stick"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Roofing 10',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"building_blocks:Adobe", "building_blocks:Adobe"},
 | 
			
		||||
		{"building_blocks:Adobe", "building_blocks:Adobe"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:BWtile 10',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:marble", "group:tar_block"},
 | 
			
		||||
		{"group:tar_block", "group:marble"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:grate 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:steel_ingot", "default:steel_ingot"},
 | 
			
		||||
		{"default:glass", "default:glass"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:woodglass 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:wood"},
 | 
			
		||||
		{"default:glass"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:hardwood 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:wood", "default:junglewood"},
 | 
			
		||||
		{"default:junglewood", "default:wood"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:hardwood 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:junglewood", "default:wood"},
 | 
			
		||||
		{"default:wood", "default:junglewood"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
if minetest.get_modpath("moreblocks") then
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = 'building_blocks:sticks 2',
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{'group:stick', ''           , 'group:stick'},
 | 
			
		||||
			{'group:stick', 'group:stick', 'group:stick'},
 | 
			
		||||
			{'group:stick', 'group:stick', 'group:stick'},
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
else
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = 'building_blocks:sticks',
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{'group:stick', 'group:stick'},
 | 
			
		||||
			{'group:stick', 'group:stick'},
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'default:stick 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'building_blocks:sticks'},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:fakegrass 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'default:leaves'},
 | 
			
		||||
		{"default:dirt"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:tar_base 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:coal_lump", "default:gravel"},
 | 
			
		||||
		{"default:gravel", "default:coal_lump"}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:tar_base 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:gravel", "default:coal_lump"},
 | 
			
		||||
		{"default:coal_lump", "default:gravel"}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "cooking",
 | 
			
		||||
	output = "building_blocks:smoothglass",
 | 
			
		||||
	recipe = "default:glass"
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:smoothglass", {
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	description = S("Streak Free Glass"),
 | 
			
		||||
	tiles = {"building_blocks_sglass.png"},
 | 
			
		||||
	inventory_image = minetest.inventorycube("building_blocks_sglass.png"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:grate", {
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	description = S("Grate"),
 | 
			
		||||
	tiles = {"building_blocks_grate.png"},
 | 
			
		||||
	inventory_image = minetest.inventorycube("building_blocks_grate.png"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=1},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:Fireplace", {
 | 
			
		||||
	description = S("Fireplace"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"building_blocks_cast_iron.png",
 | 
			
		||||
		"building_blocks_cast_iron.png",
 | 
			
		||||
		"building_blocks_cast_iron.png",
 | 
			
		||||
		"building_blocks_cast_iron_fireplace.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	light_source = default.LIGHT_MAX,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=2},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:woodglass", {
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	description = S("Wood Framed Glass"),
 | 
			
		||||
	tiles = {"building_blocks_wglass.png"},
 | 
			
		||||
	inventory_image = minetest.inventorycube("building_blocks_wglass.png"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:terrycloth_towel", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Terrycloth towel"),
 | 
			
		||||
	tiles = {"building_blocks_towel.png"},
 | 
			
		||||
	inventory_image = "building_blocks_towel_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:Tarmac_spread", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Tarmac Spread"),
 | 
			
		||||
	tiles = {"building_blocks_tar.png"},
 | 
			
		||||
	inventory_image = "building_blocks_tar_spread_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_dirt_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:BWtile", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Chess board tiling"),
 | 
			
		||||
	tiles = {"building_blocks_BWtile.png"},
 | 
			
		||||
	inventory_image = "building_blocks_bwtile_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:brobble_spread", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	-- Translators: "Brobble" is a portmanteau of "Brick" and "Cobble".
 | 
			
		||||
	-- Translate however you see fit.
 | 
			
		||||
	description = S("Brobble Spread"),
 | 
			
		||||
	tiles = {"building_blocks_brobble.png"},
 | 
			
		||||
	inventory_image = "building_blocks_brobble_spread_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:gravel_spread", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Gravel Spread"),
 | 
			
		||||
	tiles = {"default_gravel.png"},
 | 
			
		||||
	inventory_image = "building_blocks_gravel_spread_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=2},
 | 
			
		||||
	sounds = default.node_sound_dirt_defaults({
 | 
			
		||||
		footstep = {name="default_gravel_footstep", gain=0.5},
 | 
			
		||||
		dug = {name="default_gravel_footstep", gain=1.0},
 | 
			
		||||
	}),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:hardwood", {
 | 
			
		||||
	tiles = {"building_blocks_hardwood.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	description = S("Hardwood"),
 | 
			
		||||
	groups = {choppy=1,flammable=1},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("moreblocks") then
 | 
			
		||||
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"marble",
 | 
			
		||||
		"building_blocks:Marble",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Marble",
 | 
			
		||||
			tiles = {"building_blocks_marble.png"},
 | 
			
		||||
			groups = {cracky=3},
 | 
			
		||||
			sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"hardwood",
 | 
			
		||||
		"building_blocks:hardwood",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Hardwood",
 | 
			
		||||
			tiles = {"building_blocks_hardwood.png"},
 | 
			
		||||
			groups = {choppy=1,flammable=1},
 | 
			
		||||
			sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"fakegrass",
 | 
			
		||||
		"building_blocks:fakegrass",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Grass",
 | 
			
		||||
			tiles = {"default_grass.png"},
 | 
			
		||||
			groups = {crumbly=3},
 | 
			
		||||
			sounds = default.node_sound_dirt_defaults({
 | 
			
		||||
				footstep = {name="default_grass_footstep", gain=0.4},
 | 
			
		||||
			}),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	for _, i in ipairs(stairsplus.shapes_list) do
 | 
			
		||||
		local class = i[1]
 | 
			
		||||
		local cut = i[2]
 | 
			
		||||
		minetest.unregister_item("moreblocks:"..class.."tar"..cut)
 | 
			
		||||
		minetest.register_alias("moreblocks:"..class.."tar"..cut, "building_blocks:"..class.."tar"..cut)
 | 
			
		||||
 | 
			
		||||
	end
 | 
			
		||||
	minetest.unregister_item("moreblocks:tar")
 | 
			
		||||
	minetest.register_alias("moreblocks:tar", "building_blocks:Tar")
 | 
			
		||||
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"tar",
 | 
			
		||||
		"building_blocks:Tar",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Tar",
 | 
			
		||||
			tiles = {"building_blocks_tar.png"},
 | 
			
		||||
			groups = {crumbly=1},
 | 
			
		||||
			sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"grate",
 | 
			
		||||
		"building_blocks:grate",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Grate",
 | 
			
		||||
			tiles = {"building_blocks_grate.png"},
 | 
			
		||||
			groups = {cracky=1},
 | 
			
		||||
			sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"Adobe",
 | 
			
		||||
		"building_blocks:Adobe",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Adobe",
 | 
			
		||||
			tiles = {"building_blocks_Adobe.png"},
 | 
			
		||||
			groups = {crumbly=3},
 | 
			
		||||
			sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
	stairsplus:register_all(
 | 
			
		||||
		"building_blocks",
 | 
			
		||||
		"Roofing",
 | 
			
		||||
		"building_blocks:Roofing",
 | 
			
		||||
		{
 | 
			
		||||
			description = "Roofing",
 | 
			
		||||
			tiles = {"building_blocks_Roofing.png"},
 | 
			
		||||
			groups = {snappy=3},
 | 
			
		||||
			sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
		}
 | 
			
		||||
	)
 | 
			
		||||
else
 | 
			
		||||
	bb_stairs = {}
 | 
			
		||||
 | 
			
		||||
	-- Node will be called stairs:stair_<subname>
 | 
			
		||||
	function bb_stairs.register_stair(subname, recipeitem, groups, images, description)
 | 
			
		||||
		minetest.register_node("building_blocks:stair_" .. subname, {
 | 
			
		||||
			description = description,
 | 
			
		||||
			drawtype = "nodebox",
 | 
			
		||||
			tiles = images,
 | 
			
		||||
			paramtype = "light",
 | 
			
		||||
			paramtype2 = "facedir",
 | 
			
		||||
			is_ground_content = true,
 | 
			
		||||
			groups = groups,
 | 
			
		||||
			node_box = {
 | 
			
		||||
				type = "fixed",
 | 
			
		||||
				fixed = {
 | 
			
		||||
					{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
 | 
			
		||||
					{-0.5, 0, 0, 0.5, 0.5, 0.5},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		minetest.register_craft({
 | 
			
		||||
			output = 'building_blocks:stair_' .. subname .. ' 4',
 | 
			
		||||
			recipe = {
 | 
			
		||||
				{recipeitem, "", ""},
 | 
			
		||||
				{recipeitem, recipeitem, ""},
 | 
			
		||||
				{recipeitem, recipeitem, recipeitem},
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		-- Flipped recipe for the silly minecrafters
 | 
			
		||||
		minetest.register_craft({
 | 
			
		||||
			output = 'building_blocks:stair_' .. subname .. ' 4',
 | 
			
		||||
			recipe = {
 | 
			
		||||
				{"", "", recipeitem},
 | 
			
		||||
				{"", recipeitem, recipeitem},
 | 
			
		||||
				{recipeitem, recipeitem, recipeitem},
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- Node will be called stairs:slab_<subname>
 | 
			
		||||
	function bb_stairs.register_slab(subname, recipeitem, groups, images, description)
 | 
			
		||||
		minetest.register_node("building_blocks:slab_" .. subname, {
 | 
			
		||||
			description = description,
 | 
			
		||||
			drawtype = "nodebox",
 | 
			
		||||
			tiles = images,
 | 
			
		||||
			paramtype = "light",
 | 
			
		||||
			is_ground_content = true,
 | 
			
		||||
			groups = groups,
 | 
			
		||||
			node_box = {
 | 
			
		||||
				type = "fixed",
 | 
			
		||||
				fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
 | 
			
		||||
			},
 | 
			
		||||
			selection_box = {
 | 
			
		||||
				type = "fixed",
 | 
			
		||||
				fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		minetest.register_craft({
 | 
			
		||||
			output = 'building_blocks:slab_' .. subname .. ' 3',
 | 
			
		||||
			recipe = {
 | 
			
		||||
				{recipeitem, recipeitem, recipeitem},
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- Nodes will be called stairs:{stair,slab}_<subname>
 | 
			
		||||
	function bb_stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab)
 | 
			
		||||
		bb_stairs.register_stair(subname, recipeitem, groups, images, desc_stair)
 | 
			
		||||
		bb_stairs.register_slab(subname, recipeitem, groups, images, desc_slab)
 | 
			
		||||
	end
 | 
			
		||||
	bb_stairs.register_stair_and_slab("marble","building_blocks:Marble",
 | 
			
		||||
		{cracky=3},
 | 
			
		||||
		{"building_blocks_marble.png"},
 | 
			
		||||
		S("Marble stair"),
 | 
			
		||||
		S("Marble slab")
 | 
			
		||||
	)
 | 
			
		||||
	bb_stairs.register_stair_and_slab("hardwood","building_blocks:hardwood",
 | 
			
		||||
		{choppy=1,flammable=1},
 | 
			
		||||
		{"building_blocks_hardwood.png"},
 | 
			
		||||
		S("Hardwood stair"),
 | 
			
		||||
		S("Hardwood slab")
 | 
			
		||||
	)
 | 
			
		||||
	bb_stairs.register_stair_and_slab("fakegrass","building_blocks:fakegrass",
 | 
			
		||||
		{crumbly=3},
 | 
			
		||||
		{"default_grass.png"},
 | 
			
		||||
		S("Grass stair"),
 | 
			
		||||
		S("Grass slab")
 | 
			
		||||
	)
 | 
			
		||||
	bb_stairs.register_stair_and_slab("tar","building_blocks:Tar",
 | 
			
		||||
		{crumbly=1},
 | 
			
		||||
		{"building_blocks_tar.png"},
 | 
			
		||||
		S("Tar stair"),
 | 
			
		||||
		S("Tar slab")
 | 
			
		||||
	)
 | 
			
		||||
	bb_stairs.register_stair_and_slab("grate","building_blocks:grate",
 | 
			
		||||
		{cracky=1},
 | 
			
		||||
		{"building_blocks_grate.png"},
 | 
			
		||||
		S("Grate Stair"),
 | 
			
		||||
		S("Grate Slab")
 | 
			
		||||
	)
 | 
			
		||||
	bb_stairs.register_stair_and_slab("Adobe", "building_blocks:Adobe",
 | 
			
		||||
		{crumbly=3},
 | 
			
		||||
		{"building_blocks_Adobe.png"},
 | 
			
		||||
		S("Adobe stair"),
 | 
			
		||||
		S("Adobe slab")
 | 
			
		||||
	)
 | 
			
		||||
	bb_stairs.register_stair_and_slab("Roofing", "building_blocks:Roofing",
 | 
			
		||||
		{snappy=3},
 | 
			
		||||
		{"building_blocks_Roofing.png"},
 | 
			
		||||
		S("Roofing stair"),
 | 
			
		||||
		S("Roofing slab")
 | 
			
		||||
	)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "building_blocks:hardwood",
 | 
			
		||||
	burntime = 28,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:fakegrass", {
 | 
			
		||||
	tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
 | 
			
		||||
	description = S("Fake Grass"),
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
		sounds = default.node_sound_dirt_defaults({
 | 
			
		||||
		footstep = {name="default_grass_footstep", gain=0.4},
 | 
			
		||||
	}),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craftitem("building_blocks:sticks", {
 | 
			
		||||
	description = S("Small bundle of sticks"),
 | 
			
		||||
	image = "building_blocks_sticks.png",
 | 
			
		||||
	on_place_on_ground = minetest.craftitem_place_item,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craftitem("building_blocks:tar_base", {
 | 
			
		||||
	description = S("Tar base"),
 | 
			
		||||
	image = "building_blocks_tar_base.png",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Tar
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:knife 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:tar_block"},
 | 
			
		||||
		{"group:stick"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("tar", "building_blocks:Tar")
 | 
			
		||||
minetest.register_alias("fakegrass", "building_blocks:fakegrass")
 | 
			
		||||
minetest.register_alias("tar_knife", "building_blocks:knife")
 | 
			
		||||
minetest.register_alias("adobe", "building_blocks:Adobe")
 | 
			
		||||
minetest.register_alias("building_blocks_roofing", "building_blocks:Roofing")
 | 
			
		||||
minetest.register_alias("hardwood", "building_blocks:hardwood")
 | 
			
		||||
minetest.register_alias("sticks", "building_blocks:sticks")
 | 
			
		||||
minetest.register_alias("building_blocks:faggot", "building_blocks:sticks")
 | 
			
		||||
minetest.register_alias("marble", "building_blocks:Marble")
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:Tar", {
 | 
			
		||||
	description = S("Tar"),
 | 
			
		||||
	tiles = {"building_blocks_tar.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=1, tar_block = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:Marble", {
 | 
			
		||||
	description = S("Marble"),
 | 
			
		||||
	tiles = {"building_blocks_marble.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=3, marble = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "building_blocks:sticks",
 | 
			
		||||
	burntime = 5,
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "building_blocks:Tar",
 | 
			
		||||
	burntime = 40,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "cooking",
 | 
			
		||||
	output = "building_blocks:Tar",
 | 
			
		||||
	recipe = "building_blocks:tar_base",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_tool("building_blocks:knife", {
 | 
			
		||||
	description = S("Tar Knife"),
 | 
			
		||||
	inventory_image = "building_blocks_knife.png",
 | 
			
		||||
	tool_capabilities = {
 | 
			
		||||
		max_drop_level=0,
 | 
			
		||||
		groupcaps={
 | 
			
		||||
			choppy={times={[2]=7.50, [3]=2.80}, uses=100, maxlevel=1},
 | 
			
		||||
			fleshy={times={[2]=5.50, [3]=2.80}, uses=100, maxlevel=1}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "building_blocks:Marble 9",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:clay", "group:tar_block", "default:clay"},
 | 
			
		||||
		{"group:tar_block","default:clay", "group:tar_block"},
 | 
			
		||||
		{"default:clay", "group:tar_block","default:clay"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if not minetest.get_modpath("technic") then
 | 
			
		||||
	minetest.register_node( ":technic:granite", {
 | 
			
		||||
		    description = S("Granite"),
 | 
			
		||||
		    tiles = { "technic_granite.png" },
 | 
			
		||||
		    is_ground_content = true,
 | 
			
		||||
		    groups = {cracky=1},
 | 
			
		||||
		    sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = "technic:granite 9",
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{ "group:tar_block", "group:marble", "group:tar_block" },
 | 
			
		||||
			{ "group:marble", "group:tar_block", "group:marble" },
 | 
			
		||||
			{ "group:tar_block", "group:marble", "group:tar_block" }
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	if minetest.get_modpath("moreblocks") then
 | 
			
		||||
		stairsplus:register_all("technic", "granite", "technic:granite", {
 | 
			
		||||
				description=S("Granite"),
 | 
			
		||||
				groups={cracky=1, not_in_creative_inventory=1},
 | 
			
		||||
				tiles={"technic_granite.png"},
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
dofile(modpath.."/alias.lua")
 | 
			
		||||
dofile(modpath.."/node_stairs.lua")
 | 
			
		||||
dofile(modpath.."/others.lua")
 | 
			
		||||
dofile(modpath.."/recipes.lua")
 | 
			
		||||
							
								
								
									
										226
									
								
								building_blocks/node_stairs.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,226 @@
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local stairs_groups_names = {"cracky","choppy","flammable","crumbly","snappy"}
 | 
			
		||||
 | 
			
		||||
local function building_blocks_stairs(nodename, def)
 | 
			
		||||
	minetest.register_node(nodename, def)
 | 
			
		||||
	if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs") then
 | 
			
		||||
		local mod, name = nodename:match("(.*):(.*)")
 | 
			
		||||
		minetest.register_alias(mod .. ":slab_" .. name, "stairs:slab_" .. name)
 | 
			
		||||
		minetest.register_alias(mod .. ":stair_" .. name, "stairs:stair_" .. name)
 | 
			
		||||
		local stairs_groups = {}
 | 
			
		||||
		for _, groupname in ipairs(stairs_groups_names) do
 | 
			
		||||
			stairs_groups[groupname] = def.groups[groupname]
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if minetest.get_modpath("moreblocks") then
 | 
			
		||||
			stairsplus:register_all(
 | 
			
		||||
				mod,
 | 
			
		||||
				name,
 | 
			
		||||
				nodename,
 | 
			
		||||
				{
 | 
			
		||||
					description = def.description,
 | 
			
		||||
					tiles = def.tiles,
 | 
			
		||||
					groups = stairs_groups,
 | 
			
		||||
					sounds = def.sounds,
 | 
			
		||||
				}
 | 
			
		||||
			)
 | 
			
		||||
		else
 | 
			
		||||
			stairs.register_stair_and_slab(name,nodename,
 | 
			
		||||
				stairs_groups,
 | 
			
		||||
				def.tiles,
 | 
			
		||||
				("%s Stair"):format(def.description),
 | 
			
		||||
				("%s Slab"):format(def.description),
 | 
			
		||||
				def.sounds
 | 
			
		||||
			)
 | 
			
		||||
		end	
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
building_blocks_stairs("building_blocks:grate", {
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	description = S("Grate"),
 | 
			
		||||
	tiles = {"building_blocks_grate.png"},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=1},
 | 
			
		||||
	sounds = default.node_sound_metal_defaults(),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:smoothglass", {
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	description = S("Streak Free Glass"),
 | 
			
		||||
	tiles = {"building_blocks_sglass.png"},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:woodglass", {
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	description = S("Wood Framed Glass"),
 | 
			
		||||
	tiles = {"building_blocks_wglass.png"},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
building_blocks_stairs("building_blocks:Adobe", {
 | 
			
		||||
	tiles = {"building_blocks_Adobe.png"},
 | 
			
		||||
	description = S("Adobe"),
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:fakegrass", {
 | 
			
		||||
	tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
 | 
			
		||||
	description = S("Fake Grass"),
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
	sounds = default.node_sound_dirt_defaults({
 | 
			
		||||
		footstep = {name="default_grass_footstep", gain=0.4},
 | 
			
		||||
	}),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:hardwood", {
 | 
			
		||||
	tiles = {"building_blocks_hardwood.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	description = S("Hardwood"),
 | 
			
		||||
	groups = {choppy=1,flammable=1},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:Roofing", {
 | 
			
		||||
	tiles = {"building_blocks_Roofing.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	description = S("Roof block"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:Tar", {
 | 
			
		||||
	description = S("Tar"),
 | 
			
		||||
	tiles = {"building_blocks_tar.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=1, tar_block = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
building_blocks_stairs("building_blocks:Marble", {
 | 
			
		||||
	description = S("Marble"),
 | 
			
		||||
	tiles = {"building_blocks_marble.png"},
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=3, marble = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:brobble_spread", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	-- Translators: "Brobble" is a portmanteau of "Brick" and "Cobble".
 | 
			
		||||
	-- Translate however you see fit.
 | 
			
		||||
	description = S("Brobble Spread"),
 | 
			
		||||
	tiles = {"building_blocks_brobble.png"},
 | 
			
		||||
	inventory_image = "building_blocks_brobble_spread_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:gravel_spread", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Gravel Spread"),
 | 
			
		||||
	tiles = {"default_gravel.png"},
 | 
			
		||||
	inventory_image = "building_blocks_gravel_spread_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=2},
 | 
			
		||||
	sounds = default.node_sound_dirt_defaults({
 | 
			
		||||
		footstep = {name="default_gravel_footstep", gain=0.5},
 | 
			
		||||
		dug = {name="default_gravel_footstep", gain=1.0},
 | 
			
		||||
	}),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:Tarmac_spread", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Tarmac Spread"),
 | 
			
		||||
	tiles = {"building_blocks_tar.png"},
 | 
			
		||||
	inventory_image = "building_blocks_tar_spread_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_dirt_defaults(),
 | 
			
		||||
})
 | 
			
		||||
minetest.register_node("building_blocks:terrycloth_towel", {
 | 
			
		||||
	drawtype = "raillike",
 | 
			
		||||
	description = S("Terrycloth towel"),
 | 
			
		||||
	tiles = {"building_blocks_towel.png"},
 | 
			
		||||
	inventory_image = "building_blocks_towel_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
                -- but how to specify the dimensions for curved and sideways rails?
 | 
			
		||||
                fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:BWtile", {
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	description = S("Chess board tiling"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"building_blocks_BWtile.png",
 | 
			
		||||
		"building_blocks_BWtile.png^[transformR90",
 | 
			
		||||
		"building_blocks_BWtile.png^[transformR90",
 | 
			
		||||
		"building_blocks_BWtile.png^[transformR90",
 | 
			
		||||
		"building_blocks_BWtile.png",
 | 
			
		||||
		"building_blocks_BWtile.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "building_blocks_bwtile_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
 | 
			
		||||
	},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {crumbly=3},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("building_blocks:Fireplace", {
 | 
			
		||||
	description = S("Fireplace"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"building_blocks_cast_iron.png",
 | 
			
		||||
		"building_blocks_cast_iron.png",
 | 
			
		||||
		"building_blocks_cast_iron.png",
 | 
			
		||||
		"building_blocks_cast_iron_fireplace.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	light_source = default.LIGHT_MAX,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	is_ground_content = true,
 | 
			
		||||
	groups = {cracky=2},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										23
									
								
								building_blocks/others.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,23 @@
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
minetest.register_craftitem("building_blocks:sticks", {
 | 
			
		||||
	description = S("Small bundle of sticks"),
 | 
			
		||||
	image = "building_blocks_sticks.png",
 | 
			
		||||
	on_place_on_ground = minetest.craftitem_place_item,
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craftitem("building_blocks:tar_base", {
 | 
			
		||||
	description = S("Tar base"),
 | 
			
		||||
	image = "building_blocks_tar_base.png",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_tool("building_blocks:knife", {
 | 
			
		||||
	description = S("Tar Knife"),
 | 
			
		||||
	inventory_image = "building_blocks_knife.png",
 | 
			
		||||
	tool_capabilities = {
 | 
			
		||||
		max_drop_level=0,
 | 
			
		||||
		groupcaps={
 | 
			
		||||
			choppy={times={[2]=7.50, [3]=2.80}, uses=100, maxlevel=1},
 | 
			
		||||
			fleshy={times={[2]=5.50, [3]=2.80}, uses=100, maxlevel=1}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										170
									
								
								building_blocks/recipes.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,170 @@
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("moreblocks") then
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = 'building_blocks:sticks 2',
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{'group:stick', ''           , 'group:stick'},
 | 
			
		||||
			{'group:stick', 'group:stick', 'group:stick'},
 | 
			
		||||
			{'group:stick', 'group:stick', 'group:stick'},
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
else
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = 'building_blocks:sticks',
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{'group:stick', 'group:stick'},
 | 
			
		||||
			{'group:stick', 'group:stick'},
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Adobe 3',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:sand"},
 | 
			
		||||
		{"default:clay"},
 | 
			
		||||
		{"group:stick"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:brobble_spread 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:brick", "default:cobble", "default:brick"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:BWtile 10',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:marble", "group:tar_block"},
 | 
			
		||||
		{"group:tar_block", "group:marble"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:fakegrass 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'default:leaves'},
 | 
			
		||||
		{"default:dirt"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Fireplace 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:steel_ingot", "building_blocks:sticks", "default:steel_ingot"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:grate 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:steel_ingot", "default:steel_ingot"},
 | 
			
		||||
		{"default:glass", "default:glass"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:gravel_spread 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:gravel", "default:gravel", "default:gravel"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:hardwood 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:wood", "default:junglewood"},
 | 
			
		||||
		{"default:junglewood", "default:wood"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:hardwood 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:junglewood", "default:wood"},
 | 
			
		||||
		{"default:wood", "default:junglewood"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:knife 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:tar_block"},
 | 
			
		||||
		{"group:stick"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "building_blocks:Marble 9",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:clay", "group:tar_block", "default:clay"},
 | 
			
		||||
		{"group:tar_block","default:clay", "group:tar_block"},
 | 
			
		||||
		{"default:clay", "group:tar_block","default:clay"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Roofing 10',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"building_blocks:Adobe", "building_blocks:Adobe"},
 | 
			
		||||
		{"building_blocks:Adobe", "building_blocks:Adobe"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'default:stick 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'building_blocks:sticks'},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:tar_base 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:coal_lump", "default:gravel"},
 | 
			
		||||
		{"default:gravel", "default:coal_lump"}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:tar_base 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:gravel", "default:coal_lump"},
 | 
			
		||||
		{"default:coal_lump", "default:gravel"}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:Tarmac_spread 4',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"group:tar_block", "group:tar_block"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:terrycloth_towel 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"farming:string", "farming:string", "farming:string"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'building_blocks:woodglass 1',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:wood"},
 | 
			
		||||
		{"default:glass"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "cooking",
 | 
			
		||||
	output = "building_blocks:smoothglass",
 | 
			
		||||
	recipe = "default:glass"
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "cooking",
 | 
			
		||||
	output = "building_blocks:Tar",
 | 
			
		||||
	recipe = "building_blocks:tar_base",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "building_blocks:hardwood",
 | 
			
		||||
	burntime = 28,
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "building_blocks:sticks",
 | 
			
		||||
	burntime = 5,
 | 
			
		||||
})
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "building_blocks:Tar",
 | 
			
		||||
	burntime = 40,
 | 
			
		||||
})
 | 
			
		||||
@@ -3,14 +3,14 @@ local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local chains_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.1, -0.625, -0.1, 0.1, 0.5, 0.1 }
 | 
			
		||||
	fixed = { -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local topchains_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{ -0.25, 0.35, -0.25, 0.25, 0.5, 0.25 },
 | 
			
		||||
		{ -0.1, -0.625, -0.1, 0.1, 0.4, 0.1 }
 | 
			
		||||
		{ -0.1, -0.5, -0.1, 0.1, 0.4, 0.1 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -73,7 +73,7 @@ minetest.register_node("chains:chain_top_brass", {
 | 
			
		||||
minetest.register_node("chains:chandelier", {
 | 
			
		||||
	description = S("Chandelier (wrought iron)"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	light_source = default.LIGHT_MAX-2,
 | 
			
		||||
	light_source = 12,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
@@ -99,7 +99,7 @@ minetest.register_node("chains:chandelier", {
 | 
			
		||||
minetest.register_node("chains:chandelier_brass", {
 | 
			
		||||
	description = S("Chandelier (brass)"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	light_source = default.LIGHT_MAX-2,
 | 
			
		||||
	light_source = 12,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +0,0 @@
 | 
			
		||||
 | 
			
		||||
# Language: Español
 | 
			
		||||
# Author: Diego Martínez <lkaezadl3@gmail.com>
 | 
			
		||||
 | 
			
		||||
Plastic sheet = Placa de Plastico
 | 
			
		||||
Unprocessed Plastic base = Base de Plastico No Procesada
 | 
			
		||||
@@ -33,10 +33,10 @@ local colors = { "computer_cyan.png", "computer_magenta.png", "computer_red.png"
 | 
			
		||||
 | 
			
		||||
local background = "image[0,0;3.55,6.66;computer_black.png]"
 | 
			
		||||
local buttons = "button[3,4.5;0.6,0.6;left;<]"
 | 
			
		||||
	.."button[3.6,4.5;0.6,0.6;rotateleft;L]"
 | 
			
		||||
	.."button[3.6,4.5;0.6,0.6;rotateleft;"..minetest.formspec_escape(S("L")).."]"
 | 
			
		||||
	.."button[4.2,4.5;0.6,0.6;down;v]"
 | 
			
		||||
	.."button[4.2,5.3;0.6,0.6;drop;V]"
 | 
			
		||||
	.."button[4.8,4.5;0.6,0.6;rotateright;R]"
 | 
			
		||||
	.."button[4.8,4.5;0.6,0.6;rotateright;"..minetest.formspec_escape(S("R")).."]"
 | 
			
		||||
	.."button[5.4,4.5;0.6,0.6;right;>]"
 | 
			
		||||
	.."button[3.5,3;2,2;new;"..minetest.formspec_escape(S("New Game")).."]"
 | 
			
		||||
 | 
			
		||||
@@ -231,7 +231,7 @@ local function step(pos, fields)
 | 
			
		||||
	local scr = { formsize, background,
 | 
			
		||||
		t.boardstring, t.previewstring,
 | 
			
		||||
		draw_shape(t.cur, t.x, t.y, t.rot, boardx, boardy),
 | 
			
		||||
		"label[3.8,0.1;Next...]label[3.8,2.7;Score: ",
 | 
			
		||||
		"label[3.8,0.1;"..S("Next...").."]label[3.8,2.7;"..S("Score: "), 
 | 
			
		||||
		t.score, close, buttons }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,8 @@ local function start_smoke(pos, node, clicker, chimney)
 | 
			
		||||
			end, s_handle)
 | 
			
		||||
		end
 | 
			
		||||
		minetest.delete_particlespawner(id)
 | 
			
		||||
		this_spawner_meta:set_int("smoky", nil)
 | 
			
		||||
		this_spawner_meta:set_int("sound", nil)
 | 
			
		||||
		this_spawner_meta:set_int("smoky", 0)
 | 
			
		||||
		this_spawner_meta:set_int("sound", 0)
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -34,7 +34,7 @@ local function start_smoke(pos, node, clicker, chimney)
 | 
			
		||||
		})
 | 
			
		||||
		if chimney == 1 then
 | 
			
		||||
			this_spawner_meta:set_int("smoky", id)
 | 
			
		||||
			this_spawner_meta:set_int("sound", nil)
 | 
			
		||||
			this_spawner_meta:set_int("sound", 0)
 | 
			
		||||
		else
 | 
			
		||||
			s_handle = minetest.sound_play("fire_small", {
 | 
			
		||||
				pos = pos,
 | 
			
		||||
@@ -62,47 +62,40 @@ local function stop_smoke(pos)
 | 
			
		||||
		end, s_handle)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	this_spawner_meta:set_int("smoky", nil)
 | 
			
		||||
	this_spawner_meta:set_int("sound", nil)
 | 
			
		||||
	this_spawner_meta:set_int("smoky", 0)
 | 
			
		||||
	this_spawner_meta:set_int("sound", 0)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- FLAME TYPES
 | 
			
		||||
local flame_types = {
 | 
			
		||||
	{ "fake",  S("Fake fire") },
 | 
			
		||||
	{ "ice",   S("Ice fire")  },
 | 
			
		||||
}
 | 
			
		||||
minetest.register_node("fake_fire:ice_fire", {
 | 
			
		||||
	inventory_image = "ice_fire_inv.png",
 | 
			
		||||
	description = S("Ice fire"),
 | 
			
		||||
	drawtype = "plantlike",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {dig_immediate=3, not_in_creative_inventory=1},
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	buildable_to = true,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	light_source = 14,
 | 
			
		||||
	waving = 1,
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{name="ice_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
		aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
	},
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		start_smoke(pos, node, clicker)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	on_destruct = function (pos)
 | 
			
		||||
		stop_smoke(pos)
 | 
			
		||||
		minetest.sound_play("fire_extinguish", {
 | 
			
		||||
			pos = pos, max_hear_distance = 5
 | 
			
		||||
		})
 | 
			
		||||
	end,
 | 
			
		||||
	drop = ""
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
for _, f in ipairs(flame_types) do
 | 
			
		||||
	local name, desc = unpack(f)
 | 
			
		||||
	minetest.register_node("fake_fire:"..name.."_fire", {
 | 
			
		||||
		inventory_image = name.."_fire_inv.png",
 | 
			
		||||
		description = desc,
 | 
			
		||||
		drawtype = "plantlike",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		groups = {dig_immediate=3, not_in_creative_inventory=1},
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		buildable_to = true,
 | 
			
		||||
		walkable = false,
 | 
			
		||||
		light_source = 14,
 | 
			
		||||
		waving = 1,
 | 
			
		||||
		tiles = {
 | 
			
		||||
			{name=name.."_fire_animated.png", animation={type="vertical_frames",
 | 
			
		||||
			aspect_w=16, aspect_h=16, length=1.5}},
 | 
			
		||||
		},
 | 
			
		||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
			start_smoke(pos, node, clicker)
 | 
			
		||||
			return itemstack
 | 
			
		||||
		end,
 | 
			
		||||
		on_destruct = function (pos)
 | 
			
		||||
			stop_smoke(pos)
 | 
			
		||||
			minetest.sound_play("fire_extinguish", {
 | 
			
		||||
				pos = pos, max_hear_distance = 5
 | 
			
		||||
			})
 | 
			
		||||
		end,
 | 
			
		||||
		drop = ""
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
minetest.register_alias("fake_fire:fake_fire", "fire:permanent_flame")
 | 
			
		||||
 | 
			
		||||
minetest.register_node("fake_fire:fancy_fire", {
 | 
			
		||||
		inventory_image = "fancy_fire_inv.png",
 | 
			
		||||
@@ -190,43 +183,18 @@ for _, mat in ipairs(materials) do
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- FLINT and STEEL
 | 
			
		||||
minetest.register_tool("fake_fire:flint_and_steel", {
 | 
			
		||||
	description = S("Flint and steel"),
 | 
			
		||||
	inventory_image = "flint_and_steel.png",
 | 
			
		||||
	liquids_pointable = false,
 | 
			
		||||
	stack_max = 1,
 | 
			
		||||
	tool_capabilities = {
 | 
			
		||||
		full_punch_interval = 1.0,
 | 
			
		||||
		max_drop_level=0,
 | 
			
		||||
		groupcaps={flamable = {uses=65, maxlevel=1}}
 | 
			
		||||
	},
 | 
			
		||||
	on_use = function(itemstack, user, pointed_thing)
 | 
			
		||||
		if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then
 | 
			
		||||
			if not minetest.is_protected(pointed_thing.above, user:get_player_name()) then
 | 
			
		||||
				if string.find(minetest.get_node(pointed_thing.under).name, "ice") then
 | 
			
		||||
					minetest.set_node(pointed_thing.above, {name="fake_fire:ice_fire"})
 | 
			
		||||
				else
 | 
			
		||||
					minetest.set_node(pointed_thing.above, {name="fake_fire:fake_fire"})
 | 
			
		||||
				end
 | 
			
		||||
			else
 | 
			
		||||
				minetest.chat_send_player(user:get_player_name(), S("This area is protected!"))
 | 
			
		||||
			end
 | 
			
		||||
		else
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
minetest.register_alias("fake_fire:flint_and_steel", "fire:flint_and_steel")
 | 
			
		||||
 | 
			
		||||
		itemstack:add_wear(65535/65)
 | 
			
		||||
		return itemstack
 | 
			
		||||
minetest.override_item("default:ice", {
 | 
			
		||||
	on_ignite = function(pos, igniter)
 | 
			
		||||
		local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
 | 
			
		||||
		if minetest.get_node(flame_pos).name == "air" then
 | 
			
		||||
			minetest.set_node(flame_pos, {name = "fake_fire:ice_fire"})
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- CRAFTS
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = 'fake_fire:flint_and_steel',
 | 
			
		||||
	recipe = {"default:obsidian_shard", "default:steel_ingot"}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
 
 | 
			
		||||
@@ -4,52 +4,49 @@ local S = homedecor_i18n.gettext
 | 
			
		||||
minetest.register_node("homedecor:bathroom_tiles_dark", {
 | 
			
		||||
	description = S("Bathroom/kitchen tiles (dark)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_bg.png", color = 0xff606060 },
 | 
			
		||||
		"homedecor_bathroom_tiles_fg.png"
 | 
			
		||||
		"homedecor_bathroom_tiles_bg.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_fg.png", color = 0xff606060 },
 | 
			
		||||
	},
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_block_with_overlay.obj",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	place_param2 = 240,
 | 
			
		||||
	groups = {cracky=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:bathroom_tiles_medium", {
 | 
			
		||||
	description = S("Bathroom/kitchen tiles (medium)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_bg.png", color = 0xffc0c0c0 },
 | 
			
		||||
		"homedecor_bathroom_tiles_fg.png"
 | 
			
		||||
		"homedecor_bathroom_tiles_bg.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_fg.png", color = 0xffc0c0c0 },
 | 
			
		||||
	},
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_block_with_overlay.obj",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	place_param2 = 240,
 | 
			
		||||
	groups = {cracky=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:bathroom_tiles_light", {
 | 
			
		||||
	description = S("Bathroom/kitchen tiles (light)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_bg.png", color = 0xffffffff },
 | 
			
		||||
		"homedecor_bathroom_tiles_fg.png"
 | 
			
		||||
		"homedecor_bathroom_tiles_bg.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
			{ name = "homedecor_bathroom_tiles_fg.png", color = 0xffffffff },
 | 
			
		||||
	},
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_block_with_overlay.obj",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	place_param2 = 240,
 | 
			
		||||
	groups = {cracky=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local tr_cbox = {
 | 
			
		||||
@@ -167,21 +164,3 @@ minetest.register_lbm({
 | 
			
		||||
		meta:set_string("palette", "ext")
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:recolor_bathroom_tiles",
 | 
			
		||||
	label = "Convert bathroom tiles to use UD extended palette",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = {
 | 
			
		||||
		"homedecor:bathroom_tiles_light",
 | 
			
		||||
		"homedecor:bathroom_tiles_medium",
 | 
			
		||||
		"homedecor:bathroom_tiles_dark",
 | 
			
		||||
	},
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		if meta:get_string("palette") ~= "ext" then
 | 
			
		||||
			minetest.swap_node(pos, { name = node.name, param2 = unifieddyes.convert_classic_palette[node.param2] })
 | 
			
		||||
			meta:set_string("palette", "ext")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -56,7 +56,7 @@ homedecor.register("bed_regular", {
 | 
			
		||||
			return homedecor.bed_expansion(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
	after_dig_node = function(pos)
 | 
			
		||||
	after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
		homedecor.unextend_bed(pos)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
@@ -65,9 +65,7 @@ homedecor.register("bed_regular", {
 | 
			
		||||
			homedecor.bed_expansion(pos, clicker, itemstack, pointed_thing, true)
 | 
			
		||||
			return itemstack
 | 
			
		||||
		else
 | 
			
		||||
--			if minetest.get_modpath("beds") then
 | 
			
		||||
--				beds.on_rightclick(pos, clicker)
 | 
			
		||||
--			end
 | 
			
		||||
			homedecor.beds_on_rightclick(pos, node, clicker)
 | 
			
		||||
			return itemstack
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -91,16 +89,13 @@ homedecor.register("bed_extended", {
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	expand = { forward = "air" },
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	after_dig_node = function(pos)
 | 
			
		||||
	after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
		homedecor.unextend_bed(pos)
 | 
			
		||||
	end,
 | 
			
		||||
--	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
--		local itemname = itemstack:get_name()
 | 
			
		||||
--		if minetest.get_modpath("beds") then
 | 
			
		||||
--			beds.on_rightclick(pos, clicker)
 | 
			
		||||
--		end
 | 
			
		||||
--		return itemstack
 | 
			
		||||
--	end,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		homedecor.beds_on_rightclick(pos, node, clicker)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	drop = "homedecor:bed_regular"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -123,21 +118,20 @@ homedecor.register("bed_kingsize", {
 | 
			
		||||
	node_box = kbed_cbox,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
		local inv = digger:get_inventory()
 | 
			
		||||
		if digger:get_player_control().sneak and inv:room_for_item("main", "bed_regular 1") then
 | 
			
		||||
		if digger:get_player_control().sneak and inv:room_for_item("main", "homedecor:bed_regular 2") then
 | 
			
		||||
			inv:remove_item("main", "homedecor:bed_kingsize 1")
 | 
			
		||||
			inv:add_item("main", "homedecor:bed_regular 2")
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
--	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
--		local itemname = itemstack:get_name()
 | 
			
		||||
--		if minetest.get_modpath("beds") then
 | 
			
		||||
--			beds.on_rightclick(pos, clicker)
 | 
			
		||||
--		end
 | 
			
		||||
--		return itemstack
 | 
			
		||||
--	end
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		homedecor.beds_on_rightclick(pos, node, clicker)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
for _, w in pairs({ N_("mahogany"), N_("oak") }) do
 | 
			
		||||
 
 | 
			
		||||
@@ -1,164 +1,175 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local function N_(x) return x end
 | 
			
		||||
 | 
			
		||||
local bookcolors = {
 | 
			
		||||
	{ N_("red"),    0xffd26466 },
 | 
			
		||||
	{ N_("green"),  0xff62aa66 },
 | 
			
		||||
	{ N_("blue"),   0xff8686d7 },
 | 
			
		||||
	{ N_("violet"), 0xff9c65a7 },
 | 
			
		||||
	{ N_("grey"),   0xff757579 },
 | 
			
		||||
	{ N_("brown"),  0xff896958 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local BOOK_FORMNAME = "homedecor:book_form"
 | 
			
		||||
 | 
			
		||||
local player_current_book = { }
 | 
			
		||||
 | 
			
		||||
local function book_dig(pos, node, digger)
 | 
			
		||||
	if minetest.is_protected(pos, digger:get_player_name()) then return end
 | 
			
		||||
	local meta = minetest.get_meta(pos)
 | 
			
		||||
	local data = minetest.serialize({
 | 
			
		||||
		title = meta:get_string("title") or "",
 | 
			
		||||
		text = meta:get_string("text") or "",
 | 
			
		||||
		owner = meta:get_string("owner") or "",
 | 
			
		||||
		_recover = meta:get_string("_recover") or "",
 | 
			
		||||
	})
 | 
			
		||||
	local stack = ItemStack({
 | 
			
		||||
		name = "homedecor:book",
 | 
			
		||||
		metadata = data,
 | 
			
		||||
	})
 | 
			
		||||
	stack = digger:get_inventory():add_item("main", stack)
 | 
			
		||||
	if not stack:is_empty() then
 | 
			
		||||
		minetest.item_drop(stack, digger, pos)
 | 
			
		||||
for _, c in ipairs(bookcolors) do
 | 
			
		||||
	local color, hue = unpack(c)
 | 
			
		||||
 | 
			
		||||
	local function book_dig(pos, node, digger)
 | 
			
		||||
		if minetest.is_protected(pos, digger:get_player_name()) then return end
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local data = minetest.serialize({
 | 
			
		||||
			title = meta:get_string("title") or "",
 | 
			
		||||
			text = meta:get_string("text") or "",
 | 
			
		||||
			owner = meta:get_string("owner") or "",
 | 
			
		||||
			_recover = meta:get_string("_recover") or "",
 | 
			
		||||
		})
 | 
			
		||||
		local stack = ItemStack({
 | 
			
		||||
			name = "homedecor:book_"..color,
 | 
			
		||||
			metadata = data,
 | 
			
		||||
		})
 | 
			
		||||
		stack = digger:get_inventory():add_item("main", stack)
 | 
			
		||||
		if not stack:is_empty() then
 | 
			
		||||
			minetest.item_drop(stack, digger, pos)
 | 
			
		||||
		end
 | 
			
		||||
		minetest.remove_node(pos)
 | 
			
		||||
	end
 | 
			
		||||
	minetest.remove_node(pos)
 | 
			
		||||
 | 
			
		||||
	homedecor.register("book_"..color, {
 | 
			
		||||
		description = S("Writable Book (@1)", S(color)),
 | 
			
		||||
		mesh = "homedecor_book.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			{ name = "homedecor_book_cover.png", color = hue },
 | 
			
		||||
			{ name = "homedecor_book_edges.png", color = "white" }
 | 
			
		||||
		},
 | 
			
		||||
		overlay_tiles = {
 | 
			
		||||
			{ name = "homedecor_book_cover_trim.png", color = "white" },
 | 
			
		||||
			""
 | 
			
		||||
		},
 | 
			
		||||
		groups = { snappy=3, oddly_breakable_by_hand=3, book=1 },
 | 
			
		||||
		walkable = false,
 | 
			
		||||
		stack_max = 1,
 | 
			
		||||
		on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
			local fdir = node.param2
 | 
			
		||||
			minetest.swap_node(pos, { name = "homedecor:book_open_"..color, param2 = fdir })
 | 
			
		||||
		end,
 | 
			
		||||
		on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
			local plname = placer:get_player_name()
 | 
			
		||||
			local pos = pointed_thing.under
 | 
			
		||||
			local node = minetest.get_node_or_nil(pos)
 | 
			
		||||
			local def = node and minetest.registered_nodes[node.name]
 | 
			
		||||
			if not def or not def.buildable_to then
 | 
			
		||||
				pos = pointed_thing.above
 | 
			
		||||
				node = minetest.get_node_or_nil(pos)
 | 
			
		||||
				def = node and minetest.registered_nodes[node.name]
 | 
			
		||||
				if not def or not def.buildable_to then return itemstack end
 | 
			
		||||
			end
 | 
			
		||||
			if minetest.is_protected(pos, plname) then return itemstack end
 | 
			
		||||
			local fdir = minetest.dir_to_facedir(placer:get_look_dir())
 | 
			
		||||
			minetest.set_node(pos, {
 | 
			
		||||
				name = "homedecor:book_"..color,
 | 
			
		||||
				param2 = fdir,
 | 
			
		||||
			})
 | 
			
		||||
			local text = itemstack:get_metadata() or ""
 | 
			
		||||
			local meta = minetest.get_meta(pos)
 | 
			
		||||
			local data = minetest.deserialize(text) or {}
 | 
			
		||||
			if type(data) ~= "table" then
 | 
			
		||||
				data = {}
 | 
			
		||||
				-- Store raw metadata in case some data is lost by the
 | 
			
		||||
				-- transition to the new meta format, so it is not lost
 | 
			
		||||
				-- and can be recovered if needed.
 | 
			
		||||
				meta:set_string("_recover", text)
 | 
			
		||||
			end
 | 
			
		||||
			meta:set_string("title", data.title or "")
 | 
			
		||||
			meta:set_string("text", data.text or "")
 | 
			
		||||
			meta:set_string("owner", data.owner or "")
 | 
			
		||||
			if data.title and data.title ~= "" then
 | 
			
		||||
				meta:set_string("infotext", data.title)
 | 
			
		||||
			end
 | 
			
		||||
			if not creative.is_enabled_for(plname) then
 | 
			
		||||
				itemstack:take_item()
 | 
			
		||||
			end
 | 
			
		||||
			return itemstack
 | 
			
		||||
		end,
 | 
			
		||||
		on_dig = book_dig,
 | 
			
		||||
		selection_box = {
 | 
			
		||||
		        type = "fixed",
 | 
			
		||||
				fixed = {-0.2, -0.5, -0.25, 0.2, -0.35, 0.25}
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	homedecor.register("book_open_"..color, {
 | 
			
		||||
		mesh = "homedecor_book_open.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			{ name = "homedecor_book_cover.png", color = hue },
 | 
			
		||||
			{ name = "homedecor_book_edges.png", color = "white" },
 | 
			
		||||
			{ name = "homedecor_book_pages.png", color = "white" }
 | 
			
		||||
		},
 | 
			
		||||
		groups = { snappy=3, oddly_breakable_by_hand=3, not_in_creative_inventory=1 },
 | 
			
		||||
		drop = "homedecor:book_"..color,
 | 
			
		||||
		walkable = false,
 | 
			
		||||
		on_dig = book_dig,
 | 
			
		||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
			local meta = minetest.get_meta(pos)
 | 
			
		||||
			local player_name = clicker:get_player_name()
 | 
			
		||||
			local title = meta:get_string("title") or ""
 | 
			
		||||
			local text = meta:get_string("text") or ""
 | 
			
		||||
			local owner = meta:get_string("owner") or ""
 | 
			
		||||
			local formspec
 | 
			
		||||
			if owner == "" or owner == player_name then
 | 
			
		||||
				formspec = "size[8,8]"..default.gui_bg..default.gui_bg_img..
 | 
			
		||||
					"field[0.5,1;7.5,0;title;Book title :;"..
 | 
			
		||||
						minetest.formspec_escape(title).."]"..
 | 
			
		||||
					"textarea[0.5,1.5;7.5,7;text;Book content :;"..
 | 
			
		||||
						minetest.formspec_escape(text).."]"..
 | 
			
		||||
					"button_exit[2.5,7.5;3,1;save;Save]"
 | 
			
		||||
			else
 | 
			
		||||
				formspec = "size[8,8]"..default.gui_bg..
 | 
			
		||||
				"button_exit[7,0.25;1,0.5;close;X]"..
 | 
			
		||||
				default.gui_bg_img..
 | 
			
		||||
					"label[0.5,0.5;by "..owner.."]"..
 | 
			
		||||
					"label[0.5,0;"..minetest.formspec_escape(title).."]"..
 | 
			
		||||
					"textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]"
 | 
			
		||||
			end
 | 
			
		||||
			player_current_book[player_name] = pos
 | 
			
		||||
			minetest.show_formspec(player_name, BOOK_FORMNAME, formspec)
 | 
			
		||||
			return itemstack
 | 
			
		||||
		end,
 | 
			
		||||
		on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
			local fdir = node.param2
 | 
			
		||||
			minetest.swap_node(pos, { name = "homedecor:book_"..color, param2 = fdir })
 | 
			
		||||
			minetest.sound_play("homedecor_book_close", {
 | 
			
		||||
				pos=pos,
 | 
			
		||||
				max_hear_distance = 3,
 | 
			
		||||
				gain = 2,
 | 
			
		||||
				})
 | 
			
		||||
		end,
 | 
			
		||||
		selection_box = {
 | 
			
		||||
		        type = "fixed",
 | 
			
		||||
				fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25}
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local inv_img = "homedecor_book_inv.png^homedecor_book_trim_inv.png"
 | 
			
		||||
 | 
			
		||||
homedecor.register("book", {
 | 
			
		||||
	description = S("Writable Book"),
 | 
			
		||||
	mesh = "homedecor_book.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_book_cover.png",
 | 
			
		||||
		{ name = "homedecor_book_edges.png", color = 0xffffffff },
 | 
			
		||||
		{ name = "homedecor_book_cover_trim.png", color = 0xffffffff }
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = inv_img,
 | 
			
		||||
	wield_image = inv_img,
 | 
			
		||||
	groups = { snappy=3, oddly_breakable_by_hand=3, book=1, ud_param2_colorable = 1 },
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	stack_max = 1,
 | 
			
		||||
	on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
		local fdir = node.param2
 | 
			
		||||
		minetest.swap_node(pos, { name = "homedecor:book_open", param2 = fdir })
 | 
			
		||||
	end,
 | 
			
		||||
	on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		local plname = placer:get_player_name()
 | 
			
		||||
		local pos = pointed_thing.under
 | 
			
		||||
		local node = minetest.get_node_or_nil(pos)
 | 
			
		||||
		local def = node and minetest.registered_nodes[node.name]
 | 
			
		||||
		if not def or not def.buildable_to then
 | 
			
		||||
			pos = pointed_thing.above
 | 
			
		||||
			node = minetest.get_node_or_nil(pos)
 | 
			
		||||
			def = node and minetest.registered_nodes[node.name]
 | 
			
		||||
			if not def or not def.buildable_to then return itemstack end
 | 
			
		||||
		end
 | 
			
		||||
		if minetest.is_protected(pos, plname) then return itemstack end
 | 
			
		||||
		local fdir = minetest.dir_to_facedir(placer:get_look_dir())
 | 
			
		||||
		minetest.set_node(pos, {
 | 
			
		||||
			name = "homedecor:book",
 | 
			
		||||
			param2 = fdir,
 | 
			
		||||
		})
 | 
			
		||||
		local text = itemstack:get_metadata() or ""
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local data = minetest.deserialize(text) or {}
 | 
			
		||||
		if type(data) ~= "table" then
 | 
			
		||||
			data = {}
 | 
			
		||||
			-- Store raw metadata in case some data is lost by the
 | 
			
		||||
			-- transition to the new meta format, so it is not lost
 | 
			
		||||
			-- and can be recovered if needed.
 | 
			
		||||
			meta:set_string("_recover", text)
 | 
			
		||||
		end
 | 
			
		||||
		meta:set_string("title", data.title or "")
 | 
			
		||||
		meta:set_string("text", data.text or "")
 | 
			
		||||
		meta:set_string("owner", data.owner or "")
 | 
			
		||||
		if data.title and data.title ~= "" then
 | 
			
		||||
			meta:set_string("infotext", data.title)
 | 
			
		||||
		end
 | 
			
		||||
		if not homedecor.expect_infinite_stacks then
 | 
			
		||||
			itemstack:take_item()
 | 
			
		||||
		end
 | 
			
		||||
		unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew,
 | 
			
		||||
	on_dig = book_dig,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {-0.2, -0.5, -0.25, 0.2, -0.35, 0.25}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("book_open", {
 | 
			
		||||
	mesh = "homedecor_book_open.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_book_cover.png",
 | 
			
		||||
		{ name = "homedecor_book_edges.png", color = 0xffffffff },
 | 
			
		||||
		{ name = "homedecor_book_pages.png", color = 0xffffffff }
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy=3, oddly_breakable_by_hand=3, not_in_creative_inventory=1, ud_param2_colorable = 1 },
 | 
			
		||||
	drop = "homedecor:book",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew,
 | 
			
		||||
	on_dig = book_dig,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local player_name = clicker:get_player_name()
 | 
			
		||||
		local title = meta:get_string("title") or ""
 | 
			
		||||
		local text = meta:get_string("text") or ""
 | 
			
		||||
		local owner = meta:get_string("owner") or ""
 | 
			
		||||
		local formspec
 | 
			
		||||
		if owner == "" or owner == player_name then
 | 
			
		||||
			formspec = "size[8,8]"..default.gui_bg..default.gui_bg_img..
 | 
			
		||||
				"field[0.5,1;7.5,0;title;Book title :;"..
 | 
			
		||||
					minetest.formspec_escape(title).."]"..
 | 
			
		||||
				"textarea[0.5,1.5;7.5,7;text;Book content :;"..
 | 
			
		||||
					minetest.formspec_escape(text).."]"..
 | 
			
		||||
				"button_exit[2.5,7.5;3,1;save;Save]"
 | 
			
		||||
		else
 | 
			
		||||
			formspec = "size[8,8]"..default.gui_bg..
 | 
			
		||||
			"button_exit[7,0.25;1,0.5;close;X]"..
 | 
			
		||||
			default.gui_bg_img..
 | 
			
		||||
				"label[0.5,0.5;by "..owner.."]"..
 | 
			
		||||
				"label[0.5,0;"..minetest.formspec_escape(title).."]"..
 | 
			
		||||
				"textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]"
 | 
			
		||||
		end
 | 
			
		||||
		player_current_book[player_name] = pos
 | 
			
		||||
		minetest.show_formspec(player_name, BOOK_FORMNAME, formspec)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
		local fdir = node.param2
 | 
			
		||||
		minetest.swap_node(pos, { name = "homedecor:book", param2 = fdir })
 | 
			
		||||
		minetest.sound_play("homedecor_book_close", {
 | 
			
		||||
			pos=pos,
 | 
			
		||||
			max_hear_distance = 3,
 | 
			
		||||
			gain = 2,
 | 
			
		||||
			})
 | 
			
		||||
	end,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_on_player_receive_fields(function(player, form_name, fields)
 | 
			
		||||
	if form_name ~= BOOK_FORMNAME or not fields.save then
 | 
			
		||||
		return
 | 
			
		||||
	if form_name ~= BOOK_FORMNAME then
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
	local player_name = player:get_player_name()
 | 
			
		||||
	local pos = player_current_book[player_name]
 | 
			
		||||
	if not pos then return end
 | 
			
		||||
	if not pos then
 | 
			
		||||
		return true
 | 
			
		||||
	end
 | 
			
		||||
	local meta = minetest.get_meta(pos)
 | 
			
		||||
	local owner = meta:get_string("owner")
 | 
			
		||||
	if owner ~= "" and player_name ~= owner or not fields.save then
 | 
			
		||||
		player_current_book[player_name] = nil
 | 
			
		||||
		return true
 | 
			
		||||
	end
 | 
			
		||||
	meta:set_string("title", fields.title or "")
 | 
			
		||||
	meta:set_string("text", fields.text or "")
 | 
			
		||||
	meta:set_string("owner", player_name)
 | 
			
		||||
@@ -167,69 +178,10 @@ minetest.register_on_player_receive_fields(function(player, form_name, fields)
 | 
			
		||||
	end
 | 
			
		||||
	minetest.log("action", S("@1 has written in a book (title: \"@2\"): \"@3\" at location @4",
 | 
			
		||||
			player:get_player_name(), fields.title, fields.text, minetest.pos_to_string(player:getpos())))
 | 
			
		||||
 | 
			
		||||
	player_current_book[player_name] = nil
 | 
			
		||||
	return true
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- convert old static nodes to param2
 | 
			
		||||
 | 
			
		||||
local bookcolors = {
 | 
			
		||||
	"red",
 | 
			
		||||
	"green",
 | 
			
		||||
	"blue",
 | 
			
		||||
	"violet",
 | 
			
		||||
	"grey",
 | 
			
		||||
	"brown"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.old_static_books = {}
 | 
			
		||||
for _, color in ipairs(bookcolors) do
 | 
			
		||||
	table.insert(homedecor.old_static_books, "homedecor:book_"..color)
 | 
			
		||||
	table.insert(homedecor.old_static_books, "homedecor:book_open_"..color)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:convert_books",
 | 
			
		||||
	label = "Convert homedecor books to use param2 color",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = homedecor.old_static_books,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local name = node.name
 | 
			
		||||
		local color = string.sub(name, string.find(name, "_", -7)+1)
 | 
			
		||||
		local newname = "homedecor:book"
 | 
			
		||||
		if string.find(name, "open") then
 | 
			
		||||
			newname = "homedecor:book_open"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local old_fdir = math.floor(node.param2 % 32)
 | 
			
		||||
		local new_fdir = 3
 | 
			
		||||
 | 
			
		||||
		if old_fdir == 0 then
 | 
			
		||||
			new_fdir = 3
 | 
			
		||||
		elseif old_fdir == 1 then
 | 
			
		||||
			new_fdir = 4
 | 
			
		||||
		elseif old_fdir == 2 then
 | 
			
		||||
			new_fdir = 2
 | 
			
		||||
		elseif old_fdir == 3 then
 | 
			
		||||
			new_fdir = 5
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if color == "grey" then
 | 
			
		||||
			color = "dark_grey"
 | 
			
		||||
		elseif color == "violet" then
 | 
			
		||||
			color = "dark_magenta"
 | 
			
		||||
		elseif color == "brown" then
 | 
			
		||||
			color = "dark_orange"
 | 
			
		||||
		elseif color == "blue" then
 | 
			
		||||
			color = "light_blue"
 | 
			
		||||
		else
 | 
			
		||||
			color = "medium_"..color
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
 | 
			
		||||
		local param2 = paletteidx + new_fdir
 | 
			
		||||
 | 
			
		||||
		minetest.swap_node(pos, { name = newname, param2 = param2 })
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:set_string("dye", "unifieddyes:"..color)
 | 
			
		||||
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
minetest.register_alias("homedecor:book", "homedecor:book_grey")
 | 
			
		||||
minetest.register_alias("homedecor:book_open", "homedecor:book_open_grey")
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,6 @@ minetest.register_entity("homedecor:mesh_desk_fan", {
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local add_mesh_desk_fan_entity = function(pos)
 | 
			
		||||
	print("in add_mesh_desk_fan_entity()")
 | 
			
		||||
	local param2 = minetest.get_node(pos).param2
 | 
			
		||||
	local entity = minetest.add_entity(pos, "homedecor:mesh_desk_fan")
 | 
			
		||||
	if param2 == 0 then
 | 
			
		||||
 
 | 
			
		||||
@@ -546,6 +546,17 @@ minetest.register_craft( {
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:shutter_colored",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:shutter",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
        type = "fuel",
 | 
			
		||||
        recipe = "homedecor:shutter_oak",
 | 
			
		||||
@@ -867,6 +878,28 @@ minetest.register_craft( {
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:curtain_closed",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:curtain_closed",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:curtain_open",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:curtain_open",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local mats = {
 | 
			
		||||
	{ "brass", "homedecor:pole_brass" },
 | 
			
		||||
	{ "wrought_iron", "homedecor:pole_wrought_iron" },
 | 
			
		||||
@@ -1195,7 +1228,6 @@ minetest.register_craft( {
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:glowlight_half 6",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "dye:white", "dye:white", "dye:white" },
 | 
			
		||||
		{ "default:glass", "homedecor:power_crystal", "default:glass", },
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
@@ -1203,11 +1235,38 @@ minetest.register_craft({
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
        output = "homedecor:glowlight_half 6",
 | 
			
		||||
        recipe = {
 | 
			
		||||
		{ "dye:white", "dye:white", "dye:white" },
 | 
			
		||||
		{"moreblocks:super_glow_glass", "moreblocks:glow_glass", "moreblocks:super_glow_glass", },
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
        output = "homedecor:glowlight_half",
 | 
			
		||||
        recipe = {
 | 
			
		||||
		{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"},
 | 
			
		||||
		{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
		output = "homedecor:glowlight_half",
 | 
			
		||||
		type = "shapeless",
 | 
			
		||||
		recipe = {
 | 
			
		||||
		"homedecor:glowlight_quarter",
 | 
			
		||||
		"homedecor:glowlight_quarter"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:glowlight_half",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:glowlight_half",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
        output = "homedecor:glowlight_quarter 6",
 | 
			
		||||
        recipe = {
 | 
			
		||||
@@ -1215,6 +1274,17 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:glowlight_quarter",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:glowlight_quarter",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:glowlight_small_cube 8",
 | 
			
		||||
	recipe = {
 | 
			
		||||
@@ -1239,20 +1309,14 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
        output = "homedecor:glowlight_half",
 | 
			
		||||
        recipe = {
 | 
			
		||||
		{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"},
 | 
			
		||||
		{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
		output = "homedecor:glowlight_half",
 | 
			
		||||
		type = "shapeless",
 | 
			
		||||
		recipe = {
 | 
			
		||||
		"homedecor:glowlight_quarter",
 | 
			
		||||
		"homedecor:glowlight_quarter"
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:glowlight_small_cube",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:glowlight_small_cube",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -2227,6 +2291,17 @@ minetest.register_craft( {
 | 
			
		||||
		},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bathroom_tiles_light",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bathroom_tiles_light",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft( {
 | 
			
		||||
		output = "homedecor:bathroom_tiles_medium 4",
 | 
			
		||||
		recipe = {
 | 
			
		||||
@@ -2235,6 +2310,17 @@ minetest.register_craft( {
 | 
			
		||||
		},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bathroom_tiles_medium",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bathroom_tiles_medium",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft( {
 | 
			
		||||
		output = "homedecor:bathroom_tiles_dark 4",
 | 
			
		||||
		recipe = {
 | 
			
		||||
@@ -2243,6 +2329,17 @@ minetest.register_craft( {
 | 
			
		||||
		},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bathroom_tiles_dark",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bathroom_tiles_dark",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- misc electrical
 | 
			
		||||
 | 
			
		||||
minetest.register_craft( {
 | 
			
		||||
@@ -2476,6 +2573,17 @@ minetest.register_craft( {
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bed_regular",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bed_regular",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft( {
 | 
			
		||||
	output = "homedecor:bed_kingsize",
 | 
			
		||||
	recipe = {
 | 
			
		||||
@@ -2483,6 +2591,29 @@ minetest.register_craft( {
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bed_kingsize",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bed_kingsize",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bed_kingsize",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bed_regular",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft( {
 | 
			
		||||
        output = "homedecor:bottle_green",
 | 
			
		||||
        recipe = {
 | 
			
		||||
@@ -2843,6 +2974,17 @@ minetest.register_craft({
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:desk_lamp",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:desk_lamp",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:hanging_lantern 2",
 | 
			
		||||
	recipe = {
 | 
			
		||||
@@ -2920,7 +3062,7 @@ minetest.register_craft({
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "", "technic:brass_ingot", ""},
 | 
			
		||||
		{ "", "homedecor:chainlink_brass", ""},
 | 
			
		||||
		{ "default:glass", "homedecor:glowlight_small", "default:glass"}
 | 
			
		||||
		{ "default:glass", "homedecor:glowlight_small_cube", "default:glass"}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -2928,7 +3070,7 @@ minetest.register_craft({
 | 
			
		||||
	output = "homedecor:ceiling_lamp",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "", "chains:chain_top_brass", ""},
 | 
			
		||||
		{ "default:glass", "homedecor:glowlight_small", "default:glass"}
 | 
			
		||||
		{ "default:glass", "homedecor:glowlight_small_cube", "default:glass"}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -2950,23 +3092,29 @@ minetest.register_craft({
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:coin 5",
 | 
			
		||||
	recipe = {"moreblocks:micro_goldblock_1", "default:sword_stone"}
 | 
			
		||||
})
 | 
			
		||||
if minetest.settings:get_bool("homedecor.disable_coin_crafting") == false then
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		type = "shapeless",
 | 
			
		||||
		output = "homedecor:coin 5",
 | 
			
		||||
		recipe = {"moreblocks:micro_goldblock_1", "default:sword_stone"}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:coin 15",
 | 
			
		||||
	recipe = {"default:gold_ingot", "default:sword_steel"}
 | 
			
		||||
})
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		type = "shapeless",
 | 
			
		||||
		output = "homedecor:coin 15",
 | 
			
		||||
		recipe = {"default:gold_ingot", "default:sword_steel"}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:coin 50",
 | 
			
		||||
	recipe = {"default:goldblock", "default:sword_mese"}
 | 
			
		||||
})
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		type = "shapeless",
 | 
			
		||||
		output = "homedecor:coin 50",
 | 
			
		||||
		recipe = {"default:goldblock", "default:sword_mese"}
 | 
			
		||||
	})
 | 
			
		||||
else
 | 
			
		||||
	if minetest.settings:get("log_mods") then
 | 
			
		||||
		minetest.log("[HomeDecor] " .. S("coin crafting is disabled!"))
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:lattice_wood 8",
 | 
			
		||||
@@ -3014,10 +3162,28 @@ minetest.register_craft({
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:stained_glass",
 | 
			
		||||
	output = "homedecor:stained_glass 3",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"", "dye:blue", ""},
 | 
			
		||||
		{"dye:red", "xpanes:pane", "dye:green"},
 | 
			
		||||
		{"dye:red", "xpanes:pane_flat", "dye:green"},
 | 
			
		||||
		{"", "dye:yellow", ""},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:stained_glass 2",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"", "dye:blue", ""},
 | 
			
		||||
		{"dye:red", "cottages:glass_pane_side", "dye:green"},
 | 
			
		||||
		{"", "dye:yellow", ""},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:stained_glass 2",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"", "dye:blue", ""},
 | 
			
		||||
		{"dye:red", "cottages:glass_pane", "dye:green"},
 | 
			
		||||
		{"", "dye:yellow", ""},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
@@ -3107,6 +3273,19 @@ for i in ipairs(homedecor.banister_materials) do
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "",
 | 
			
		||||
	palette = "split",
 | 
			
		||||
	neutral_node = "homedecor:banister_wood_horizontal",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output_prefix = "homedecor:banister_wood_horizontal_",
 | 
			
		||||
	output_suffix = "",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE",
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if (minetest.get_modpath("technic") and minetest.get_modpath("dye") and minetest.get_modpath("bees")) then
 | 
			
		||||
	technic.register_separating_recipe({ input = {"bees:wax 1"}, output = {"homedecor:oil_extract 2","dye:yellow 1"} })
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
default
 | 
			
		||||
unifieddyes
 | 
			
		||||
homedecor_i18n
 | 
			
		||||
creative
 | 
			
		||||
building_blocks?
 | 
			
		||||
signs_lib?
 | 
			
		||||
moreblocks?
 | 
			
		||||
@@ -11,3 +12,5 @@ bucket?
 | 
			
		||||
beds?
 | 
			
		||||
flowers?
 | 
			
		||||
3d_armor?
 | 
			
		||||
skinsdb?
 | 
			
		||||
mesecons?
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,8 @@ local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local function N_(x) return x end
 | 
			
		||||
 | 
			
		||||
local m_rules = mesecon and mesecon.rules and mesecon.rules.pplate
 | 
			
		||||
 | 
			
		||||
-- doors
 | 
			
		||||
 | 
			
		||||
local function isSolid(pos, adjust)
 | 
			
		||||
@@ -264,6 +266,7 @@ for i, side in ipairs(sides) do
 | 
			
		||||
			drop = "homedecor:door_"..doorname.."_left",
 | 
			
		||||
		    mesecons = {
 | 
			
		||||
		        effector = {
 | 
			
		||||
					rules = m_rules,
 | 
			
		||||
		            action_on = function(pos,node)
 | 
			
		||||
		                local isClosed = getClosed(pos)
 | 
			
		||||
		                if isClosed then
 | 
			
		||||
@@ -405,6 +408,7 @@ for i, g in ipairs(gate_list) do
 | 
			
		||||
		end,
 | 
			
		||||
        mesecons = {
 | 
			
		||||
            effector = {
 | 
			
		||||
				rules = m_rules,
 | 
			
		||||
                action_on = function(pos,node) homedecor.flip_gate(pos,node,nil,gate, "closed") end
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -433,6 +437,7 @@ for i, g in ipairs(gate_list) do
 | 
			
		||||
        return itemstack
 | 
			
		||||
	end
 | 
			
		||||
    def.mesecons.effector = {
 | 
			
		||||
		rules = m_rules,
 | 
			
		||||
        action_off = function(pos,node) homedecor.flip_gate(pos,node,nil,gate, "open") end
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -118,7 +118,7 @@ minetest.register_alias("homedecor:deckchair_head", "air")
 | 
			
		||||
homedecor.register("deckchair_striped_blue", {
 | 
			
		||||
	mesh = "homedecor_deckchair.obj",
 | 
			
		||||
	tiles = {"homedecor_deckchair_striped_blue.png"},
 | 
			
		||||
	description = S("Deck Chair"),
 | 
			
		||||
	description = S("Deck Chair (blue striped)"),
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	expand = { forward="placeholder" },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
@@ -251,6 +251,7 @@ homedecor.register("swing", {
 | 
			
		||||
		place_on = "bottom"
 | 
			
		||||
	},
 | 
			
		||||
	on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
		local placer_name = placer:get_player_name() or ""
 | 
			
		||||
		local isceiling, pos = homedecor.find_ceiling(itemstack, placer, pointed_thing)
 | 
			
		||||
		if isceiling then
 | 
			
		||||
			local height = 0
 | 
			
		||||
@@ -263,7 +264,7 @@ homedecor.register("swing", {
 | 
			
		||||
 | 
			
		||||
				if not testreg or not testreg.buildable_to then
 | 
			
		||||
					if i < 1 then
 | 
			
		||||
						minetest.chat_send_player(placer:get_player_name(), "No room under there to hang a swing.")
 | 
			
		||||
						minetest.chat_send_player(placer_name, "No room under there to hang a swing.")
 | 
			
		||||
						return itemstack
 | 
			
		||||
					else
 | 
			
		||||
						break
 | 
			
		||||
@@ -279,11 +280,11 @@ homedecor.register("swing", {
 | 
			
		||||
 | 
			
		||||
			minetest.set_node({ x=pos.x, y=pos.y-height, z=pos.z }, { name = "homedecor:swing", param2 = fdir })
 | 
			
		||||
 | 
			
		||||
			if not homedecor.expect_infinite_stacks then
 | 
			
		||||
			if not creative.is_enabled_for(placer_name) then
 | 
			
		||||
				itemstack:take_item()
 | 
			
		||||
			end
 | 
			
		||||
		else
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), "You have to point at the bottom side of an overhanging object to place a swing.")
 | 
			
		||||
			minetest.chat_send_player(placer_name, "You have to point at the bottom side of an overhanging object to place a swing.")
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
@@ -367,7 +368,7 @@ local shrub_cbox = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(homedecor.shrub_colors) do
 | 
			
		||||
	minetest.register_node("homedecor:shrubbery_large_"..color, {
 | 
			
		||||
		description = S("Shrubbery (@1)", S(color)),
 | 
			
		||||
		description = S("Shrubbery (large, @1)", S(color)),
 | 
			
		||||
		drawtype = "mesh",
 | 
			
		||||
		mesh = "homedecor_cube.obj",
 | 
			
		||||
		tiles = {"homedecor_shrubbery_"..color..".png"},
 | 
			
		||||
 
 | 
			
		||||
@@ -81,8 +81,9 @@ homedecor.register("kitchen_chair_padded", {
 | 
			
		||||
	collision_box = kc_cbox,
 | 
			
		||||
	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		pos.y = pos.y+0 -- where do I put my ass ?
 | 
			
		||||
@@ -105,8 +106,9 @@ homedecor.register("armchair", {
 | 
			
		||||
	groups = {snappy=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	node_box = ac_cbox,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -162,7 +164,25 @@ minetest.register_alias('armchair', 'homedecor:armchair')
 | 
			
		||||
 | 
			
		||||
homedecor.old_static_chairs = {}
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(lrfurn.colors) do
 | 
			
		||||
local chair_colors = {
 | 
			
		||||
	"black",
 | 
			
		||||
	"brown",
 | 
			
		||||
	"blue",
 | 
			
		||||
	"cyan",
 | 
			
		||||
	"dark_grey",
 | 
			
		||||
	"dark_green",
 | 
			
		||||
	"green",
 | 
			
		||||
	"grey",
 | 
			
		||||
	"magenta",
 | 
			
		||||
	"orange",
 | 
			
		||||
	"pink",
 | 
			
		||||
	"red",
 | 
			
		||||
	"violet",
 | 
			
		||||
	"white",
 | 
			
		||||
	"yellow",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(chair_colors) do
 | 
			
		||||
	table.insert(homedecor.old_static_chairs, "homedecor:chair_"..color)
 | 
			
		||||
	table.insert(homedecor.old_static_chairs, "homedecor:armchair_"..color)
 | 
			
		||||
end
 | 
			
		||||
@@ -211,8 +231,6 @@ minetest.register_lbm({
 | 
			
		||||
		local param2 = paletteidx + new_fdir
 | 
			
		||||
		local newname = "homedecor:armchair"
 | 
			
		||||
 | 
			
		||||
		print(name, dump(a), dump(b), dump(color).."("..dump(paletteidx)..")", dump(param2))
 | 
			
		||||
 | 
			
		||||
		if node.name == "homedecor:chair" then
 | 
			
		||||
			newname = "homedecor:kitchen_chair_wood"
 | 
			
		||||
		elseif string.find(node.name, "homedecor:chair_") then
 | 
			
		||||
 
 | 
			
		||||
@@ -70,6 +70,17 @@ minetest.register_craft({
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:armchair",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:armchair",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:kitchen_chair_padded",
 | 
			
		||||
@@ -79,6 +90,17 @@ minetest.register_craft({
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:kitchen_chair_padded",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:kitchen_chair_padded",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:kitchen_chair_wood",
 | 
			
		||||
@@ -106,6 +128,17 @@ minetest.register_craft({
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:standing_lamp_off",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:standing_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:table_lamp_off",
 | 
			
		||||
@@ -131,14 +164,34 @@ minetest.register_craft({
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:standing_lamp_off",
 | 
			
		||||
	output = "homedecor:table_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:table_lamp_off"},
 | 
			
		||||
		{ "group:stick"},
 | 
			
		||||
		{ "group:stick"},
 | 
			
		||||
		{ "wool:white", "default:torch", "wool:white"},
 | 
			
		||||
		{ "", "group:stick", ""},
 | 
			
		||||
		{ "", "moreblocks:slab_wood", "" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:table_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "cottages:wool", "default:torch", "cottages:wool"},
 | 
			
		||||
		{ "", "group:stick", ""},
 | 
			
		||||
		{ "", "moreblocks:slab_wood", "" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:table_lamp_off",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:table_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:toilet",
 | 
			
		||||
	recipe = {
 | 
			
		||||
 
 | 
			
		||||
@@ -213,20 +213,24 @@ homedecor.register("soda_machine", {
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_rotate = screwdriver.rotate_simple,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local playername = clicker:get_player_name()
 | 
			
		||||
		local wielditem = clicker:get_wielded_item()
 | 
			
		||||
		local wieldname = wielditem:get_name()
 | 
			
		||||
		local fdir_to_fwd = { {0, -1}, {-1, 0}, {0, 1}, {1, 0} }
 | 
			
		||||
		local fdir = node.param2
 | 
			
		||||
		local pos_drop = { x=pos.x+fdir_to_fwd[fdir+1][1], y=pos.y, z=pos.z+fdir_to_fwd[fdir+1][2] }
 | 
			
		||||
		if wieldname == "homedecor:coin" then
 | 
			
		||||
			wielditem:take_item()
 | 
			
		||||
			clicker:set_wielded_item(wielditem)
 | 
			
		||||
			minetest.spawn_item(pos_drop, "homedecor:soda_can")
 | 
			
		||||
			minetest.sound_play("insert_coin", {
 | 
			
		||||
				pos=pos, max_hear_distance = 5
 | 
			
		||||
			})
 | 
			
		||||
			if not creative.is_enabled_for(playername) then
 | 
			
		||||
				wielditem:take_item()
 | 
			
		||||
				clicker:set_wielded_item(wielditem)
 | 
			
		||||
				return wielditem
 | 
			
		||||
			end
 | 
			
		||||
		else
 | 
			
		||||
			minetest.chat_send_player(clicker:get_player_name(), S("Please insert a coin in the machine."))
 | 
			
		||||
			minetest.chat_send_player(playername, S("Please insert a coin in the machine."))
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -53,18 +53,8 @@ homedecor.wall_fdir_to_fwd = {
 | 
			
		||||
	{ -1,  0 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local placeholder_node = "homedecor:expansion_placeholder"
 | 
			
		||||
minetest.register_node(placeholder_node, {
 | 
			
		||||
	description = S("Expansion placeholder (you hacker you!)"),
 | 
			
		||||
	groups = { not_in_creative_inventory=1 },
 | 
			
		||||
	drawtype = "airlike",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = { type = "fixed", fixed = { 0, 0, 0, 0, 0, 0 } },
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	buildable_to = false,
 | 
			
		||||
})
 | 
			
		||||
local placeholder_node = "air"
 | 
			
		||||
minetest.register_alias("homedecor:expansion_placeholder", "air")
 | 
			
		||||
 | 
			
		||||
--- select which node was pointed at based on it being known, not ignored, buildable_to
 | 
			
		||||
-- returns nil if no node could be selected
 | 
			
		||||
@@ -94,7 +84,7 @@ local function is_buildable_to(placer_name, ...)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- place one or two nodes if and only if both can be placed
 | 
			
		||||
local function stack(itemstack, placer, fdir, pos, def, pos2, node1, node2)
 | 
			
		||||
local function stack(itemstack, placer, fdir, pos, def, pos2, node1, node2, pointed_thing)
 | 
			
		||||
	local placer_name = placer:get_player_name() or ""
 | 
			
		||||
	if is_buildable_to(placer_name, pos, pos2) then
 | 
			
		||||
		local lfdir = fdir or minetest.dir_to_facedir(placer:get_look_dir())
 | 
			
		||||
@@ -111,10 +101,10 @@ local function stack(itemstack, placer, fdir, pos, def, pos2, node1, node2)
 | 
			
		||||
		-- call after_place_node of the placed node if available
 | 
			
		||||
		local ctrl_node_def = minetest.registered_nodes[node1]
 | 
			
		||||
		if ctrl_node_def and ctrl_node_def.after_place_node then
 | 
			
		||||
			ctrl_node_def.after_place_node(pos, placer)
 | 
			
		||||
			ctrl_node_def.after_place_node(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if not homedecor.expect_infinite_stacks then
 | 
			
		||||
		if not creative.is_enabled_for(placer_name) then
 | 
			
		||||
			itemstack:take_item()
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -140,7 +130,7 @@ function homedecor.stack_vertically(itemstack, placer, pointed_thing, node1, nod
 | 
			
		||||
 | 
			
		||||
	local top_pos = { x=pos.x, y=pos.y+1, z=pos.z }
 | 
			
		||||
 | 
			
		||||
	return stack(itemstack, placer, nil, pos, def, top_pos, node1, node2)
 | 
			
		||||
	return stack(itemstack, placer, nil, pos, def, top_pos, node1, node2, pointed_thing)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Stack one door node above another
 | 
			
		||||
@@ -162,7 +152,7 @@ function homedecor.stack_wing(itemstack, placer, pointed_thing, node1, node2, no
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local top_pos = { x=pos.x, y=pos.y+1, z=pos.z }
 | 
			
		||||
	return stack(itemstack, placer, fdir, pos, def, top_pos, node1, node2)
 | 
			
		||||
	return stack(itemstack, placer, fdir, pos, def, top_pos, node1, node2, pointed_thing)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.stack_sideways(itemstack, placer, pointed_thing, node1, node2, dir)
 | 
			
		||||
@@ -177,13 +167,14 @@ function homedecor.stack_sideways(itemstack, placer, pointed_thing, node1, node2
 | 
			
		||||
 | 
			
		||||
	local pos2 = { x = pos.x + fdir_transform[fdir+1][1], y=pos.y, z = pos.z + fdir_transform[fdir+1][2] }
 | 
			
		||||
 | 
			
		||||
	return stack(itemstack, placer, fdir, pos, def, pos2, node1, node2)
 | 
			
		||||
	return stack(itemstack, placer, fdir, pos, def, pos2, node1, node2, pointed_thing)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, trybunks)
 | 
			
		||||
 | 
			
		||||
	local thisnode = minetest.get_node(pos)
 | 
			
		||||
	local fdir = thisnode.param2
 | 
			
		||||
	local param2 = thisnode.param2
 | 
			
		||||
	local fdir = param2 % 8
 | 
			
		||||
 | 
			
		||||
	local fxd = homedecor.wall_fdir_to_fwd[fdir+1][1]
 | 
			
		||||
	local fzd = homedecor.wall_fdir_to_fwd[fdir+1][2]
 | 
			
		||||
@@ -219,14 +210,22 @@ function homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, trybunks
 | 
			
		||||
	local rightpos = {x=pos.x+rxd, y=pos.y, z=pos.z+rzd}
 | 
			
		||||
	local rightnode = minetest.get_node(rightpos)
 | 
			
		||||
 | 
			
		||||
	local inv = placer:get_inventory()
 | 
			
		||||
 | 
			
		||||
	if leftnode.name == "homedecor:bed_regular" then
 | 
			
		||||
		local newname = string.gsub(thisnode.name, "_regular", "_kingsize")
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local leftmeta = minetest.get_meta(leftpos)
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(pos, {name = "air"})
 | 
			
		||||
		minetest.set_node(leftpos, { name = newname, param2 = fdir})
 | 
			
		||||
		minetest.swap_node(leftpos, { name = newname, param2 = param2})
 | 
			
		||||
	elseif rightnode.name == "homedecor:bed_regular" then
 | 
			
		||||
		local newname = string.gsub(thisnode.name, "_regular", "_kingsize")
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local rightmeta = minetest.get_meta(rightpos)
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(rightpos, {name = "air"})
 | 
			
		||||
		minetest.set_node(pos, { name = newname, param2 = fdir})
 | 
			
		||||
		minetest.swap_node(pos, { name = newname, param2 = param2})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local toppos = {x=pos.x, y=pos.y+1.0, z=pos.z}
 | 
			
		||||
@@ -234,18 +233,19 @@ function homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, trybunks
 | 
			
		||||
 | 
			
		||||
	if trybunks and is_buildable_to(placer_name, toppos, topposfwd) then
 | 
			
		||||
		local newname = string.gsub(thisnode.name, "_regular", "_extended")
 | 
			
		||||
		minetest.set_node(toppos, { name = thisnode.name, param2 = fdir})
 | 
			
		||||
		minetest.set_node(pos, { name = newname, param2 = fdir})
 | 
			
		||||
		local newparam2 = param2 % 8
 | 
			
		||||
		minetest.swap_node(toppos, { name = thisnode.name, param2 = param2})
 | 
			
		||||
		minetest.swap_node(pos, { name = newname, param2 = param2})
 | 
			
		||||
		itemstack:take_item()
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.unextend_bed(pos)
 | 
			
		||||
	local bottomnode = minetest.get_node({x=pos.x, y=pos.y-1.0, z=pos.z})
 | 
			
		||||
	local fdir = bottomnode.param2
 | 
			
		||||
	local param2 = bottomnode.param2
 | 
			
		||||
	if bottomnode.name == "homedecor:bed_extended" then
 | 
			
		||||
		local newname = string.gsub(bottomnode.name, "_extended", "_regular")
 | 
			
		||||
		minetest.set_node({x=pos.x, y=pos.y-1.0, z=pos.z}, { name = newname, param2 = fdir})
 | 
			
		||||
		minetest.swap_node({x=pos.x, y=pos.y-1.0, z=pos.z}, { name = newname, param2 = param2})
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@@ -257,6 +257,8 @@ function homedecor.place_banister(itemstack, placer, pointed_thing)
 | 
			
		||||
	if not pos then return itemstack end
 | 
			
		||||
 | 
			
		||||
	local fdir = minetest.dir_to_facedir(placer:get_look_dir())
 | 
			
		||||
	local meta = itemstack:get_meta()
 | 
			
		||||
	local pindex = meta:get_int("palette_index")
 | 
			
		||||
 | 
			
		||||
	local abovepos  = { x=pos.x, y=pos.y+1, z=pos.z }
 | 
			
		||||
	local abovenode = minetest.get_node(abovepos)
 | 
			
		||||
@@ -360,14 +362,6 @@ function homedecor.place_banister(itemstack, placer, pointed_thing)
 | 
			
		||||
		fdir = right_fwd_node.param2
 | 
			
		||||
		pos = fwd_pos
 | 
			
		||||
		new_place_name = string.gsub(right_fwd_node.name, "_diagonal_.-$", "_horizontal")
 | 
			
		||||
 | 
			
		||||
	-- try to follow a horizontal with another of the same
 | 
			
		||||
	elseif left_node and string.find(left_node.name, "homedecor:banister_.*_horizontal") then
 | 
			
		||||
		fdir = left_node.param2
 | 
			
		||||
		new_place_name = left_node.name
 | 
			
		||||
	elseif right_node and string.find(right_node.name, "homedecor:banister_.*_horizontal") then
 | 
			
		||||
		fdir = right_node.param2
 | 
			
		||||
		new_place_name = right_node.name
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- manually invert left-right orientation
 | 
			
		||||
@@ -379,7 +373,7 @@ function homedecor.place_banister(itemstack, placer, pointed_thing)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	minetest.set_node(pos, {name = new_place_name, param2 = fdir})
 | 
			
		||||
	minetest.set_node(pos, {name = new_place_name, param2 = fdir+pindex})
 | 
			
		||||
	itemstack:take_item()
 | 
			
		||||
	return itemstack
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -19,4 +19,6 @@ dofile(handlerpath.."registration.lua")
 | 
			
		||||
-- some nodes have particle spawners
 | 
			
		||||
dofile(handlerpath.."water_particles.lua")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
dofile(handlerpath.."mt_game_beds_functions.lua")
 | 
			
		||||
dofile(handlerpath.."sit.lua")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										175
									
								
								homedecor/handlers/mt_game_beds_functions.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,175 @@
 | 
			
		||||
-- This file is a partial copy of functions.lua from minetest_game's beds mod
 | 
			
		||||
-- with changes needed for homedecor's beds.
 | 
			
		||||
 | 
			
		||||
local pi = math.pi
 | 
			
		||||
local is_sp = minetest.is_singleplayer()
 | 
			
		||||
local enable_respawn = minetest.settings:get_bool("enable_bed_respawn")
 | 
			
		||||
if enable_respawn == nil then
 | 
			
		||||
	enable_respawn = true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Helper functions
 | 
			
		||||
 | 
			
		||||
local function get_look_yaw(pos)
 | 
			
		||||
	local n = minetest.get_node(pos)
 | 
			
		||||
	local fdir = n.param2 % 4
 | 
			
		||||
	if fdir == 0 then
 | 
			
		||||
		return pi / 2, fdir
 | 
			
		||||
	elseif fdir == 1 then
 | 
			
		||||
		return -pi / 2, fdir
 | 
			
		||||
	elseif fdir == 3 then
 | 
			
		||||
		return pi, fdir
 | 
			
		||||
	else
 | 
			
		||||
		return 0, fdir
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function is_night_skip_enabled()
 | 
			
		||||
	local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip")
 | 
			
		||||
	if enable_night_skip == nil then
 | 
			
		||||
		enable_night_skip = true
 | 
			
		||||
	end
 | 
			
		||||
	return enable_night_skip
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function check_in_beds(players)
 | 
			
		||||
	local in_bed = beds.player
 | 
			
		||||
	if not players then
 | 
			
		||||
		players = minetest.get_connected_players()
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	for n, player in ipairs(players) do
 | 
			
		||||
		local name = player:get_player_name()
 | 
			
		||||
		if not in_bed[name] then
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	return #players > 0
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_player_in_bed()
 | 
			
		||||
	local player_in_bed = 0
 | 
			
		||||
	for k,v in pairs(beds.player) do
 | 
			
		||||
		player_in_bed = player_in_bed + 1
 | 
			
		||||
	end
 | 
			
		||||
	return player_in_bed
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function lay_down(player, pos, bed_pos, state, skip)
 | 
			
		||||
	local name = player:get_player_name()
 | 
			
		||||
	local hud_flags = player:hud_get_flags()
 | 
			
		||||
 | 
			
		||||
	if not player or not name then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- stand up
 | 
			
		||||
	if state ~= nil and not state then
 | 
			
		||||
		local p = beds.pos[name] or nil
 | 
			
		||||
		if beds.player[name] ~= nil then
 | 
			
		||||
			beds.player[name] = nil
 | 
			
		||||
		end
 | 
			
		||||
		-- skip here to prevent sending player specific changes (used for leaving players)
 | 
			
		||||
		if skip then
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
		if p then
 | 
			
		||||
			player:setpos(p)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		-- physics, eye_offset, etc
 | 
			
		||||
		player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
 | 
			
		||||
		player:set_look_horizontal(math.random(1, 180) / 100)
 | 
			
		||||
		default.player_attached[name] = false
 | 
			
		||||
		player:set_physics_override(1, 1, 1)
 | 
			
		||||
		hud_flags.wielditem = true
 | 
			
		||||
		default.player_set_animation(player, "stand" , 30)
 | 
			
		||||
 | 
			
		||||
	-- lay down
 | 
			
		||||
	else
 | 
			
		||||
		beds.player[name] = 1
 | 
			
		||||
		beds.pos[name] = pos
 | 
			
		||||
		-- physics, eye_offset, etc
 | 
			
		||||
		player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0})
 | 
			
		||||
		local yaw, fdir = get_look_yaw(bed_pos)
 | 
			
		||||
		player:set_look_horizontal(yaw)
 | 
			
		||||
		local offsets = {
 | 
			
		||||
			[0] = {0.5,     0},
 | 
			
		||||
			[1] = {-0.5,    0},
 | 
			
		||||
			[2] = {0,    -0.5},
 | 
			
		||||
			[3] = {0,     0.5}
 | 
			
		||||
		}
 | 
			
		||||
		local p = {x = bed_pos.x + offsets[fdir][1], y = bed_pos.y, z = bed_pos.z + offsets[fdir][2]}
 | 
			
		||||
		player:set_physics_override(0, 0, 0)
 | 
			
		||||
		player:setpos(p)
 | 
			
		||||
		default.player_attached[name] = true
 | 
			
		||||
		hud_flags.wielditem = false
 | 
			
		||||
		default.player_set_animation(player, "lay" , 0)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	player:hud_set_flags(hud_flags)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function update_formspecs(finished)
 | 
			
		||||
	local ges = #minetest.get_connected_players()
 | 
			
		||||
	local player_in_bed = get_player_in_bed()
 | 
			
		||||
	local form_n
 | 
			
		||||
	local is_majority = (ges / 2) < player_in_bed
 | 
			
		||||
 | 
			
		||||
	if finished then
 | 
			
		||||
		form_n = beds.formspec .. "label[2.7,11; Good morning.]"
 | 
			
		||||
	else
 | 
			
		||||
		form_n = beds.formspec .. "label[2.2,11;" .. tostring(player_in_bed) ..
 | 
			
		||||
			" of " .. tostring(ges) .. " players are in bed]"
 | 
			
		||||
		if is_majority and is_night_skip_enabled() then
 | 
			
		||||
			form_n = form_n .. "button_exit[2,8;4,0.75;force;Force night skip]"
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	for name,_ in pairs(beds.player) do
 | 
			
		||||
		minetest.show_formspec(name, "beds_form", form_n)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- Public functions
 | 
			
		||||
 | 
			
		||||
function homedecor.beds_on_rightclick(pos, node, player)
 | 
			
		||||
	local name = player:get_player_name()
 | 
			
		||||
	local ppos = player:getpos()
 | 
			
		||||
	local tod = minetest.get_timeofday()
 | 
			
		||||
 | 
			
		||||
	if tod > 0.2 and tod < 0.805 then
 | 
			
		||||
		if beds.player[name] then
 | 
			
		||||
			lay_down(player, nil, nil, false)
 | 
			
		||||
		end
 | 
			
		||||
		minetest.chat_send_player(name, "You can only sleep at night.")
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- move to bed
 | 
			
		||||
	if not beds.player[name] then
 | 
			
		||||
		lay_down(player, ppos, pos)
 | 
			
		||||
		beds.set_spawns() -- save respawn positions when entering bed
 | 
			
		||||
	else
 | 
			
		||||
		lay_down(player, nil, nil, false)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if not is_sp then
 | 
			
		||||
		update_formspecs(false)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- skip the night and let all players stand up
 | 
			
		||||
	if check_in_beds() then
 | 
			
		||||
		minetest.after(2, function()
 | 
			
		||||
			if not is_sp then
 | 
			
		||||
				update_formspecs(is_night_skip_enabled())
 | 
			
		||||
			end
 | 
			
		||||
			if is_night_skip_enabled() then
 | 
			
		||||
				beds.skip_night()
 | 
			
		||||
				beds.kick_players()
 | 
			
		||||
			end
 | 
			
		||||
		end)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
@@ -30,8 +30,8 @@ function homedecor.start_particle_spawner(pos, node, particledef, soundname)
 | 
			
		||||
			end, s_handle)
 | 
			
		||||
		end
 | 
			
		||||
		minetest.delete_particlespawner(id)
 | 
			
		||||
		this_spawner_meta:set_int("active", nil)
 | 
			
		||||
		this_spawner_meta:set_int("sound", nil)
 | 
			
		||||
		this_spawner_meta:set_int("active", 0)
 | 
			
		||||
		this_spawner_meta:set_int("sound", 0)
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -109,6 +109,6 @@ function homedecor.stop_particle_spawner(pos)
 | 
			
		||||
		end, s_handle)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	this_spawner_meta:set_int("active", nil)
 | 
			
		||||
	this_spawner_meta:set_int("sound", nil)
 | 
			
		||||
	this_spawner_meta:set_int("active", 0)
 | 
			
		||||
	this_spawner_meta:set_int("sound", 0)
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -11,12 +11,8 @@ local modpath = minetest.get_modpath("homedecor")
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
homedecor = {
 | 
			
		||||
	modpath = modpath,
 | 
			
		||||
 | 
			
		||||
	-- infinite stacks
 | 
			
		||||
	expect_infinite_stacks = minetest.setting_getbool("creative_mode") and not minetest.get_modpath("unified_inventory")
 | 
			
		||||
}
 | 
			
		||||
homedecor = {}
 | 
			
		||||
homedecor.modpath = modpath
 | 
			
		||||
 | 
			
		||||
-- Determine if the item being pointed at is the underside of a node (e.g a ceiling)
 | 
			
		||||
function homedecor.find_ceiling(itemstack, placer, pointed_thing)
 | 
			
		||||
@@ -123,4 +119,6 @@ dofile(modpath.."/wardrobe.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/crafts.lua")
 | 
			
		||||
 | 
			
		||||
print("[HomeDecor] " .. S("Loaded!"))
 | 
			
		||||
if minetest.settings:get_bool("log_mod") then
 | 
			
		||||
	minetest.log("action", "[HomeDecor] " .. S("Loaded!"))
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,15 @@ minetest.register_node("homedecor:glowlight_half", {
 | 
			
		||||
		"homedecor_glowlight_thick_sides.png",
 | 
			
		||||
		"homedecor_glowlight_thick_sides.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_glowlight_top_overlay.png", color = "white"},
 | 
			
		||||
		"",
 | 
			
		||||
		{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
 | 
			
		||||
	},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
@@ -35,8 +44,9 @@ minetest.register_node("homedecor:glowlight_half", {
 | 
			
		||||
	groups = { snappy = 3, ud_param2_colorable = 1 },
 | 
			
		||||
	light_source = default.LIGHT_MAX,
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:glowlight_quarter", {
 | 
			
		||||
@@ -49,6 +59,15 @@ minetest.register_node("homedecor:glowlight_quarter", {
 | 
			
		||||
		"homedecor_glowlight_thin_sides.png",
 | 
			
		||||
		"homedecor_glowlight_thin_sides.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_glowlight_top_overlay.png", color = "white"},
 | 
			
		||||
		"",
 | 
			
		||||
		{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
 | 
			
		||||
	},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
@@ -63,8 +82,9 @@ minetest.register_node("homedecor:glowlight_quarter", {
 | 
			
		||||
	groups = { snappy = 3, ud_param2_colorable = 1 },
 | 
			
		||||
	light_source = default.LIGHT_MAX-1,
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:glowlight_small_cube", {
 | 
			
		||||
@@ -77,6 +97,15 @@ minetest.register_node("homedecor:glowlight_small_cube", {
 | 
			
		||||
		"homedecor_glowlight_cube_sides.png",
 | 
			
		||||
		"homedecor_glowlight_cube_sides.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_glowlight_cube_tb_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_cube_tb_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
 | 
			
		||||
		{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
 | 
			
		||||
	},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
@@ -91,15 +120,17 @@ minetest.register_node("homedecor:glowlight_small_cube", {
 | 
			
		||||
	groups = { snappy = 3, ud_param2_colorable = 1 },
 | 
			
		||||
	light_source = default.LIGHT_MAX-1,
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("plasma_lamp", {
 | 
			
		||||
	description = S("Plasma Lamp"),
 | 
			
		||||
	drawtype = "glasslike_framed",
 | 
			
		||||
	tiles = {"default_gold_block.png","homedecor_glass_face_clean.png"},
 | 
			
		||||
	special_tiles = {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "plasma_lamp.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"default_gold_block.png",
 | 
			
		||||
		{
 | 
			
		||||
			name="homedecor_plasma_storm.png",
 | 
			
		||||
			animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0},
 | 
			
		||||
@@ -110,16 +141,13 @@ homedecor.register("plasma_lamp", {
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	groups = {cracky=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		minetest.swap_node(pos, {name = "homedecor:plasma_lamp", param2 = 255})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("plasma_ball", {
 | 
			
		||||
	description = S("Plasma Ball"),
 | 
			
		||||
	mesh = "homedecor_plasma_ball.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_plastic.png",
 | 
			
		||||
		{ name = "homedecor_generic_plastic.png", color = homedecor.color_black },
 | 
			
		||||
		{
 | 
			
		||||
			name = "homedecor_plasma_ball_streamers.png",
 | 
			
		||||
			animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0},
 | 
			
		||||
@@ -415,7 +443,6 @@ local function reg_lamp(suffix, nxt, light, brightness)
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "color",
 | 
			
		||||
		palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
		place_param2 = 240,
 | 
			
		||||
		walkable = false,
 | 
			
		||||
		light_source = light,
 | 
			
		||||
		selection_box = tlamp_cbox,
 | 
			
		||||
@@ -423,12 +450,17 @@ local function reg_lamp(suffix, nxt, light, brightness)
 | 
			
		||||
		groups = {cracky=2,oddly_breakable_by_hand=1, ud_param2_colorable = 1,
 | 
			
		||||
			not_in_creative_inventory=((light ~= nil) and 1) or nil,
 | 
			
		||||
		},
 | 
			
		||||
		drop = "homedecor:table_lamp_off",
 | 
			
		||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
			node.name = "homedecor:table_lamp_"..repl[suffix]
 | 
			
		||||
			minetest.set_node(pos, node)
 | 
			
		||||
		end,
 | 
			
		||||
		after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
		on_construct = unifieddyes.on_construct,
 | 
			
		||||
		drop = {
 | 
			
		||||
			items = {
 | 
			
		||||
				{items = {"homedecor:table_lamp_off"}, inherit_color = true },
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	homedecor.register("standing_lamp_"..suffix, {
 | 
			
		||||
@@ -444,7 +476,6 @@ local function reg_lamp(suffix, nxt, light, brightness)
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "color",
 | 
			
		||||
		palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
		place_param2 = 240,
 | 
			
		||||
		walkable = false,
 | 
			
		||||
		light_source = light,
 | 
			
		||||
		groups = {cracky=2,oddly_breakable_by_hand=1, ud_param2_colorable = 1,
 | 
			
		||||
@@ -457,8 +488,13 @@ local function reg_lamp(suffix, nxt, light, brightness)
 | 
			
		||||
			node.name = "homedecor:standing_lamp_"..repl[suffix]
 | 
			
		||||
			minetest.set_node(pos, node)
 | 
			
		||||
		end,
 | 
			
		||||
		after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
		expand = { top="placeholder" },
 | 
			
		||||
		on_construct = unifieddyes.on_construct,
 | 
			
		||||
		--expand = { top="air" },
 | 
			
		||||
		drop = {
 | 
			
		||||
			items = {
 | 
			
		||||
				{items = {"homedecor:standing_lamp_off"}, inherit_color = true },
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	-- for old maps that had the original 3dforniture mod
 | 
			
		||||
@@ -495,8 +531,9 @@ homedecor.register("desk_lamp", {
 | 
			
		||||
	node_box = dlamp_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=3, ud_param2_colorable = 1},
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -698,28 +735,3 @@ minetest.register_lbm({
 | 
			
		||||
		meta:set_string("dye", "unifieddyes:"..color)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:recolor_lighting",
 | 
			
		||||
	label = "Convert some kinds of lights to use UD extended palette",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = {
 | 
			
		||||
		"homedecor:table_lamp_off",
 | 
			
		||||
		"homedecor:table_lamp_low",
 | 
			
		||||
		"homedecor:table_lamp_med",
 | 
			
		||||
		"homedecor:table_lamp_hi",
 | 
			
		||||
		"homedecor:table_lamp_max",
 | 
			
		||||
		"homedecor:standing_lamp_off",
 | 
			
		||||
		"homedecor:standing_lamp_low",
 | 
			
		||||
		"homedecor:standing_lamp_med",
 | 
			
		||||
		"homedecor:standing_lamp_hi",
 | 
			
		||||
		"homedecor:standing_lamp_max",
 | 
			
		||||
	},
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		if meta:get_string("palette") ~= "ext" then
 | 
			
		||||
			minetest.swap_node(pos, { name = node.name, param2 = unifieddyes.convert_classic_palette[node.param2] })
 | 
			
		||||
			meta:set_string("palette", "ext")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -396,7 +396,7 @@ local n = { 1, 2 }
 | 
			
		||||
 | 
			
		||||
for _, i in ipairs(n) do
 | 
			
		||||
	homedecor.register("picture_frame"..i, {
 | 
			
		||||
		description = S("Picture Frame"),
 | 
			
		||||
		description = S("Picture Frame "..i),
 | 
			
		||||
		mesh = "homedecor_picture_frame.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_picture_frame_image"..i..".png",
 | 
			
		||||
@@ -483,23 +483,19 @@ for _, side in ipairs({"diagonal_left", "diagonal_right", "horizontal"}) do
 | 
			
		||||
		local name, matdesc, tile1, tile2 = unpack(mat)
 | 
			
		||||
		local nodename = "banister_"..name.."_"..side
 | 
			
		||||
 | 
			
		||||
		local groups = { snappy = 3, not_in_creative_inventory = 1 }
 | 
			
		||||
		local cbox = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = { -9/16, -3/16, 5/16, 9/16, 24/16, 8/16 }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if side == "horizontal" then
 | 
			
		||||
			groups = { snappy = 3 }
 | 
			
		||||
			cbox = {
 | 
			
		||||
				type = "fixed",
 | 
			
		||||
				fixed = { -8/16, -8/16, 5/16, 8/16, 8/16, 8/16 }
 | 
			
		||||
			}
 | 
			
		||||
		else
 | 
			
		||||
			minetest.register_alias(string.gsub("homedecor:"..nodename, "diagonal_", ""), "homedecor:"..nodename)
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		homedecor.register(nodename, {
 | 
			
		||||
		local def = {
 | 
			
		||||
			description = S("Banister for Stairs (@1, @2)", matdesc, sidedesc),
 | 
			
		||||
			mesh = "homedecor_banister_"..side..".obj",
 | 
			
		||||
			tiles = {
 | 
			
		||||
@@ -507,12 +503,37 @@ for _, side in ipairs({"diagonal_left", "diagonal_right", "horizontal"}) do
 | 
			
		||||
				tile2,
 | 
			
		||||
			},
 | 
			
		||||
			inventory_image = "homedecor_banister_"..name.."_inv.png",
 | 
			
		||||
			groups = groups,
 | 
			
		||||
			selection_box = cbox,
 | 
			
		||||
			collision_box = cbox,
 | 
			
		||||
			groups = { snappy = 3},
 | 
			
		||||
			on_place = homedecor.place_banister,
 | 
			
		||||
			drop = "homedecor:banister_"..name.."_horizontal",
 | 
			
		||||
		})
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if side ~= "horizontal" then
 | 
			
		||||
			def.groups.not_in_creative_inventory = 1 
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if name == "wood" then
 | 
			
		||||
			def.palette = "unifieddyes_palette_greys.png"
 | 
			
		||||
			def.airbrush_replacement_node = "homedecor:banister_wood_"..side.."_grey"
 | 
			
		||||
			def.groups.ud_param2_colorable = 1
 | 
			
		||||
			def.paramtype2 = "colorfacedir"
 | 
			
		||||
		end
 | 
			
		||||
		homedecor.register(nodename, def)
 | 
			
		||||
 | 
			
		||||
		if name == "wood" then
 | 
			
		||||
			local nn = "homedecor:"..nodename
 | 
			
		||||
			local def2 = table.copy(minetest.registered_items[nn])
 | 
			
		||||
			def2.tiles = {
 | 
			
		||||
				homedecor.white_wood,
 | 
			
		||||
				homedecor.white_wood
 | 
			
		||||
			}
 | 
			
		||||
			def2.inventory_image = "homedecor_banister_wood_colored_inv.png"
 | 
			
		||||
			def2.groups.not_in_creative_inventory = 1 
 | 
			
		||||
 | 
			
		||||
			unifieddyes.generate_split_palette_nodes(nn, def2, "homedecor:banister_"..name.."_horizontal")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
# Blender v2.72 (sub 0) OBJ File: 'unifiedbricks_brick_block.blend'
 | 
			
		||||
# www.blender.org
 | 
			
		||||
o Cube
 | 
			
		||||
v 0.496092 0.496092 0.496092
 | 
			
		||||
v 0.496092 0.496092 -0.496092
 | 
			
		||||
v -0.496092 0.496092 -0.496092
 | 
			
		||||
v -0.496092 0.496092 0.496092
 | 
			
		||||
v 0.496092 -0.496092 0.496092
 | 
			
		||||
v 0.496092 -0.496092 -0.496092
 | 
			
		||||
v -0.496092 -0.496092 -0.496092
 | 
			
		||||
v -0.496092 -0.496092 0.496092
 | 
			
		||||
v 0.499750 0.499750 0.499750
 | 
			
		||||
v 0.499750 0.499750 -0.499750
 | 
			
		||||
v -0.499750 0.499750 -0.499750
 | 
			
		||||
v -0.499750 0.499750 0.499750
 | 
			
		||||
v 0.499750 -0.499750 0.499750
 | 
			
		||||
v 0.499750 -0.499750 -0.499750
 | 
			
		||||
v -0.499750 -0.499750 -0.499750
 | 
			
		||||
v -0.499750 -0.499750 0.499750
 | 
			
		||||
vt 1.000000 0.000000
 | 
			
		||||
vt 1.000000 1.000000
 | 
			
		||||
vt 0.000000 1.000000
 | 
			
		||||
vt 0.000000 0.000000
 | 
			
		||||
vn 0.000000 -1.000000 0.000000
 | 
			
		||||
vn -1.000000 0.000000 0.000000
 | 
			
		||||
vn 0.000000 1.000000 0.000000
 | 
			
		||||
vn 1.000000 0.000000 0.000000
 | 
			
		||||
vn 0.000000 0.000000 -1.000000
 | 
			
		||||
vn 0.000000 0.000000 1.000000
 | 
			
		||||
g Cube_Cube_base
 | 
			
		||||
s off
 | 
			
		||||
f 8/1/1 7/2/1 6/3/1 5/4/1
 | 
			
		||||
f 4/2/2 3/3/2 7/4/2 8/1/2
 | 
			
		||||
f 1/3/3 2/4/3 3/1/3 4/2/3
 | 
			
		||||
f 2/2/4 1/3/4 5/4/4 6/1/4
 | 
			
		||||
f 3/2/5 2/3/5 6/4/5 7/1/5
 | 
			
		||||
f 1/2/6 4/3/6 8/4/6 5/1/6
 | 
			
		||||
g Cube_Cube_overlay
 | 
			
		||||
f 16/1/1 15/2/1 14/3/1 13/4/1
 | 
			
		||||
f 12/2/2 11/3/2 15/4/2 16/1/2
 | 
			
		||||
f 9/3/3 10/4/3 11/1/3 12/2/3
 | 
			
		||||
f 10/2/4 9/3/4 13/4/4 14/1/4
 | 
			
		||||
f 11/2/5 10/3/5 14/4/5 15/1/5
 | 
			
		||||
f 9/2/6 12/3/6 16/4/6 13/1/6
 | 
			
		||||
@@ -1,243 +1,206 @@
 | 
			
		||||
# Blender v2.72 (sub 0) OBJ File: 'book.blend'
 | 
			
		||||
# Blender v2.78 (sub 0) OBJ File: 'book.blend'
 | 
			
		||||
# www.blender.org
 | 
			
		||||
o Cube.002_Cube.001
 | 
			
		||||
v -0.216625 -0.161995 -0.448008
 | 
			
		||||
v -0.216625 -0.149566 -0.485966
 | 
			
		||||
v -0.216625 -0.113157 -0.485966
 | 
			
		||||
v -0.216625 -0.142021 -0.448008
 | 
			
		||||
v -0.208120 -0.115781 -0.485966
 | 
			
		||||
v -0.208120 -0.142021 -0.448008
 | 
			
		||||
v 0.220555 -0.113157 -0.485966
 | 
			
		||||
v 0.220555 0.159347 -0.485966
 | 
			
		||||
v 0.212050 -0.115781 -0.485966
 | 
			
		||||
v -0.208120 -0.161995 -0.448008
 | 
			
		||||
v -0.208120 0.148926 -0.485966
 | 
			
		||||
v -0.208120 0.155653 -0.448008
 | 
			
		||||
v 0.212051 0.155653 -0.448008
 | 
			
		||||
v 0.212051 0.148926 -0.485966
 | 
			
		||||
v -0.208120 -0.152482 -0.485966
 | 
			
		||||
v 0.212050 -0.152482 -0.485966
 | 
			
		||||
v 0.220555 -0.161995 -0.448008
 | 
			
		||||
v 0.212050 -0.161995 -0.448008
 | 
			
		||||
v 0.212050 -0.145193 -0.500002
 | 
			
		||||
v -0.208120 -0.145193 -0.500002
 | 
			
		||||
v -0.208120 -0.115781 -0.500002
 | 
			
		||||
v 0.212050 -0.115781 -0.500002
 | 
			
		||||
v 0.212050 -0.115781 -0.396013
 | 
			
		||||
v -0.208120 -0.115781 -0.396013
 | 
			
		||||
v -0.208120 -0.145193 -0.396013
 | 
			
		||||
v 0.212050 -0.145193 -0.396013
 | 
			
		||||
v 0.212050 -0.152482 -0.410049
 | 
			
		||||
v -0.208120 -0.152482 -0.410049
 | 
			
		||||
v 0.212051 0.148926 -0.410049
 | 
			
		||||
v -0.208120 0.148926 -0.410049
 | 
			
		||||
v 0.212050 -0.115781 -0.410049
 | 
			
		||||
v 0.220555 0.159347 -0.410049
 | 
			
		||||
v 0.220555 -0.113157 -0.410049
 | 
			
		||||
v -0.208120 -0.115781 -0.410049
 | 
			
		||||
v -0.216625 -0.113157 -0.410049
 | 
			
		||||
v -0.216625 -0.149566 -0.410049
 | 
			
		||||
v -0.216625 -0.115781 -0.396013
 | 
			
		||||
v -0.216625 -0.141549 -0.396013
 | 
			
		||||
v 0.220555 -0.149566 -0.410049
 | 
			
		||||
v 0.220555 -0.141549 -0.396013
 | 
			
		||||
v 0.220555 0.159346 -0.396013
 | 
			
		||||
v -0.216624 0.159347 -0.396013
 | 
			
		||||
v 0.220555 -0.115781 -0.396013
 | 
			
		||||
v -0.216624 0.159347 -0.410049
 | 
			
		||||
v -0.216625 -0.115781 -0.500002
 | 
			
		||||
v -0.216625 -0.141549 -0.500002
 | 
			
		||||
v 0.212050 -0.142021 -0.448008
 | 
			
		||||
v 0.220555 -0.149566 -0.485966
 | 
			
		||||
v 0.220555 -0.141549 -0.500002
 | 
			
		||||
v 0.220555 0.159346 -0.500002
 | 
			
		||||
v -0.216624 0.159347 -0.500002
 | 
			
		||||
v 0.220555 -0.142021 -0.448008
 | 
			
		||||
v 0.220555 -0.115781 -0.500002
 | 
			
		||||
v -0.216624 0.159347 -0.485966
 | 
			
		||||
v -0.216625 -0.162729 -0.448008
 | 
			
		||||
v -0.216625 -0.150269 -0.486432
 | 
			
		||||
v -0.208120 -0.162729 -0.448008
 | 
			
		||||
v -0.208120 -0.153192 -0.486432
 | 
			
		||||
v 0.212050 -0.153192 -0.486432
 | 
			
		||||
v 0.220555 -0.162729 -0.448008
 | 
			
		||||
v 0.212050 -0.162729 -0.448008
 | 
			
		||||
v 0.212050 -0.145885 -0.500640
 | 
			
		||||
v -0.208120 -0.145885 -0.500640
 | 
			
		||||
v -0.208120 -0.116399 -0.500640
 | 
			
		||||
v 0.212050 -0.116399 -0.500640
 | 
			
		||||
v 0.212050 -0.116399 -0.395375
 | 
			
		||||
v -0.208120 -0.116399 -0.395375
 | 
			
		||||
v -0.208120 -0.145885 -0.395375
 | 
			
		||||
v 0.212050 -0.145885 -0.395375
 | 
			
		||||
v 0.212050 -0.153192 -0.409583
 | 
			
		||||
v -0.208120 -0.153192 -0.409583
 | 
			
		||||
v -0.216625 -0.150269 -0.409583
 | 
			
		||||
v -0.216625 -0.116399 -0.395375
 | 
			
		||||
v -0.216625 -0.142232 -0.395375
 | 
			
		||||
v 0.220555 -0.150269 -0.409583
 | 
			
		||||
v 0.220555 -0.142232 -0.395375
 | 
			
		||||
v 0.220555 0.159416 -0.395375
 | 
			
		||||
v -0.216624 0.159417 -0.395375
 | 
			
		||||
v 0.220555 -0.116399 -0.395375
 | 
			
		||||
v -0.216625 -0.116399 -0.500640
 | 
			
		||||
v -0.216625 -0.142232 -0.500640
 | 
			
		||||
v 0.220555 -0.150269 -0.486432
 | 
			
		||||
v 0.220555 -0.142232 -0.500640
 | 
			
		||||
v 0.220555 0.159416 -0.500640
 | 
			
		||||
v -0.216624 0.159417 -0.500640
 | 
			
		||||
v 0.220555 -0.116399 -0.500640
 | 
			
		||||
vt 0.921987 0.383861
 | 
			
		||||
vt 0.921987 0.340448
 | 
			
		||||
vt 0.931829 0.340448
 | 
			
		||||
vt 0.931829 0.383861
 | 
			
		||||
vt 0.931829 0.427274
 | 
			
		||||
vt 0.921987 0.427274
 | 
			
		||||
vt 0.768089 0.490273
 | 
			
		||||
vt 0.722954 0.490273
 | 
			
		||||
vt 0.722954 0.009727
 | 
			
		||||
vt 0.768089 0.009727
 | 
			
		||||
vt 0.768089 0.500000
 | 
			
		||||
vt 0.722404 0.500000
 | 
			
		||||
vt 0.809636 0.490273
 | 
			
		||||
vt 0.809086 0.500000
 | 
			
		||||
vt 0.352434 0.000000
 | 
			
		||||
vt 0.670829 0.000000
 | 
			
		||||
vt 0.670829 0.009727
 | 
			
		||||
vt 0.670829 0.490273
 | 
			
		||||
vt 0.670829 0.500000
 | 
			
		||||
vt 0.352433 0.499999
 | 
			
		||||
vt 0.809636 0.009727
 | 
			
		||||
vt 0.809086 0.000000
 | 
			
		||||
vt 0.823601 0.000000
 | 
			
		||||
vt 0.824288 0.009727
 | 
			
		||||
vt 0.012060 0.509727
 | 
			
		||||
vt 0.000000 0.500001
 | 
			
		||||
vt 0.315359 0.500000
 | 
			
		||||
vt 0.318396 0.509727
 | 
			
		||||
vt 0.700649 0.000000
 | 
			
		||||
vt 0.704866 0.009727
 | 
			
		||||
vt 0.731001 0.867517
 | 
			
		||||
vt 0.731001 0.844673
 | 
			
		||||
vt 0.774928 0.811661
 | 
			
		||||
vt 0.774928 0.853302
 | 
			
		||||
vt 0.687072 0.853302
 | 
			
		||||
vt 0.687072 0.811661
 | 
			
		||||
vt 0.774928 0.500000
 | 
			
		||||
vt 0.791171 0.500000
 | 
			
		||||
vt 0.791171 0.814662
 | 
			
		||||
vt 0.791171 0.844133
 | 
			
		||||
vt 0.851343 0.522844
 | 
			
		||||
vt 0.851343 0.500000
 | 
			
		||||
vt 0.895271 0.514215
 | 
			
		||||
vt 0.895271 0.555856
 | 
			
		||||
vt 0.912144 0.383862
 | 
			
		||||
vt 0.912144 0.340448
 | 
			
		||||
vt 0.334639 0.500000
 | 
			
		||||
vt 0.334639 0.999999
 | 
			
		||||
vt 0.318396 0.999999
 | 
			
		||||
vt 0.318396 0.500000
 | 
			
		||||
vt 0.895271 0.867517
 | 
			
		||||
vt 0.911514 0.523384
 | 
			
		||||
vt 0.911514 0.552855
 | 
			
		||||
vt 0.911514 0.867516
 | 
			
		||||
vt 0.824288 0.490273
 | 
			
		||||
vt 0.823601 0.500000
 | 
			
		||||
vt 0.807415 0.555856
 | 
			
		||||
vt 0.807415 0.514215
 | 
			
		||||
vt 0.768089 0.000000
 | 
			
		||||
vt 0.722404 0.000000
 | 
			
		||||
vt 0.912144 0.427274
 | 
			
		||||
vt 0.318396 0.990273
 | 
			
		||||
vt 0.315359 1.000000
 | 
			
		||||
vt 0.000000 1.000000
 | 
			
		||||
vt 0.012060 0.990274
 | 
			
		||||
vt 0.704866 0.490273
 | 
			
		||||
vt 0.318396 0.490273
 | 
			
		||||
vt 0.318396 0.009727
 | 
			
		||||
vt 0.352433 0.009727
 | 
			
		||||
vt 0.352433 0.490273
 | 
			
		||||
vt 0.705553 0.490273
 | 
			
		||||
vt 0.705553 0.009727
 | 
			
		||||
vt 0.670829 0.509727
 | 
			
		||||
vt 0.364493 0.509726
 | 
			
		||||
vt 0.667792 0.500000
 | 
			
		||||
vt 0.318396 0.000000
 | 
			
		||||
vt 0.348216 0.000000
 | 
			
		||||
vt 0.704866 0.500000
 | 
			
		||||
vt 0.807415 0.867517
 | 
			
		||||
vt 0.791172 0.867516
 | 
			
		||||
vt 0.791171 0.552855
 | 
			
		||||
vt 0.791171 0.523384
 | 
			
		||||
vt 0.336190 0.500000
 | 
			
		||||
vt 0.352433 0.999999
 | 
			
		||||
vt 0.336190 0.999999
 | 
			
		||||
vt 0.670829 0.844133
 | 
			
		||||
vt 0.670829 0.814662
 | 
			
		||||
vt 0.687072 0.500000
 | 
			
		||||
vt 0.348216 0.500000
 | 
			
		||||
vt 0.364493 0.990273
 | 
			
		||||
vt 0.670829 0.990273
 | 
			
		||||
vt 0.667792 1.000000
 | 
			
		||||
vt 0.704866 0.000000
 | 
			
		||||
vt 0.000000 0.000001
 | 
			
		||||
vt 0.668539 0.639838
 | 
			
		||||
vt 0.640677 0.639838
 | 
			
		||||
vt 0.640677 0.630641
 | 
			
		||||
vt 0.672479 0.630641
 | 
			
		||||
vt 0.439305 1.000000
 | 
			
		||||
vt 0.439305 0.319104
 | 
			
		||||
vt 0.527160 0.379125
 | 
			
		||||
vt 0.527160 0.984613
 | 
			
		||||
vt 0.087857 1.000000
 | 
			
		||||
vt 0.087857 0.319104
 | 
			
		||||
vt 0.175712 0.334491
 | 
			
		||||
vt 0.175712 0.939979
 | 
			
		||||
vt 0.351448 0.984613
 | 
			
		||||
vt 0.351448 0.379125
 | 
			
		||||
vt 0.000000 0.939979
 | 
			
		||||
vt 0.000000 0.334491
 | 
			
		||||
vt 0.351448 0.000000
 | 
			
		||||
vt 0.351448 0.961094
 | 
			
		||||
vt 0.263593 0.961094
 | 
			
		||||
vt 0.263593 0.000000
 | 
			
		||||
vt 0.175736 0.000000
 | 
			
		||||
vt 0.175736 0.961094
 | 
			
		||||
vn -0.123900 0.803100 -0.582900
 | 
			
		||||
vn -0.123900 0.803000 0.582900
 | 
			
		||||
vn 0.000000 -0.970000 0.243100
 | 
			
		||||
vn 0.162500 -0.947900 0.274000
 | 
			
		||||
vn 0.162500 -0.947900 -0.274000
 | 
			
		||||
vn 0.000000 0.000000 -1.000000
 | 
			
		||||
vn -0.320700 -0.831600 -0.453400
 | 
			
		||||
vn 0.000000 -0.000000 1.000000
 | 
			
		||||
vn -1.000000 0.000000 0.000000
 | 
			
		||||
vn 1.000000 0.000000 0.000000
 | 
			
		||||
vn 0.123900 0.803100 -0.582900
 | 
			
		||||
vn 0.000000 1.000000 -0.000000
 | 
			
		||||
vn 0.320700 -0.831600 -0.453400
 | 
			
		||||
vn -0.162500 -0.947900 -0.274000
 | 
			
		||||
vn 0.000000 -0.970000 -0.243100
 | 
			
		||||
vn -0.162500 -0.947900 0.274000
 | 
			
		||||
vn 0.123900 0.803000 0.582900
 | 
			
		||||
vn 0.000000 -0.887500 -0.460900
 | 
			
		||||
vn 0.000000 -0.887500 0.460900
 | 
			
		||||
vn 0.320700 -0.831600 0.453400
 | 
			
		||||
vn -0.320700 -0.831600 0.453400
 | 
			
		||||
vn 0.000000 0.984700 -0.174500
 | 
			
		||||
vn -0.000000 0.984700 0.174500
 | 
			
		||||
vn 0.000000 -0.970600 0.240900
 | 
			
		||||
vn 0.163000 -0.948500 0.271500
 | 
			
		||||
vn 0.163000 -0.948500 -0.271500
 | 
			
		||||
vn -0.322100 -0.833000 -0.449800
 | 
			
		||||
vn 0.322100 -0.833000 -0.449800
 | 
			
		||||
vn -0.163000 -0.948500 -0.271500
 | 
			
		||||
vn 0.000000 -0.970600 -0.240900
 | 
			
		||||
vn -0.163000 -0.948500 0.271500
 | 
			
		||||
vn 0.000000 -0.889300 -0.457400
 | 
			
		||||
vn 0.000000 -0.889300 0.457400
 | 
			
		||||
vn 0.322100 -0.833000 0.449800
 | 
			
		||||
vn -0.322100 -0.833000 0.449800
 | 
			
		||||
v 0.161995 -0.448008 0.216625
 | 
			
		||||
v 0.149566 -0.485966 0.216625
 | 
			
		||||
v 0.113157 -0.485966 0.216625
 | 
			
		||||
v 0.142021 -0.448008 0.216625
 | 
			
		||||
v 0.115781 -0.485966 0.208120
 | 
			
		||||
v 0.142021 -0.448008 0.208120
 | 
			
		||||
v 0.113157 -0.485966 -0.220555
 | 
			
		||||
v -0.159347 -0.485966 -0.220555
 | 
			
		||||
v 0.115781 -0.485966 -0.212050
 | 
			
		||||
v 0.161995 -0.448008 0.208120
 | 
			
		||||
v -0.148926 -0.485966 0.208120
 | 
			
		||||
v -0.155653 -0.448008 0.208120
 | 
			
		||||
v -0.155653 -0.448008 -0.212051
 | 
			
		||||
v -0.148926 -0.485966 -0.212051
 | 
			
		||||
v 0.152482 -0.485966 0.208120
 | 
			
		||||
v 0.152482 -0.485966 -0.212050
 | 
			
		||||
v 0.161995 -0.448008 -0.220555
 | 
			
		||||
v 0.161995 -0.448008 -0.212050
 | 
			
		||||
v 0.145193 -0.500002 -0.212050
 | 
			
		||||
v 0.145193 -0.500002 0.208120
 | 
			
		||||
v 0.115781 -0.500002 0.208120
 | 
			
		||||
v 0.115781 -0.500002 -0.212050
 | 
			
		||||
v 0.115781 -0.396013 -0.212050
 | 
			
		||||
v 0.115781 -0.396013 0.208120
 | 
			
		||||
v 0.145193 -0.396013 0.208120
 | 
			
		||||
v 0.145193 -0.396013 -0.212050
 | 
			
		||||
v 0.152482 -0.410049 -0.212050
 | 
			
		||||
v 0.152482 -0.410049 0.208120
 | 
			
		||||
v -0.148926 -0.410049 -0.212051
 | 
			
		||||
v -0.148926 -0.410049 0.208120
 | 
			
		||||
v 0.115781 -0.410049 -0.212050
 | 
			
		||||
v -0.159347 -0.410049 -0.220555
 | 
			
		||||
v 0.113157 -0.410049 -0.220555
 | 
			
		||||
v 0.115781 -0.410049 0.208120
 | 
			
		||||
v 0.113157 -0.410049 0.216625
 | 
			
		||||
v 0.149566 -0.410049 0.216625
 | 
			
		||||
v 0.115781 -0.396013 0.216625
 | 
			
		||||
v 0.141549 -0.396013 0.216625
 | 
			
		||||
v 0.149566 -0.410049 -0.220555
 | 
			
		||||
v 0.141549 -0.396013 -0.220555
 | 
			
		||||
v -0.159346 -0.396013 -0.220555
 | 
			
		||||
v -0.159347 -0.396013 0.216624
 | 
			
		||||
v 0.115781 -0.396013 -0.220555
 | 
			
		||||
v -0.159347 -0.410049 0.216624
 | 
			
		||||
v 0.115781 -0.500002 0.216625
 | 
			
		||||
v 0.141549 -0.500002 0.216625
 | 
			
		||||
v 0.142021 -0.448008 -0.212050
 | 
			
		||||
v 0.149566 -0.485966 -0.220555
 | 
			
		||||
v 0.141549 -0.500002 -0.220555
 | 
			
		||||
v -0.159346 -0.500002 -0.220555
 | 
			
		||||
v -0.159347 -0.500002 0.216624
 | 
			
		||||
v 0.142021 -0.448008 -0.220555
 | 
			
		||||
v 0.115781 -0.500002 -0.220555
 | 
			
		||||
v -0.159347 -0.485966 0.216624
 | 
			
		||||
vt 0.9220 0.3839
 | 
			
		||||
vt 0.9220 0.3404
 | 
			
		||||
vt 0.9318 0.3404
 | 
			
		||||
vt 0.9318 0.3839
 | 
			
		||||
vt 0.9318 0.4273
 | 
			
		||||
vt 0.9220 0.4273
 | 
			
		||||
vt 0.7681 0.4903
 | 
			
		||||
vt 0.7230 0.4903
 | 
			
		||||
vt 0.7230 0.0097
 | 
			
		||||
vt 0.7681 0.0097
 | 
			
		||||
vt 0.7681 0.5000
 | 
			
		||||
vt 0.7224 0.5000
 | 
			
		||||
vt 0.8096 0.4903
 | 
			
		||||
vt 0.8091 0.5000
 | 
			
		||||
vt 0.3524 0.0000
 | 
			
		||||
vt 0.6708 0.0000
 | 
			
		||||
vt 0.6708 0.0097
 | 
			
		||||
vt 0.6708 0.4903
 | 
			
		||||
vt 0.6708 0.5000
 | 
			
		||||
vt 0.3524 0.5000
 | 
			
		||||
vt 0.8096 0.0097
 | 
			
		||||
vt 0.8091 0.0000
 | 
			
		||||
vt 0.8236 0.0000
 | 
			
		||||
vt 0.8243 0.0097
 | 
			
		||||
vt 0.0121 0.5097
 | 
			
		||||
vt 0.0000 0.5000
 | 
			
		||||
vt 0.3154 0.5000
 | 
			
		||||
vt 0.3184 0.5097
 | 
			
		||||
vt 0.7006 0.0000
 | 
			
		||||
vt 0.7049 0.0097
 | 
			
		||||
vt 0.7310 0.8675
 | 
			
		||||
vt 0.7310 0.8447
 | 
			
		||||
vt 0.7749 0.8117
 | 
			
		||||
vt 0.7749 0.8533
 | 
			
		||||
vt 0.6871 0.8533
 | 
			
		||||
vt 0.6871 0.8117
 | 
			
		||||
vt 0.7749 0.5000
 | 
			
		||||
vt 0.7912 0.5000
 | 
			
		||||
vt 0.7912 0.8147
 | 
			
		||||
vt 0.7912 0.8441
 | 
			
		||||
vt 0.8513 0.5228
 | 
			
		||||
vt 0.8513 0.5000
 | 
			
		||||
vt 0.8953 0.5142
 | 
			
		||||
vt 0.8953 0.5559
 | 
			
		||||
vt 0.9220 0.3404
 | 
			
		||||
vt 0.9220 0.3839
 | 
			
		||||
vt 0.9121 0.3839
 | 
			
		||||
vt 0.9121 0.3404
 | 
			
		||||
vt 0.3346 0.5000
 | 
			
		||||
vt 0.3346 1.0000
 | 
			
		||||
vt 0.3184 1.0000
 | 
			
		||||
vt 0.3184 0.5000
 | 
			
		||||
vt 0.8953 0.8675
 | 
			
		||||
vt 0.9115 0.5234
 | 
			
		||||
vt 0.9115 0.5529
 | 
			
		||||
vt 0.9115 0.8675
 | 
			
		||||
vt 0.8243 0.4903
 | 
			
		||||
vt 0.8236 0.5000
 | 
			
		||||
vt 0.8074 0.5559
 | 
			
		||||
vt 0.8074 0.5142
 | 
			
		||||
vt 0.7681 0.0000
 | 
			
		||||
vt 0.7224 0.0000
 | 
			
		||||
vt 0.9220 0.4273
 | 
			
		||||
vt 0.9121 0.4273
 | 
			
		||||
vt 0.3184 0.9903
 | 
			
		||||
vt 0.3154 1.0000
 | 
			
		||||
vt 0.0000 1.0000
 | 
			
		||||
vt 0.0121 0.9903
 | 
			
		||||
vt 0.7049 0.4903
 | 
			
		||||
vt 0.3184 0.4903
 | 
			
		||||
vt 0.3184 0.0097
 | 
			
		||||
vt 0.3524 0.0097
 | 
			
		||||
vt 0.3524 0.4903
 | 
			
		||||
vt 0.7056 0.4903
 | 
			
		||||
vt 0.7056 0.0097
 | 
			
		||||
vt 0.6708 0.5097
 | 
			
		||||
vt 0.3645 0.5097
 | 
			
		||||
vt 0.3524 0.5000
 | 
			
		||||
vt 0.6678 0.5000
 | 
			
		||||
vt 0.3184 0.0000
 | 
			
		||||
vt 0.3482 0.0000
 | 
			
		||||
vt 0.7049 0.5000
 | 
			
		||||
vt 0.8074 0.8675
 | 
			
		||||
vt 0.7912 0.8675
 | 
			
		||||
vt 0.7912 0.5529
 | 
			
		||||
vt 0.7912 0.5234
 | 
			
		||||
vt 0.3362 0.5000
 | 
			
		||||
vt 0.3524 1.0000
 | 
			
		||||
vt 0.3362 1.0000
 | 
			
		||||
vt 0.6708 0.8441
 | 
			
		||||
vt 0.6708 0.8147
 | 
			
		||||
vt 0.6708 0.5000
 | 
			
		||||
vt 0.6871 0.5000
 | 
			
		||||
vt 0.3482 0.5000
 | 
			
		||||
vt 0.3184 0.5000
 | 
			
		||||
vt 0.3645 0.9903
 | 
			
		||||
vt 0.6708 0.9903
 | 
			
		||||
vt 0.6678 1.0000
 | 
			
		||||
vt 0.7049 0.0000
 | 
			
		||||
vt 0.0000 0.5000
 | 
			
		||||
vt 0.0000 0.0000
 | 
			
		||||
vt 0.6685 0.6398
 | 
			
		||||
vt 0.6407 0.6398
 | 
			
		||||
vt 0.6407 0.6306
 | 
			
		||||
vt 0.6725 0.6306
 | 
			
		||||
vt 0.4393 1.0000
 | 
			
		||||
vt 0.4393 0.3191
 | 
			
		||||
vt 0.5272 0.3791
 | 
			
		||||
vt 0.5272 0.9846
 | 
			
		||||
vt 0.0879 1.0000
 | 
			
		||||
vt 0.0879 0.3191
 | 
			
		||||
vt 0.1757 0.3345
 | 
			
		||||
vt 0.1757 0.9400
 | 
			
		||||
vt 0.3514 0.9846
 | 
			
		||||
vt 0.3514 0.3791
 | 
			
		||||
vt 0.0000 0.9400
 | 
			
		||||
vt 0.0000 0.3345
 | 
			
		||||
vt 0.3514 0.0000
 | 
			
		||||
vt 0.3514 0.9611
 | 
			
		||||
vt 0.2636 0.9611
 | 
			
		||||
vt 0.2636 0.0000
 | 
			
		||||
vt 0.1757 0.0000
 | 
			
		||||
vt 0.1757 0.9611
 | 
			
		||||
vn -0.8031 -0.5829 0.1239
 | 
			
		||||
vn -0.8030 0.5829 0.1239
 | 
			
		||||
vn 0.9700 0.2431 -0.0000
 | 
			
		||||
vn 0.9479 0.2740 -0.1625
 | 
			
		||||
vn 0.9479 -0.2740 -0.1625
 | 
			
		||||
vn -0.0000 -1.0000 -0.0000
 | 
			
		||||
vn 0.8316 -0.4534 0.3207
 | 
			
		||||
vn 0.0000 1.0000 -0.0000
 | 
			
		||||
vn 0.0000 0.0000 1.0000
 | 
			
		||||
vn 0.0000 0.0000 -1.0000
 | 
			
		||||
vn -0.8031 -0.5829 -0.1239
 | 
			
		||||
vn -1.0000 -0.0000 -0.0000
 | 
			
		||||
vn 0.8316 -0.4534 -0.3207
 | 
			
		||||
vn 0.9479 -0.2740 0.1625
 | 
			
		||||
vn 0.9700 -0.2431 -0.0000
 | 
			
		||||
vn 0.9479 0.2740 0.1625
 | 
			
		||||
vn -0.8030 0.5829 -0.1239
 | 
			
		||||
vn 0.8875 -0.4609 -0.0000
 | 
			
		||||
vn 0.8875 0.4609 -0.0000
 | 
			
		||||
vn 0.8316 0.4534 -0.3207
 | 
			
		||||
vn 0.8316 0.4534 0.3207
 | 
			
		||||
vn -0.9847 -0.1745 0.0000
 | 
			
		||||
vn -0.9847 0.1745 0.0000
 | 
			
		||||
g Cube.002_Cube.001_Cube.002_Cube.001_cover
 | 
			
		||||
s off
 | 
			
		||||
f 47/1/1 31/2/1 33/3/1 52/4/1
 | 
			
		||||
@@ -253,58 +216,37 @@ f 1/31/9 4/32/9 3/33/9 2/34/9
 | 
			
		||||
f 1/31/9 36/35/9 35/36/9 4/32/9
 | 
			
		||||
f 2/34/9 3/33/9 54/37/9 51/38/9 45/39/9 46/40/9
 | 
			
		||||
f 52/41/10 17/42/10 48/43/10 7/44/10
 | 
			
		||||
f 34/2/11 6/1/11 4/45/11 35/46/11
 | 
			
		||||
f 50/47/12 51/48/12 54/49/12 8/50/12
 | 
			
		||||
f 8/51/10 7/44/10 48/43/10 49/52/10 53/53/10 50/54/10
 | 
			
		||||
f 19/55/13 49/56/13 48/14/13 16/13/13
 | 
			
		||||
f 52/41/10 33/57/10 39/58/10 17/42/10
 | 
			
		||||
f 10/10/14 1/59/14 2/22/14 15/21/14
 | 
			
		||||
f 34/45/11 6/46/11 4/47/11 35/48/11
 | 
			
		||||
f 50/49/12 51/50/12 54/51/12 8/52/12
 | 
			
		||||
f 8/53/10 7/44/10 48/43/10 49/54/10 53/55/10 50/56/10
 | 
			
		||||
f 19/57/13 49/58/13 48/14/13 16/13/13
 | 
			
		||||
f 52/41/10 33/59/10 39/60/10 17/42/10
 | 
			
		||||
f 10/10/14 1/61/14 2/22/14 15/21/14
 | 
			
		||||
f 18/7/15 10/10/15 15/21/15 16/13/15
 | 
			
		||||
f 10/10/16 28/9/16 36/60/16 1/59/16
 | 
			
		||||
f 5/6/17 3/61/17 4/45/17 6/1/17
 | 
			
		||||
f 9/62/8 7/63/8 8/64/8 14/65/8
 | 
			
		||||
f 16/13/18 15/21/18 20/24/18 19/55/18
 | 
			
		||||
f 22/17/6 19/30/6 20/66/6 21/18/6
 | 
			
		||||
f 23/67/8 24/68/8 25/69/8 26/70/8
 | 
			
		||||
f 27/8/19 26/71/19 25/72/19 28/9/19
 | 
			
		||||
f 31/73/6 29/74/6 32/20/6 33/75/6
 | 
			
		||||
f 25/69/8 24/68/8 37/76/8 38/77/8
 | 
			
		||||
f 26/71/20 27/8/20 39/12/20 40/78/20
 | 
			
		||||
f 32/79/10 41/80/10 43/81/10 40/82/10 39/58/10 33/57/10
 | 
			
		||||
f 41/83/12 32/20/12 44/84/12 42/85/12
 | 
			
		||||
f 36/35/9 38/86/9 37/87/9 42/19/9 44/88/9 35/36/9
 | 
			
		||||
f 23/67/8 26/70/8 40/89/8 43/50/8
 | 
			
		||||
f 30/90/6 34/91/6 35/92/6 44/84/6
 | 
			
		||||
f 28/9/21 25/72/21 38/93/21 36/60/21
 | 
			
		||||
f 29/74/6 30/90/6 44/84/6 32/20/6
 | 
			
		||||
f 41/26/8 42/94/8 37/76/8 24/68/8 23/67/8 43/50/8
 | 
			
		||||
f 54/26/8 11/25/8 14/65/8 8/64/8
 | 
			
		||||
f 46/95/6 45/96/6 21/97/6 20/98/6
 | 
			
		||||
f 10/10/16 28/9/16 36/62/16 1/61/16
 | 
			
		||||
f 5/63/17 3/64/17 4/47/17 6/46/17
 | 
			
		||||
f 9/65/8 7/66/8 8/67/8 14/68/8
 | 
			
		||||
f 16/13/18 15/21/18 20/24/18 19/57/18
 | 
			
		||||
f 22/17/6 19/30/6 20/69/6 21/18/6
 | 
			
		||||
f 23/70/8 24/71/8 25/72/8 26/73/8
 | 
			
		||||
f 27/8/19 26/74/19 25/75/19 28/9/19
 | 
			
		||||
f 31/76/6 29/77/6 32/78/6 33/79/6
 | 
			
		||||
f 25/72/8 24/71/8 37/80/8 38/81/8
 | 
			
		||||
f 26/74/20 27/8/20 39/12/20 40/82/20
 | 
			
		||||
f 32/83/10 41/84/10 43/85/10 40/86/10 39/60/10 33/59/10
 | 
			
		||||
f 41/87/12 32/78/12 44/88/12 42/89/12
 | 
			
		||||
f 36/35/9 38/90/9 37/91/9 42/92/9 44/93/9 35/36/9
 | 
			
		||||
f 23/70/8 26/73/8 40/94/8 43/95/8
 | 
			
		||||
f 30/96/6 34/97/6 35/98/6 44/88/6
 | 
			
		||||
f 28/9/21 25/75/21 38/99/21 36/62/21
 | 
			
		||||
f 29/77/6 30/96/6 44/88/6 32/78/6
 | 
			
		||||
f 41/100/8 42/101/8 37/80/8 24/71/8 23/70/8 43/95/8
 | 
			
		||||
f 54/26/8 11/25/8 14/68/8 8/67/8
 | 
			
		||||
f 46/102/6 45/103/6 21/104/6 20/105/6
 | 
			
		||||
g Cube.002_Cube.001_Cube.002_Cube.001_edges
 | 
			
		||||
f 13/99/10 47/100/10 9/101/10 14/102/10
 | 
			
		||||
f 6/103/9 12/104/9 11/105/9 5/106/9
 | 
			
		||||
f 13/99/10 29/107/10 31/108/10 47/100/10
 | 
			
		||||
f 6/103/9 34/109/9 30/110/9 12/104/9
 | 
			
		||||
f 14/111/22 11/112/22 12/113/22 13/114/22
 | 
			
		||||
f 29/115/23 13/114/23 12/113/23 30/116/23
 | 
			
		||||
g Cube.002_Cube.001_Cube.002_Cube.001_trim
 | 
			
		||||
f 61/7/24 70/8/24 71/9/24 57/10/24
 | 
			
		||||
f 70/8/25 61/7/25 60/11/25 75/12/25
 | 
			
		||||
f 59/13/26 82/14/26 60/11/26 61/7/26
 | 
			
		||||
f 84/15/6 86/16/6 65/17/6 64/18/6 80/19/6 85/20/6
 | 
			
		||||
f 58/21/27 56/22/27 81/23/27 63/24/27
 | 
			
		||||
f 65/17/6 86/16/6 83/29/6 62/30/6
 | 
			
		||||
f 62/55/28 83/56/28 82/14/28 59/13/28
 | 
			
		||||
f 57/10/29 55/59/29 56/22/29 58/21/29
 | 
			
		||||
f 61/7/30 57/10/30 58/21/30 59/13/30
 | 
			
		||||
f 57/10/31 71/9/31 72/60/31 55/59/31
 | 
			
		||||
f 59/13/32 58/21/32 63/24/32 62/55/32
 | 
			
		||||
f 65/17/6 62/30/6 63/66/6 64/18/6
 | 
			
		||||
f 66/67/8 67/68/8 68/69/8 69/70/8
 | 
			
		||||
f 70/8/33 69/71/33 68/72/33 71/9/33
 | 
			
		||||
f 68/69/8 67/68/8 73/76/8 74/77/8
 | 
			
		||||
f 69/71/34 70/8/34 75/12/34 76/78/34
 | 
			
		||||
f 66/67/8 69/70/8 76/89/8 79/50/8
 | 
			
		||||
f 71/9/35 68/72/35 74/93/35 72/60/35
 | 
			
		||||
f 77/26/8 78/94/8 73/76/8 67/68/8 66/67/8 79/50/8
 | 
			
		||||
f 81/95/6 80/96/6 64/97/6 63/98/6
 | 
			
		||||
f 13/106/10 47/107/10 9/108/10 14/109/10
 | 
			
		||||
f 6/110/9 12/111/9 11/112/9 5/113/9
 | 
			
		||||
f 13/106/10 29/114/10 31/115/10 47/107/10
 | 
			
		||||
f 6/110/9 34/116/9 30/117/9 12/111/9
 | 
			
		||||
f 14/118/22 11/119/22 12/120/22 13/121/22
 | 
			
		||||
f 29/122/23 13/121/23 12/120/23 30/123/23
 | 
			
		||||
 
 | 
			
		||||
@@ -1,327 +1,335 @@
 | 
			
		||||
# Blender v2.72 (sub 0) OBJ File: 'book-open.blend'
 | 
			
		||||
# Blender v2.78 (sub 0) OBJ File: 'book-open.blend'
 | 
			
		||||
# www.blender.org
 | 
			
		||||
o Cube.002_Cube.001
 | 
			
		||||
v -0.216625 0.012428 -0.485966
 | 
			
		||||
v 0.220555 -0.000000 -0.486750
 | 
			
		||||
v 0.220555 0.321341 -0.485966
 | 
			
		||||
v -0.208120 -0.000001 -0.462863
 | 
			
		||||
v -0.208120 0.310920 -0.485966
 | 
			
		||||
v -0.208120 0.306022 -0.464409
 | 
			
		||||
v 0.212051 0.306022 -0.464409
 | 
			
		||||
v 0.212051 0.310921 -0.485966
 | 
			
		||||
v 0.212050 -0.000000 -0.462862
 | 
			
		||||
v 0.212050 0.016802 -0.500002
 | 
			
		||||
v -0.208120 0.016801 -0.500002
 | 
			
		||||
v -0.208120 0.046213 -0.500002
 | 
			
		||||
v 0.212050 0.046214 -0.500002
 | 
			
		||||
v -0.216625 0.046213 -0.500002
 | 
			
		||||
v -0.216625 0.020445 -0.500002
 | 
			
		||||
v 0.220555 0.012429 -0.485966
 | 
			
		||||
v 0.220555 0.020446 -0.500002
 | 
			
		||||
v 0.220555 0.321340 -0.500002
 | 
			
		||||
v -0.216624 0.321341 -0.500002
 | 
			
		||||
v 0.220555 0.046214 -0.500002
 | 
			
		||||
v -0.216624 0.321341 -0.485966
 | 
			
		||||
v -0.208120 0.238235 -0.450057
 | 
			
		||||
v -0.216625 -0.000001 -0.486750
 | 
			
		||||
v 0.212051 0.238236 -0.450057
 | 
			
		||||
v -0.208120 -0.306023 -0.464409
 | 
			
		||||
v 0.212051 -0.306023 -0.464409
 | 
			
		||||
v -0.208120 -0.238237 -0.450057
 | 
			
		||||
v 0.212051 -0.238237 -0.450057
 | 
			
		||||
v 0.212050 -0.046214 -0.500003
 | 
			
		||||
v -0.208120 -0.046215 -0.500003
 | 
			
		||||
v -0.208120 -0.016803 -0.500003
 | 
			
		||||
v 0.212050 -0.016803 -0.500003
 | 
			
		||||
v -0.216625 -0.000001 -0.481442
 | 
			
		||||
v 0.220555 -0.000000 -0.481442
 | 
			
		||||
v 0.212051 -0.310922 -0.485967
 | 
			
		||||
v -0.208120 -0.310922 -0.485967
 | 
			
		||||
v 0.220555 -0.321342 -0.485967
 | 
			
		||||
v -0.216625 -0.012430 -0.485967
 | 
			
		||||
v -0.216625 -0.046215 -0.500003
 | 
			
		||||
v -0.216625 -0.020447 -0.500003
 | 
			
		||||
v 0.220555 -0.012429 -0.485967
 | 
			
		||||
v 0.220555 -0.020446 -0.500003
 | 
			
		||||
v 0.220555 -0.321341 -0.500003
 | 
			
		||||
v -0.216624 -0.321343 -0.500003
 | 
			
		||||
v 0.220555 -0.046214 -0.500003
 | 
			
		||||
v -0.216624 -0.321343 -0.485967
 | 
			
		||||
v -0.208120 -0.000001 -0.486750
 | 
			
		||||
v 0.212050 -0.000000 -0.486750
 | 
			
		||||
v 0.212051 -0.086920 -0.442244
 | 
			
		||||
v -0.208120 -0.086920 -0.442244
 | 
			
		||||
v 0.212051 0.086847 -0.442244
 | 
			
		||||
v -0.208120 0.086847 -0.442244
 | 
			
		||||
v 0.212050 0.043405 -0.447755
 | 
			
		||||
v -0.208120 0.043405 -0.447755
 | 
			
		||||
v 0.212050 -0.043478 -0.447755
 | 
			
		||||
v -0.208120 -0.043478 -0.447755
 | 
			
		||||
v -0.216625 -0.010224 -0.490836
 | 
			
		||||
v -0.216625 0.006214 -0.482857
 | 
			
		||||
v 0.220555 0.006214 -0.482857
 | 
			
		||||
v -0.208120 0.008400 -0.490836
 | 
			
		||||
v 0.212050 0.008401 -0.490836
 | 
			
		||||
v 0.220555 0.010223 -0.490836
 | 
			
		||||
v -0.216625 0.010222 -0.490836
 | 
			
		||||
v 0.220555 -0.010223 -0.490836
 | 
			
		||||
v 0.212050 -0.008401 -0.490836
 | 
			
		||||
v -0.208120 -0.008402 -0.490836
 | 
			
		||||
v 0.220555 -0.006215 -0.482858
 | 
			
		||||
v -0.216625 -0.006215 -0.482858
 | 
			
		||||
v 0.212050 0.012429 -0.485966
 | 
			
		||||
v 0.212050 -0.000000 -0.481442
 | 
			
		||||
v 0.212050 -0.012429 -0.485967
 | 
			
		||||
v 0.212050 0.006214 -0.482857
 | 
			
		||||
v 0.212050 -0.006215 -0.482858
 | 
			
		||||
v -0.208120 0.012428 -0.485966
 | 
			
		||||
v -0.208120 -0.000001 -0.481442
 | 
			
		||||
v -0.208120 -0.012430 -0.485967
 | 
			
		||||
v -0.208120 0.006214 -0.482857
 | 
			
		||||
v -0.208120 -0.006215 -0.482858
 | 
			
		||||
vt 0.965735 0.839196
 | 
			
		||||
vt 0.711783 0.839196
 | 
			
		||||
vt 0.711783 0.832541
 | 
			
		||||
vt 0.711783 0.503765
 | 
			
		||||
vt 0.711783 0.497110
 | 
			
		||||
vt 0.965736 0.497110
 | 
			
		||||
vt 0.395683 0.494736
 | 
			
		||||
vt 0.395683 0.261171
 | 
			
		||||
vt 0.403533 0.261171
 | 
			
		||||
vt 0.403532 0.502890
 | 
			
		||||
vt 0.687998 0.839196
 | 
			
		||||
vt 0.684635 0.832541
 | 
			
		||||
vt 0.987044 0.738829
 | 
			
		||||
vt 0.987044 0.497110
 | 
			
		||||
vt 1.000000 0.497110
 | 
			
		||||
vt 0.999999 0.712393
 | 
			
		||||
vt 0.999999 0.732556
 | 
			
		||||
vt 0.992051 0.000000
 | 
			
		||||
vt 0.992051 0.342086
 | 
			
		||||
vt 0.979145 0.342086
 | 
			
		||||
vt 0.979145 0.000000
 | 
			
		||||
vt 0.969912 1.000000
 | 
			
		||||
vt 0.969911 0.758280
 | 
			
		||||
vt 0.982867 0.764553
 | 
			
		||||
vt 0.982867 0.784716
 | 
			
		||||
vt 0.982868 0.999999
 | 
			
		||||
vt 0.403533 0.241720
 | 
			
		||||
vt 0.395683 0.241720
 | 
			
		||||
vt 0.395683 0.008154
 | 
			
		||||
vt 0.403532 0.000000
 | 
			
		||||
vt 0.684634 0.503765
 | 
			
		||||
vt 0.007850 0.008154
 | 
			
		||||
vt 0.000000 0.000000
 | 
			
		||||
vt 0.657486 0.832541
 | 
			
		||||
vt 0.657486 0.503765
 | 
			
		||||
vt 0.657486 0.497110
 | 
			
		||||
vt 0.681271 0.497110
 | 
			
		||||
vt 0.969911 0.497110
 | 
			
		||||
vt 0.982867 0.497110
 | 
			
		||||
vt 0.982868 0.712393
 | 
			
		||||
vt 0.982868 0.732556
 | 
			
		||||
vt 0.969912 0.738829
 | 
			
		||||
vt 0.966239 0.000000
 | 
			
		||||
vt 0.966239 0.342086
 | 
			
		||||
vt 0.987044 0.758280
 | 
			
		||||
vt 1.000000 0.764553
 | 
			
		||||
vt 1.000000 0.784716
 | 
			
		||||
vt 0.999999 1.000000
 | 
			
		||||
vt 0.987043 1.000000
 | 
			
		||||
vt 0.681271 0.839196
 | 
			
		||||
vt 0.657486 0.839196
 | 
			
		||||
vt 0.000000 0.261171
 | 
			
		||||
vt 0.007850 0.261171
 | 
			
		||||
vt 0.007850 0.494736
 | 
			
		||||
vt 0.000000 0.502891
 | 
			
		||||
vt 0.403534 0.839196
 | 
			
		||||
vt 0.403533 0.497110
 | 
			
		||||
vt 0.687998 0.497110
 | 
			
		||||
vt 0.974407 0.740555
 | 
			
		||||
vt 0.970635 0.748555
 | 
			
		||||
vt 0.967042 0.743692
 | 
			
		||||
vt 0.965736 0.748555
 | 
			
		||||
vt 0.967042 0.753417
 | 
			
		||||
vt 0.974406 0.756554
 | 
			
		||||
vt 0.991539 0.740555
 | 
			
		||||
vt 0.987768 0.748555
 | 
			
		||||
vt 0.984174 0.743692
 | 
			
		||||
vt 0.982868 0.748555
 | 
			
		||||
vt 0.984174 0.753417
 | 
			
		||||
vt 0.991539 0.756554
 | 
			
		||||
vt 0.044849 0.844977
 | 
			
		||||
vt 0.035593 0.844977
 | 
			
		||||
vt 0.035446 0.838322
 | 
			
		||||
vt 0.044554 0.838322
 | 
			
		||||
vt 0.956803 0.342087
 | 
			
		||||
vt 0.956803 0.335432
 | 
			
		||||
vt 0.964557 0.335432
 | 
			
		||||
vt 0.947366 0.342087
 | 
			
		||||
vt 0.949048 0.335432
 | 
			
		||||
vt 0.045143 0.838322
 | 
			
		||||
vt 0.054251 0.838322
 | 
			
		||||
vt 0.054104 0.844977
 | 
			
		||||
vt 0.044554 0.509546
 | 
			
		||||
vt 0.035446 0.509546
 | 
			
		||||
vt 0.035593 0.502890
 | 
			
		||||
vt 0.044849 0.502891
 | 
			
		||||
vt 0.964557 0.006655
 | 
			
		||||
vt 0.956803 0.006655
 | 
			
		||||
vt 0.956803 0.000000
 | 
			
		||||
vt 0.949048 0.006655
 | 
			
		||||
vt 0.947366 0.000000
 | 
			
		||||
vt 0.054104 0.502891
 | 
			
		||||
vt 0.054251 0.509546
 | 
			
		||||
vt 0.045143 0.509546
 | 
			
		||||
vt 0.000000 0.256308
 | 
			
		||||
vt 0.000000 0.251445
 | 
			
		||||
vt 0.007850 0.251445
 | 
			
		||||
vt 0.007850 0.256308
 | 
			
		||||
vt 0.000000 0.246582
 | 
			
		||||
vt 0.000000 0.241720
 | 
			
		||||
vt 0.007850 0.241720
 | 
			
		||||
vt 0.007850 0.246582
 | 
			
		||||
vt 0.403533 0.251445
 | 
			
		||||
vt 0.403533 0.256308
 | 
			
		||||
vt 0.395683 0.256308
 | 
			
		||||
vt 0.395683 0.251445
 | 
			
		||||
vt 0.403533 0.246582
 | 
			
		||||
vt 0.395683 0.246582
 | 
			
		||||
vt 0.779948 0.000000
 | 
			
		||||
vt 0.779948 1.000000
 | 
			
		||||
vt 0.724984 1.000000
 | 
			
		||||
vt 0.724983 0.000000
 | 
			
		||||
vt 0.717416 1.000000
 | 
			
		||||
vt 0.662450 1.000000
 | 
			
		||||
vt 0.662449 0.000000
 | 
			
		||||
vt 0.717416 0.000000
 | 
			
		||||
vt 0.184400 1.000000
 | 
			
		||||
vt 0.126957 0.970419
 | 
			
		||||
vt 0.221962 0.896695
 | 
			
		||||
vt 0.485666 0.793134
 | 
			
		||||
vt 0.471964 0.896524
 | 
			
		||||
vt 0.376957 0.970419
 | 
			
		||||
vt 0.216239 0.433002
 | 
			
		||||
vt 0.126957 0.260013
 | 
			
		||||
vt 0.059402 0.000000
 | 
			
		||||
vt 0.001957 0.029581
 | 
			
		||||
vt 0.009688 0.014790
 | 
			
		||||
vt 0.235664 0.793305
 | 
			
		||||
vt 0.013207 0.000000
 | 
			
		||||
vt 0.091241 0.566998
 | 
			
		||||
vt 0.055557 0.728328
 | 
			
		||||
vt 0.001957 0.739987
 | 
			
		||||
vt 0.110666 0.206866
 | 
			
		||||
vt 0.134686 0.985210
 | 
			
		||||
vt 0.096964 0.103476
 | 
			
		||||
vt 0.180555 0.271672
 | 
			
		||||
vt 0.138205 1.000000
 | 
			
		||||
vt 0.341239 0.566998
 | 
			
		||||
vt 0.305555 0.728328
 | 
			
		||||
vt 0.251957 0.739987
 | 
			
		||||
vt 0.251957 0.029581
 | 
			
		||||
vt 0.360664 0.206695
 | 
			
		||||
vt 0.388207 1.000000
 | 
			
		||||
vt 0.384688 0.985210
 | 
			
		||||
vt 0.434402 1.000000
 | 
			
		||||
vt 0.346962 0.103305
 | 
			
		||||
vt 0.466241 0.433002
 | 
			
		||||
vt 0.376957 0.260013
 | 
			
		||||
vt 0.309400 0.000000
 | 
			
		||||
vt 0.259687 0.014790
 | 
			
		||||
vt 0.263205 0.000000
 | 
			
		||||
vt 0.430558 0.271672
 | 
			
		||||
vt 0.636817 0.156314
 | 
			
		||||
vt 0.875000 0.156314
 | 
			
		||||
vt 0.875000 0.984312
 | 
			
		||||
vt 0.636817 0.984312
 | 
			
		||||
vt 0.000000 0.156314
 | 
			
		||||
vt 0.125000 0.156314
 | 
			
		||||
vt 0.125000 0.984312
 | 
			
		||||
vt 0.000000 0.984313
 | 
			
		||||
vt 1.000000 0.156314
 | 
			
		||||
vt 1.000000 0.984313
 | 
			
		||||
vt 0.363296 0.156314
 | 
			
		||||
vt 0.431676 0.156314
 | 
			
		||||
vt 0.431676 0.984311
 | 
			
		||||
vt 0.363296 0.984312
 | 
			
		||||
vt 0.500000 0.156314
 | 
			
		||||
vt 0.568437 0.156314
 | 
			
		||||
vt 0.568437 0.984311
 | 
			
		||||
vt 0.500000 0.984311
 | 
			
		||||
vn 0.577300 0.577300 -0.577300
 | 
			
		||||
vn 0.707100 0.000000 -0.707100
 | 
			
		||||
vn 0.000000 0.000000 -1.000000
 | 
			
		||||
vn -0.707100 0.000000 -0.707100
 | 
			
		||||
vn -0.577300 0.577300 -0.577300
 | 
			
		||||
vn -0.246900 -0.280700 0.927500
 | 
			
		||||
vn -0.658800 -0.172900 0.732100
 | 
			
		||||
vn -0.762700 -0.148700 0.629400
 | 
			
		||||
vn -0.577300 -0.577300 0.577300
 | 
			
		||||
vn 0.668800 -0.216600 -0.711100
 | 
			
		||||
vn 0.071700 -0.428700 -0.900500
 | 
			
		||||
vn -0.762700 0.148700 0.629400
 | 
			
		||||
vn -0.577300 0.577300 0.577300
 | 
			
		||||
vn -0.668800 -0.216600 -0.711100
 | 
			
		||||
vn 0.577300 0.577300 0.577300
 | 
			
		||||
vn 0.762700 0.148700 0.629400
 | 
			
		||||
vn -0.658800 0.172900 0.732100
 | 
			
		||||
vn -0.246900 0.280700 0.927500
 | 
			
		||||
vn -0.071700 -0.428700 -0.900500
 | 
			
		||||
vn 0.246900 0.280700 0.927500
 | 
			
		||||
vn -0.071700 0.428800 -0.900500
 | 
			
		||||
vn 0.071700 0.428800 -0.900500
 | 
			
		||||
vn -0.668800 0.216600 -0.711100
 | 
			
		||||
vn 0.577300 -0.577300 0.577300
 | 
			
		||||
vn 0.577300 -0.577300 -0.577300
 | 
			
		||||
vn 0.668800 0.216600 -0.711100
 | 
			
		||||
vn 0.762700 -0.148700 0.629400
 | 
			
		||||
vn -0.577300 -0.577300 -0.577300
 | 
			
		||||
vn 0.658800 -0.172900 0.732100
 | 
			
		||||
vn 0.246900 -0.280700 0.927500
 | 
			
		||||
vn 0.794100 0.350300 -0.496700
 | 
			
		||||
vn 0.814600 0.000000 -0.580000
 | 
			
		||||
vn 0.681100 -0.246900 0.689300
 | 
			
		||||
vn 0.660400 0.000000 0.750900
 | 
			
		||||
vn 0.681100 0.246800 0.689300
 | 
			
		||||
vn 0.794100 -0.350300 -0.496700
 | 
			
		||||
vn -0.794100 -0.350300 -0.496700
 | 
			
		||||
vn -0.814600 0.000000 -0.580000
 | 
			
		||||
vn -0.681100 0.246800 0.689300
 | 
			
		||||
vn -0.660400 0.000000 0.750900
 | 
			
		||||
vn -0.681100 -0.246900 0.689300
 | 
			
		||||
vn -0.794100 0.350300 -0.496700
 | 
			
		||||
vn -0.062900 0.569600 -0.819500
 | 
			
		||||
vn -0.023700 0.000000 -0.999700
 | 
			
		||||
vn -0.062900 -0.569600 -0.819500
 | 
			
		||||
vn 0.062900 0.569600 -0.819500
 | 
			
		||||
vn 0.023700 0.000000 -0.999700
 | 
			
		||||
vn 0.062900 -0.569600 -0.819500
 | 
			
		||||
vn 0.760600 0.000000 0.649100
 | 
			
		||||
vn 0.735000 -0.228600 0.638300
 | 
			
		||||
vn 0.658800 0.172900 0.732100
 | 
			
		||||
vn 0.735000 0.228600 0.638300
 | 
			
		||||
vn -0.735000 -0.228600 0.638300
 | 
			
		||||
vn -0.760600 0.000000 0.649100
 | 
			
		||||
vn -0.735000 0.228600 0.638300
 | 
			
		||||
vn -0.603500 0.559600 0.567900
 | 
			
		||||
vn 0.603500 0.559600 0.567900
 | 
			
		||||
vn 0.603500 -0.559600 0.567900
 | 
			
		||||
vn -0.603500 -0.559600 0.567900
 | 
			
		||||
vn 0.789000 -0.000200 0.614300
 | 
			
		||||
vn 0.684400 -0.166600 0.709800
 | 
			
		||||
vn -0.687600 0.027100 0.725500
 | 
			
		||||
vn -0.684400 0.166400 0.709800
 | 
			
		||||
vn 0.689800 0.093900 0.717800
 | 
			
		||||
vn 0.687600 -0.027100 0.725500
 | 
			
		||||
vn 0.689800 -0.093900 0.717800
 | 
			
		||||
vn 0.687600 0.027100 0.725500
 | 
			
		||||
vn 0.684400 0.166400 0.709800
 | 
			
		||||
vn -0.689800 0.093900 0.717800
 | 
			
		||||
vn -0.687600 -0.027100 0.725500
 | 
			
		||||
vn -0.789000 -0.000200 0.614300
 | 
			
		||||
vn -0.684400 -0.166600 0.709800
 | 
			
		||||
vn -0.689800 -0.093900 0.717800
 | 
			
		||||
v -0.012428 -0.485966 0.216625
 | 
			
		||||
v 0.000000 -0.486750 -0.220555
 | 
			
		||||
v -0.321341 -0.485966 -0.220555
 | 
			
		||||
v 0.000001 -0.462863 0.208120
 | 
			
		||||
v -0.310920 -0.485966 0.208120
 | 
			
		||||
v -0.306022 -0.464409 0.208120
 | 
			
		||||
v -0.306022 -0.464409 -0.212051
 | 
			
		||||
v -0.310921 -0.485966 -0.212051
 | 
			
		||||
v 0.000000 -0.462862 -0.212050
 | 
			
		||||
v -0.016802 -0.500002 -0.212050
 | 
			
		||||
v -0.016801 -0.500002 0.208120
 | 
			
		||||
v -0.046213 -0.500002 0.208120
 | 
			
		||||
v -0.046214 -0.500002 -0.212050
 | 
			
		||||
v -0.046213 -0.500002 0.216625
 | 
			
		||||
v -0.020445 -0.500002 0.216625
 | 
			
		||||
v -0.012429 -0.485966 -0.220555
 | 
			
		||||
v -0.020446 -0.500002 -0.220555
 | 
			
		||||
v -0.321340 -0.500002 -0.220555
 | 
			
		||||
v -0.321341 -0.500002 0.216624
 | 
			
		||||
v -0.046214 -0.500002 -0.220555
 | 
			
		||||
v -0.321341 -0.485966 0.216624
 | 
			
		||||
v -0.238235 -0.450057 0.208120
 | 
			
		||||
v 0.000001 -0.486750 0.216625
 | 
			
		||||
v -0.238236 -0.450057 -0.212051
 | 
			
		||||
v 0.306023 -0.464409 0.208120
 | 
			
		||||
v 0.306023 -0.464409 -0.212051
 | 
			
		||||
v 0.238237 -0.450057 0.208120
 | 
			
		||||
v 0.238236 -0.450057 -0.212051
 | 
			
		||||
v 0.046214 -0.500003 -0.212050
 | 
			
		||||
v 0.046215 -0.500003 0.208120
 | 
			
		||||
v 0.016803 -0.500003 0.208120
 | 
			
		||||
v 0.016802 -0.500003 -0.212050
 | 
			
		||||
v 0.000001 -0.481442 0.216625
 | 
			
		||||
v 0.000000 -0.481442 -0.220555
 | 
			
		||||
v 0.310922 -0.485967 -0.212051
 | 
			
		||||
v 0.310922 -0.485967 0.208120
 | 
			
		||||
v 0.321342 -0.485967 -0.220555
 | 
			
		||||
v 0.012430 -0.485967 0.216625
 | 
			
		||||
v 0.046215 -0.500003 0.216625
 | 
			
		||||
v 0.020447 -0.500003 0.216625
 | 
			
		||||
v 0.012429 -0.485967 -0.220555
 | 
			
		||||
v 0.020446 -0.500003 -0.220555
 | 
			
		||||
v 0.321341 -0.500003 -0.220555
 | 
			
		||||
v 0.321343 -0.500003 0.216624
 | 
			
		||||
v 0.046214 -0.500003 -0.220555
 | 
			
		||||
v 0.321343 -0.485967 0.216624
 | 
			
		||||
v 0.000001 -0.486750 0.208120
 | 
			
		||||
v 0.000000 -0.486750 -0.212050
 | 
			
		||||
v 0.086920 -0.442244 -0.212051
 | 
			
		||||
v 0.086920 -0.442244 0.208120
 | 
			
		||||
v -0.086847 -0.442244 -0.212050
 | 
			
		||||
v -0.086847 -0.442244 0.208120
 | 
			
		||||
v -0.043405 -0.447755 -0.212050
 | 
			
		||||
v -0.043405 -0.447755 0.208120
 | 
			
		||||
v 0.043478 -0.447755 -0.212050
 | 
			
		||||
v 0.043478 -0.447755 0.208120
 | 
			
		||||
v 0.010224 -0.490836 0.216625
 | 
			
		||||
v -0.006214 -0.482857 0.216625
 | 
			
		||||
v -0.006214 -0.482857 -0.220555
 | 
			
		||||
v -0.008400 -0.490836 0.208120
 | 
			
		||||
v -0.008401 -0.490836 -0.212050
 | 
			
		||||
v -0.010223 -0.490836 -0.220555
 | 
			
		||||
v -0.010222 -0.490836 0.216625
 | 
			
		||||
v 0.010223 -0.490836 -0.220555
 | 
			
		||||
v 0.008401 -0.490836 -0.212050
 | 
			
		||||
v 0.008402 -0.490836 0.208120
 | 
			
		||||
v 0.006215 -0.482858 -0.220555
 | 
			
		||||
v 0.006215 -0.482858 0.216625
 | 
			
		||||
v -0.012429 -0.485966 -0.212050
 | 
			
		||||
v 0.000000 -0.481442 -0.212050
 | 
			
		||||
v 0.012429 -0.485967 -0.212050
 | 
			
		||||
v -0.006214 -0.482857 -0.212050
 | 
			
		||||
v 0.006215 -0.482858 -0.212050
 | 
			
		||||
v -0.012428 -0.485966 0.208120
 | 
			
		||||
v 0.000001 -0.481442 0.208120
 | 
			
		||||
v 0.012430 -0.485967 0.208120
 | 
			
		||||
v -0.006214 -0.482857 0.208120
 | 
			
		||||
v 0.006215 -0.482858 0.208120
 | 
			
		||||
vt 0.9657 0.8392
 | 
			
		||||
vt 0.7118 0.8392
 | 
			
		||||
vt 0.7118 0.8325
 | 
			
		||||
vt 0.7118 0.5038
 | 
			
		||||
vt 0.7118 0.4971
 | 
			
		||||
vt 0.9657 0.4971
 | 
			
		||||
vt 0.3957 0.4947
 | 
			
		||||
vt 0.3957 0.2612
 | 
			
		||||
vt 0.4035 0.2612
 | 
			
		||||
vt 0.4035 0.5029
 | 
			
		||||
vt 0.6880 0.8392
 | 
			
		||||
vt 0.6846 0.8325
 | 
			
		||||
vt 0.9870 0.7388
 | 
			
		||||
vt 0.9870 0.4971
 | 
			
		||||
vt 1.0000 0.4971
 | 
			
		||||
vt 1.0000 0.7124
 | 
			
		||||
vt 1.0000 0.7326
 | 
			
		||||
vt 0.9921 0.0000
 | 
			
		||||
vt 0.9921 0.3421
 | 
			
		||||
vt 0.9791 0.3421
 | 
			
		||||
vt 0.9791 0.0000
 | 
			
		||||
vt 0.9699 1.0000
 | 
			
		||||
vt 0.9699 0.7583
 | 
			
		||||
vt 0.9829 0.7646
 | 
			
		||||
vt 0.9829 0.7847
 | 
			
		||||
vt 0.9829 1.0000
 | 
			
		||||
vt 0.4035 0.2417
 | 
			
		||||
vt 0.3957 0.2417
 | 
			
		||||
vt 0.3957 0.0082
 | 
			
		||||
vt 0.4035 0.0000
 | 
			
		||||
vt 0.6846 0.5038
 | 
			
		||||
vt 0.0078 0.0082
 | 
			
		||||
vt 0.0000 0.0000
 | 
			
		||||
vt 0.6575 0.8325
 | 
			
		||||
vt 0.6575 0.5038
 | 
			
		||||
vt 0.6846 0.5038
 | 
			
		||||
vt 0.6846 0.8325
 | 
			
		||||
vt 0.6575 0.4971
 | 
			
		||||
vt 0.6813 0.4971
 | 
			
		||||
vt 0.9699 0.4971
 | 
			
		||||
vt 0.9829 0.4971
 | 
			
		||||
vt 0.9829 0.7124
 | 
			
		||||
vt 0.9829 0.7326
 | 
			
		||||
vt 0.9699 0.7388
 | 
			
		||||
vt 0.9662 0.0000
 | 
			
		||||
vt 0.9791 0.0000
 | 
			
		||||
vt 0.9791 0.3421
 | 
			
		||||
vt 0.9662 0.3421
 | 
			
		||||
vt 0.9870 0.7583
 | 
			
		||||
vt 1.0000 0.7646
 | 
			
		||||
vt 1.0000 0.7847
 | 
			
		||||
vt 1.0000 1.0000
 | 
			
		||||
vt 0.9870 1.0000
 | 
			
		||||
vt 0.6813 0.8392
 | 
			
		||||
vt 0.6575 0.8392
 | 
			
		||||
vt 0.0000 0.2612
 | 
			
		||||
vt 0.0079 0.2612
 | 
			
		||||
vt 0.0078 0.4947
 | 
			
		||||
vt 0.0000 0.5029
 | 
			
		||||
vt 0.4035 0.8392
 | 
			
		||||
vt 0.4035 0.4971
 | 
			
		||||
vt 0.6880 0.4971
 | 
			
		||||
vt 0.9744 0.7406
 | 
			
		||||
vt 0.9706 0.7486
 | 
			
		||||
vt 0.9670 0.7437
 | 
			
		||||
vt 0.9657 0.7486
 | 
			
		||||
vt 0.9670 0.7534
 | 
			
		||||
vt 0.9744 0.7566
 | 
			
		||||
vt 0.9915 0.7406
 | 
			
		||||
vt 0.9878 0.7486
 | 
			
		||||
vt 0.9842 0.7437
 | 
			
		||||
vt 0.9829 0.7486
 | 
			
		||||
vt 0.9842 0.7534
 | 
			
		||||
vt 0.9915 0.7566
 | 
			
		||||
vt 0.0448 0.8450
 | 
			
		||||
vt 0.0356 0.8450
 | 
			
		||||
vt 0.0354 0.8383
 | 
			
		||||
vt 0.0446 0.8383
 | 
			
		||||
vt 0.9662 0.3421
 | 
			
		||||
vt 0.9568 0.3421
 | 
			
		||||
vt 0.9568 0.3354
 | 
			
		||||
vt 0.9646 0.3354
 | 
			
		||||
vt 0.9474 0.3421
 | 
			
		||||
vt 0.9490 0.3354
 | 
			
		||||
vt 0.0448 0.8450
 | 
			
		||||
vt 0.0451 0.8383
 | 
			
		||||
vt 0.0543 0.8383
 | 
			
		||||
vt 0.0541 0.8450
 | 
			
		||||
vt 0.0446 0.5095
 | 
			
		||||
vt 0.0354 0.5095
 | 
			
		||||
vt 0.0356 0.5029
 | 
			
		||||
vt 0.0448 0.5029
 | 
			
		||||
vt 0.9662 0.0000
 | 
			
		||||
vt 0.9646 0.0067
 | 
			
		||||
vt 0.9568 0.0067
 | 
			
		||||
vt 0.9568 0.0000
 | 
			
		||||
vt 0.9490 0.0067
 | 
			
		||||
vt 0.9474 0.0000
 | 
			
		||||
vt 0.0448 0.5029
 | 
			
		||||
vt 0.0541 0.5029
 | 
			
		||||
vt 0.0543 0.5095
 | 
			
		||||
vt 0.0451 0.5095
 | 
			
		||||
vt 0.0000 0.2563
 | 
			
		||||
vt 0.0000 0.2514
 | 
			
		||||
vt 0.0079 0.2514
 | 
			
		||||
vt 0.0079 0.2563
 | 
			
		||||
vt 0.0000 0.2466
 | 
			
		||||
vt 0.0000 0.2417
 | 
			
		||||
vt 0.0079 0.2417
 | 
			
		||||
vt 0.0079 0.2466
 | 
			
		||||
vt 0.4035 0.2514
 | 
			
		||||
vt 0.4035 0.2563
 | 
			
		||||
vt 0.3957 0.2563
 | 
			
		||||
vt 0.3957 0.2514
 | 
			
		||||
vt 0.4035 0.2466
 | 
			
		||||
vt 0.3957 0.2466
 | 
			
		||||
vt 0.7799 0.0000
 | 
			
		||||
vt 0.7799 1.0000
 | 
			
		||||
vt 0.7250 1.0000
 | 
			
		||||
vt 0.7250 0.0000
 | 
			
		||||
vt 0.7174 1.0000
 | 
			
		||||
vt 0.6624 1.0000
 | 
			
		||||
vt 0.6624 0.0000
 | 
			
		||||
vt 0.7174 0.0000
 | 
			
		||||
vt 0.1844 1.0000
 | 
			
		||||
vt 0.1270 0.9704
 | 
			
		||||
vt 0.2220 0.8967
 | 
			
		||||
vt 0.4857 0.7931
 | 
			
		||||
vt 0.4720 0.8965
 | 
			
		||||
vt 0.3770 0.9704
 | 
			
		||||
vt 0.2162 0.4330
 | 
			
		||||
vt 0.1270 0.2600
 | 
			
		||||
vt 0.0594 0.0000
 | 
			
		||||
vt 0.0020 0.0296
 | 
			
		||||
vt 0.0097 0.0148
 | 
			
		||||
vt 0.2357 0.7933
 | 
			
		||||
vt 0.0132 0.0000
 | 
			
		||||
vt 0.0912 0.5670
 | 
			
		||||
vt 0.0556 0.7283
 | 
			
		||||
vt 0.0020 0.7400
 | 
			
		||||
vt 0.1107 0.2069
 | 
			
		||||
vt 0.1347 0.9852
 | 
			
		||||
vt 0.0970 0.1035
 | 
			
		||||
vt 0.1806 0.2717
 | 
			
		||||
vt 0.1382 1.0000
 | 
			
		||||
vt 0.3412 0.5670
 | 
			
		||||
vt 0.3056 0.7283
 | 
			
		||||
vt 0.2520 0.7400
 | 
			
		||||
vt 0.2520 0.0296
 | 
			
		||||
vt 0.3607 0.2067
 | 
			
		||||
vt 0.3882 1.0000
 | 
			
		||||
vt 0.3847 0.9852
 | 
			
		||||
vt 0.4344 1.0000
 | 
			
		||||
vt 0.3470 0.1033
 | 
			
		||||
vt 0.4662 0.4330
 | 
			
		||||
vt 0.3770 0.2600
 | 
			
		||||
vt 0.3094 0.0000
 | 
			
		||||
vt 0.2597 0.0148
 | 
			
		||||
vt 0.2632 0.0000
 | 
			
		||||
vt 0.4306 0.2717
 | 
			
		||||
vt 0.6368 0.1563
 | 
			
		||||
vt 0.8750 0.1563
 | 
			
		||||
vt 0.8750 0.9843
 | 
			
		||||
vt 0.6368 0.9843
 | 
			
		||||
vt 0.0000 0.1563
 | 
			
		||||
vt 0.1250 0.1563
 | 
			
		||||
vt 0.1250 0.9843
 | 
			
		||||
vt 0.0000 0.9843
 | 
			
		||||
vt 1.0000 0.1563
 | 
			
		||||
vt 1.0000 0.9843
 | 
			
		||||
vt 0.3633 0.1563
 | 
			
		||||
vt 0.4317 0.1563
 | 
			
		||||
vt 0.4317 0.9843
 | 
			
		||||
vt 0.3633 0.9843
 | 
			
		||||
vt 0.5000 0.1563
 | 
			
		||||
vt 0.5684 0.1563
 | 
			
		||||
vt 0.5684 0.9843
 | 
			
		||||
vt 0.5000 0.9843
 | 
			
		||||
vn -0.5773 -0.5773 -0.5773
 | 
			
		||||
vn 0.0000 -0.7071 -0.7071
 | 
			
		||||
vn 0.0000 -1.0000 0.0000
 | 
			
		||||
vn 0.0000 -0.7071 0.7071
 | 
			
		||||
vn -0.5773 -0.5773 0.5773
 | 
			
		||||
vn 0.2807 0.9275 0.2469
 | 
			
		||||
vn 0.1729 0.7321 0.6588
 | 
			
		||||
vn 0.1487 0.6294 0.7627
 | 
			
		||||
vn 0.5773 0.5773 0.5773
 | 
			
		||||
vn 0.2166 -0.7111 -0.6688
 | 
			
		||||
vn 0.4287 -0.9005 -0.0717
 | 
			
		||||
vn -0.1487 0.6294 0.7627
 | 
			
		||||
vn -0.5773 0.5773 0.5773
 | 
			
		||||
vn 0.2166 -0.7111 0.6688
 | 
			
		||||
vn -0.5773 0.5773 -0.5773
 | 
			
		||||
vn -0.1487 0.6294 -0.7627
 | 
			
		||||
vn -0.1729 0.7321 0.6588
 | 
			
		||||
vn -0.2807 0.9275 0.2469
 | 
			
		||||
vn 0.4287 -0.9005 0.0717
 | 
			
		||||
vn -0.2807 0.9275 -0.2469
 | 
			
		||||
vn -0.4288 -0.9005 0.0717
 | 
			
		||||
vn -0.4288 -0.9005 -0.0717
 | 
			
		||||
vn -0.2166 -0.7111 0.6688
 | 
			
		||||
vn 0.5773 0.5773 -0.5773
 | 
			
		||||
vn 0.5773 -0.5773 -0.5773
 | 
			
		||||
vn -0.2166 -0.7111 -0.6688
 | 
			
		||||
vn 0.1487 0.6294 -0.7627
 | 
			
		||||
vn 0.5773 -0.5773 0.5773
 | 
			
		||||
vn 0.1729 0.7321 -0.6588
 | 
			
		||||
vn 0.2807 0.9275 -0.2469
 | 
			
		||||
vn -0.3503 -0.4967 -0.7941
 | 
			
		||||
vn 0.0000 -0.5800 -0.8146
 | 
			
		||||
vn 0.2469 0.6893 -0.6811
 | 
			
		||||
vn 0.0000 0.7509 -0.6604
 | 
			
		||||
vn -0.2468 0.6893 -0.6811
 | 
			
		||||
vn 0.3503 -0.4967 -0.7941
 | 
			
		||||
vn 0.3503 -0.4967 0.7941
 | 
			
		||||
vn 0.0000 -0.5800 0.8146
 | 
			
		||||
vn -0.2468 0.6893 0.6811
 | 
			
		||||
vn 0.0000 0.7509 0.6604
 | 
			
		||||
vn 0.2469 0.6893 0.6811
 | 
			
		||||
vn -0.3503 -0.4967 0.7941
 | 
			
		||||
vn -0.5696 -0.8195 0.0629
 | 
			
		||||
vn 0.0000 -0.9997 0.0237
 | 
			
		||||
vn 0.5696 -0.8195 0.0629
 | 
			
		||||
vn -0.5696 -0.8195 -0.0629
 | 
			
		||||
vn 0.0000 -0.9997 -0.0237
 | 
			
		||||
vn 0.5696 -0.8195 -0.0629
 | 
			
		||||
vn 0.0000 0.6491 -0.7606
 | 
			
		||||
vn 0.2286 0.6383 -0.7350
 | 
			
		||||
vn -0.1729 0.7321 -0.6588
 | 
			
		||||
vn -0.2286 0.6383 -0.7350
 | 
			
		||||
vn 0.2286 0.6383 0.7350
 | 
			
		||||
vn 0.0000 0.6491 0.7606
 | 
			
		||||
vn -0.2286 0.6383 0.7350
 | 
			
		||||
vn -0.5596 0.5679 0.6035
 | 
			
		||||
vn -0.5596 0.5679 -0.6035
 | 
			
		||||
vn 0.5596 0.5679 -0.6035
 | 
			
		||||
vn 0.5596 0.5679 0.6035
 | 
			
		||||
vn 0.0002 0.6143 -0.7890
 | 
			
		||||
vn 0.1666 0.7098 -0.6844
 | 
			
		||||
vn -0.0271 0.7255 0.6876
 | 
			
		||||
vn -0.1664 0.7098 0.6844
 | 
			
		||||
vn -0.0939 0.7178 -0.6898
 | 
			
		||||
vn 0.0271 0.7255 -0.6876
 | 
			
		||||
vn 0.0939 0.7178 -0.6898
 | 
			
		||||
vn -0.0271 0.7255 -0.6876
 | 
			
		||||
vn -0.1664 0.7098 -0.6844
 | 
			
		||||
vn -0.0939 0.7178 0.6898
 | 
			
		||||
vn 0.0271 0.7255 0.6876
 | 
			
		||||
vn 0.0002 0.6143 0.7890
 | 
			
		||||
vn 0.1666 0.7098 0.6844
 | 
			
		||||
vn 0.0939 0.7178 0.6898
 | 
			
		||||
g Cube.002_Cube.001_Cube.002_Cube.001_cover
 | 
			
		||||
s 1
 | 
			
		||||
f 18/1/1 20/2/2 13/3/3 12/4/3 14/5/4 19/6/5
 | 
			
		||||
@@ -333,86 +341,86 @@ f 3/22/15 16/23/16 17/24/10 20/25/2 18/26/1
 | 
			
		||||
f 1/27/12 74/28/17 5/29/18 21/30/13
 | 
			
		||||
f 13/3/3 10/12/11 11/31/19 12/4/3
 | 
			
		||||
f 21/30/13 5/29/18 8/32/20 3/33/15
 | 
			
		||||
f 29/34/3 30/35/3 31/31/21 32/12/22
 | 
			
		||||
f 31/31/21 30/35/3 39/36/4 40/37/23
 | 
			
		||||
f 37/38/24 43/39/25 45/40/2 42/41/26 41/42/27
 | 
			
		||||
f 43/43/25 37/21/24 46/20/9 44/44/28
 | 
			
		||||
f 38/45/8 40/46/23 39/47/4 44/48/28 46/49/9
 | 
			
		||||
f 29/34/3 32/12/22 42/50/26 45/51/2
 | 
			
		||||
f 41/52/27 71/53/29 35/54/30 37/55/24
 | 
			
		||||
f 35/54/30 36/7/6 46/10/9 37/55/24
 | 
			
		||||
f 43/56/25 44/57/28 39/36/4 30/35/3 29/34/3 45/51/2
 | 
			
		||||
f 15/58/14 14/5/4 12/4/3 11/31/19
 | 
			
		||||
f 42/41/26 64/59/31 41/42/27
 | 
			
		||||
f 41/42/27 64/59/31 2/60/32 67/61/33
 | 
			
		||||
f 67/61/33 2/60/32 34/62/34
 | 
			
		||||
f 34/62/34 2/60/32 59/63/35
 | 
			
		||||
f 2/60/32 62/64/36 16/23/16 59/63/35
 | 
			
		||||
f 16/23/16 62/64/36 17/24/10
 | 
			
		||||
f 15/17/14 63/65/37 1/13/12
 | 
			
		||||
f 23/66/38 58/67/39 1/13/12 63/65/37
 | 
			
		||||
f 58/67/39 23/66/38 33/68/40
 | 
			
		||||
f 68/69/41 33/68/40 23/66/38
 | 
			
		||||
f 38/45/8 68/69/41 23/66/38 57/70/42
 | 
			
		||||
f 57/70/42 40/46/23 38/45/8
 | 
			
		||||
f 40/71/23 57/72/42 66/73/43 31/74/21
 | 
			
		||||
f 57/44/42 23/75/38 47/76/44 66/77/43
 | 
			
		||||
f 47/76/44 23/75/38 63/78/37 60/79/45
 | 
			
		||||
f 15/71/14 11/80/19 60/81/45 63/82/37
 | 
			
		||||
f 32/83/22 65/84/46 64/85/31 42/86/26
 | 
			
		||||
f 64/43/31 65/87/46 48/88/47 2/89/32
 | 
			
		||||
f 48/88/47 61/90/48 62/91/36 2/89/32
 | 
			
		||||
f 17/86/10 62/92/36 61/93/48 10/94/11
 | 
			
		||||
f 67/95/33 34/96/34 70/97/49 73/98/50
 | 
			
		||||
f 59/99/35 16/100/16 69/101/51 72/102/52
 | 
			
		||||
f 41/52/27 67/95/33 73/98/50 71/53/29
 | 
			
		||||
f 34/96/34 59/99/35 72/102/52 70/97/49
 | 
			
		||||
f 33/103/40 68/104/41 78/105/53 75/106/54
 | 
			
		||||
f 1/27/12 58/107/39 77/108/55 74/28/17
 | 
			
		||||
f 68/104/41 38/9/8 76/8/7 78/105/53
 | 
			
		||||
f 58/107/39 33/103/40 75/106/54 77/108/55
 | 
			
		||||
f 8/32/20 69/101/51 16/100/16 3/33/15
 | 
			
		||||
f 10/94/11 61/93/48 60/81/45 11/80/19
 | 
			
		||||
f 47/76/44 60/79/45 61/90/48 48/88/47
 | 
			
		||||
f 65/87/46 66/77/43 47/76/44 48/88/47
 | 
			
		||||
f 31/74/21 66/73/43 65/84/46 32/83/22
 | 
			
		||||
f 29/34/3 30/35/3 31/36/21 32/37/22
 | 
			
		||||
f 31/36/21 30/35/3 39/38/4 40/39/23
 | 
			
		||||
f 37/40/24 43/41/25 45/42/2 42/43/26 41/44/27
 | 
			
		||||
f 43/45/25 37/46/24 46/47/9 44/48/28
 | 
			
		||||
f 38/49/8 40/50/23 39/51/4 44/52/28 46/53/9
 | 
			
		||||
f 29/34/3 32/37/22 42/54/26 45/55/2
 | 
			
		||||
f 41/56/27 71/57/29 35/58/30 37/59/24
 | 
			
		||||
f 35/58/30 36/7/6 46/10/9 37/59/24
 | 
			
		||||
f 43/60/25 44/61/28 39/38/4 30/35/3 29/34/3 45/55/2
 | 
			
		||||
f 15/62/14 14/5/4 12/4/3 11/31/19
 | 
			
		||||
f 42/43/26 64/63/31 41/44/27
 | 
			
		||||
f 41/44/27 64/63/31 2/64/32 67/65/33
 | 
			
		||||
f 67/65/33 2/64/32 34/66/34
 | 
			
		||||
f 34/66/34 2/64/32 59/67/35
 | 
			
		||||
f 2/64/32 62/68/36 16/23/16 59/67/35
 | 
			
		||||
f 16/23/16 62/68/36 17/24/10
 | 
			
		||||
f 15/17/14 63/69/37 1/13/12
 | 
			
		||||
f 23/70/38 58/71/39 1/13/12 63/69/37
 | 
			
		||||
f 58/71/39 23/70/38 33/72/40
 | 
			
		||||
f 68/73/41 33/72/40 23/70/38
 | 
			
		||||
f 38/49/8 68/73/41 23/70/38 57/74/42
 | 
			
		||||
f 57/74/42 40/50/23 38/49/8
 | 
			
		||||
f 40/75/23 57/76/42 66/77/43 31/78/21
 | 
			
		||||
f 57/79/42 23/80/38 47/81/44 66/82/43
 | 
			
		||||
f 47/81/44 23/80/38 63/83/37 60/84/45
 | 
			
		||||
f 15/85/14 11/86/19 60/87/45 63/88/37
 | 
			
		||||
f 32/89/22 65/90/46 64/91/31 42/92/26
 | 
			
		||||
f 64/93/31 65/94/46 48/95/47 2/96/32
 | 
			
		||||
f 48/95/47 61/97/48 62/98/36 2/96/32
 | 
			
		||||
f 17/99/10 62/100/36 61/101/48 10/102/11
 | 
			
		||||
f 67/103/33 34/104/34 70/105/49 73/106/50
 | 
			
		||||
f 59/107/35 16/108/16 69/109/51 72/110/52
 | 
			
		||||
f 41/56/27 67/103/33 73/106/50 71/57/29
 | 
			
		||||
f 34/104/34 59/107/35 72/110/52 70/105/49
 | 
			
		||||
f 33/111/40 68/112/41 78/113/53 75/114/54
 | 
			
		||||
f 1/27/12 58/115/39 77/116/55 74/28/17
 | 
			
		||||
f 68/112/41 38/9/8 76/8/7 78/113/53
 | 
			
		||||
f 58/115/39 33/111/40 75/114/54 77/116/55
 | 
			
		||||
f 8/32/20 69/109/51 16/108/16 3/33/15
 | 
			
		||||
f 10/102/11 61/101/48 60/87/45 11/86/19
 | 
			
		||||
f 47/81/44 60/84/45 61/97/48 48/95/47
 | 
			
		||||
f 65/94/46 66/82/43 47/81/44 48/95/47
 | 
			
		||||
f 31/78/21 66/77/43 65/90/46 32/89/22
 | 
			
		||||
g Cube.002_Cube.001_Cube.002_Cube.001_edges
 | 
			
		||||
f 8/109/20 5/110/18 6/111/56 7/112/57
 | 
			
		||||
f 35/113/30 26/114/58 25/115/59 36/116/6
 | 
			
		||||
f 9/117/60 69/118/51 53/119/61
 | 
			
		||||
f 50/120/62 56/121/63 76/122/7
 | 
			
		||||
f 24/123/64 69/118/51 8/124/20
 | 
			
		||||
f 9/125/60 71/126/29 73/127/50
 | 
			
		||||
f 51/128/65 53/119/61 69/118/51
 | 
			
		||||
f 9/125/60 73/127/50 70/129/49
 | 
			
		||||
f 28/130/66 26/131/58 35/132/30
 | 
			
		||||
f 71/126/29 49/133/67 28/130/66
 | 
			
		||||
f 72/134/52 69/118/51 9/117/60
 | 
			
		||||
f 71/126/29 55/135/68 49/133/67
 | 
			
		||||
f 28/130/66 35/132/30 71/126/29
 | 
			
		||||
f 24/123/64 8/124/20 7/136/57
 | 
			
		||||
f 69/118/51 24/123/64 51/128/65
 | 
			
		||||
f 9/125/60 55/135/68 71/126/29
 | 
			
		||||
f 70/137/49 72/134/52 9/117/60
 | 
			
		||||
f 22/138/69 6/139/56 5/140/18
 | 
			
		||||
f 74/141/17 52/142/70 22/138/69
 | 
			
		||||
f 75/143/54 78/144/53 4/145/71
 | 
			
		||||
f 74/141/17 54/146/72 52/142/70
 | 
			
		||||
f 22/138/69 5/140/18 74/141/17
 | 
			
		||||
f 27/147/73 76/122/7 36/148/6
 | 
			
		||||
f 4/149/71 74/141/17 77/150/55
 | 
			
		||||
f 27/147/73 50/120/62 76/122/7
 | 
			
		||||
f 4/149/71 77/150/55 75/151/54
 | 
			
		||||
f 4/145/71 78/144/53 76/122/7
 | 
			
		||||
f 4/149/71 54/146/72 74/141/17
 | 
			
		||||
f 27/147/73 36/148/6 25/152/59
 | 
			
		||||
f 56/121/63 4/145/71 76/122/7
 | 
			
		||||
f 8/117/20 5/118/18 6/119/56 7/120/57
 | 
			
		||||
f 35/121/30 26/122/58 25/123/59 36/124/6
 | 
			
		||||
f 9/125/60 69/126/51 53/127/61
 | 
			
		||||
f 50/128/62 56/129/63 76/130/7
 | 
			
		||||
f 24/131/64 69/126/51 8/132/20
 | 
			
		||||
f 9/133/60 71/134/29 73/135/50
 | 
			
		||||
f 51/136/65 53/127/61 69/126/51
 | 
			
		||||
f 9/133/60 73/135/50 70/137/49
 | 
			
		||||
f 28/138/66 26/139/58 35/140/30
 | 
			
		||||
f 71/134/29 49/141/67 28/138/66
 | 
			
		||||
f 72/142/52 69/126/51 9/125/60
 | 
			
		||||
f 71/134/29 55/143/68 49/141/67
 | 
			
		||||
f 28/138/66 35/140/30 71/134/29
 | 
			
		||||
f 24/131/64 8/132/20 7/144/57
 | 
			
		||||
f 69/126/51 24/131/64 51/136/65
 | 
			
		||||
f 9/133/60 55/143/68 71/134/29
 | 
			
		||||
f 70/145/49 72/142/52 9/125/60
 | 
			
		||||
f 22/146/69 6/147/56 5/148/18
 | 
			
		||||
f 74/149/17 52/150/70 22/146/69
 | 
			
		||||
f 75/151/54 78/152/53 4/153/71
 | 
			
		||||
f 74/149/17 54/154/72 52/150/70
 | 
			
		||||
f 22/146/69 5/148/18 74/149/17
 | 
			
		||||
f 27/155/73 76/130/7 36/156/6
 | 
			
		||||
f 4/157/71 74/149/17 77/158/55
 | 
			
		||||
f 27/155/73 50/128/62 76/130/7
 | 
			
		||||
f 4/157/71 77/158/55 75/159/54
 | 
			
		||||
f 4/153/71 78/152/53 76/130/7
 | 
			
		||||
f 4/157/71 54/154/72 74/149/17
 | 
			
		||||
f 27/155/73 36/156/6 25/160/59
 | 
			
		||||
f 56/129/63 4/153/71 76/130/7
 | 
			
		||||
g Cube.002_Cube.001_Cube.002_Cube.001_pages
 | 
			
		||||
f 50/153/62 27/154/73 28/155/66 49/156/67
 | 
			
		||||
f 6/157/56 22/158/69 24/159/64 7/160/57
 | 
			
		||||
f 27/154/73 25/161/59 26/162/58 28/155/66
 | 
			
		||||
f 52/163/70 54/164/72 53/165/61 51/166/65
 | 
			
		||||
f 22/158/69 52/163/70 51/166/65 24/159/64
 | 
			
		||||
f 4/167/71 56/168/63 55/169/68 9/170/60
 | 
			
		||||
f 54/164/72 4/167/71 9/170/60 53/165/61
 | 
			
		||||
f 56/168/63 50/153/62 49/156/67 55/169/68
 | 
			
		||||
f 50/161/62 27/162/73 28/163/66 49/164/67
 | 
			
		||||
f 6/165/56 22/166/69 24/167/64 7/168/57
 | 
			
		||||
f 27/162/73 25/169/59 26/170/58 28/163/66
 | 
			
		||||
f 52/171/70 54/172/72 53/173/61 51/174/65
 | 
			
		||||
f 22/166/69 52/171/70 51/174/65 24/167/64
 | 
			
		||||
f 4/175/71 56/176/63 55/177/68 9/178/60
 | 
			
		||||
f 54/172/72 4/175/71 9/178/60 53/173/61
 | 
			
		||||
f 56/176/63 50/161/62 49/164/67 55/177/68
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										202
									
								
								homedecor/models/plasma_lamp.obj
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,202 @@
 | 
			
		||||
# Blender v2.78 (sub 0) OBJ File: ''
 | 
			
		||||
# www.blender.org
 | 
			
		||||
o Cube_Cube.001
 | 
			
		||||
v 0.500000 -0.500000 -0.500000
 | 
			
		||||
v 0.500000 0.500000 -0.500000
 | 
			
		||||
v 0.500000 -0.500000 0.500000
 | 
			
		||||
v 0.500000 0.500000 0.500000
 | 
			
		||||
v -0.500000 -0.500000 -0.500000
 | 
			
		||||
v -0.500000 0.500000 -0.500000
 | 
			
		||||
v -0.500000 -0.500000 0.500000
 | 
			
		||||
v -0.500000 0.500000 0.500000
 | 
			
		||||
v 0.437500 -0.437500 -0.437500
 | 
			
		||||
v 0.437500 0.437500 -0.437500
 | 
			
		||||
v 0.437500 -0.437500 0.437500
 | 
			
		||||
v 0.437500 0.437500 0.437500
 | 
			
		||||
v -0.437500 -0.437500 -0.437500
 | 
			
		||||
v -0.437500 0.437500 -0.437500
 | 
			
		||||
v -0.437500 -0.437500 0.437500
 | 
			
		||||
v -0.437500 0.437500 0.437500
 | 
			
		||||
v -0.500000 -0.437500 -0.437500
 | 
			
		||||
v -0.500000 0.437500 -0.437500
 | 
			
		||||
v -0.500000 -0.437500 0.437500
 | 
			
		||||
v -0.500000 0.437500 0.437500
 | 
			
		||||
v 0.500000 -0.437500 -0.437500
 | 
			
		||||
v 0.500000 0.437500 -0.437500
 | 
			
		||||
v 0.500000 -0.437500 0.437500
 | 
			
		||||
v 0.500000 0.437500 0.437500
 | 
			
		||||
v 0.437500 -0.437500 -0.500000
 | 
			
		||||
v 0.437500 0.437500 -0.500000
 | 
			
		||||
v -0.437500 -0.437500 -0.500000
 | 
			
		||||
v -0.437500 0.437500 -0.500000
 | 
			
		||||
v 0.437500 -0.437500 0.500000
 | 
			
		||||
v 0.437500 0.437500 0.500000
 | 
			
		||||
v -0.437500 -0.437500 0.500000
 | 
			
		||||
v -0.437500 0.437500 0.500000
 | 
			
		||||
v 0.437500 0.500000 -0.437500
 | 
			
		||||
v 0.437500 0.500000 0.437500
 | 
			
		||||
v -0.437500 0.500000 -0.437500
 | 
			
		||||
v -0.437500 0.500000 0.437500
 | 
			
		||||
v 0.437500 -0.500000 -0.437500
 | 
			
		||||
v 0.437500 -0.500000 0.437500
 | 
			
		||||
v -0.437500 -0.500000 -0.437500
 | 
			
		||||
v -0.437500 -0.500000 0.437500
 | 
			
		||||
vt 0.0625 0.0000
 | 
			
		||||
vt 0.9375 0.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt -0.0000 0.9375
 | 
			
		||||
vt -0.0000 0.0625
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt -0.0000 0.0625
 | 
			
		||||
vt -0.0000 0.9375
 | 
			
		||||
vt -0.0000 0.9375
 | 
			
		||||
vt -0.0000 0.0625
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt -0.0000 0.9375
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt -0.0000 0.0625
 | 
			
		||||
vt 0.9375 0.0000
 | 
			
		||||
vt 0.0625 0.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt -0.0000 0.0625
 | 
			
		||||
vt -0.0000 0.9375
 | 
			
		||||
vt 1.0000 0.9375
 | 
			
		||||
vt 1.0000 0.0625
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 1.0000 0.9375
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 1.0000 0.9375
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 1.0000 0.0625
 | 
			
		||||
vt 1.0000 0.0625
 | 
			
		||||
vt 1.0000 0.9375
 | 
			
		||||
vt 1.0000 0.0625
 | 
			
		||||
vt 0.9375 1.0000
 | 
			
		||||
vt 0.0625 1.0000
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 1.0000 0.0625
 | 
			
		||||
vt 1.0000 0.9375
 | 
			
		||||
vt 0.0625 1.0000
 | 
			
		||||
vt 0.9375 1.0000
 | 
			
		||||
vt 0.0625 0.0000
 | 
			
		||||
vt 0.9375 0.0000
 | 
			
		||||
vt 0.0625 0.0000
 | 
			
		||||
vt 0.9375 0.0000
 | 
			
		||||
vt 0.0625 0.0000
 | 
			
		||||
vt 0.9375 0.0000
 | 
			
		||||
vt 0.0625 1.0000
 | 
			
		||||
vt 0.9375 1.0000
 | 
			
		||||
vt 0.0625 1.0000
 | 
			
		||||
vt 0.9375 1.0000
 | 
			
		||||
vt 0.0625 1.0000
 | 
			
		||||
vt 0.9375 1.0000
 | 
			
		||||
vt -0.0000 0.0000
 | 
			
		||||
vt 1.0000 0.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt -0.0000 1.0000
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt 1.0000 1.0000
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt -0.0000 1.0000
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 1.0000 0.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt -0.0000 0.0000
 | 
			
		||||
vt 1.0000 1.0000
 | 
			
		||||
vt 1.0000 0.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt -0.0000 0.0000
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt -0.0000 1.0000
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt -0.0000 0.0000
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 1.0000 0.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 1.0000 1.0000
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt -0.0000 1.0000
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt 0.0625 0.0625
 | 
			
		||||
vt 0.0625 0.9375
 | 
			
		||||
vt 0.9375 0.9375
 | 
			
		||||
vt 1.0000 1.0000
 | 
			
		||||
vt 0.9375 0.0625
 | 
			
		||||
vn 0.0000 1.0000 0.0000
 | 
			
		||||
vn -1.0000 0.0000 0.0000
 | 
			
		||||
vn 0.0000 0.0000 1.0000
 | 
			
		||||
vn 0.0000 0.0000 -1.0000
 | 
			
		||||
vn 0.0000 -1.0000 0.0000
 | 
			
		||||
vn 1.0000 0.0000 0.0000
 | 
			
		||||
g Cube_Cube.001_frame
 | 
			
		||||
s off
 | 
			
		||||
f 25/1/1 27/2/1 13/3/1 9/4/1
 | 
			
		||||
f 26/5/2 25/6/2 9/4/2 10/7/2
 | 
			
		||||
f 21/8/3 22/9/3 10/7/3 9/4/3
 | 
			
		||||
f 24/10/4 23/11/4 11/12/4 12/13/4
 | 
			
		||||
f 23/14/1 21/8/1 9/4/1 11/15/1
 | 
			
		||||
f 12/13/5 10/16/5 22/17/5 24/10/5
 | 
			
		||||
f 28/18/5 26/19/5 10/16/5 14/20/5
 | 
			
		||||
f 14/21/6 13/22/6 27/23/6 28/24/6
 | 
			
		||||
f 18/25/3 17/26/3 13/3/3 14/27/3
 | 
			
		||||
f 17/26/1 19/28/1 15/29/1 13/3/1
 | 
			
		||||
f 20/30/4 16/31/4 15/32/4 19/33/4
 | 
			
		||||
f 20/30/5 18/34/5 14/20/5 16/31/5
 | 
			
		||||
f 16/31/6 32/35/6 31/36/6 15/32/6
 | 
			
		||||
f 31/37/1 29/38/1 11/15/1 15/29/1
 | 
			
		||||
f 12/39/2 11/40/2 29/41/2 30/42/2
 | 
			
		||||
f 30/43/5 32/44/5 16/31/5 12/13/5
 | 
			
		||||
f 15/32/4 11/12/4 38/45/4 40/46/4
 | 
			
		||||
f 13/22/6 15/32/6 40/46/6 39/47/6
 | 
			
		||||
f 9/4/3 13/3/3 39/48/3 37/49/3
 | 
			
		||||
f 11/40/2 9/4/2 37/49/2 38/50/2
 | 
			
		||||
f 16/31/6 14/21/6 35/51/6 36/52/6
 | 
			
		||||
f 12/13/4 16/31/4 36/52/4 34/53/4
 | 
			
		||||
f 10/7/2 12/39/2 34/54/2 33/55/2
 | 
			
		||||
f 14/27/3 10/7/3 33/55/3 35/56/3
 | 
			
		||||
f 2/57/1 6/58/1 35/59/1 33/60/1
 | 
			
		||||
f 4/61/1 2/57/1 33/60/1 34/62/1
 | 
			
		||||
f 8/63/1 4/61/1 34/62/1 36/64/1
 | 
			
		||||
f 6/58/1 8/63/1 36/64/1 35/59/1
 | 
			
		||||
f 6/65/2 18/66/2 20/67/2 8/63/2
 | 
			
		||||
f 7/68/2 8/63/2 20/67/2 19/69/2
 | 
			
		||||
f 7/68/2 19/69/2 17/70/2 5/71/2
 | 
			
		||||
f 5/71/2 17/70/2 18/66/2 6/65/2
 | 
			
		||||
f 7/72/5 5/73/5 39/74/5 40/75/5
 | 
			
		||||
f 5/73/5 1/76/5 37/77/5 39/74/5
 | 
			
		||||
f 1/76/5 3/78/5 38/79/5 37/77/5
 | 
			
		||||
f 3/78/5 7/72/5 40/75/5 38/79/5
 | 
			
		||||
f 3/80/3 4/61/3 30/81/3 29/82/3
 | 
			
		||||
f 8/63/3 32/83/3 30/81/3 4/61/3
 | 
			
		||||
f 7/68/3 31/84/3 32/83/3 8/63/3
 | 
			
		||||
f 3/80/3 29/82/3 31/84/3 7/68/3
 | 
			
		||||
f 3/85/6 23/86/6 24/87/6 4/88/6
 | 
			
		||||
f 4/88/6 24/87/6 22/89/6 2/90/6
 | 
			
		||||
f 2/90/6 22/89/6 21/91/6 1/76/6
 | 
			
		||||
f 1/76/6 21/91/6 23/86/6 3/85/6
 | 
			
		||||
f 2/90/4 1/76/4 25/92/4 26/93/4
 | 
			
		||||
f 2/90/4 26/93/4 28/94/4 6/95/4
 | 
			
		||||
f 5/73/4 6/95/4 28/94/4 27/96/4
 | 
			
		||||
f 5/73/4 27/96/4 25/92/4 1/76/4
 | 
			
		||||
g Cube_Cube.001_glass
 | 
			
		||||
f 9/4/6 10/7/6 12/39/6 11/40/6
 | 
			
		||||
f 11/12/3 12/13/3 16/31/3 15/32/3
 | 
			
		||||
f 15/32/2 16/31/2 14/21/2 13/22/2
 | 
			
		||||
f 13/3/4 14/27/4 10/7/4 9/4/4
 | 
			
		||||
f 11/15/5 15/29/5 13/3/5 9/4/5
 | 
			
		||||
f 16/31/1 12/13/1 10/16/1 14/20/1
 | 
			
		||||
@@ -32,14 +32,16 @@ homedecor.register("shutter", {
 | 
			
		||||
	description = S("Wooden Shutter"),
 | 
			
		||||
	inventory_image = inv,
 | 
			
		||||
	wield_image = inv,
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	ud_replacement_node = "homedecor:shutter_colored",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	airbrush_replacement_node = "homedecor:shutter_colored",
 | 
			
		||||
	groups = { snappy = 3, ud_param2_colorable = 1 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	selection_box = shutter_cbox,
 | 
			
		||||
	node_box = shutter_cbox,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("shutter_colored", {
 | 
			
		||||
@@ -54,9 +56,9 @@ homedecor.register("shutter_colored", {
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	selection_box = shutter_cbox,
 | 
			
		||||
	node_box = shutter_cbox,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	drop = "homedecor:shutter"
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:shutter_purple", "homedecor:shutter_violet")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								homedecor/textures/homedecor_banister_wood_colored_inv.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 2.4 KiB  | 
| 
		 Before Width: | Height: | Size: 202 B After Width: | Height: | Size: 219 B  | 
| 
		 Before Width: | Height: | Size: 259 B After Width: | Height: | Size: 248 B  | 
| 
		 Before Width: | Height: | Size: 137 B After Width: | Height: | Size: 93 B  | 
| 
		 Before Width: | Height: | Size: 139 B  | 
							
								
								
									
										
											BIN
										
									
								
								homedecor/textures/homedecor_glowlight_cube_sides_overlay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 203 B  | 
| 
		 Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 94 B  | 
							
								
								
									
										
											BIN
										
									
								
								homedecor/textures/homedecor_glowlight_cube_tb_overlay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 204 B  | 
| 
		 Before Width: | Height: | Size: 173 B After Width: | Height: | Size: 95 B  | 
							
								
								
									
										
											BIN
										
									
								
								homedecor/textures/homedecor_glowlight_thick_sides_overlay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 307 B  | 
| 
		 Before Width: | Height: | Size: 137 B After Width: | Height: | Size: 96 B  | 
							
								
								
									
										
											BIN
										
									
								
								homedecor/textures/homedecor_glowlight_thin_sides_overlay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 187 B  | 
| 
		 Before Width: | Height: | Size: 165 B After Width: | Height: | Size: 93 B  | 
							
								
								
									
										
											BIN
										
									
								
								homedecor/textures/homedecor_glowlight_top_overlay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 423 B  | 
@@ -6,6 +6,75 @@ local wd_cbox = {
 | 
			
		||||
	fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- cache set_textures function (fallback to old version)
 | 
			
		||||
-- default.player_set_textures is deprecated and will be removed in future
 | 
			
		||||
local set_player_textures =
 | 
			
		||||
	minetest.get_modpath("player_api") and player_api.set_textures
 | 
			
		||||
	or default.player_set_textures
 | 
			
		||||
 | 
			
		||||
local armor_mod_path = minetest.get_modpath("3d_armor")
 | 
			
		||||
 | 
			
		||||
local skinslist = {"male1", "male2", "male3", "male4", "male5"}
 | 
			
		||||
local default_skin = "character.png"
 | 
			
		||||
 | 
			
		||||
local skinsdb_mod_path = minetest.get_modpath("skinsdb")
 | 
			
		||||
if skinsdb_mod_path then
 | 
			
		||||
	for _, shrt in ipairs(skinslist) do
 | 
			
		||||
		for _, prefix in ipairs({"", "fe"}) do
 | 
			
		||||
			local skin_name = prefix..shrt
 | 
			
		||||
			local skin_obj = skins.new("homedecor_clothes_"..skin_name..".png") -- Texture PNG file as key to be compatible in set_player_skin
 | 
			
		||||
			skin_obj:set_preview("homedecor_clothes_"..skin_name.."_preview.png")
 | 
			
		||||
			skin_obj:set_texture("homedecor_clothes_"..skin_name..".png")
 | 
			
		||||
			skin_obj:set_meta("name", "Wardrobe "..skin_name)
 | 
			
		||||
			skin_obj:set_meta("author", 'Calinou and Jordach')
 | 
			
		||||
			skin_obj:set_meta("license", 'WTFPL')
 | 
			
		||||
			local file = io.open(homedecor.modpath.."/textures/homedecor_clothes_"..skin_name..".png", "r")
 | 
			
		||||
			skin_obj:set_meta("format", skins.get_skin_format(file))
 | 
			
		||||
			file:close()
 | 
			
		||||
			skin_obj:set_meta("in_inventory_list", false)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.get_player_skin(player)
 | 
			
		||||
	local skin = player:get_attribute("homedecor:player_skin")
 | 
			
		||||
	if not skin or skin == "" then
 | 
			
		||||
		return default_skin, true
 | 
			
		||||
	end
 | 
			
		||||
	return skin, false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.set_player_skin(player, skin, save)
 | 
			
		||||
	skin = skin or default_skin
 | 
			
		||||
	if skinsdb_mod_path then
 | 
			
		||||
		skins.set_player_skin(player, skin)
 | 
			
		||||
	elseif armor_mod_path then -- if 3D_armor's installed, let it set the skin
 | 
			
		||||
		armor.textures[player:get_player_name()].skin = skin
 | 
			
		||||
		armor:update_player_visuals(player)
 | 
			
		||||
	else
 | 
			
		||||
		set_player_textures(player, { skin })
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if save then
 | 
			
		||||
		if skin == default_skin then
 | 
			
		||||
			skin = "default"
 | 
			
		||||
			player:set_attribute("homedecor:player_skin", "")
 | 
			
		||||
		else
 | 
			
		||||
			player:set_attribute("homedecor:player_skin", skin)
 | 
			
		||||
		end
 | 
			
		||||
		if save == "player" then -- if player action
 | 
			
		||||
			minetest.log("verbose",
 | 
			
		||||
				S("player @1 sets skin to @2", player:get_player_name(), skin) ..
 | 
			
		||||
				(armor_mod_path and ' [3d_armor]' or '')
 | 
			
		||||
			)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.unset_player_skin(player)
 | 
			
		||||
	homedecor.set_player_skin(player, nil, true)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
homedecor.register("wardrobe", {
 | 
			
		||||
	mesh = "homedecor_bedroom_wardrobe.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
@@ -27,16 +96,16 @@ homedecor.register("wardrobe", {
 | 
			
		||||
	},
 | 
			
		||||
	on_construct = function(pos)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local skins = {"male1", "male2", "male3", "male4", "male5"}
 | 
			
		||||
		-- textures made by the Minetest community (mostly Calinou and Jordach)
 | 
			
		||||
		local clothes_strings = ""
 | 
			
		||||
		for i = 1,5 do
 | 
			
		||||
			clothes_strings = clothes_strings..
 | 
			
		||||
			  "image_button_exit["..(i-1)..".5,0;1.1,2;homedecor_clothes_"..skins[i].."_preview.png;"..skins[i]..";]"..
 | 
			
		||||
			  "image_button_exit["..(i-1)..".5,2;1.1,2;homedecor_clothes_fe"..skins[i].."_preview.png;fe"..skins[i]..";]"
 | 
			
		||||
			  "image_button_exit["..(i-1)..".5,0;1.1,2;homedecor_clothes_"..skinslist[i].."_preview.png;"..skinslist[i]..";]"..
 | 
			
		||||
			  "image_button_exit["..(i-1)..".5,2;1.1,2;homedecor_clothes_fe"..skinslist[i].."_preview.png;fe"..skinslist[i]..";]"
 | 
			
		||||
		end
 | 
			
		||||
		meta:set_string("formspec", "size[5.5,8.5]"..default.gui_bg..default.gui_bg_img..default.gui_slots..
 | 
			
		||||
			"vertlabel[0,0.5;"..minetest.formspec_escape(S("Clothes")).."]"..
 | 
			
		||||
			"button_exit[0,3.29;0.6,0.6;default;x]"..
 | 
			
		||||
			clothes_strings..
 | 
			
		||||
			"vertlabel[0,5.2;"..minetest.formspec_escape(S("Storage")).."]"..
 | 
			
		||||
			"list[current_name;main;0.5,4.5;5,2;]"..
 | 
			
		||||
@@ -44,26 +113,17 @@ homedecor.register("wardrobe", {
 | 
			
		||||
			"listring[]")
 | 
			
		||||
	end,
 | 
			
		||||
	on_receive_fields = function(pos, formname, fields, sender)
 | 
			
		||||
		local skins = {"male1", "male2", "male3", "male4", "male5"}
 | 
			
		||||
		local playerName = sender:get_player_name()
 | 
			
		||||
		local armor_mod = minetest.get_modpath("3d_armor")
 | 
			
		||||
		if fields.default then
 | 
			
		||||
			homedecor.set_player_skin(sender, nil, "player")
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		for i = 1,5 do
 | 
			
		||||
			if fields[skins[i]] then
 | 
			
		||||
				if armor_mod then -- if 3D_armor's installed, let it set the skin
 | 
			
		||||
					armor.textures[playerName].skin = "homedecor_clothes_"..skins[i]..".png"
 | 
			
		||||
					armor:update_player_visuals(sender)
 | 
			
		||||
					break
 | 
			
		||||
				end
 | 
			
		||||
				default.player_set_textures(sender, { "homedecor_clothes_"..skins[i]..".png" })
 | 
			
		||||
			if fields[skinslist[i]] then
 | 
			
		||||
				homedecor.set_player_skin(sender, "homedecor_clothes_"..skinslist[i]..".png", "player")
 | 
			
		||||
				break
 | 
			
		||||
			elseif fields["fe"..skins[i]] then
 | 
			
		||||
				if armor_mod then
 | 
			
		||||
					armor.textures[playerName].skin = "homedecor_clothes_fe"..skins[i]..".png"
 | 
			
		||||
					armor:update_player_visuals(sender)
 | 
			
		||||
					break
 | 
			
		||||
				end
 | 
			
		||||
				default.player_set_textures(sender, { skin = "homedecor_clothes_fe"..skins[i]..".png" })
 | 
			
		||||
			elseif fields["fe"..skinslist[i]] then
 | 
			
		||||
				homedecor.set_player_skin(sender, "homedecor_clothes_fe"..skinslist[i]..".png", "player")
 | 
			
		||||
				break
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
@@ -72,3 +132,14 @@ homedecor.register("wardrobe", {
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:wardrobe_bottom", "homedecor:wardrobe")
 | 
			
		||||
minetest.register_alias("homedecor:wardrobe_top", "air")
 | 
			
		||||
 | 
			
		||||
minetest.register_on_joinplayer(function(player)
 | 
			
		||||
	local skin = player:get_attribute("homedecor:player_skin")
 | 
			
		||||
 | 
			
		||||
	if skin and skin ~= "" then
 | 
			
		||||
		-- setting player skin on connect has no effect, so delay skin change
 | 
			
		||||
		minetest.after(1, function(player, skin)
 | 
			
		||||
			homedecor.set_player_skin(player, skin)
 | 
			
		||||
		end, player, skin)
 | 
			
		||||
	end
 | 
			
		||||
end)
 | 
			
		||||
 
 | 
			
		||||
@@ -112,8 +112,9 @@ minetest.register_node("homedecor:curtain_closed", {
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	selection_box = { type = "wallmounted" },
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local topnode = minetest.get_node({x=pos.x, y=pos.y+1.0, z=pos.z})
 | 
			
		||||
		if string.find(topnode.name, "homedecor:curtainrod") then
 | 
			
		||||
@@ -126,7 +127,7 @@ minetest.register_node("homedecor:curtain_closed", {
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:curtain_open", {
 | 
			
		||||
	description = S("Curtains"),
 | 
			
		||||
	description = S("Curtains (open)"),
 | 
			
		||||
	tiles = { "homedecor_curtain_open.png" },
 | 
			
		||||
	inventory_image = "homedecor_curtain_open.png",
 | 
			
		||||
	drawtype = 'signlike',
 | 
			
		||||
@@ -138,8 +139,9 @@ minetest.register_node("homedecor:curtain_open", {
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	selection_box = { type = "wallmounted" },
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local topnode = minetest.get_node({x=pos.x, y=pos.y+1.0, z=pos.z})
 | 
			
		||||
		if string.find(topnode.name, "homedecor:curtainrod") then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1900
									
								
								homedecor_i18n/locale/pt_BR.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1595
									
								
								homedecor_i18n/locale/ru.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -7,6 +7,8 @@ cd "$(dirname "${BASH_SOURCE[0]}")/..";
 | 
			
		||||
 | 
			
		||||
# Extract translatable strings.
 | 
			
		||||
xgettext --from-code=UTF-8 \
 | 
			
		||||
		--language=Lua \
 | 
			
		||||
		--sort-by-file \
 | 
			
		||||
		--keyword=S \
 | 
			
		||||
		--keyword=NS:1,2 \
 | 
			
		||||
		--keyword=N_ \
 | 
			
		||||
 
 | 
			
		||||
@@ -92,6 +92,19 @@ minetest.register_node("inbox:empty", {
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
	allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		local owner = meta:get_string("owner")
 | 
			
		||||
		if player:get_player_name() == owner or
 | 
			
		||||
				minetest.check_player_privs(player, "protection_bypass") and
 | 
			
		||||
				clicker:get_player_control().aux1 then
 | 
			
		||||
			return stack:get_count()
 | 
			
		||||
		end
 | 
			
		||||
		return 0
 | 
			
		||||
	end,
 | 
			
		||||
	allow_metadata_inventory_move = function(pos)
 | 
			
		||||
		return 0
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
function inbox.get_inbox_formspec(pos)
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,25 @@ minetest.register_entity("itemframes:item",{
 | 
			
		||||
		if self.nodename == "itemframes:pedestal" then
 | 
			
		||||
			self.object:set_properties({automatic_rotate = 1})
 | 
			
		||||
		end
 | 
			
		||||
		if self.texture ~= nil and self.nodename ~= nil then
 | 
			
		||||
			local entity_pos = vector.round(self.object:get_pos())
 | 
			
		||||
			local objs = minetest.get_objects_inside_radius(entity_pos, 0.5)
 | 
			
		||||
			for _, obj in ipairs(objs) do
 | 
			
		||||
				if obj ~= self.object and
 | 
			
		||||
				   obj:get_luaentity() and
 | 
			
		||||
				   obj:get_luaentity().name == "itemframes:item" and
 | 
			
		||||
				   obj:get_luaentity().nodename == self.nodename and
 | 
			
		||||
				   obj:get_properties() and
 | 
			
		||||
				   obj:get_properties().textures and
 | 
			
		||||
				   obj:get_properties().textures[1] == self.texture then
 | 
			
		||||
					minetest.log("action","[itemframes] Removing extra " ..
 | 
			
		||||
						self.texture .. " found in " .. self.nodename .. " at " ..
 | 
			
		||||
						minetest.pos_to_string(entity_pos))
 | 
			
		||||
					self.object:remove()
 | 
			
		||||
					break
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end,
 | 
			
		||||
	get_staticdata = function(self)
 | 
			
		||||
		if self.nodename ~= nil and self.texture ~= nil then
 | 
			
		||||
@@ -119,7 +138,7 @@ minetest.register_node("itemframes:frame",{
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	groups = {choppy = 2, dig_immediate = 2},
 | 
			
		||||
	legacy_wallmounted = true,
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
@@ -182,7 +201,7 @@ minetest.register_node("itemframes:pedestal",{
 | 
			
		||||
	tiles = {"itemframes_pedestal.png"},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	groups = {cracky = 3},
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
@@ -228,24 +247,31 @@ minetest.register_node("itemframes:pedestal",{
 | 
			
		||||
 | 
			
		||||
-- automatically restore entities lost from frames/pedestals
 | 
			
		||||
-- due to /clearobjects or similar
 | 
			
		||||
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	label = "Maintain itemframe and pedestal entities",
 | 
			
		||||
	name = "itemframes:maintain_entities",
 | 
			
		||||
	nodenames = {"itemframes:frame", "itemframes:pedestal"},
 | 
			
		||||
	interval = 15,
 | 
			
		||||
	chance = 1,
 | 
			
		||||
	action = function(pos, node, active_object_count, active_object_count_wider)
 | 
			
		||||
		local num
 | 
			
		||||
 | 
			
		||||
		if node.name == "itemframes:frame" then
 | 
			
		||||
			num = #minetest.get_objects_inside_radius(pos, 0.5)
 | 
			
		||||
		elseif node.name == "itemframes:pedestal" then
 | 
			
		||||
			pos.y = pos.y + 1
 | 
			
		||||
			num = #minetest.get_objects_inside_radius(pos, 0.5)
 | 
			
		||||
			pos.y = pos.y - 1
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		if num > 0 then return end
 | 
			
		||||
		update_item(pos, node)
 | 
			
		||||
	run_at_every_load = true,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		minetest.after(0,
 | 
			
		||||
			function(pos, node)
 | 
			
		||||
				local meta = minetest.get_meta(pos)
 | 
			
		||||
				local itemstring = meta:get_string("item")
 | 
			
		||||
				if itemstring ~= "" then
 | 
			
		||||
					local entity_pos = pos
 | 
			
		||||
					if node.name == "itemframes:pedestal" then
 | 
			
		||||
						entity_pos = {x=pos.x,y=pos.y+1,z=pos.z}
 | 
			
		||||
					end
 | 
			
		||||
					local objs = minetest.get_objects_inside_radius(entity_pos, 0.5)
 | 
			
		||||
					if #objs == 0 then
 | 
			
		||||
						minetest.log("action","[itemframes] Replacing missing " ..
 | 
			
		||||
							itemstring .. " in " .. node.name .. " at " ..
 | 
			
		||||
							minetest.pos_to_string(pos))
 | 
			
		||||
						update_item(pos, node)
 | 
			
		||||
					end
 | 
			
		||||
				end
 | 
			
		||||
			end,
 | 
			
		||||
		pos, node)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -273,4 +299,4 @@ minetest.register_craft({
 | 
			
		||||
if minetest.get_modpath("mesecons_mvps") then
 | 
			
		||||
	mesecon.register_mvps_stopper("itemframes:frame")
 | 
			
		||||
	mesecon.register_mvps_stopper("itemframes:pedestal")
 | 
			
		||||
end
 | 
			
		||||
end
 | 
			
		||||
@@ -8,7 +8,11 @@ minetest.register_node("lavalamp:lavalamp", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "lavalamp.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		 { name = "lavalamp_metal.png", color = 0xffffffff},
 | 
			
		||||
		{ name = "lavalamp_metal.png", color = "white" },
 | 
			
		||||
		{ name = "lavalamp_lamp_liquid.png", color = "white" },
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		"",
 | 
			
		||||
		{
 | 
			
		||||
			name="lavalamp_lamp_anim.png",
 | 
			
		||||
			animation={
 | 
			
		||||
@@ -19,11 +23,11 @@ minetest.register_node("lavalamp:lavalamp", {
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	inventory_image = "lavalamp_lamp_inv.png",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	place_param2 = 240,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	light_source = 14,
 | 
			
		||||
@@ -33,7 +37,7 @@ minetest.register_node("lavalamp:lavalamp", {
 | 
			
		||||
	},
 | 
			
		||||
	groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		node.name = "lavalamp:lavalamp_off"
 | 
			
		||||
		minetest.swap_node(pos, node)
 | 
			
		||||
@@ -52,7 +56,6 @@ minetest.register_node("lavalamp:lavalamp_off", {
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	place_param2 = 240,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
@@ -62,12 +65,17 @@ minetest.register_node("lavalamp:lavalamp_off", {
 | 
			
		||||
	groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, not_in_creative_inventory=1},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	drop = "lavalamp:lavalamp",
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		node.name = "lavalamp:lavalamp"
 | 
			
		||||
		minetest.swap_node(pos, node)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	drop = {
 | 
			
		||||
		items = {
 | 
			
		||||
			{items = {"lavalamp:lavalamp"}, inherit_color = true },
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
@@ -79,6 +87,17 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "lavalamp:lavalamp",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "lavalamp:lavalamp",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- convert to param2 coloring
 | 
			
		||||
 | 
			
		||||
local colors = {
 | 
			
		||||
@@ -127,20 +146,3 @@ minetest.register_lbm({
 | 
			
		||||
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "lavalamp:recolor",
 | 
			
		||||
	label = "Convert 89-color lamps to use UD extended palette",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = {
 | 
			
		||||
		"lavalamp:lavalamp",
 | 
			
		||||
		"lavalamp:lavalamp_off"
 | 
			
		||||
	},
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		if meta:get_string("palette") ~= "ext" then
 | 
			
		||||
			minetest.swap_node(pos, { name = node.name, param2 = unifieddyes.convert_classic_palette[node.param2] })
 | 
			
		||||
			meta:set_string("palette", "ext")
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 5.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								lavalamp/textures/lavalamp_lamp_liquid.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 412 B  | 
@@ -23,8 +23,9 @@ minetest.register_node("lrfurn:armchair", {
 | 
			
		||||
	groups = {snappy=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	node_box = armchair_cbox,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	end,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		if not clicker:is_player() then
 | 
			
		||||
@@ -55,13 +56,23 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "lrfurn:armchair",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "lrfurn:armchair",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- convert old static nodes to param2 color
 | 
			
		||||
 | 
			
		||||
lrfurn.old_static_armchairs = {}
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(lrfurn.colors) do
 | 
			
		||||
	table.insert(lrfurn.old_static_armchairs, "lrfurn:armchair_"..color)
 | 
			
		||||
	print("lrfurn:armchair_"..color)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
@@ -105,6 +116,6 @@ minetest.register_lbm({
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if minetest.setting_get("log_mods") then
 | 
			
		||||
if minetest.settings:get("log_mods") then
 | 
			
		||||
	minetest.log("action", "[lrfurn/armchairs] "..S("Loaded!"))
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -65,6 +65,6 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if minetest.setting_get("log_mods") then
 | 
			
		||||
if minetest.settings:get("log_mods") then
 | 
			
		||||
	minetest.log("action", "[lrfurn/coffeetable] "..S("Loaded!"))
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,6 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if minetest.setting_get("log_mods") then
 | 
			
		||||
if minetest.settings:get("log_mods") then
 | 
			
		||||
	minetest.log("action", "[lrfurn/endtable] "..S("Loaded!"))
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
lrfurn = {}
 | 
			
		||||
screwdriver = screwdriver or {}
 | 
			
		||||
@@ -38,9 +39,9 @@ function lrfurn.check_right(pos, fdir, long, placer)
 | 
			
		||||
		return false
 | 
			
		||||
	elseif minetest.is_protected(pos2, placer:get_player_name()) then
 | 
			
		||||
		if not long then
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where other end goes!")
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), S("Someone else owns the spot where other end goes!"))
 | 
			
		||||
		else
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where the middle or far end goes!")
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), S("Someone else owns the spot where the middle or far end goes!"))
 | 
			
		||||
		end
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
@@ -50,7 +51,7 @@ function lrfurn.check_right(pos, fdir, long, placer)
 | 
			
		||||
		if node3 and node3.name ~= "air" then
 | 
			
		||||
			return false
 | 
			
		||||
		elseif minetest.is_protected(pos3, placer:get_player_name()) then
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where the other end goes!")
 | 
			
		||||
			minetest.chat_send_player(placer:get_player_name(), S("Someone else owns the spot where the other end goes!"))
 | 
			
		||||
			return false
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
@@ -60,10 +61,11 @@ end
 | 
			
		||||
 | 
			
		||||
function lrfurn.fix_sofa_rotation_nsew(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	local node = minetest.get_node(pos)
 | 
			
		||||
	local colorbits = node.param2 - (node.param2 % 8)
 | 
			
		||||
	local yaw = placer:get_look_yaw()
 | 
			
		||||
	local dir = minetest.yaw_to_dir(yaw-1.5)
 | 
			
		||||
	local fdir = minetest.dir_to_wallmounted(dir)
 | 
			
		||||
	minetest.swap_node(pos, { name = node.name, param2 = fdir })
 | 
			
		||||
	minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits })
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
dofile(minetest.get_modpath("lrfurn").."/longsofas.lua")
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@ minetest.register_node("lrfurn:longsofa", {
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		if not clicker:is_player() then
 | 
			
		||||
			return itemstack
 | 
			
		||||
@@ -71,6 +70,17 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "lrfurn:longsofa",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "lrfurn:longsofa",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- convert old static nodes to param2 colorization
 | 
			
		||||
 | 
			
		||||
lrfurn.old_static_longsofas = {}
 | 
			
		||||
@@ -121,6 +131,6 @@ minetest.register_lbm({
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if minetest.setting_get("log_mods") then
 | 
			
		||||
if minetest.settings:get("log_mods") then
 | 
			
		||||
	minetest.log("action", "[lrfurn/longsofas] "..S("Loaded!"))
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@ minetest.register_node("lrfurn:sofa", {
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		if not clicker:is_player() then
 | 
			
		||||
			return itemstack
 | 
			
		||||
@@ -71,6 +70,17 @@ minetest.register_craft({
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "lrfurn:sofa",
 | 
			
		||||
	palette = "wallmounted",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "lrfurn:sofa",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- convert old static nodes to param2 color
 | 
			
		||||
 | 
			
		||||
lrfurn.old_static_sofas = {}
 | 
			
		||||
@@ -121,6 +131,6 @@ minetest.register_lbm({
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if minetest.setting_get("log_mods") then
 | 
			
		||||
if minetest.settings:get("log_mods") then
 | 
			
		||||
	minetest.log("action", "[lrfurn/sofas] "..S("Loaded!"))
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||