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 |