first commit
This commit is contained in:
commit
b175488dfe
13 changed files with 680 additions and 0 deletions
119
init.lua
Normal file
119
init.lua
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
-- Public Inventory Plus Mod for Minetest
|
||||
-- Created 2022 by activivan
|
||||
|
||||
-- Standard-Setup
|
||||
local storage = minetest.get_mod_storage()
|
||||
local S = minetest.get_translator(minetest.get_current_modname())
|
||||
local conf = minetest.settings
|
||||
local cols = tonumber(conf:get("pubinv_cols")) or 9
|
||||
local rows = tonumber(conf:get("pubinv_rows")) or 6
|
||||
|
||||
-- Globale Variable für API und Integration!
|
||||
pubinv = {}
|
||||
|
||||
-- Funktionen zum Speichern/Laden
|
||||
local function save(inv_list)
|
||||
local data = {}
|
||||
for _, item in ipairs(inv_list) do
|
||||
table.insert(data, item:to_string())
|
||||
end
|
||||
storage:set_string("main", minetest.serialize(data))
|
||||
end
|
||||
|
||||
-- Detached Inventory erzeugen
|
||||
local pi = minetest.create_detached_inventory("pi", {
|
||||
on_put = function(inv)
|
||||
save(inv:get_list("main"))
|
||||
end,
|
||||
on_take = function(inv)
|
||||
save(inv:get_list("main"))
|
||||
end,
|
||||
})
|
||||
pi:set_size("main", (cols * rows))
|
||||
|
||||
-- Ladefunktion
|
||||
local function load()
|
||||
local data = storage:get("main")
|
||||
if data then
|
||||
local inv_list = minetest.deserialize(data)
|
||||
pi:set_list("main", inv_list)
|
||||
end
|
||||
end
|
||||
load()
|
||||
|
||||
-- Formspez-Generierung
|
||||
pubinv.formspec = function(name)
|
||||
local inv_size = (minetest.get_inventory({ type="player", name=name })):get_size("main")
|
||||
local inv_rows = math.ceil(inv_size / cols)
|
||||
local size = "size["..cols..","..(rows + 1.25 + inv_rows)..";]"
|
||||
return (size..
|
||||
"label[0,0;"..S("Public inventory").."]"..
|
||||
"list[detached:pi;main;0,0.5;"..cols..","..rows..";]"..
|
||||
(mcl_formspec and mcl_formspec.get_itemslot_bg(0, 0.5, cols, rows) or "")..
|
||||
"label[0,"..(rows + 0.75)..";"..S("Your inventory").."]"..
|
||||
"list[current_player;main;0,"..(rows + 1.25)..";"..((inv_size > cols) and cols or inv_size)..","..((inv_size > cols) and inv_rows or 1)..";]"..
|
||||
(mcl_formspec and
|
||||
mcl_formspec.get_itemslot_bg(0, (rows + 1.25), ((inv_size > cols) and cols or inv_size), ((inv_size > cols) and (inv_rows - 1) or 1))..
|
||||
((inv_size > cols) and mcl_formspec.get_itemslot_bg(0, (rows + inv_rows + 0.25), (inv_size - (cols * (inv_rows - 1))), 1) or "")
|
||||
or ""
|
||||
)..
|
||||
"listring[]"
|
||||
), size
|
||||
end
|
||||
|
||||
-- Formspez anzeigen
|
||||
pubinv.open = function(name)
|
||||
local formspec, _ = pubinv.formspec(name)
|
||||
minetest.show_formspec(name, "pubinv:pi", formspec)
|
||||
return true, ""
|
||||
end
|
||||
|
||||
-- Chatbefehl
|
||||
minetest.register_chatcommand("pi", {
|
||||
params = "",
|
||||
description = S("Opens the public inventory"),
|
||||
func = function(name)
|
||||
pubinv.open(name)
|
||||
end,
|
||||
})
|
||||
|
||||
-- unified_inventory Button
|
||||
if unified_inventory then
|
||||
unified_inventory.register_button("pubinv", {
|
||||
type = "image",
|
||||
image = "ui_icon_pubinv.png",
|
||||
tooltip = S("Public inventory"),
|
||||
hide_lite = false,
|
||||
action = function(player)
|
||||
pubinv.open(player:get_player_name())
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
-- sfinv Integration
|
||||
if minetest.global_exists("sfinv") then
|
||||
sfinv.register_page("pubinv", {
|
||||
title = S("Public inventory"),
|
||||
get = function(self, player, context)
|
||||
local formspec, size = pubinv.formspec(player:get_player_name())
|
||||
return sfinv.make_formspec(player, context, formspec, false, size)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
-- Public inventory i3-Tab hinzufügen - immer, egal ob i3 existiert!
|
||||
minetest.after(0, function()
|
||||
if minetest.global_exists("i3_extrabuttons") then
|
||||
i3_extrabuttons.new_tab("pubinv", {
|
||||
description = "Öffentliches Inventar",
|
||||
-- priv = "",
|
||||
formspec = function(player, data, fs) end,
|
||||
fields = function(player, data, fields)
|
||||
i3.set_tab(player, "inventory")
|
||||
|
||||
-- Hier der Aufruf des tatsächlichen Mods
|
||||
pubinv.open(player:get_player_name())
|
||||
end,
|
||||
})
|
||||
end
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue