From 4e091cdbd222b6e4320714d42bb1829a8cf8c4fe Mon Sep 17 00:00:00 2001 From: crabman77 Date: Wed, 16 Nov 2016 05:35:14 +0100 Subject: [PATCH] fix doors --- minetestforfun_game/mods/doors/doors3.lua | 359 ------------------- minetestforfun_game/mods/doors/init.lua | 413 ++++++++++++++++++++-- 2 files changed, 393 insertions(+), 379 deletions(-) delete mode 100644 minetestforfun_game/mods/doors/doors3.lua diff --git a/minetestforfun_game/mods/doors/doors3.lua b/minetestforfun_game/mods/doors/doors3.lua deleted file mode 100644 index 8c70448c..00000000 --- a/minetestforfun_game/mods/doors/doors3.lua +++ /dev/null @@ -1,359 +0,0 @@ -local _doors = {} - -_doors.registered_doors3 = {} --MFF doors3 - --- door 3 nodes -function doors.register3(name, def) - if not name:find(":") then - name = "doors:" .. name - end - - -- replace old doors of this type automatically - minetest.register_lbm({ - name = ":doors:replace_" .. name:gsub(":", "_"), - nodenames = {name.."_b_1", name.."_b_2"}, - action = function(pos, node) - local l = tonumber(node.name:sub(-1)) - local meta = minetest.get_meta(pos) - local h = meta:get_int("right") + 1 - local p2 = node.param2 - local replace = { - { { type = "a", state = 0 }, { type = "a", state = 3 } }, - { { type = "b", state = 1 }, { type = "b", state = 2 } } - } - local new = replace[l][h] - -- retain infotext and doors_owner fields - minetest.swap_node(pos, {name = name .. "_" .. new.type, param2 = p2}) - meta:set_int("state", new.state) - -- properly place doors:hidden at the right spot - local p3 = p2 - if new.state >= 2 then - p3 = (p3 + 3) % 4 - end - if new.state % 2 == 1 then - if new.state >= 2 then - p3 = (p3 + 1) % 4 - else - p3 = (p3 + 3) % 4 - end - end - -- wipe meta on top node as it's unused - minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, - {name = "doors:hidden", param2 = p3}) - minetest.set_node({x = pos.x, y = pos.y + 2, z = pos.z}, - {name = "doors:hidden", param2 = p3}) - end - }) - - minetest.register_craftitem(":" .. name, { - description = def.description, - inventory_image = def.inventory_image, - - on_place = function(itemstack, placer, pointed_thing) - local pos = nil - - if not pointed_thing.type == "node" then - return itemstack - end - - local node = minetest.get_node(pointed_thing.under) - local pdef = minetest.registered_nodes[node.name] - if pdef and pdef.on_rightclick then - return pdef.on_rightclick(pointed_thing.under, - node, placer, itemstack, pointed_thing) - end - - if pdef and pdef.buildable_to then - pos = pointed_thing.under - else - pos = pointed_thing.above - node = minetest.get_node(pos) - pdef = minetest.registered_nodes[node.name] - if not pdef or not pdef.buildable_to then - return itemstack - end - end - - local above = { x = pos.x, y = pos.y + 1, z = pos.z } - if not minetest.registered_nodes[minetest.get_node(above).name].buildable_to then - return itemstack - end - - local above2 = { x = pos.x, y = pos.y + 2, z = pos.z } - if not minetest.registered_nodes[minetest.get_node(above2).name].buildable_to then - return itemstack - end - - local pn = placer:get_player_name() - if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) or minetest.is_protected(above2, pn) then - return itemstack - end - - local dir = minetest.dir_to_facedir(placer:get_look_dir()) - - local ref = { - { x = -1, y = 0, z = 0 }, - { x = 0, y = 0, z = 1 }, - { x = 1, y = 0, z = 0 }, - { x = 0, y = 0, z = -1 }, - } - - local aside = { - x = pos.x + ref[dir + 1].x, - y = pos.y + ref[dir + 1].y, - z = pos.z + ref[dir + 1].z, - } - - local state = 0 - if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then - state = state + 2 - minetest.set_node(pos, {name = name .. "_b", param2 = dir}) - else - minetest.set_node(pos, {name = name .. "_a", param2 = dir}) - end - minetest.set_node(above, { name = "doors:hidden" }) - minetest.set_node(above2, { name = "doors:hidden" }) - - local meta = minetest.get_meta(pos) - meta:set_int("state", state) - - if def.protected then - local pn = placer:get_player_name() - meta:set_string("doors_owner", pn) - meta:set_string("infotext", "Owned by " .. pn) - end - - if not minetest.setting_getbool("creative_mode") then - itemstack:take_item() - end - - on_place_node(pos, minetest.get_node(pos), placer, node, itemstack, pointed_thing) - - return itemstack - end - }) - - local can_dig = function(pos, digger) - if not def.protected then - return true - end - if minetest.check_player_privs(digger:get_player_name(), {protection_bypass = true}) then - return true - end - local meta = minetest.get_meta(pos) - local name = "" - if digger then - name = digger:get_player_name() - end - return meta:get_string("doors_owner") == name - end - - if not def.sounds then - def.sounds = default.node_sound_wood_defaults() - end - - if not def.sound_open then - def.sound_open = "doors_door_open" - end - - if not def.sound_close then - def.sound_close = "doors_door_close" - end - - def.groups.not_in_creative_inventory = 1 - def.groups.door = 1 - def.drop = name - def.door = { - name = name, - sounds = { def.sound_close, def.sound_open }, - } - - def.on_rightclick = function(pos, node, clicker) - _doors.door_toggle(pos, clicker) - end - def.after_dig_node = function(pos, node, meta, digger) - minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) - minetest.remove_node({x = pos.x, y = pos.y + 2, z = pos.z}) - nodeupdate({x = pos.x, y = pos.y + 2, z = pos.z}) - end - def.can_dig = function(pos, player) - return can_dig(pos, player) - end - def.on_rotate = function(pos, node, user, mode, new_param2) - return false - end - - if def.protected then - def.on_blast = function() end - else - def.on_blast = function(pos, intensity) - minetest.remove_node(pos) - -- hidden node doesn't get blasted away. - minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) - minetest.remove_node({x = pos.x, y = pos.y + 2, z = pos.z}) - return {name} - end - end - - def.on_destruct = function(pos) - minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) - minetest.remove_node({x = pos.x, y = pos.y + 2, z = pos.z}) - end - - minetest.register_node(":" .. name .. "_a", { - description = def.description, - visual = "mesh", - mesh = "door3_a.obj", - tiles = def.tiles, - drawtype = "mesh", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = true, - is_ground_content = false, - buildable_to = false, - drop = def.drop, - groups = def.groups, - sounds = def.sounds, - door = def.door, - on_rightclick = def.on_rightclick, - after_dig_node = def.after_dig_node, - can_dig = def.can_dig, - on_rotate = def.on_rotate, - on_blast = def.on_blast, - on_destruct = def.on_destruct, - selection_box = { - type = "fixed", - fixed = { -1/2,-1/2,-1/2,1/2,2.5,-6/16} - }, - collision_box = { - type = "fixed", - fixed = { -1/2,-1/2,-1/2,1/2,2.5,-6/16} - }, - }) - - minetest.register_node(":" .. name .. "_b", { - description = def.description, - visual = "mesh", - mesh = "door3_b.obj", - tiles = def.tiles, - drawtype = "mesh", - paramtype = "light", - paramtype2 = "facedir", - sunlight_propagates = true, - walkable = true, - is_ground_content = false, - buildable_to = false, - drop = def.drop, - groups = def.groups, - sounds = def.sounds, - door = def.door, - on_rightclick = def.on_rightclick, - after_dig_node = def.after_dig_node, - can_dig = def.can_dig, - on_rotate = def.on_rotate, - on_blast = def.on_blast, - on_destruct = def.on_destruct, - selection_box = { - type = "fixed", - fixed = { -1/2,-1/2,-1/2,1/2,2.5,-6/16} - }, - collision_box = { - type = "fixed", - fixed = { -1/2,-1/2,-1/2,1/2,2.5,-6/16} - }, - }) - - if def.recipe then - minetest.register_craft({ - output = name, - recipe = def.recipe, - }) - end - - _doors.registered_doors3[name .. "_a"] = true - _doors.registered_doors3[name .. "_b"] = true -end - -doors.register3("door3_wood", { - tiles = {{ name = "doors_door3_wood.png", backface_culling = true }}, - description = "Wooden Door 3 Nodes", - inventory_image = "doors3_item_wood.png", - groups = { snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, - recipe = { - {"", "", ""}, - {"", "doors:door_wood", ""}, - {"", "doors:door_wood", ""}, - } -}) - -doors.register3("door3_steel", { - tiles = {{ name = "doors_door3_steel.png", backface_culling = true }}, - description = "Steel Door 3 Nodes", - inventory_image = "doors3_item_steel.png", - protected = true, - groups = { snappy = 1, bendy = 2, cracky = 1, melty = 2, level = 2 }, - sound_open = "doors_steel_door_open", - sound_close = "doors_steel_door_close", - recipe = { - {"", "", ""}, - {"", "doors:door_steel", ""}, - {"", "doors:door_steel", ""}, - } -}) - -doors.register3("door3_glass", { - tiles = { "doors_door3_glass.png"}, - description = "Glass Door 3 Nodes", - inventory_image = "doors3_item_glass.png", - groups = { snappy=1, cracky=1, oddly_breakable_by_hand=3 }, - sounds = default.node_sound_glass_defaults(), - recipe = { - {"", "", ""}, - {"", "doors:door_glass", ""}, - {"", "doors:door_glass", ""}, - } -}) - -doors.register3("door3_obsidian_glass", { - tiles = { "doors_door3_obsidian_glass.png" }, - description = "Obsidian Glass Door 3 Nodes", - inventory_image = "doors3_item_obsidian_glass.png", - groups = { snappy=1, cracky=1, oddly_breakable_by_hand=3 }, - sounds = default.node_sound_glass_defaults(), - recipe = { - {"", "", ""}, - {"", "doors:door_obsidian_glass", ""}, - {"", "doors:door_obsidian_glass", ""}, - }, -}) - - --- From BFD: Cherry planks doors -doors.register3("door3_cherry", { - tiles = { "doors_door3_cherry.png" }, - description = "Cherry Door 3 Nodes", - inventory_image = "doors3_item_cherry.png", - groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, door=1}, - sounds = default.node_sound_wood_defaults(), - recipe = { - {"", "", ""}, - {"", "doors:door_cherry", ""}, - {"", "doors:door_cherry", ""}, - }, -}) - --- doors prison MFF -doors.register3("door3_prison", { - tiles = { "doors_door3_prison.png" }, - description = "Prison Door 3 Nodes", - inventory_image = "doors3_item_prison.png", - groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1}, - protected = true, - sounds = default.node_sound_stone_defaults(), - recipe = { - {"", "", ""}, - {"", "doors:door_prison", ""}, - {"", "doors:door_prison", ""}, - } -}) diff --git a/minetestforfun_game/mods/doors/init.lua b/minetestforfun_game/mods/doors/init.lua index 59ca60de..ff907763 100755 --- a/minetestforfun_game/mods/doors/init.lua +++ b/minetestforfun_game/mods/doors/init.lua @@ -56,6 +56,30 @@ function doors.get(pos) return minetest.get_node(self.pos).name:sub(-5) == "_open" end } + elseif _doors.registered_doors3[node_name] then --MFF doors3 + -- A normal upright door + return { + pos = pos, + open = function(self, player) + if self:state() then + return false + end + return _doors.door_toggle(self.pos, nil, player) + end, + close = function(self, player) + if not self:state() then + return false + end + return _doors.door_toggle(self.pos, nil, player) + end, + toggle = function(self, player) + return _doors.door_toggle(self.pos, nil, player) + end, + state = function(self) + local state = minetest.get_meta(self.pos):get_int("state") + return state %2 == 1 + end + } else return nil end @@ -121,6 +145,58 @@ local transform = { }, } + +function doors.get_double_doors(pos, dir, p1, b) + local pos2 = nil + if b == "a" then + if p1 == 0 then + if dir == 1 then + pos2 = {x=pos.x, y=pos.y, z=pos.z-1} + elseif dir == 2 then + pos2 = {x=pos.x-1, y=pos.y, z=pos.z} + elseif dir == 3 then + pos2 = {x=pos.x, y=pos.y, z=pos.z+1} + else + pos2 = {x=pos.x+1, y=pos.y, z=pos.z} + end + elseif p1 == 3 then + if dir == 1 then + pos2 = {x=pos.x+1, y=pos.y, z=pos.z} + elseif dir == 2 then + pos2 = {x=pos.x, y=pos.y, z=pos.z-1} + elseif dir == 3 then + pos2 = {x=pos.x-1, y=pos.y, z=pos.z} + else + pos2 = {x=pos.x, y=pos.y, z=pos.z+1} + end + end + else + if p1 == 1 then + if dir == 1 then + pos2 = {x=pos.x+1, y=pos.y, z=pos.z} + elseif dir == 2 then + pos2 = {x=pos.x, y=pos.y, z=pos.z-1} + elseif dir == 3 then + pos2 = {x=pos.x-1, y=pos.y, z=pos.z} + else + pos2 = {x=pos.x, y=pos.y, z=pos.z+1} + end + elseif p1 == 2 then + if dir == 1 then + pos2 = {x=pos.x, y=pos.y, z=pos.z+1} + elseif dir == 2 then + pos2 = {x=pos.x+1, y=pos.y, z=pos.z} + elseif dir == 3 then + pos2 = {x=pos.x, y=pos.y, z=pos.z-1} + else + pos2 = {x=pos.x-1, y=pos.y, z=pos.z} + end + end + end + return pos2 +end + + function _doors.door_toggle(pos, node, clicker) local meta = minetest.get_meta(pos) node = node or minetest.get_node(pos) @@ -157,14 +233,6 @@ function _doors.door_toggle(pos, node, clicker) end local dir = node.param2 - if state % 2 == 0 then - minetest.sound_play(def.door.sounds[1], - {pos = pos, gain = 0.3, max_hear_distance = 10}) - else - minetest.sound_play(def.door.sounds[2], - {pos = pos, gain = 0.3, max_hear_distance = 10}) - end - minetest.swap_node(pos, { name = name .. transform[state + 1][dir+1].v, param2 = transform[state + 1][dir+1].param2 @@ -172,15 +240,16 @@ function _doors.door_toggle(pos, node, clicker) meta:set_int("state", state) --MFF double porte - local b = string.sub(def.name, -1) - local pos2 = doors.get(pos) --_pos(pos, dir, old, b) - local node = minetest.get_node_or_nil(pos2) - if node and string.sub(node.name, 0, -3) == name then - if b ~= string.sub(node.name, -1) then - local state2 = minetest.get_meta(pos2):get_int("state") - if (old % 2) == (state2 % 2) then - if minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pos2, node, clicker) + local b = string.sub(node.name, -1) + local pos2 = doors.get_double_doors(pos, dir, old, b) + if pos2 then + local node2 = minetest.get_node_or_nil(pos2) + if node2 and string.sub(node2.name, 0, -3) == name then + if b ~= string.sub(node2.name, -1) then + local state2 = minetest.get_meta(pos2):get_int("state") + if (old % 2) == (state2 % 2) then + _doors.door_toggle(pos2, node2, clicker) + return true end end end @@ -188,9 +257,11 @@ function _doors.door_toggle(pos, node, clicker) -- /double porte if state % 2 == 0 then - minetest.sound_play(def.door.sounds[1], {pos = pos, gain = 0.3, max_hear_distance = 10}) + minetest.sound_play(def.door.sounds[1], + {pos = pos, gain = 0.3, max_hear_distance = 10}) else - minetest.sound_play(def.door.sounds[2], {pos = pos, gain = 0.3, max_hear_distance = 10}) + minetest.sound_play(def.door.sounds[2], + {pos = pos, gain = 0.3, max_hear_distance = 10}) end return true @@ -895,4 +966,306 @@ minetest.register_craft({ burntime = 5, }) -dofile(minetest.get_modpath("doors") .. "/doors3.lua") + +-- IMPORTANT MFF doors3 must be in this init file, he use local vars/functions no recopiable +_doors.registered_doors3 = {} --MFF doors3 + +-- door 3 nodes +function doors.register3(name, def) + if not name:find(":") then + name = "doors:" .. name + end + + -- replace old doors of this type automatically + minetest.register_lbm({ + name = ":doors:replace_" .. name:gsub(":", "_"), + nodenames = {name.."_b_1", name.."_b_2"}, + action = function(pos, node) + local l = tonumber(node.name:sub(-1)) + local meta = minetest.get_meta(pos) + local h = meta:get_int("right") + 1 + local p2 = node.param2 + local replace = { + {{type = "a", state = 0}, {type = "a", state = 3}}, + {{type = "b", state = 1}, {type = "b", state = 2}} + } + local new = replace[l][h] + -- retain infotext and doors_owner fields + minetest.swap_node(pos, {name = name .. "_" .. new.type, param2 = p2}) + meta:set_int("state", new.state) + -- properly place doors:hidden at the right spot + local p3 = p2 + if new.state >= 2 then + p3 = (p3 + 3) % 4 + end + if new.state % 2 == 1 then + if new.state >= 2 then + p3 = (p3 + 1) % 4 + else + p3 = (p3 + 3) % 4 + end + end + -- wipe meta on top node as it's unused + minetest.set_node({x = pos.x, y = pos.y + 1, z = pos.z}, + {name = "doors:hidden", param2 = p3}) + minetest.set_node({x = pos.x, y = pos.y + 2, z = pos.z}, + {name = "doors:hidden", param2 = p3}) + end + }) + + minetest.register_craftitem(":" .. name, { + description = def.description, + inventory_image = def.inventory_image, + + on_place = function(itemstack, placer, pointed_thing) + local pos + + if not pointed_thing.type == "node" then + return itemstack + end + + local node = minetest.get_node(pointed_thing.under) + local pdef = minetest.registered_nodes[node.name] + if pdef and pdef.on_rightclick then + return pdef.on_rightclick(pointed_thing.under, + node, placer, itemstack, pointed_thing) + end + + if pdef and pdef.buildable_to then + pos = pointed_thing.under + else + pos = pointed_thing.above + node = minetest.get_node(pos) + pdef = minetest.registered_nodes[node.name] + if not pdef or not pdef.buildable_to then + return itemstack + end + end + + local above = {x = pos.x, y = pos.y + 1, z = pos.z} + local top_node = minetest.get_node_or_nil(above) + local topdef = top_node and minetest.registered_nodes[top_node.name] + + if not topdef or not topdef.buildable_to then + return itemstack + end + + local above2 = { x = pos.x, y = pos.y + 2, z = pos.z } + local top_node2 = minetest.get_node_or_nil(above2) + local topdef2 = top_node2 and minetest.registered_nodes[top_node2.name] + + if not topdef2 or not topdef2.buildable_to then + return itemstack + end + + local pn = placer:get_player_name() + if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) or minetest.is_protected(above2, pn) then + return itemstack + end + + local dir = minetest.dir_to_facedir(placer:get_look_dir()) + + local ref = { + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 1, y = 0, z = 0}, + {x = 0, y = 0, z = -1}, + } + + local aside = { + x = pos.x + ref[dir + 1].x, + y = pos.y + ref[dir + 1].y, + z = pos.z + ref[dir + 1].z, + } + + local state = 0 + if minetest.get_item_group(minetest.get_node(aside).name, "door") == 1 then + state = state + 2 + minetest.set_node(pos, {name = name .. "_b", param2 = dir}) + minetest.set_node(above, {name = "doors:hidden", param2 = (dir + 3) % 4}) + minetest.set_node(above2, {name = "doors:hidden", param2 = (dir + 3) % 4}) + else + minetest.set_node(pos, {name = name .. "_a", param2 = dir}) + minetest.set_node(above, {name = "doors:hidden", param2 = dir}) + minetest.set_node(above2, {name = "doors:hidden", param2 = dir}) + end + + local meta = minetest.get_meta(pos) + meta:set_int("state", state) + + if def.protected then + meta:set_string("doors_owner", pn) + meta:set_string("infotext", "Owned by " .. pn) + end + + if not minetest.setting_getbool("creative_mode") then + itemstack:take_item() + end + + on_place_node(pos, minetest.get_node(pos), + placer, node, itemstack, pointed_thing) + + return itemstack + end + }) + def.inventory_image = nil + + if def.recipe then + minetest.register_craft({ + output = name, + recipe = def.recipe, + }) + end + def.recipe = nil + + if not def.sounds then + def.sounds = default.node_sound_wood_defaults() + end + + if not def.sound_open then + def.sound_open = "doors_door_open" + end + + if not def.sound_close then + def.sound_close = "doors_door_close" + end + + def.groups.not_in_creative_inventory = 1 + def.groups.door = 1 + def.drop = name + def.door = { + name = name, + sounds = { def.sound_close, def.sound_open }, + } + + def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + _doors.door_toggle(pos, node, clicker) + return itemstack + end + def.after_dig_node = function(pos, node, meta, digger) + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + minetest.remove_node({x = pos.x, y = pos.y + 2, z = pos.z}) + nodeupdate({x = pos.x, y = pos.y + 2, z = pos.z}) + end + def.on_rotate = false + + if def.protected then + def.can_dig = can_dig_door + def.on_blast = function() end + else + def.on_blast = function(pos, intensity) + minetest.remove_node(pos) + -- hidden node doesn't get blasted away. + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + minetest.remove_node({x = pos.x, y = pos.y + 2, z = pos.z}) + return {name} + end + end + + def.on_destruct = function(pos) + minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z}) + minetest.remove_node({x = pos.x, y = pos.y + 2, z = pos.z}) + end + + def.drawtype = "mesh" + def.paramtype = "light" + def.paramtype2 = "facedir" + def.sunlight_propagates = true + def.walkable = true + def.is_ground_content = false + def.buildable_to = false + def.selection_box = {type = "fixed", fixed = {-1/2,-1/2,-1/2,1/2,2.5,-6/16}} + def.collision_box = {type = "fixed", fixed = {-1/2,-1/2,-1/2,1/2,2.5,-6/16}} + + def.mesh = "door3_a.obj" + minetest.register_node(":" .. name .. "_a", def) + + def.mesh = "door3_b.obj" + minetest.register_node(":" .. name .. "_b", def) + + _doors.registered_doors3[name .. "_a"] = true + _doors.registered_doors3[name .. "_b"] = true +end + +doors.register3("door3_wood", { + tiles = {{ name = "doors_door3_wood.png", backface_culling = true }}, + description = "Wooden Door 3 Nodes", + inventory_image = "doors3_item_wood.png", + groups = { snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2 }, + recipe = { + {"", "", ""}, + {"", "doors:door_wood", ""}, + {"", "doors:door_wood", ""}, + } +}) + +doors.register3("door3_steel", { + tiles = {{ name = "doors_door3_steel.png", backface_culling = true }}, + description = "Steel Door 3 Nodes", + inventory_image = "doors3_item_steel.png", + protected = true, + groups = { snappy = 1, bendy = 2, cracky = 1, melty = 2, level = 2 }, + sound_open = "doors_steel_door_open", + sound_close = "doors_steel_door_close", + recipe = { + {"", "", ""}, + {"", "doors:door_steel", ""}, + {"", "doors:door_steel", ""}, + } +}) + +doors.register3("door3_glass", { + tiles = { "doors_door3_glass.png"}, + description = "Glass Door 3 Nodes", + inventory_image = "doors3_item_glass.png", + groups = { snappy=1, cracky=1, oddly_breakable_by_hand=3 }, + sounds = default.node_sound_glass_defaults(), + recipe = { + {"", "", ""}, + {"", "doors:door_glass", ""}, + {"", "doors:door_glass", ""}, + } +}) + +doors.register3("door3_obsidian_glass", { + tiles = { "doors_door3_obsidian_glass.png" }, + description = "Obsidian Glass Door 3 Nodes", + inventory_image = "doors3_item_obsidian_glass.png", + groups = { snappy=1, cracky=1, oddly_breakable_by_hand=3 }, + sounds = default.node_sound_glass_defaults(), + recipe = { + {"", "", ""}, + {"", "doors:door_obsidian_glass", ""}, + {"", "doors:door_obsidian_glass", ""}, + }, +}) + + +-- From BFD: Cherry planks doors +doors.register3("door3_cherry", { + tiles = { "doors_door3_cherry.png" }, + description = "Cherry Door 3 Nodes", + inventory_image = "doors3_item_cherry.png", + groups = {choppy=2, oddly_breakable_by_hand=2, flammable=2, door=1}, + sounds = default.node_sound_wood_defaults(), + recipe = { + {"", "", ""}, + {"", "doors:door_cherry", ""}, + {"", "doors:door_cherry", ""}, + }, +}) + +-- doors prison MFF +doors.register3("door3_prison", { + tiles = { "doors_door3_prison.png" }, + description = "Prison Door 3 Nodes", + inventory_image = "doors3_item_prison.png", + groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1}, + protected = true, + sounds = default.node_sound_stone_defaults(), + recipe = { + {"", "", ""}, + {"", "doors:door_prison", ""}, + {"", "doors:door_prison", ""}, + } +})