From 39f5cba27eef35877c91291f518974f34130fcb6 Mon Sep 17 00:00:00 2001 From: Vanessa Ezekowitz Date: Tue, 31 Jan 2017 19:39:31 -0500 Subject: Huge update - lots of mods: areas, biome_lib, blox, bobblocks, boost_cart, homedecor, mobs, coloredwood, ilights, inbox, item_tweaks, moreblocks, moreores, pipeworks, plasticbox, signs_lib, stainedglass, roads, unifieddyes, vines, worldedit, xban2, maybe some others I didn't think about ;-) --- framedglass/init.lua | 159 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 131 insertions(+), 28 deletions(-) (limited to 'framedglass') diff --git a/framedglass/init.lua b/framedglass/init.lua index bf50495..07f60d1 100644 --- a/framedglass/init.lua +++ b/framedglass/init.lua @@ -66,6 +66,110 @@ minetest.register_node("framedglass:wooden_framed_obsidian_glass", { sounds = default.node_sound_glass_defaults(), }) +-- helper functions copied partly from Unified Dyes + +local creative_mode = minetest.setting_getbool("creative_mode") + +local function select_node(pointed_thing) + 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] + end + return def and pos, def +end + +local function is_buildable_to(placer_name, ...) + for _, pos in ipairs({...}) do + local node = minetest.get_node_or_nil(pos) + local def = node and minetest.registered_nodes[node.name] + if not (def and def.buildable_to) or minetest.is_protected(pos, placer_name) then + return false + end + end + return true +end + +local color_on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + local itemname = itemstack:get_name() + + if not string.find(itemname, "dye:") then + if minetest.registered_nodes[node.name] then + local pos2 = select_node(pointed_thing) + if pos2 and is_buildable_to(clicker, pos2) then + minetest.set_node(pos2, { name = itemname }) + if not creative_mode then + itemstack:take_item() + end + end + end + return itemstack + end + + local a,b = string.find(node.name, "_glass") + local oldcolor = string.sub(node.name, b + 1) + local newcolor = string.sub(itemname, string.find(itemname, ":") + 1) + + local oldcolor2 = string.gsub(oldcolor, "darkgreen", "dark_green") + local oldcolor2 = string.gsub(oldcolor2, "darkgrey", "dark_grey") + + local newcolor2 = string.gsub(newcolor, "dark_green", "darkgreen") + local newcolor2 = string.gsub(newcolor2, "dark_grey", "darkgrey") + + if oldcolor == newcolor2 then + minetest.chat_send_player(clicker:get_player_name(), "That node is already "..newcolor.."." ) + return itemstack + end + + if not (newcolor == "dark_grey" + or newcolor == "dark_green" + or minetest.registered_nodes["framedglass:steel_framed_obsidian_glass"..newcolor]) then + minetest.chat_send_player(clicker:get_player_name(), "Framed glass doesn't support "..newcolor.."." ) + return itemstack + end + + local inv = clicker:get_inventory() + local prevdye = "dye:"..oldcolor2 + + print(oldcolor, oldcolor2, newcolor, newcolor2, prevdye) + + if not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then + if inv:room_for_item("main", prevdye) then + inv:add_item("main", prevdye) + else + minetest.add_item(pos, prevdye) + end + end + + minetest.set_node(pos, { name = "framedglass:steel_framed_obsidian_glass"..newcolor2 }) + itemstack:take_item() + return itemstack +end + +local return_dye_after_dig = function(pos, oldnode, oldmetadata, digger) + + local a,b = string.find(oldnode.name, "_glass") + local oldcolor = string.sub(oldnode.name, b + 1) + local oldcolor2 = string.gsub(oldcolor, "darkgreen", "dark_green") + local oldcolor2 = string.gsub(oldcolor2, "darkgrey", "dark_grey") + + local prevdye = "dye:"..oldcolor2 + + local inv = digger:get_inventory() + + if prevdye and not (inv:contains_item("main", prevdye) and creative_mode) and minetest.registered_items[prevdye] then + if inv:room_for_item("main", prevdye) then + inv:add_item("main", prevdye) + else + minetest.add_item(pos, prevdye) + end + end +end + minetest.register_node("framedglass:steel_framed_obsidian_glass", { description = "Steel-framed Obsidian Glass", drawtype = "glasslike_framed", @@ -74,45 +178,44 @@ minetest.register_node("framedglass:steel_framed_obsidian_glass", { sunlight_propagates = true, groups = {cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_glass_defaults(), + on_rightclick = color_on_rightclick, + after_dig_node = return_dye_after_dig }) -function add_coloured_framedglass(name, desc, dye, texture) +function add_coloured_framedglass(name, desc, color) minetest.register_node( "framedglass:steel_framed_obsidian_glass"..name, { description = "Steel-framed "..desc.." Obsidian Glass", - tiles = {"framedglass_steel_frame.png",texture}, + tiles = { + "framedglass_steel_frame.png", + { name = "framedglass_whiteglass.png", color = color } + }, drawtype = "glasslike_framed", paramtype = "light", sunlight_propagates = true, is_ground_content = true, use_texture_alpha = true, - groups = {cracky=3}, + groups = {cracky=3, not_in_creative_inventory=1}, sounds = default.node_sound_glass_defaults(), + on_rightclick = color_on_rightclick, + after_dig_node = return_dye_after_dig, + drop = "framedglass:steel_framed_obsidian_glass" }) - - minetest.register_craft({ - type = "shapeless", - output = "framedglass:steel_framed_obsidian_glass"..name, - recipe = { - "framedglass:steel_framed_glass", - "group:basecolor_white", - dye - } - }) - end -add_coloured_framedglass ("red","Red","group:basecolor_red","framedglass_redglass.png") -add_coloured_framedglass ("green","Green","group:basecolor_green","framedglass_greenglass.png") -add_coloured_framedglass ("blue","Blue","group:basecolor_blue","framedglass_blueglass.png") -add_coloured_framedglass ("cyan","Cyan","group:basecolor_cyan","framedglass_cyanglass.png") -add_coloured_framedglass ("darkgreen","Dark Green","group:unicolor_dark_green","framedglass_darkgreenglass.png") -add_coloured_framedglass ("violet","Violet","group:excolor_violet","framedglass_violetglass.png") -add_coloured_framedglass ("pink","Pink","group:unicolor_light_red","framedglass_pinkglass.png") -add_coloured_framedglass ("yellow","Yellow","group:basecolor_yellow","framedglass_yellowglass.png") -add_coloured_framedglass ("orange","Orange","group:basecolor_orange","framedglass_orangeglass.png") -add_coloured_framedglass ("brown","Brown","group:unicolor_dark_orange","framedglass_brownglass.png") -add_coloured_framedglass ("white","White","group:basecolor_white","framedglass_whiteglass.png") -add_coloured_framedglass ("grey","Grey","group:basecolor_grey","framedglass_greyglass.png") -add_coloured_framedglass ("darkgrey","Dark Grey","group:excolor_darkgrey","framedglass_darkgreyglass.png") -add_coloured_framedglass ("black","Black","group:basecolor_black","framedglass_blackglass.png") +add_coloured_framedglass ("red", "Red", 0xffff0000) +add_coloured_framedglass ("orange", "Orange", 0xfffe7f00) +add_coloured_framedglass ("yellow", "Yellow", 0xffffff01) +add_coloured_framedglass ("green", "Green", 0xff0cff00) +add_coloured_framedglass ("cyan", "Cyan", 0xff7affff) +add_coloured_framedglass ("blue", "Blue", 0xff1600ff) +add_coloured_framedglass ("violet", "Violet", 0xff7d00ff) +add_coloured_framedglass ("magenta", "Magenta", 0xfffd05ff) + +add_coloured_framedglass ("darkgreen", "Dark Green", 0xff144f00) +add_coloured_framedglass ("pink", "Pink", 0xffffa4a4) +add_coloured_framedglass ("brown", "Brown", 0xff542a00) +add_coloured_framedglass ("white", "White", 0xffffffff) +add_coloured_framedglass ("grey", "Grey", 0xff7f817e) +add_coloured_framedglass ("darkgrey", "Dark Grey", 0xff3f403e) +add_coloured_framedglass ("black", "Black", 0xff000000) -- cgit v1.2.3