add technic_chest files with initial modifications
|
@ -0,0 +1,71 @@
|
|||
|
||||
technic.chests.groups = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||
tubedevice=1, tubedevice_receiver=1}
|
||||
technic.chests.groups_noinv = {snappy=2, choppy=2, oddly_breakable_by_hand=2,
|
||||
tubedevice=1, tubedevice_receiver=1, not_in_creative_inventory=1}
|
||||
|
||||
technic.chests.tube = {
|
||||
insert_object = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:add_item("main",stack)
|
||||
end,
|
||||
can_insert = function(pos, node, stack, direction)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:room_for_item("main",stack)
|
||||
end,
|
||||
input_inventory = "main",
|
||||
connect_sides = {left=1, right=1, front=1, back=1, top=1, bottom=1},
|
||||
}
|
||||
|
||||
technic.chests.can_dig = function(pos, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
end
|
||||
|
||||
local function inv_change(pos, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if not has_locked_chest_privilege(meta, player) then
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" tried to access a locked chest belonging to "..
|
||||
meta:get_string("owner").." at "..
|
||||
minetest.pos_to_string(pos))
|
||||
return 0
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
function technic.chests.inv_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
return inv_change(pos, count, player)
|
||||
end
|
||||
function technic.chests.inv_put(pos, listname, index, stack, player)
|
||||
return inv_change(pos, stack:get_count(), player)
|
||||
end
|
||||
function technic.chests.inv_take(pos, listname, index, stack, player)
|
||||
return inv_change(pos, stack:get_count(), player)
|
||||
end
|
||||
|
||||
function technic.chests.on_inv_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff in chest at "
|
||||
..minetest.pos_to_string(pos))
|
||||
end
|
||||
|
||||
function technic.chests.on_inv_put(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" puts stuff in to chest at "
|
||||
..minetest.pos_to_string(pos))
|
||||
end
|
||||
|
||||
function technic.chests.on_inv_take(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" takes stuff from chest at "
|
||||
..minetest.pos_to_string(pos))
|
||||
end
|
||||
|
||||
function has_locked_chest_privilege(meta, player)
|
||||
return player:get_player_name() == meta:get_string("owner")
|
||||
end
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
minetest.register_craft({
|
||||
output = 'technic:copper_chest 1',
|
||||
recipe = {
|
||||
{'default:copper_ingot','default:copper_ingot','default:copper_ingot'},
|
||||
{'default:copper_ingot','technic:iron_chest','default:copper_ingot'},
|
||||
{'default:copper_ingot','default:copper_ingot','default:copper_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:copper_locked_chest 1',
|
||||
recipe = {
|
||||
{'default:copper_ingot','default:copper_ingot','default:copper_ingot'},
|
||||
{'default:copper_ingot','technic:iron_locked_chest','default:copper_ingot'},
|
||||
{'default:copper_ingot','default:copper_ingot','default:copper_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:copper_locked_chest 1',
|
||||
recipe = {
|
||||
{'default:steel_ingot'},
|
||||
{'technic:copper_chest'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.chests:register("Copper", {
|
||||
width = 12,
|
||||
height = 5,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = false,
|
||||
color = false,
|
||||
locked = false,
|
||||
})
|
||||
|
||||
technic.chests:register("Copper", {
|
||||
width = 12,
|
||||
height = 5,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = false,
|
||||
color = false,
|
||||
locked = true,
|
||||
})
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
default
|
||||
moreores?
|
||||
pipeworks?
|
||||
intllib?
|
|
@ -0,0 +1,57 @@
|
|||
|
||||
local material_list
|
||||
if minetest.get_modpath("moreores") then
|
||||
material_list = { 'silver' }
|
||||
else
|
||||
-- Make the gold chest obtainable for mere mortals (the silver chest is not obtainable)
|
||||
material_list = { 'copper', 'silver' }
|
||||
end
|
||||
|
||||
for _, material in ipairs(material_list) do
|
||||
minetest.register_craft({
|
||||
output = 'technic:gold_chest',
|
||||
recipe = {
|
||||
{'default:gold_ingot','default:gold_ingot','default:gold_ingot'},
|
||||
{'default:gold_ingot',"technic:"..material.."_chest",'default:gold_ingot'},
|
||||
{'default:gold_ingot','default:gold_ingot','default:gold_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:gold_locked_chest',
|
||||
recipe = {
|
||||
{'default:gold_ingot','default:gold_ingot','default:gold_ingot'},
|
||||
{'default:gold_ingot',"technic:"..material.."_locked_chest",'default:gold_ingot'},
|
||||
{'default:gold_ingot','default:gold_ingot','default:gold_ingot'},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:gold_locked_chest',
|
||||
recipe = {
|
||||
{'default:steel_ingot'},
|
||||
{'technic:gold_chest'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.chests:register("Gold", {
|
||||
width = 15,
|
||||
height = 6,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = true,
|
||||
color = true,
|
||||
locked = false,
|
||||
})
|
||||
|
||||
technic.chests:register("Gold", {
|
||||
width = 15,
|
||||
height = 6,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = true,
|
||||
color = true,
|
||||
locked = true,
|
||||
})
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
-- Minetest 0.4.6 mod: technic_chests
|
||||
-- namespace: technic
|
||||
-- (c) 2012-2013 by RealBadAngel <mk@realbadangel.pl>
|
||||
|
||||
local modpath = minetest.get_modpath("technic_chests")
|
||||
|
||||
technic = rawget(_G, "technic") or {}
|
||||
technic.chests = {}
|
||||
|
||||
dofile(modpath.."/common.lua")
|
||||
dofile(modpath.."/register.lua")
|
||||
dofile(modpath.."/iron_chest.lua")
|
||||
dofile(modpath.."/copper_chest.lua")
|
||||
dofile(modpath.."/silver_chest.lua")
|
||||
dofile(modpath.."/gold_chest.lua")
|
||||
dofile(modpath.."/mithril_chest.lua")
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
local cast_iron_ingot
|
||||
|
||||
minetest.get_modpath('mobs_monster')
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:iron_chest 1',
|
||||
recipe = {
|
||||
{'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
|
||||
{'default:steel_ingot','mobs:lava_orb','default:steel_ingot'},
|
||||
{'default:steel_ingot','default:steel_ingot','default:steel_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:iron_locked_chest 1',
|
||||
recipe = {
|
||||
{'default:steel_ingot'},
|
||||
{'technic:iron_chest'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.chests:register("Iron", {
|
||||
width = 9,
|
||||
height = 5,
|
||||
sort = true,
|
||||
autosort = false,
|
||||
infotext = false,
|
||||
color = false,
|
||||
locked = false,
|
||||
})
|
||||
|
||||
technic.chests:register("Iron", {
|
||||
width = 9,
|
||||
height = 5,
|
||||
sort = true,
|
||||
autosort = false,
|
||||
infotext = false,
|
||||
color = false,
|
||||
locked = true,
|
||||
})
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
# German Translation for technic_chests
|
||||
# Deutsche Übersetzung von technic_chests
|
||||
# by Xanthin
|
||||
|
||||
%s Chest = %struhe
|
||||
%s Locked Chest = Verschlossene %struhe
|
||||
%s Locked Chest (owned by %s) = Verschlossene %struhe (gehoert %s)
|
||||
Color Filter: %s = Farbfilter: %s
|
||||
Edit chest description: = Bearbeite die Beschreibung
|
||||
|
||||
# Colors
|
||||
Black = Schwarz
|
||||
Blue = Blau
|
||||
Brown = Braun
|
||||
Cyan = Tuerkis
|
||||
Dark Green = Dunkelgruen
|
||||
Dark Grey = Dunkelgrau
|
||||
Green = Gruen
|
||||
Grey = Grau
|
||||
Magenta = Magenta
|
||||
Orange = Orange
|
||||
Pink = Rosa
|
||||
Red = Rot
|
||||
Violet = Violett
|
||||
White = Weiss
|
||||
Yellow = Gelb
|
||||
None = Farblos
|
||||
|
||||
# Materials
|
||||
Copper = Kupfer
|
||||
Gold = Gold
|
||||
Iron = Eisen
|
||||
Mithril = Mithril
|
||||
Silver = Silber
|
||||
Wooden = Holz
|
||||
|
||||
# Sorting
|
||||
Sort =
|
||||
Auto-sort is %s =
|
||||
Off =
|
||||
On =
|
|
@ -0,0 +1,39 @@
|
|||
# technic_chests translation template
|
||||
|
||||
%s Chest =
|
||||
%s Locked Chest =
|
||||
%s Locked Chest (owned by %s) =
|
||||
Color Filter: %s =
|
||||
Edit chest description: =
|
||||
|
||||
# Colors
|
||||
Black =
|
||||
Blue =
|
||||
Brown =
|
||||
Cyan =
|
||||
Dark Green =
|
||||
Dark Grey =
|
||||
Green =
|
||||
Grey =
|
||||
Magenta =
|
||||
Orange =
|
||||
Pink =
|
||||
Red =
|
||||
Violet =
|
||||
White =
|
||||
Yellow =
|
||||
None =
|
||||
|
||||
# Materials
|
||||
Copper =
|
||||
Gold =
|
||||
Iron =
|
||||
Mithril =
|
||||
Silver =
|
||||
Wooden =
|
||||
|
||||
# Sorting
|
||||
Sort =
|
||||
Auto-sort is %s =
|
||||
Off =
|
||||
On =
|
|
@ -0,0 +1,41 @@
|
|||
# Turkish translation
|
||||
# mahmutelmas06@hotmail.com
|
||||
# Türkçe çeviri
|
||||
|
||||
%s Chest = %s Sandık
|
||||
%s Locked Chest = %s Kilitli sandık
|
||||
%s Locked Chest (owned by %s) = %s Kilitli sandık (Sahibi %s)
|
||||
Color Filter: %s = Renk süzgeci: %s
|
||||
Edit chest description: = Sandık bilgilerini düzenle
|
||||
|
||||
# Colors - Renkler
|
||||
Black = Siyah
|
||||
Blue = Mavi
|
||||
Brown = Kahverengi
|
||||
Cyan = Cam göbeği
|
||||
Dark Green = Koyu yeşil
|
||||
Dark Grey = Koyu gri
|
||||
Green = Yeşil
|
||||
Grey = Gri
|
||||
Magenta = Mor
|
||||
Orange = Turuncu
|
||||
Pink = Pembe
|
||||
Red = Kırmızı
|
||||
Violet = Koyu mor
|
||||
White = Beyaz
|
||||
Yellow = Sarı
|
||||
None = Hiç
|
||||
|
||||
# Materials - Metaryeller
|
||||
Copper = Bakır
|
||||
Gold = Altın
|
||||
Iron = Demir
|
||||
Mithril = Mithril
|
||||
Silver = Gümüş
|
||||
Wooden = Ahşap
|
||||
|
||||
# Sorting - Sıralama
|
||||
Sort = Sırala
|
||||
Auto-sort is %s = Otomatik sıralama %s
|
||||
Off = Kapalı
|
||||
On = Açık
|
|
@ -0,0 +1,48 @@
|
|||
if minetest.get_modpath("moreores") then
|
||||
minetest.register_craft({
|
||||
output = 'technic:mithril_chest 1',
|
||||
recipe = {
|
||||
{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
|
||||
{'moreores:mithril_ingot','technic:gold_chest','moreores:mithril_ingot'},
|
||||
{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:mithril_locked_chest 1',
|
||||
recipe = {
|
||||
{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
|
||||
{'moreores:mithril_ingot','technic:gold_locked_chest','moreores:mithril_ingot'},
|
||||
{'moreores:mithril_ingot','moreores:mithril_ingot','moreores:mithril_ingot'},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:mithril_locked_chest 1',
|
||||
recipe = {
|
||||
{'default:steel_ingot'},
|
||||
{'technic:mithril_chest'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.chests:register("Mithril", {
|
||||
width = 15,
|
||||
height = 6,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = false,
|
||||
color = false,
|
||||
locked = false,
|
||||
})
|
||||
|
||||
technic.chests:register("Mithril", {
|
||||
width = 15,
|
||||
height = 6,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = false,
|
||||
color = false,
|
||||
locked = true,
|
||||
})
|
||||
|
|
@ -0,0 +1,303 @@
|
|||
local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end
|
||||
|
||||
local pipeworks = rawget(_G, "pipeworks")
|
||||
if not minetest.get_modpath("pipeworks") then
|
||||
-- Pipeworks is not installed. Simulate using a dummy table...
|
||||
pipeworks = {}
|
||||
local pipeworks_meta = {}
|
||||
setmetatable(pipeworks, pipeworks_meta)
|
||||
local dummy = function()
|
||||
end
|
||||
pipeworks_meta.__index = function(table, key)
|
||||
print("[technic_chests] WARNING: variable or method '"..key.."' not present in dummy pipeworks table - assuming it is a method...")
|
||||
pipeworks[key] = dummy
|
||||
return dummy
|
||||
end
|
||||
pipeworks.after_place = dummy
|
||||
pipeworks.after_dig = dummy
|
||||
end
|
||||
|
||||
local chest_mark_colors = {
|
||||
{"black", S("Black")},
|
||||
{"blue", S("Blue")},
|
||||
{"brown", S("Brown")},
|
||||
{"cyan", S("Cyan")},
|
||||
{"dark_green", S("Dark Green")},
|
||||
{"dark_grey", S("Dark Grey")},
|
||||
{"green", S("Green")},
|
||||
{"grey", S("Grey")},
|
||||
{"magenta", S("Magenta")},
|
||||
{"orange", S("Orange")},
|
||||
{"pink", S("Pink")},
|
||||
{"red", S("Red")},
|
||||
{"violet", S("Violet")},
|
||||
{"white", S("White")},
|
||||
{"yellow", S("Yellow")},
|
||||
}
|
||||
|
||||
|
||||
local function colorid_to_postfix(id)
|
||||
return chest_mark_colors[id] and "_"..chest_mark_colors[id][1] or ""
|
||||
end
|
||||
|
||||
|
||||
local function get_color_buttons(coleft, lotop)
|
||||
local buttons_string = ""
|
||||
for y = 0, 3 do
|
||||
for x = 0, 3 do
|
||||
local file_name = "technic_colorbutton"..(y * 4 + x)..".png"
|
||||
buttons_string = buttons_string.."image_button["
|
||||
..(coleft + 0.1 + x * 0.7)..","..(lotop + 0.1 + y * 0.7)
|
||||
..";0.8,0.8;"..file_name..";color_button"
|
||||
..(y * 4 + x + 1)..";]"
|
||||
end
|
||||
end
|
||||
return buttons_string
|
||||
end
|
||||
|
||||
|
||||
local function check_color_buttons(pos, meta, chest_name, fields)
|
||||
for i = 1, 16 do
|
||||
if fields["color_button"..i] then
|
||||
local node = minetest.get_node(pos)
|
||||
node.name = chest_name..colorid_to_postfix(i)
|
||||
minetest.swap_node(pos, node)
|
||||
meta:set_string("color", i)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function set_formspec(pos, data, page)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local formspec = data.base_formspec
|
||||
if data.autosort then
|
||||
local status = meta:get_int("autosort")
|
||||
formspec = formspec.."button["..(data.hileft+2)..","..(data.height+1.1)..";3,0.8;autosort_to_"..(1-status)..";"..S("Auto-sort is %s"):format(status == 1 and S("On") or S("Off")).."]"
|
||||
end
|
||||
if data.infotext then
|
||||
local formspec_infotext = minetest.formspec_escape(meta:get_string("infotext"))
|
||||
if page == "main" then
|
||||
formspec = formspec.."image_button["..(data.hileft+2.1)..",0.1;0.8,0.8;"
|
||||
.."technic_pencil_icon.png;edit_infotext;]"
|
||||
.."label["..(data.hileft+3)..",0;"..formspec_infotext.."]"
|
||||
elseif page == "edit_infotext" then
|
||||
formspec = formspec.."image_button["..(data.hileft+2.1)..",0.1;0.8,0.8;"
|
||||
.."technic_checkmark_icon.png;save_infotext;]"
|
||||
.."field["..(data.hileft+3.3)..",0.2;4.8,1;"
|
||||
.."infotext_box;"..S("Edit chest description:")..";"
|
||||
..formspec_infotext.."]"
|
||||
end
|
||||
end
|
||||
if data.color then
|
||||
local colorID = meta:get_int("color")
|
||||
local colorName
|
||||
if chest_mark_colors[colorID] then
|
||||
colorName = chest_mark_colors[colorID][2]
|
||||
else
|
||||
colorName = S("None")
|
||||
end
|
||||
formspec = formspec.."label["..(data.coleft+0.2)..","..(data.lotop+3)..";"..S("Color Filter: %s"):format(colorName).."]"
|
||||
end
|
||||
meta:set_string("formspec", formspec)
|
||||
end
|
||||
|
||||
local function sort_inventory(inv)
|
||||
local inlist = inv:get_list("main")
|
||||
local typecnt = {}
|
||||
local typekeys = {}
|
||||
for _, st in ipairs(inlist) do
|
||||
if not st:is_empty() then
|
||||
local n = st:get_name()
|
||||
local w = st:get_wear()
|
||||
local m = st:get_metadata()
|
||||
local k = string.format("%s %05d %s", n, w, m)
|
||||
if not typecnt[k] then
|
||||
typecnt[k] = {
|
||||
name = n,
|
||||
wear = w,
|
||||
metadata = m,
|
||||
stack_max = st:get_stack_max(),
|
||||
count = 0,
|
||||
}
|
||||
table.insert(typekeys, k)
|
||||
end
|
||||
typecnt[k].count = typecnt[k].count + st:get_count()
|
||||
end
|
||||
end
|
||||
table.sort(typekeys)
|
||||
local outlist = {}
|
||||
for _, k in ipairs(typekeys) do
|
||||
local tc = typecnt[k]
|
||||
while tc.count > 0 do
|
||||
local c = math.min(tc.count, tc.stack_max)
|
||||
table.insert(outlist, ItemStack({
|
||||
name = tc.name,
|
||||
wear = tc.wear,
|
||||
metadata = tc.metadata,
|
||||
count = c,
|
||||
}))
|
||||
tc.count = tc.count - c
|
||||
end
|
||||
end
|
||||
if #outlist > #inlist then return end
|
||||
while #outlist < #inlist do
|
||||
table.insert(outlist, ItemStack(nil))
|
||||
end
|
||||
inv:set_list("main", outlist)
|
||||
end
|
||||
|
||||
local function get_receive_fields(name, data)
|
||||
local lname = name:lower()
|
||||
return function(pos, formname, fields, sender)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local page = "main"
|
||||
if fields.sort or (data.autosort and fields.quit and meta:get_int("autosort") == 1) then
|
||||
sort_inventory(meta:get_inventory())
|
||||
end
|
||||
if fields.edit_infotext then
|
||||
page = "edit_infotext"
|
||||
end
|
||||
if fields.autosort_to_1 then meta:set_int("autosort", 1) end
|
||||
if fields.autosort_to_0 then meta:set_int("autosort", 0) end
|
||||
if fields.infotext_box then
|
||||
meta:set_string("infotext", fields.infotext_box)
|
||||
end
|
||||
if data.color then
|
||||
-- This sets the node
|
||||
local nn = "technic:"..lname..(data.locked and "_locked" or "").."_chest"
|
||||
check_color_buttons(pos, meta, nn, fields)
|
||||
end
|
||||
meta:get_inventory():set_size("main", data.width * data.height)
|
||||
set_formspec(pos, data, page)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function technic.chests:definition(name, data)
|
||||
local lname = name:lower()
|
||||
name = S(name)
|
||||
local d = {}
|
||||
for k, v in pairs(data) do d[k] = v end
|
||||
data = d
|
||||
|
||||
data.lowidth = 8
|
||||
data.ovwidth = math.max(data.lowidth, data.width)
|
||||
data.hileft = (data.ovwidth - data.width) / 2
|
||||
data.loleft = (data.ovwidth - data.lowidth) / 2
|
||||
if data.color then
|
||||
if data.lowidth + 3 <= data.ovwidth then
|
||||
data.coleft = data.ovwidth - 3
|
||||
if data.loleft + data.lowidth > data.coleft then
|
||||
data.loleft = data.coleft - data.lowidth
|
||||
end
|
||||
else
|
||||
data.loleft = 0
|
||||
data.coleft = data.lowidth
|
||||
data.ovwidth = data.lowidth + 3
|
||||
end
|
||||
end
|
||||
data.lotop = data.height + 2
|
||||
data.ovheight = data.lotop + 4
|
||||
|
||||
local locked_after_place = nil
|
||||
local front = {"technic_"..lname.."_chest_front.png"}
|
||||
data.base_formspec = "size["..data.ovwidth..","..data.ovheight.."]"..
|
||||
"label[0,0;"..S("%s Chest"):format(name).."]"..
|
||||
"list[context;main;"..data.hileft..",1;"..data.width..","..data.height..";]"..
|
||||
"list[current_player;main;"..data.loleft..","..data.lotop..";8,4;]"..
|
||||
"background[-0.19,-0.25;"..(data.ovwidth+0.4)..","..(data.ovheight+0.75)..";technic_chest_form_bg.png]"..
|
||||
"background["..data.hileft..",1;"..data.width..","..data.height..";technic_"..lname.."_chest_inventory.png]"..
|
||||
"background["..data.loleft..","..data.lotop..";8,4;technic_main_inventory.png]"..
|
||||
"listring[]"
|
||||
if data.sort then
|
||||
data.base_formspec = data.base_formspec.."button["..data.hileft..","..(data.height+1.1)..";1,0.8;sort;"..S("Sort").."]"
|
||||
end
|
||||
if data.color then
|
||||
data.base_formspec = data.base_formspec..get_color_buttons(data.coleft, data.lotop)
|
||||
end
|
||||
|
||||
if data.locked then
|
||||
locked_after_place = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name() or "")
|
||||
meta:set_string("infotext",
|
||||
S("%s Locked Chest (owned by %s)")
|
||||
:format(name, meta:get_string("owner")))
|
||||
pipeworks.after_place(pos)
|
||||
end
|
||||
table.insert(front, "technic_"..lname.."_chest_lock_overlay.png")
|
||||
else
|
||||
locked_after_place = pipeworks.after_place
|
||||
end
|
||||
|
||||
local desc
|
||||
if data.locked then
|
||||
desc = S("%s Locked Chest"):format(name)
|
||||
else
|
||||
desc = S("%s Chest"):format(name)
|
||||
end
|
||||
|
||||
local def = {
|
||||
description = desc,
|
||||
tiles = {"technic_"..lname.."_chest_top.png", "technic_"..lname.."_chest_top.png",
|
||||
"technic_"..lname.."_chest_side.png", "technic_"..lname.."_chest_side.png",
|
||||
"technic_"..lname.."_chest_side.png", table.concat(front, "^")},
|
||||
paramtype2 = "facedir",
|
||||
groups = self.groups,
|
||||
tube = self.tube,
|
||||
legacy_facedir_simple = true,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_place_node = locked_after_place,
|
||||
after_dig_node = pipeworks.after_dig,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", S("%s Chest"):format(name))
|
||||
set_formspec(pos, data, "main")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", data.width * data.height)
|
||||
end,
|
||||
can_dig = self.can_dig,
|
||||
on_receive_fields = get_receive_fields(name, data),
|
||||
on_metadata_inventory_move = self.on_inv_move,
|
||||
on_metadata_inventory_put = self.on_inv_put,
|
||||
on_metadata_inventory_take = self.on_inv_take,
|
||||
}
|
||||
if data.locked then
|
||||
def.allow_metadata_inventory_move = self.inv_move
|
||||
def.allow_metadata_inventory_put = self.inv_put
|
||||
def.allow_metadata_inventory_take = self.inv_take
|
||||
end
|
||||
return def
|
||||
end
|
||||
|
||||
function technic.chests:register(name, data)
|
||||
local def = technic.chests:definition(name, data)
|
||||
|
||||
local nn = "technic:"..name:lower()..(data.locked and "_locked" or "").."_chest"
|
||||
minetest.register_node(":"..nn, def)
|
||||
|
||||
if data.color then
|
||||
local mk_front
|
||||
if string.find(def.tiles[6], "%^") then
|
||||
mk_front = function (overlay) return def.tiles[6]:gsub("%^", "^"..overlay.."^") end
|
||||
else
|
||||
mk_front = function (overlay) return def.tiles[6].."^"..overlay end
|
||||
end
|
||||
for i = 1, 15 do
|
||||
local postfix = colorid_to_postfix(i)
|
||||
local colordef = {}
|
||||
for k, v in pairs(def) do
|
||||
colordef[k] = v
|
||||
end
|
||||
colordef.drop = nn
|
||||
colordef.groups = self.groups_noinv
|
||||
colordef.tiles = { def.tiles[1], def.tiles[2], def.tiles[3], def.tiles[4], def.tiles[5], mk_front("technic_chest_overlay"..postfix..".png") }
|
||||
minetest.register_node(":"..nn..postfix, colordef)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
if minetest.get_modpath("moreores") then
|
||||
minetest.register_craft({
|
||||
output = 'technic:silver_chest',
|
||||
recipe = {
|
||||
{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
|
||||
{'moreores:silver_ingot','technic:copper_chest','moreores:silver_ingot'},
|
||||
{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:silver_locked_chest',
|
||||
recipe = {
|
||||
{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
|
||||
{'moreores:silver_ingot','technic:copper_locked_chest','moreores:silver_ingot'},
|
||||
{'moreores:silver_ingot','moreores:silver_ingot','moreores:silver_ingot'},
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'technic:silver_locked_chest',
|
||||
recipe = {
|
||||
{'default:steel_ingot'},
|
||||
{'technic:silver_chest'},
|
||||
}
|
||||
})
|
||||
|
||||
technic.chests:register("Silver", {
|
||||
width = 12,
|
||||
height = 6,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = true,
|
||||
color = false,
|
||||
locked = false,
|
||||
})
|
||||
|
||||
technic.chests:register("Silver", {
|
||||
width = 12,
|
||||
height = 6,
|
||||
sort = true,
|
||||
autosort = true,
|
||||
infotext = true,
|
||||
color = false,
|
||||
locked = true,
|
||||
})
|
||||
|
After Width: | Height: | Size: 233 B |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 248 B |
After Width: | Height: | Size: 257 B |
After Width: | Height: | Size: 288 B |
After Width: | Height: | Size: 259 B |
After Width: | Height: | Size: 269 B |
After Width: | Height: | Size: 292 B |
After Width: | Height: | Size: 278 B |
After Width: | Height: | Size: 299 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 304 B |
After Width: | Height: | Size: 262 B |
After Width: | Height: | Size: 287 B |
After Width: | Height: | Size: 253 B |
After Width: | Height: | Size: 274 B |
After Width: | Height: | Size: 147 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 140 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 607 B |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 160 B |
After Width: | Height: | Size: 570 B |
After Width: | Height: | Size: 557 B |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 687 B |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 204 B |
After Width: | Height: | Size: 743 B |
After Width: | Height: | Size: 729 B |
After Width: | Height: | Size: 750 B |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 153 B |
After Width: | Height: | Size: 746 B |
After Width: | Height: | Size: 860 B |
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 770 B |
After Width: | Height: | Size: 9.7 KiB |
After Width: | Height: | Size: 155 B |
After Width: | Height: | Size: 756 B |
After Width: | Height: | Size: 775 B |
After Width: | Height: | Size: 294 B |
After Width: | Height: | Size: 851 B |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 192 B |
After Width: | Height: | Size: 810 B |
After Width: | Height: | Size: 798 B |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |