Epic/mods/earthbuild/storage.lua

317 lines
8.2 KiB
Lua

-------------------------------------------------------------
local function is_owner(pos, name)
local owner = minetest.get_meta(pos):get_string("owner")
if owner == "" or owner == name or minetest.check_player_privs(name, "protection_bypass") then
return true
end
return false
end
---------------------------------------------------
local function get_storage_formspec(pos)
local formspec ="size[8,7]" ..
default.gui_bg ..
default.gui_bg_img ..
default.gui_slots ..
"list[current_name;main;0,0.3;8,2]" ..
"list[current_player;main;0,2.85;8,1]" ..
"list[current_player;main;0,4.08;8,3;8]" ..
"listring[current_name;main]" ..
"listring[current_player;main]"
return formspec
end
-------------------------------------------------------------
--Storage Pot
--Unfired pot (not usuable... must be cooked)
minetest.register_craftitem("earthbuild:storage_pot_unfired", {
description = "Unfired Clay Storage Pot",
inventory_image = "earthbuild_storage_pot_unfired.png",
stack_max = 99,
})
--Finished Pot
minetest.register_node("earthbuild:storage_pot", {
description = "Clay Storage Pot",
tiles = {"earthbuild_storage_pot_top.png",
"earthbuild_storage_pot_top.png",
"earthbuild_storage_pot.png",
"earthbuild_storage_pot.png",
"earthbuild_storage_pot.png"},
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.375, -0.5, -0.375, 0.375, -0.375, 0.375},
{-0.375, 0.375, -0.375, 0.375, 0.5, 0.375},
{-0.4375, -0.375, -0.4375, 0.4375, -0.25, 0.4375},
{-0.4375, 0.25, -0.4375, 0.4375, 0.375, 0.4375},
{-0.5, -0.25, -0.5, 0.5, 0.25, 0.5},
}
},
groups = {oddly_breakable_by_hand = 3},
sounds = default.node_sound_stone_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", get_storage_formspec(pos, 8, 2))
local inv = meta:get_inventory()
inv:set_size("main", 8*3)
meta:set_string("infotext", "Clay Storage Pot")
end,
can_dig = function(pos, player)
local inv = minetest.get_meta(pos):get_inventory()
local name = ""
if player then
name = player:get_player_name()
end
return is_owner(pos, name) and inv:is_empty("main")
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
if is_owner(pos, player:get_player_name()) then
return count
end
return 0
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name())
and not string.match(stack:get_name(), "backpacks:") then
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name()) then
return stack:get_count()
end
return 0
end,
on_blast = function(pos)
end,
})
--Craft unfired pot
minetest.register_craft({
output = "earthbuild:storage_pot_unfired",
recipe = {
{"default:clay_lump", "default:clay_lump", "default:clay_lump"},
{"default:clay_lump", "", "default:clay_lump"},
{"default:clay_lump", "default:clay_lump", "default:clay_lump"},
}
})
--Recycle unfired pot
minetest.register_craft({
output = "default:clay_lump 8",
recipe = {
{"earthbuild:storage_pot_unfired"}}
})
--Cook unfired pot to give the useable pot
minetest.register_craft({
type = "cooking",
output = "earthbuild:storage_pot",
recipe = "earthbuild:storage_pot_unfired",
cooktime = 10,
})
--------------------------------------------
--Basket
minetest.register_node("earthbuild:basket", {
description = "Basket",
tiles = {"earthbuild_basket_top.png",
"earthbuild_basket_top.png",
"earthbuild_basket.png",
"earthbuild_basket.png",
"earthbuild_basket.png"},
drawtype = "nodebox",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.25, 0.375, -0.25, 0.25, 0.5, 0.25},
{-0.375, -0.25, -0.375, 0.375, 0.3125, 0.375},
{-0.3125, -0.375, -0.3125, 0.3125, -0.25, 0.3125},
{-0.25, -0.5, -0.25, 0.25, -0.375, 0.25},
{-0.3125, 0.3125, -0.3125, 0.3125, 0.375, 0.3125},
}
},
groups = {oddly_breakable_by_hand = 3},
sounds = default.node_sound_leaves_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", get_storage_formspec(pos, 8, 2))
local inv = meta:get_inventory()
inv:set_size("main", 8*2)
meta:set_string("infotext", "Basket")
end,
can_dig = function(pos, player)
local inv = minetest.get_meta(pos):get_inventory()
local name = ""
if player then
name = player:get_player_name()
end
return is_owner(pos, name) and inv:is_empty("main")
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
if is_owner(pos, player:get_player_name()) then
return count
end
return 0
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name())
and not string.match(stack:get_name(), "backpacks:") then
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name()) then
return stack:get_count()
end
return 0
end,
on_blast = function(pos)
end,
})
--Craft basket
minetest.register_craft({
output = "earthbuild:basket",
recipe = {
{"earthbuild:woven_mat", "earthbuild:woven_mat", "earthbuild:woven_mat"},
{"earthbuild:woven_mat", "", "earthbuild:woven_mat"},
{"earthbuild:woven_mat", "earthbuild:woven_mat", "earthbuild:woven_mat"},
}
})
--burn basket
minetest.register_craft({
type = "fuel",
recipe = "earthbuild:basket",
burntime = 8,
})
-----------------------------------------------------
--Gourd Container
--Vessel
minetest.register_node("earthbuild:bottlegourd_container", {
description = "Bottlegourd Container",
drawtype = "nodebox",
tiles = { "earthbuild_bottlegourd_container_top.png",
"earthbuild_bottlegourd_bot.png",
"earthbuild_bottlegourd_container.png",
"earthbuild_bottlegourd_container.png",
"earthbuild_bottlegourd_container.png",
"earthbuild_bottlegourd_container.png",
"earthbuild_bottlegourd_container.png",
"earthbuild_bottlegourd_container.png",
},
inventory_image = "earthbuild_bottlegourd_container.png",
wield_image = "earthbuild_bottlegourd_container.png",
paramtype = "light",
node_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, -0.0, 0.25},
}
},
selection_box = {
type = "fixed",
fixed = {
{-0.25, -0.5, -0.25, 0.25, -0.0, 0.25},
}
},
groups = {dig_immediate = 3,},
sounds = default.node_sound_wood_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", get_storage_formspec(pos, 8, 2))
local inv = meta:get_inventory()
inv:set_size("main", 1*1)
meta:set_string("infotext", "Bottle Gourd")
end,
can_dig = function(pos, player)
local inv = minetest.get_meta(pos):get_inventory()
local name = ""
if player then
name = player:get_player_name()
end
return is_owner(pos, name) and inv:is_empty("main")
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
if is_owner(pos, player:get_player_name()) then
return count
end
return 0
end,
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name())
and not string.match(stack:get_name(), "backpacks:") then
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
if is_owner(pos, player:get_player_name()) then
return stack:get_count()
end
return 0
end,
on_blast = function(pos)
end,
})
minetest.register_craft({
output = 'earthbuild:bottlegourd_container',
recipe = {
{'earthbuild:bottlegourd_cup', 'earthbuild:bottlegourd_cup'},
}
})
minetest.register_craft({
type = "fuel",
recipe = "earthbuild:bottlegourd_container",
burntime = 1,
})