Rename doors mod to mcl_doors

This commit is contained in:
Wuzzy 2017-03-12 02:55:29 +01:00
parent a1842f6033
commit 350fcd4827
33 changed files with 55 additions and 35 deletions

View file

@ -0,0 +1,28 @@
Minetest 0.4 mod: doors
=======================
version: 1.2.2
License of source code:
-----------------------
Copyright (C) 2012 PilzAdam
modified by BlockMen (added sounds, glassdoor, trapdoor)
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
License of sounds
--------------------------------------
Opening-Sound created by CGEffex (CC BY 3.0), modified by BlockMen
doors_door_open.ogg
Closing-Sound created by bennstir (CC BY 3.0)
doors_door_close.ogg
Steel door sounds open & close (CC-BY-3.0) by HazMatt
- http://www.freesound.org/people/HazMattt/sounds/187283/
doors_steel_door_open.ogg
doors_steel_door_close.ogg

View file

@ -0,0 +1,2 @@
mcl_core
mcl_sounds

View file

@ -0,0 +1,657 @@
local init = os.clock()
mcl_doors = {}
-- Registers a door
-- name: The name of the door
-- def: a table with the folowing fields:
-- description
-- inventory_image
-- groups
-- tiles_bottom: the tiles of the bottom part of the door {front, side}
-- tiles_top: the tiles of the bottom part of the door {front, side}
-- If the following fields are not defined the default values are used
-- node_box_bottom
-- node_box_top
-- selection_box_bottom
-- selection_box_top
-- only_placer_can_open: if true only the player who placed the door can
-- open it
local function is_right(pos, clicker)
local r1 = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
local r2 = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
if string.find(r1.name, "door_") or string.find(r2.name, "door_") then
return true
else
return false
end
end
function mcl_doors:register_door(name, def)
def.groups.not_in_creative_inventory = 1
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
local box = {{-8/16, -8/16, -8/16, 8/16, 8/16, -6.5/16}}
if not def.node_box_bottom then
def.node_box_bottom = box
end
if not def.node_box_top then
def.node_box_top = box
end
if not def.selection_box_bottom then
def.selection_box_bottom= box
end
if not def.selection_box_top then
def.selection_box_top = box
end
minetest.register_craftitem(name, {
description = def.description,
inventory_image = def.inventory_image,
stack_max = 64,
on_place = function(itemstack, placer, pointed_thing)
if not pointed_thing.type == "node" then
return itemstack
end
local pn = placer:get_player_name()
if minetest.is_protected(pointed_thing.above, pn) and minetest.is_protected(pointed_thing.under, pn) then
return itemstack
end
local ptu = pointed_thing.under
local nu = minetest.get_node(ptu)
if minetest.registered_nodes[nu.name].on_rightclick then
return minetest.registered_nodes[nu.name].on_rightclick(ptu, nu, placer, itemstack)
end
local pt = pointed_thing.above
local pt2 = {x=pt.x, y=pt.y, z=pt.z}
pt2.y = pt2.y+1
if
not minetest.registered_nodes[minetest.get_node(pt).name].buildable_to or
not minetest.registered_nodes[minetest.get_node(pt2).name].buildable_to or
not placer or
not placer:is_player()
then
return itemstack
end
local p2 = minetest.dir_to_facedir(placer:get_look_dir())
local pt3 = {x=pt.x, y=pt.y, z=pt.z}
if p2 == 0 then
pt3.x = pt3.x-1
elseif p2 == 1 then
pt3.z = pt3.z+1
elseif p2 == 2 then
pt3.x = pt3.x+1
elseif p2 == 3 then
pt3.z = pt3.z-1
end
if not string.find(minetest.get_node(pt3).name, name.."_b_") then
minetest.set_node(pt, {name=name.."_b_1", param2=p2})
minetest.set_node(pt2, {name=name.."_t_1", param2=p2})
else
minetest.set_node(pt, {name=name.."_b_2", param2=p2})
minetest.set_node(pt2, {name=name.."_t_2", param2=p2})
end
if def.sounds and def.sounds.place then
minetest.sound_play(def.sounds.place, {pos=pt})
end
if def.only_placer_can_open then
local pn = placer:get_player_name()
local meta = minetest.get_meta(pt)
meta:set_string("doors_owner", "")
--meta:set_string("infotext", "Owned by "..pn)
meta = minetest.get_meta(pt2)
meta:set_string("doors_owner", "")
--meta:set_string("infotext", "Owned by "..pn)
end
if not minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
return itemstack
end,
})
local tt = def.tiles_top
local tb = def.tiles_bottom
local function after_dig_node(pos, name, digger)
local node = minetest.get_node(pos)
if node.name == name then
minetest.node_dig(pos, node, digger)
end
end
local function on_rightclick(pos, dir, check_name, replace, replace_dir, params)
pos.y = pos.y+dir
if not minetest.get_node(pos).name == check_name then
return
end
local p2 = minetest.get_node(pos).param2
p2 = params[p2+1]
local meta = minetest.get_meta(pos):to_table()
minetest.set_node(pos, {name=replace_dir, param2=p2})
minetest.get_meta(pos):from_table(meta)
pos.y = pos.y-dir
meta = minetest.get_meta(pos):to_table()
minetest.set_node(pos, {name=replace, param2=p2})
minetest.get_meta(pos):from_table(meta)
end
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
minetest.register_node(name.."_b_1", {
tiles = {tb[2], tb[2], tb[2], tb[2], tb[1], tb[1].."^[transformfx"},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
drop = name,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = def.node_box_bottom
},
selection_box = {
type = "fixed",
fixed = def.selection_box_bottom
},
groups = def.groups,
_mcl_hardness = def._mcl_hardness,
sounds = def.sounds,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y+1
after_dig_node(pos, name.."_t_1", digger)
end,
on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then
on_rightclick(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
if is_right(pos, clicker) then
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.5, max_hear_distance = 10})
else
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.5, max_hear_distance = 10})
end
end
end,
can_dig = check_player_priv,
})
minetest.register_node(name.."_t_1", {
tiles = {tt[2], tt[2], tt[2], tt[2], tt[1], tt[1].."^[transformfx"},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
drop = "",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = def.node_box_top
},
selection_box = {
type = "fixed",
fixed = def.selection_box_top
},
groups = def.groups,
_mcl_hardness = def._mcl_hardness,
sounds = def.sounds,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y-1
after_dig_node(pos, name.."_b_1", digger)
end,
on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then
on_rightclick(pos, -1, name.."_b_1", name.."_t_2", name.."_b_2", {1,2,3,0})
if is_right(pos, clicker) then
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.5, max_hear_distance = 10})
else
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.5, max_hear_distance = 10})
end
end
end,
can_dig = check_player_priv,
})
minetest.register_node(name.."_b_2", {
tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
drop = name,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = def.node_box_bottom
},
selection_box = {
type = "fixed",
fixed = def.selection_box_bottom
},
groups = def.groups,
_mcl_hardness = def._mcl_hardness,
sounds = def.sounds,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y+1
after_dig_node(pos, name.."_t_2", digger)
end,
on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then
on_rightclick(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
if is_right(pos, clicker) then
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.5, max_hear_distance = 10})
else
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.5, max_hear_distance = 10})
end
end
end,
can_dig = check_player_priv,
})
minetest.register_node(name.."_t_2", {
tiles = {tt[2], tt[2], tt[2], tt[2], tt[1].."^[transformfx", tt[1]},
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = false,
drop = "",
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = def.node_box_top
},
selection_box = {
type = "fixed",
fixed = def.selection_box_top
},
groups = def.groups,
_mcl_hardness = def._mcl_hardness,
sounds = def.sounds,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
pos.y = pos.y-1
after_dig_node(pos, name.."_b_2", digger)
end,
on_rightclick = function(pos, node, clicker)
if check_player_priv(pos, clicker) then
on_rightclick(pos, -1, name.."_b_2", name.."_t_1", name.."_b_1", {3,0,1,2})
if is_right(pos, clicker) then
minetest.sound_play(def.sound_open, {pos=pos, gain = 0.5, max_hear_distance = 10})
else
minetest.sound_play(def.sound_close, {pos=pos, gain = 0.5, max_hear_distance = 10})
end
end
end,
can_dig = check_player_priv,
})
end
--- Normal Door ---
mcl_doors:register_door("mcl_doors:wooden_door", {
description = "Oak Door",
inventory_image = "door_wood.png",
groups = {handy=1,axey=1, door=1, material_wood=1},
_mcl_hardness = 3,
tiles_bottom = {"door_wood_b.png", "door_brown.png"},
tiles_top = {"door_wood_a.png", "door_brown.png"},
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "mcl_doors:wooden_door 3",
recipe = {
{"mcl_core:wood", "mcl_core:wood"},
{"mcl_core:wood", "mcl_core:wood"},
{"mcl_core:wood", "mcl_core:wood"}
}
})
--- Accacia Door --
mcl_doors:register_door("mcl_doors:acacia_door", {
description = "Acacia Door",
inventory_image = "door_acacia.png",
groups = {handy=1,axey=1, door=1, material_wood=1},
_mcl_hardness = 3,
tiles_bottom = {"door_acacia_b.png", "door_brown.png"},
tiles_top = {"door_acacia_a.png", "door_brown.png"},
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "mcl_doors:acacia_door 3",
recipe = {
{"mcl_core:acaciawood", "mcl_core:acaciawood"},
{"mcl_core:acaciawood", "mcl_core:acaciawood"},
{"mcl_core:acaciawood", "mcl_core:acaciawood"}
}
})
--- birch Door --
mcl_doors:register_door("mcl_doors:birch_door", {
description = "Birch Door",
inventory_image = "door_birch.png",
groups = {handy=1,axey=1, door=1, material_wood=1},
_mcl_hardness = 3,
tiles_bottom = {"door_birch_b.png", "door_brown.png"},
tiles_top = {"door_birch_a.png", "door_brown.png"},
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "mcl_doors:birch_door 3",
recipe = {
{"mcl_core:birchwood", "mcl_core:birchwood"},
{"mcl_core:birchwood", "mcl_core:birchwood"},
{"mcl_core:birchwood", "mcl_core:birchwood"},
}
})
--- dark oak Door --
mcl_doors:register_door("mcl_doors:dark_oak_door", {
description = "Dark Oak Door",
inventory_image = "door_dark_oak.png",
groups = {handy=1,axey=1, door=1, material_wood=1},
_mcl_hardness = 3,
tiles_bottom = {"door_dark_oak_b.png", "door_brown.png"},
tiles_top = {"door_dark_oak_a.png", "door_brown.png"},
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "mcl_doors:dark_oak_door 3",
recipe = {
{"mcl_core:darkwood", "mcl_core:darkwood"},
{"mcl_core:darkwood", "mcl_core:darkwood"},
{"mcl_core:darkwood", "mcl_core:darkwood"},
}
})
--- jungle Door --
mcl_doors:register_door("mcl_doors:jungle_door", {
description = "Jungle Door",
inventory_image = "door_jungle.png",
groups = {handy=1,axey=1, door=1, material_wood=1},
_mcl_hardness = 3,
tiles_bottom = {"door_jungle_b.png", "door_brown.png"},
tiles_top = {"door_jungle_a.png", "door_brown.png"},
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "mcl_doors:jungle_door 3",
recipe = {
{"mcl_core:junglewood", "mcl_core:junglewood"},
{"mcl_core:junglewood", "mcl_core:junglewood"},
{"mcl_core:junglewood", "mcl_core:junglewood"}
}
})
--- spruce Door --
mcl_doors:register_door("mcl_doors:spruce_door", {
description = "Spruce Door",
inventory_image = "door_spruce.png",
groups = {handy=1,axey=1, door=1, material_wood=1},
_mcl_hardness = 3,
tiles_bottom = {"door_spruce_b.png", "door_brown.png"},
tiles_top = {"door_spruce_a.png", "door_brown.png"},
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = "mcl_doors:spruce_door 3",
recipe = {
{"mcl_core:sprucewood", "mcl_core:sprucewood"},
{"mcl_core:sprucewood", "mcl_core:sprucewood"},
{"mcl_core:sprucewood", "mcl_core:sprucewood"}
}
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:wooden_door",
burntime = 10,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:jungle_door",
burntime = 10,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:dark_oak_door",
burntime = 10,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:birch_door",
burntime = 10,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:acacia_door",
burntime = 10,
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:spruce_door",
burntime = 10,
})
--- Door in Iron ---
mcl_doors:register_door("mcl_doors:iron_door", {
description = "Iron Door",
inventory_image = "door_steel.png",
groups = {pickaxey=1, door=1,mesecon_effector_on=1},
_mcl_hardness = 5,
tiles_bottom = {"door_steel_b.png", "door_grey.png"},
tiles_top = {"door_steel_a.png", "door_grey.png"},
sounds = mcl_sounds.node_sound_metal_defaults(),
sound_open = "doors_steel_door_open",
sound_close = "doors_steel_door_close",
})
minetest.register_craft({
output = "mcl_doors:iron_door 3",
recipe = {
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"},
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"},
{"mcl_core:iron_ingot", "mcl_core:iron_ingot"}
}
})
---- Trapdoor ----
function mcl_doors:register_trapdoor(name, def)
local function update_door(pos, node)
minetest.set_node(pos, node)
end
local me
local meta
local state = 0
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
local function punch(pos)
meta = minetest.get_meta(pos)
state = meta:get_int("state")
me = minetest.get_node(pos)
local tmp_node
local tmp_node2
local oben = {x=pos.x, y=pos.y+1, z=pos.z}
if state == 1 then
state = 0
minetest.sound_play(def.sound_close, {pos = pos, gain = 0.3, max_hear_distance = 10})
tmp_node = {name=name, param1=me.param1, param2=me.param2}
else
state = 1
minetest.sound_play(def.sound_open, {pos = pos, gain = 0.3, max_hear_distance = 10})
tmp_node = {name=name.."_open", param1=me.param1, param2=me.param2}
end
update_door(pos, tmp_node)
meta:set_int("state", state)
end
minetest.register_node(name, {
description = def.description,
drawtype = "nodebox",
tiles = def.tiles,
inventory_image = def.inventory_image,
wield_image = def.wield_image,
is_ground_content = false,
paramtype = "light",
stack_max = 64,
paramtype2 = "facedir",
groups = def.groups,
_mcl_hardness = def._mcl_hardness,
sounds = def.sounds,
node_box = {
type = "fixed",
fixed = {
{-8/16, -8/16, -8/16, 8/16, -6/16, 8/16},},
},
on_creation = function(pos)
state = 0
end,
mesecons = {effector = {
action_on = (function(pos, node)
punch(pos)
end),
}},
on_rightclick = function(pos, node, clicker)
punch(pos)
end,
})
minetest.register_node(name.."_open", {
drawtype = "nodebox",
tiles = def.tiles,
is_ground_content = false,
paramtype = "light",
paramtype2 = "facedir",
pointable = true,
groups = def.groups,
_mcl_hardness = def._mcl_hardness,
sounds = def.sounds,
drop = name,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5}
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0.4, 0.5, 0.5, 0.5}
},
on_rightclick = function(pos, node, clicker)
punch(pos)
end,
mesecons = {effector = {
action_on = (function(pos, node)
punch(pos)
end),
}},
})
end
mcl_doors:register_trapdoor("mcl_doors:trapdoor", {
description = "Wooden Trapdoor",
tiles = {"door_trapdoor.png"},
wield_image = "door_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1,door=2, material_wood=1},
_mcl_hardness = 3,
sounds = mcl_sounds.node_sound_wood_defaults(),
})
minetest.register_craft({
output = 'mcl_doors:trapdoor 2',
recipe = {
{'group:wood', 'group:wood', 'group:wood'},
{'group:wood', 'group:wood', 'group:wood'},
}
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_doors:trapdoor",
burntime = 15,
})
mcl_doors:register_trapdoor("mcl_doors:iron_trapdoor", {
description = "Iron Trapdoor",
tiles = {"iron_trapdoor.png"},
wield_image = "iron_trapdoor.png",
groups = {pickaxey=1, mesecon_effector_on=1,door=2},
_mcl_hardness = 5,
sounds = mcl_sounds.node_sound_metal_defaults(),
sound_open = "doors_steel_door_open",
sound_close = "doors_steel_door_close",
})
minetest.register_craft({
output = 'mcl_doors:iron_trapdoor',
recipe = {
{'mcl_core:iron_ingot', 'mcl_core:iron_ingot'},
{'mcl_core:iron_ingot', 'mcl_core:iron_ingot'},
}
})
-- Register aliases
local doornames = {
["door"] = "wooden_door",
["door_jungle"] = "jungle_door",
["door_spruce"] = "spruce_door",
["door_dark_oak"] = "dark_oak_door",
["door_birch"] = "birch_door",
["door_acacia"] = "acacia_door",
["door_iron"] = "iron_door",
}
for oldname, newname in pairs(doornames) do
minetest.register_alias("doors:"..oldname, "mcl_doors:"..newname)
minetest.register_alias("doors:"..oldname.."_t_1", "mcl_doors:"..newname.."_t_1")
minetest.register_alias("doors:"..oldname.."_b_1", "mcl_doors:"..newname.."_b_1")
minetest.register_alias("doors:"..oldname.."_t_2", "mcl_doors:"..newname.."_t_2")
minetest.register_alias("doors:"..oldname.."_b_2", "mcl_doors:"..newname.."_b_2")
end
minetest.register_alias("doors:trapdoor", "mcl_doors:trapdoor")
minetest.register_alias("doors:trapdoor_open", "mcl_doors:trapdoor_open")
minetest.register_alias("doors:iron_trapdoor", "mcl_doors:iron_trapdoor")
minetest.register_alias("doors:iron_trapdoor_open", "mcl_doors:iron_trapdoor_open")
-- Debug info
local time_to_load= os.clock() - init
minetest.log("action", (string.format("[MOD] "..minetest.get_current_modname().." loaded in %.4f s", time_to_load)))

View file

@ -0,0 +1 @@
name = mcl_doors

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 688 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 B