Steel Trapdoor.
authorAuke Kok <sofar@foo-projects.org>
Tue, 15 Dec 2015 07:35:14 +0000 (23:35 -0800)
committerparamat <mat.gregory@virginmedia.com>
Sun, 3 Jan 2016 02:11:40 +0000 (02:11 +0000)
Adds a steel trapdoor. Textures were painted from scratch, and
inspired by the current Steel Door. Ownership on the trapdoor
works as expected, and so does the crafting recipe.

mods/doors/README.txt
mods/doors/init.lua
mods/doors/textures/doors_trapdoor_steel.png [new file with mode: 0644]
mods/doors/textures/doors_trapdoor_steel_side.png [new file with mode: 0644]

index 5ae63caf2767d596cd2914b1811bf58face01614..c83720ce7eb9f756a308a1fadb6e4101b27d5439 100644 (file)
@@ -6,6 +6,7 @@ License of source code:
 -----------------------
 Copyright (C) 2012 PilzAdam
 modified by BlockMen (added sounds, glassdoors[glass, obsidian glass], trapdoor)
+Steel trapdoor added by sofar.
 
 This program is free software. It comes without any warranty, to
 the extent permitted by applicable law. You can redistribute it
@@ -30,11 +31,15 @@ following textures created by celeron55 (CC BY-SA 3.0):
   door_trapdoor_side.png
   door_glass_a.png
   door_glass_b.png
-  
+
 following Textures created by PenguinDad (CC BY-SA 4.0):
   door_glass.png
   door_obsidian_glass.png
 
+Steel trapdoor textures by sofar (CC-BY-SA-3.0)
+  doors_trapdoor_steel.png
+  doors_trapdoor_steel_side.png
+
 All other textures (created by PilzAdam): WTFPL
 
 
index 6a5ee24f4075fb1539a6a151e7cc737c1a704fbc..eaf4986f7c58cf2b883e8b758c8455fb27f2c9a1 100644 (file)
@@ -428,7 +428,19 @@ function doors.register_trapdoor(name, def)
        local name_closed = name
        local name_opened = name.."_open"
 
-       def.on_rightclick = function (pos, node)
+       local function check_player_priv(pos, player)
+               if not def.only_placer_can_open then
+                       return true
+               end
+               local meta = minetest.get_meta(pos)
+               local pn = player:get_player_name()
+               return meta:get_string("doors_owner") == pn
+       end
+
+       def.on_rightclick = function (pos, node, clicker, itemstack, pointed_thing)
+               if not check_player_priv(pos, clicker) then
+                       return
+               end
                local newname = node.name == name_closed and name_opened or name_closed
                local sound = false
                if node.name == name_closed then sound = def.sound_open end
@@ -436,7 +448,7 @@ function doors.register_trapdoor(name, def)
                if sound then
                        minetest.sound_play(sound, {pos = pos, gain = 0.3, max_hear_distance = 10})
                end
-               minetest.set_node(pos, {name = newname, param1 = node.param1, param2 = node.param2})
+               minetest.swap_node(pos, {name = newname, param1 = node.param1, param2 = node.param2})
        end
 
        def.on_rotate = minetest.get_modpath("screwdriver") and screwdriver.rotate_simple
@@ -446,6 +458,21 @@ function doors.register_trapdoor(name, def)
        def.paramtype = "light"
        def.paramtype2 = "facedir"
        def.is_ground_content = false
+       def.can_dig = check_player_priv
+
+       if def.only_placer_can_open then
+               def.after_place_node = function(pos, placer, itemstack, pointed_thing)
+                       local pn = placer:get_player_name()
+                       local meta = minetest.get_meta(pos)
+                       meta:set_string("doors_owner", pn)
+                       meta:set_string("infotext", "Owned by "..pn)
+
+                       if not minetest.setting_getbool("creative_mode") then
+                               return true
+                       end
+                       return false
+               end
+       end
 
        local def_opened = table.copy(def)
        local def_closed = table.copy(def)
@@ -492,6 +519,19 @@ doors.register_trapdoor("doors:trapdoor", {
        sound_close = "doors_door_close"
 })
 
+doors.register_trapdoor("doors:trapdoor_steel", {
+       description = "Steel Trapdoor",
+       inventory_image = "doors_trapdoor_steel.png",
+       wield_image = "doors_trapdoor_steel.png",
+       tile_front = "doors_trapdoor_steel.png",
+       tile_side = "doors_trapdoor_steel_side.png",
+       only_placer_can_open = true,
+       groups = {snappy=1, bendy=2, cracky=1, melty=2, level=2, door=1},
+       sounds = default.node_sound_wood_defaults(),
+       sound_open = "doors_door_open",
+       sound_close = "doors_door_close"
+})
+
 minetest.register_craft({
        output = 'doors:trapdoor 2',
        recipe = {
@@ -500,3 +540,13 @@ minetest.register_craft({
                {'', '', ''},
        }
 })
+
+minetest.register_craft({
+       output = 'doors:trapdoor_steel 2',
+       recipe = {
+               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+               {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
+               {'', '', ''},
+       }
+})
+
diff --git a/mods/doors/textures/doors_trapdoor_steel.png b/mods/doors/textures/doors_trapdoor_steel.png
new file mode 100644 (file)
index 0000000..4ba507d
Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_steel.png differ
diff --git a/mods/doors/textures/doors_trapdoor_steel_side.png b/mods/doors/textures/doors_trapdoor_steel_side.png
new file mode 100644 (file)
index 0000000..44c4344
Binary files /dev/null and b/mods/doors/textures/doors_trapdoor_steel_side.png differ