Compare commits
5 Commits
d004477659
...
e95db847ce
Author | SHA1 | Date |
---|---|---|
AiTechEye | e95db847ce | |
AiTechEye | 0b2e4deb84 | |
AiTechEye | a6fed84bc6 | |
AiTechEye | 3e0c08e00f | |
AiTechEye | 961d223d95 |
|
@ -2,7 +2,7 @@
|
|||
|
||||
Licenses: code: LGPL-2.1, media: CC BY-SA-4.0
|
||||
|
||||
Version: 13
|
||||
Version: 13.1
|
||||
|
||||
hook:
|
||||
hit on a edge to climb up.
|
||||
|
|
2
init.lua
2
init.lua
|
@ -432,7 +432,7 @@ minetest.register_node("hook:hooking", {
|
|||
description = "Hooking",
|
||||
drawtype = "mesh",
|
||||
mesh="hook_hook.obj",
|
||||
tiles = {"default_ironblock.png"},
|
||||
tiles = {"hook_iron.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
walkable=false,
|
||||
|
|
61
pchest.lua
61
pchest.lua
|
@ -9,60 +9,66 @@ minetest.register_craft({
|
|||
}
|
||||
})
|
||||
|
||||
pchest.setpchest=function(pos,user)
|
||||
pchest.setpchest=function(pos,user,label)
|
||||
local meta = minetest.get_meta(pos)
|
||||
label = label or "PChest"
|
||||
meta:set_string("owner", user:get_player_name())
|
||||
meta:set_int("state", 0)
|
||||
meta:get_inventory():set_size("main", 32)
|
||||
meta:get_inventory():set_size("trans", 1)
|
||||
meta:set_string("formspec",
|
||||
"size[8,8]" ..
|
||||
"list[context;main;0,0;8,4;]" ..
|
||||
"size[8,9]" ..
|
||||
"list[context;main;0,1;8,4;]" ..
|
||||
"list[context;trans;0,0;0,0;]" ..
|
||||
"list[current_player;main;0,4.3;8,4;]" ..
|
||||
"list[current_player;main;0,5.3;8,4;]" ..
|
||||
"listring[current_player;main]" ..
|
||||
"listring[current_name;main]")
|
||||
meta:set_string("infotext", "PChest by: " .. user:get_player_name())
|
||||
"listring[current_name;main]" ..
|
||||
"field[0.3,0.3;2,1;label;;"..label.."]")
|
||||
meta:set_string("infotext", label.." (" .. user:get_player_name()..")")
|
||||
end
|
||||
|
||||
minetest.register_tool("hook:pchest", {
|
||||
description = "Portable locked chest",
|
||||
inventory_image = "hook_extras_chest3.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type == "node" then
|
||||
minetest.registered_tools["hook:pchest"].on_place(itemstack, user, pointed_thing)
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
on_place = function(itemstack, user, pointed_thing)
|
||||
if minetest.is_protected(pointed_thing.above,user:get_player_name()) or hook.slingshot_def(pointed_thing.above,"walkable") then
|
||||
return itemstack
|
||||
end
|
||||
local p=minetest.dir_to_facedir(user:get_look_dir())
|
||||
local item=itemstack:to_table()
|
||||
local m = minetest.get_meta(pointed_thing.above)
|
||||
minetest.set_node(pointed_thing.above, {name = "hook:pchest_node",param1="",param2=p})
|
||||
pchest.setpchest(pointed_thing.above,user)
|
||||
|
||||
minetest.sound_play("default_place_node_hard", {pos=pointed_thing.above, gain = 1.0, max_hear_distance = 5})
|
||||
|
||||
if not (item.meta or item.metadata) then
|
||||
if not item.meta then
|
||||
itemstack:take_item()
|
||||
return itemstack
|
||||
end
|
||||
|
||||
pchest.setpchest(pointed_thing.above,user,item.meta.label)
|
||||
|
||||
m:set_string("label",item.meta.label or "")
|
||||
|
||||
if item.meta.items then
|
||||
local its = minetest.deserialize(item.meta.items or "") or {}
|
||||
local items = {}
|
||||
for i,it in pairs(its) do
|
||||
table.insert(items,ItemStack(it))
|
||||
end
|
||||
|
||||
minetest.get_meta(pointed_thing.above):get_inventory():set_list("main",items)
|
||||
elseif item.metadata ~= "" then
|
||||
local meta=minetest.deserialize(item["metadata"])
|
||||
local s=meta.stuff
|
||||
local its=meta.stuff.split(meta.stuff,",",",")
|
||||
local nmeta=minetest.get_meta(pointed_thing.above)
|
||||
for i,it in pairs(its) do
|
||||
if its~="" then
|
||||
nmeta:get_inventory():set_stack("main",i, ItemStack(it))
|
||||
end
|
||||
end
|
||||
m:get_inventory():set_list("main",items)
|
||||
end
|
||||
itemstack:take_item()
|
||||
|
||||
local p = pointed_thing.under
|
||||
local ab = pointed_thing.above
|
||||
local s = ItemStack("default:unknown")
|
||||
local sinv = minetest.get_meta(pointed_thing.under):get_inventory()
|
||||
return itemstack
|
||||
end
|
||||
})
|
||||
|
@ -134,9 +140,20 @@ minetest.register_node("hook:pchest_node", {
|
|||
table.insert(items,v:to_table())
|
||||
end
|
||||
local item = ItemStack("hook:pchest"):to_table()
|
||||
item.meta={items=minetest.serialize(items)}
|
||||
local label = meta:get_string("label")
|
||||
item.meta={items=minetest.serialize(items),label=label,description=label.." ("..name..")"}
|
||||
pinv:add_item("main", ItemStack(item))
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
minetest.sound_play("default_dig_dig_immediate", {pos=pos, gain = 1.0, max_hear_distance = 5,})
|
||||
end,
|
||||
on_receive_fields=function(pos, formname, pressed, sender)
|
||||
if pressed.label then
|
||||
local m = minetest.get_meta(pos)
|
||||
local owner = m:get_string("owner")
|
||||
if owner == sender:get_player_name() or owner == "" then
|
||||
m:set_string("label",pressed.label)
|
||||
pchest.setpchest(pos,sender,pressed.label)
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
Loading…
Reference in New Issue