Skip to content

Commit 2d653cd

Browse files
Added tubelib support and ability to disable (#2)
Co-authored-by: Cam B <[email protected]>
1 parent d9b414a commit 2d653cd

File tree

2 files changed

+79
-11
lines changed

2 files changed

+79
-11
lines changed

depends.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
tubelib?

pchest.lua

Lines changed: 78 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
pchest={}
22

3+
local tubelibEnabled = minetest.global_exists("tubelib")
4+
35
minetest.register_craft({
46
output = "hook:pchest",
57
recipe = {
@@ -9,22 +11,38 @@ minetest.register_craft({
911
}
1012
})
1113

12-
pchest.setpchest=function(pos,user)
14+
pchest.setpchest=function(pos,user,item)
1315
local meta = minetest.get_meta(pos)
1416
meta:set_string("owner", user:get_player_name())
1517
meta:set_int("state", 0)
1618
meta:get_inventory():set_size("main", 32)
1719
meta:get_inventory():set_size("trans", 1)
18-
meta:set_string("formspec",
19-
"size[8,8]" ..
20-
"list[context;main;0,0;8,4;]" ..
21-
"list[context;trans;0,0;0,0;]" ..
22-
"list[current_player;main;0,4.3;8,4;]" ..
23-
"listring[current_player;main]" ..
24-
"listring[current_name;main]")
20+
local tubelib = "true"
21+
if item.meta.tubelib then
22+
tubelib = item.meta.tubelib
23+
end
24+
meta:set_string("tubelib", tubelib)
25+
pchest.setformspec(meta)
2526
meta:set_string("infotext", "PChest by: " .. user:get_player_name())
2627
end
2728

29+
pchest.setformspec = function (meta)
30+
local header_space = 0
31+
local fieldspec = ""
32+
if tubelibEnabled then
33+
header_space = 1
34+
fieldspec = "checkbox[4,0;toggle_tubelib;Enable tubelib interaction;"..meta:get_string("tubelib").."]"
35+
end
36+
meta:set_string("formspec",
37+
"size[8,".. (header_space+8) .."]" ..
38+
fieldspec..
39+
"list[context;main;0,".. (header_space+0) ..";8,4;]" ..
40+
"list[context;trans;0,0;0,0;]" ..
41+
"list[current_player;main;0,".. (header_space+4.3) ..";8,4;]" ..
42+
"listring[current_player;main]" ..
43+
"listring[current_name;main]")
44+
end
45+
2846
minetest.register_tool("hook:pchest", {
2947
description = "Portable locked chest",
3048
inventory_image = "hook_extras_chest3.png",
@@ -35,7 +53,7 @@ minetest.register_tool("hook:pchest", {
3553
local p=minetest.dir_to_facedir(user:get_look_dir())
3654
local item=itemstack:to_table()
3755
minetest.set_node(pointed_thing.above, {name = "hook:pchest_node",param1="",param2=p})
38-
pchest.setpchest(pointed_thing.above,user)
56+
pchest.setpchest(pointed_thing.above,user,item)
3957

4058
minetest.sound_play("default_place_node_hard", {pos=pointed_thing.above, gain = 1.0, max_hear_distance = 5})
4159

@@ -121,6 +139,17 @@ minetest.register_node("hook:pchest_node", {
121139
local m = minetest.get_meta(pos)
122140
return m:get_string("owner") == "" and m:get_inventory():is_empty("main")
123141
end,
142+
on_receive_fields = function(pos, formname, fields, sender)
143+
local name = sender:get_player_name()
144+
local meta = minetest.get_meta(pos)
145+
if name ~= meta:get_string("owner") then
146+
return false
147+
end
148+
if fields.toggle_tubelib then
149+
meta:set_string("tubelib", fields.toggle_tubelib)
150+
end
151+
pchest.setformspec(meta)
152+
end,
124153
on_punch = function(pos, node, player, pointed_thing)
125154
local meta=minetest.get_meta(pos)
126155
local name = player:get_player_name()
@@ -134,9 +163,47 @@ minetest.register_node("hook:pchest_node", {
134163
table.insert(items,v:to_table())
135164
end
136165
local item = ItemStack("hook:pchest"):to_table()
137-
item.meta={items=minetest.serialize(items)}
166+
item.meta={items=minetest.serialize(items),tubelib=meta:get_string('tubelib')}
138167
pinv:add_item("main", ItemStack(item))
139168
minetest.set_node(pos, {name = "air"})
140169
minetest.sound_play("default_dig_dig_immediate", {pos=pos, gain = 1.0, max_hear_distance = 5,})
141170
end
142-
})
171+
})
172+
173+
if tubelibEnabled then
174+
tubelib.register_node("hook:pchest_node", {}, {
175+
on_pull_item = function(pos, side, player_name)
176+
local meta = minetest.get_meta(pos)
177+
if meta:get_string('tubelib') ~= 'true' then
178+
return nil
179+
end
180+
local inv = meta:get_inventory()
181+
for _, stack in pairs(inv:get_list("main")) do
182+
if not stack:is_empty() then
183+
return inv:remove_item("main", stack:get_name())
184+
end
185+
end
186+
return nil
187+
end,
188+
on_push_item = function(pos, side, item, player_name)
189+
local meta = minetest.get_meta(pos)
190+
if meta:get_string('tubelib') ~= 'true' then
191+
return false
192+
end
193+
local inv = meta:get_inventory()
194+
if inv:room_for_item("main", item) then
195+
inv:add_item("main", item)
196+
return true
197+
end
198+
return false
199+
end,
200+
on_unpull_item = function(pos, side, item, player_name)
201+
local inv = minetest.get_meta(pos):get_inventory()
202+
if inv:room_for_item("main", item) then
203+
inv:add_item("main", item)
204+
return true
205+
end
206+
return false
207+
end,
208+
})
209+
end

0 commit comments

Comments
 (0)