Skip to content

Commit bae58b3

Browse files
Ryan Nolanparamat
Ryan Nolan
authored andcommittedDec 20, 2018
Doors: Allow on_rightclick to be overidden
Allow mods such as protection mods to over ride on_rightclick. Usecase is creating shared doors without the need for keys.
1 parent ec248d3 commit bae58b3

File tree

2 files changed

+43
-23
lines changed

2 files changed

+43
-23
lines changed
 

Diff for: ‎game_api.txt

+21
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@ Doors API
160160

161161
The doors mod allows modders to register custom doors and trapdoors.
162162

163+
`doors.registered_doors[name] = Door definition`
164+
* Table of registered doors, indexed by door name
165+
166+
`doors.registered_trapdoors[name] = Trapdoor definition`
167+
* Table of registered trap doors, indexed by trap door name
168+
163169
`doors.register_door(name, def)`
164170

165171
* Registers new door
@@ -195,6 +201,13 @@ The doors mod allows modders to register custom doors and trapdoors.
195201
has the permissions needed to open this door. If omitted then no
196202
permission checks are performed.
197203

204+
`doors.door_toggle(pos, node, clicker)`
205+
206+
* Toggle door open or shut
207+
* `pos` Position of the door
208+
* `node` Node definition
209+
* `clicker` Player definition for the player that clicked on the door
210+
198211
### Door definition
199212

200213
description = "Door description",
@@ -206,6 +219,8 @@ The doors mod allows modders to register custom doors and trapdoors.
206219
sound_open = sound play for open door, -- optional
207220
sound_close = sound play for close door, -- optional
208221
protected = false, -- If true, only placer can open the door (locked for others)
222+
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
223+
-- optional function containing the on_rightclick callback, defaults to a doors.door_toggle-wrapper
209224

210225
### Trapdoor definition
211226

@@ -218,6 +233,10 @@ The doors mod allows modders to register custom doors and trapdoors.
218233
sound_open = sound play for open door, -- optional
219234
sound_close = sound play for close door, -- optional
220235
protected = false, -- If true, only placer can open the door (locked for others)
236+
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
237+
-- function containing the on_rightclick callback
238+
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
239+
-- function containing the on_rightclick callback
221240

222241
### Fence gate definition
223242

@@ -227,6 +246,8 @@ The doors mod allows modders to register custom doors and trapdoors.
227246
material = "default:wood",
228247
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
229248
sounds = default.node_sound_wood_defaults(), -- optional
249+
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
250+
-- function containing the on_rightclick callback
230251

231252

232253
Dungeon Loot API

Diff for: ‎mods/doors/init.lua

+22-23
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
-- our API object
22
doors = {}
33

4-
-- private data
5-
local _doors = {}
6-
_doors.registered_doors = {}
7-
_doors.registered_trapdoors = {}
4+
doors.registered_doors = {}
5+
doors.registered_trapdoors = {}
86

97
local function replace_old_owner_information(pos)
108
local meta = minetest.get_meta(pos)
@@ -18,48 +16,48 @@ end
1816
-- returns an object to a door object or nil
1917
function doors.get(pos)
2018
local node_name = minetest.get_node(pos).name
21-
if _doors.registered_doors[node_name] then
19+
if doors.registered_doors[node_name] then
2220
-- A normal upright door
2321
return {
2422
pos = pos,
2523
open = function(self, player)
2624
if self:state() then
2725
return false
2826
end
29-
return _doors.door_toggle(self.pos, nil, player)
27+
return doors.door_toggle(self.pos, nil, player)
3028
end,
3129
close = function(self, player)
3230
if not self:state() then
3331
return false
3432
end
35-
return _doors.door_toggle(self.pos, nil, player)
33+
return doors.door_toggle(self.pos, nil, player)
3634
end,
3735
toggle = function(self, player)
38-
return _doors.door_toggle(self.pos, nil, player)
36+
return doors.door_toggle(self.pos, nil, player)
3937
end,
4038
state = function(self)
4139
local state = minetest.get_meta(self.pos):get_int("state")
4240
return state %2 == 1
4341
end
4442
}
45-
elseif _doors.registered_trapdoors[node_name] then
43+
elseif doors.registered_trapdoors[node_name] then
4644
-- A trapdoor
4745
return {
4846
pos = pos,
4947
open = function(self, player)
5048
if self:state() then
5149
return false
5250
end
53-
return _doors.trapdoor_toggle(self.pos, nil, player)
51+
return doors.trapdoor_toggle(self.pos, nil, player)
5452
end,
5553
close = function(self, player)
5654
if not self:state() then
5755
return false
5856
end
59-
return _doors.trapdoor_toggle(self.pos, nil, player)
57+
return doors.trapdoor_toggle(self.pos, nil, player)
6058
end,
6159
toggle = function(self, player)
62-
return _doors.trapdoor_toggle(self.pos, nil, player)
60+
return doors.trapdoor_toggle(self.pos, nil, player)
6361
end,
6462
state = function(self)
6563
return minetest.get_node(self.pos).name:sub(-5) == "_open"
@@ -130,7 +128,7 @@ local transform = {
130128
},
131129
}
132130

133-
function _doors.door_toggle(pos, node, clicker)
131+
function doors.door_toggle(pos, node, clicker)
134132
local meta = minetest.get_meta(pos)
135133
node = node or minetest.get_node(pos)
136134
local def = minetest.registered_nodes[node.name]
@@ -373,10 +371,11 @@ function doors.register(name, def)
373371
name = name,
374372
sounds = { def.sound_close, def.sound_open },
375373
}
376-
377-
def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
378-
_doors.door_toggle(pos, node, clicker)
379-
return itemstack
374+
if not def.on_rightclick then
375+
def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
376+
doors.door_toggle(pos, node, clicker)
377+
return itemstack
378+
end
380379
end
381380
def.after_dig_node = function(pos, node, meta, digger)
382381
minetest.remove_node({x = pos.x, y = pos.y + 1, z = pos.z})
@@ -444,8 +443,8 @@ function doors.register(name, def)
444443
def.mesh = "door_b.obj"
445444
minetest.register_node(":" .. name .. "_b", def)
446445

447-
_doors.registered_doors[name .. "_a"] = true
448-
_doors.registered_doors[name .. "_b"] = true
446+
doors.registered_doors[name .. "_a"] = true
447+
doors.registered_doors[name .. "_b"] = true
449448
end
450449

451450
doors.register("door_wood", {
@@ -532,7 +531,7 @@ end
532531

533532
----trapdoor----
534533

535-
function _doors.trapdoor_toggle(pos, node, clicker)
534+
function doors.trapdoor_toggle(pos, node, clicker)
536535
node = node or minetest.get_node(pos)
537536

538537
replace_old_owner_information(pos)
@@ -565,7 +564,7 @@ function doors.register_trapdoor(name, def)
565564
local name_opened = name.."_open"
566565

567566
def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
568-
_doors.trapdoor_toggle(pos, node, clicker)
567+
doors.trapdoor_toggle(pos, node, clicker)
569568
return itemstack
570569
end
571570

@@ -668,8 +667,8 @@ function doors.register_trapdoor(name, def)
668667
minetest.register_node(name_opened, def_opened)
669668
minetest.register_node(name_closed, def_closed)
670669

671-
_doors.registered_trapdoors[name_opened] = true
672-
_doors.registered_trapdoors[name_closed] = true
670+
doors.registered_trapdoors[name_opened] = true
671+
doors.registered_trapdoors[name_closed] = true
673672
end
674673

675674
doors.register_trapdoor("doors:trapdoor", {

0 commit comments

Comments
 (0)
Please sign in to comment.