slim
This commit is contained in:
parent
e11d2822c9
commit
2bc26826c7
250
bags.lua
250
bags.lua
@ -1,250 +0,0 @@
|
||||
--[[
|
||||
Bags for Minetest
|
||||
|
||||
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
|
||||
License: GPLv3
|
||||
--]]
|
||||
|
||||
local S = minetest.get_translator("unified_inventory")
|
||||
local F = minetest.formspec_escape
|
||||
local ui = unified_inventory
|
||||
|
||||
ui.register_page("bags", {
|
||||
get_formspec = function(player)
|
||||
local player_name = player:get_player_name()
|
||||
return { formspec = table.concat({
|
||||
ui.style_full.standard_inv_bg,
|
||||
ui.single_slot(0.925, 1.5),
|
||||
ui.single_slot(3.425, 1.5),
|
||||
ui.single_slot(5.925, 1.5),
|
||||
ui.single_slot(8.425, 1.5),
|
||||
"label["..ui.style_full.form_header_x..","..ui.style_full.form_header_y..";" .. F(S("Bags")) .. "]",
|
||||
"button[0.6125,2.75;1.875,0.75;bag1;" .. F(S("Bag @1", 1)) .. "]",
|
||||
"button[3.1125,2.75;1.875,0.75;bag2;" .. F(S("Bag @1", 2)) .. "]",
|
||||
"button[5.6125,2.75;1.875,0.75;bag3;" .. F(S("Bag @1", 3)) .. "]",
|
||||
"button[8.1125,2.75;1.875,0.75;bag4;" .. F(S("Bag @1", 4)) .. "]",
|
||||
"listcolors[#00000000;#00000000]",
|
||||
"list[detached:" .. F(player_name) .. "_bags;bag1;1.075,1.65;1,1;]",
|
||||
"list[detached:" .. F(player_name) .. "_bags;bag2;3.575,1.65;1,1;]",
|
||||
"list[detached:" .. F(player_name) .. "_bags;bag3;6.075,1.65;1,1;]",
|
||||
"list[detached:" .. F(player_name) .. "_bags;bag4;8.575,1.65;1,1;]"
|
||||
}) }
|
||||
end,
|
||||
})
|
||||
|
||||
ui.register_button("bags", {
|
||||
type = "image",
|
||||
image = "ui_bags_icon.png",
|
||||
tooltip = S("Bags"),
|
||||
hide_lite=true
|
||||
})
|
||||
|
||||
local function get_player_bag_stack(player, i)
|
||||
return minetest.get_inventory({
|
||||
type = "detached",
|
||||
name = player:get_player_name() .. "_bags"
|
||||
}):get_stack("bag" .. i, 1)
|
||||
end
|
||||
|
||||
for bag_i = 1, 4 do
|
||||
ui.register_page("bag" .. bag_i, {
|
||||
get_formspec = function(player)
|
||||
local stack = get_player_bag_stack(player, bag_i)
|
||||
local image = stack:get_definition().inventory_image
|
||||
local slots = stack:get_definition().groups.bagslots
|
||||
|
||||
local formspec = {
|
||||
ui.style_full.standard_inv_bg,
|
||||
ui.make_inv_img_grid(0.3, 1.5, 8, slots/8),
|
||||
"image[9.2,0.4;1,1;" .. image .. "]",
|
||||
"label[0.3,0.65;" .. F(S("Bag @1", bag_i)) .. "]",
|
||||
"listcolors[#00000000;#00000000]",
|
||||
"listring[current_player;main]",
|
||||
string.format("list[current_player;bag%icontents;%f,%f;8,3;]",
|
||||
bag_i, 0.3 + ui.list_img_offset, 1.5 + ui.list_img_offset),
|
||||
"listring[current_name;bag" .. bag_i .. "contents]",
|
||||
}
|
||||
local n = #formspec + 1
|
||||
|
||||
local player_name = player:get_player_name() -- For if statement.
|
||||
if ui.trash_enabled
|
||||
or ui.is_creative(player_name)
|
||||
or minetest.get_player_privs(player_name).give then
|
||||
formspec[n] = ui.make_trash_slot(7.8, 0.25)
|
||||
n = n + 1
|
||||
end
|
||||
local inv = player:get_inventory()
|
||||
for i = 1, 4 do
|
||||
local def = get_player_bag_stack(player, i):get_definition()
|
||||
if def.groups.bagslots then
|
||||
local list_name = "bag" .. i .. "contents"
|
||||
local size = inv:get_size(list_name)
|
||||
local used = 0
|
||||
for si = 1, size do
|
||||
local stk = inv:get_stack(list_name, si)
|
||||
if not stk:is_empty() then
|
||||
used = used + 1
|
||||
end
|
||||
end
|
||||
local img = def.inventory_image
|
||||
local label = F(S("Bag @1", i)) .. "\n" .. used .. "/" .. size
|
||||
formspec[n] = string.format("image_button[%f,0.4;1,1;%s;bag%i;%s]",
|
||||
(i + 1.35)*1.25, img, i, label)
|
||||
n = n + 1
|
||||
end
|
||||
end
|
||||
return { formspec = table.concat(formspec) }
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "" then
|
||||
return
|
||||
end
|
||||
for i = 1, 4 do
|
||||
if fields["bag" .. i] then
|
||||
local stack = get_player_bag_stack(player, i)
|
||||
if not stack:get_definition().groups.bagslots then
|
||||
return
|
||||
end
|
||||
ui.set_inventory_formspec(player, "bag" .. i)
|
||||
return
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
local function save_bags_metadata(player, bags_inv)
|
||||
local is_empty = true
|
||||
local bags = {}
|
||||
for i = 1, 4 do
|
||||
local bag = "bag" .. i
|
||||
if not bags_inv:is_empty(bag) then
|
||||
-- Stack limit is 1, otherwise use stack:to_string()
|
||||
bags[i] = bags_inv:get_stack(bag, 1):get_name()
|
||||
is_empty = false
|
||||
end
|
||||
end
|
||||
local meta = player:get_meta()
|
||||
if is_empty then
|
||||
meta:set_string("unified_inventory:bags", nil)
|
||||
else
|
||||
meta:set_string("unified_inventory:bags",
|
||||
minetest.serialize(bags))
|
||||
end
|
||||
end
|
||||
|
||||
local function load_bags_metadata(player, bags_inv)
|
||||
local player_inv = player:get_inventory()
|
||||
local meta = player:get_meta()
|
||||
local bags_meta = meta:get("unified_inventory:bags")
|
||||
local bags = bags_meta and minetest.deserialize(bags_meta) or {}
|
||||
local dirty_meta = false
|
||||
if not bags_meta then
|
||||
-- Backwards compatiblity
|
||||
for i = 1, 4 do
|
||||
local bag = "bag" .. i
|
||||
if not player_inv:is_empty(bag) then
|
||||
-- Stack limit is 1, otherwise use stack:to_string()
|
||||
bags[i] = player_inv:get_stack(bag, 1):get_name()
|
||||
dirty_meta = true
|
||||
end
|
||||
end
|
||||
end
|
||||
-- Fill detached slots
|
||||
for i = 1, 4 do
|
||||
local bag = "bag" .. i
|
||||
bags_inv:set_size(bag, 1)
|
||||
bags_inv:set_stack(bag, 1, bags[i] or "")
|
||||
end
|
||||
|
||||
if dirty_meta then
|
||||
-- Requires detached inventory to be set up
|
||||
save_bags_metadata(player, bags_inv)
|
||||
end
|
||||
|
||||
-- Clean up deprecated garbage after saving
|
||||
for i = 1, 4 do
|
||||
local bag = "bag" .. i
|
||||
player_inv:set_size(bag, 0)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
local player_name = player:get_player_name()
|
||||
local bags_inv = minetest.create_detached_inventory(player_name .. "_bags",{
|
||||
on_put = function(inv, listname, index, stack, player)
|
||||
player:get_inventory():set_size(listname .. "contents",
|
||||
stack:get_definition().groups.bagslots)
|
||||
save_bags_metadata(player, inv)
|
||||
end,
|
||||
allow_put = function(inv, listname, index, stack, player)
|
||||
local new_slots = stack:get_definition().groups.bagslots
|
||||
if not new_slots then
|
||||
return 0
|
||||
end
|
||||
local player_inv = player:get_inventory()
|
||||
local old_slots = player_inv:get_size(listname .. "contents")
|
||||
|
||||
if new_slots >= old_slots then
|
||||
return 1
|
||||
end
|
||||
|
||||
-- using a smaller bag, make sure it fits
|
||||
local old_list = player_inv:get_list(listname .. "contents")
|
||||
local new_list = {}
|
||||
local slots_used = 0
|
||||
local use_new_list = false
|
||||
|
||||
for i, v in ipairs(old_list) do
|
||||
if v and not v:is_empty() then
|
||||
slots_used = slots_used + 1
|
||||
use_new_list = i > new_slots
|
||||
new_list[slots_used] = v
|
||||
end
|
||||
end
|
||||
if new_slots >= slots_used then
|
||||
if use_new_list then
|
||||
player_inv:set_list(listname .. "contents", new_list)
|
||||
end
|
||||
return 1
|
||||
end
|
||||
-- New bag is smaller: Disallow inserting
|
||||
return 0
|
||||
end,
|
||||
allow_take = function(inv, listname, index, stack, player)
|
||||
if player:get_inventory():is_empty(listname .. "contents") then
|
||||
return stack:get_count()
|
||||
end
|
||||
return 0
|
||||
end,
|
||||
on_take = function(inv, listname, index, stack, player)
|
||||
player:get_inventory():set_size(listname .. "contents", 0)
|
||||
save_bags_metadata(player, inv)
|
||||
end,
|
||||
allow_move = function()
|
||||
return 0
|
||||
end,
|
||||
}, player_name)
|
||||
|
||||
load_bags_metadata(player, bags_inv)
|
||||
end)
|
||||
|
||||
-- register bag tools
|
||||
minetest.register_tool("unified_inventory:bag_small", {
|
||||
description = S("Small Bag"),
|
||||
inventory_image = "bags_small.png",
|
||||
groups = {bagslots=8},
|
||||
})
|
||||
|
||||
minetest.register_tool("unified_inventory:bag_medium", {
|
||||
description = S("Medium Bag"),
|
||||
inventory_image = "bags_medium.png",
|
||||
groups = {bagslots=16},
|
||||
})
|
||||
|
||||
minetest.register_tool("unified_inventory:bag_large", {
|
||||
description = S("Large Bag"),
|
||||
inventory_image = "bags_large.png",
|
||||
groups = {bagslots=24},
|
||||
})
|
@ -128,24 +128,12 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
(#unified_inventory.filtered_items_list[player_name] - 1)
|
||||
/ (ui_peruser.items_per_page) + 1)
|
||||
|
||||
if fields.start_list then
|
||||
start_i = 1
|
||||
end
|
||||
if fields.rewind1 then
|
||||
start_i = start_i - 1
|
||||
end
|
||||
if fields.forward1 then
|
||||
start_i = start_i + 1
|
||||
end
|
||||
if fields.rewind3 then
|
||||
start_i = start_i - 3
|
||||
end
|
||||
if fields.forward3 then
|
||||
start_i = start_i + 3
|
||||
end
|
||||
if fields.end_list then
|
||||
start_i = pagemax
|
||||
end
|
||||
if start_i < 1 then
|
||||
start_i = 1
|
||||
end
|
||||
|
150
category.lua
150
category.lua
@ -1,150 +0,0 @@
|
||||
local S = minetest.get_translator("unified_inventory")
|
||||
|
||||
unified_inventory.registered_categories = {}
|
||||
unified_inventory.registered_category_items = {}
|
||||
unified_inventory.category_list = {}
|
||||
|
||||
local function char_to_sort_index(char_code)
|
||||
if char_code <= 32 then
|
||||
-- Command codes, no thanks
|
||||
return 0
|
||||
end
|
||||
if char_code <= 64 then
|
||||
-- Sorts numbers, and some punctuation, after letters
|
||||
return char_code
|
||||
end
|
||||
if char_code >= 158 then
|
||||
-- Out of sortable range
|
||||
return 0
|
||||
end
|
||||
if char_code > 122 then
|
||||
-- Avoids overlap with {, |, } and ~
|
||||
return char_code - 58
|
||||
end
|
||||
if char_code > 96 then
|
||||
-- Normalises lowercase with uppercase
|
||||
return char_code - 96
|
||||
end
|
||||
return char_code - 64
|
||||
end
|
||||
|
||||
local function string_to_sort_index(str)
|
||||
local max_chars = 5
|
||||
local power = 100
|
||||
local index = 0
|
||||
for i=1,math.min(#str, max_chars) do
|
||||
index = index + (char_to_sort_index(string.byte(str, i))/(power^i))
|
||||
end
|
||||
return index
|
||||
end
|
||||
|
||||
function update_category_list()
|
||||
local category_list = {}
|
||||
table.insert(category_list, {
|
||||
name = "all",
|
||||
label = S("All Items"),
|
||||
symbol = "ui_category_all.png",
|
||||
index = -2,
|
||||
})
|
||||
table.insert(category_list, {
|
||||
name = "uncategorized",
|
||||
label = S("Misc. Items"),
|
||||
symbol = "ui_category_none.png",
|
||||
index = -1,
|
||||
})
|
||||
for category, def in pairs(unified_inventory.registered_categories) do
|
||||
table.insert(category_list, {
|
||||
name = category,
|
||||
label = def.label or category,
|
||||
symbol = def.symbol,
|
||||
index = def.index or -- sortby defined order
|
||||
string_to_sort_index(category) -- or do a rudimentary alphabetical sort
|
||||
})
|
||||
end
|
||||
table.sort(category_list, function (a,b)
|
||||
return a.index < b.index
|
||||
end)
|
||||
unified_inventory.category_list = category_list
|
||||
end
|
||||
|
||||
local function ensure_category_exists(category_name)
|
||||
if not unified_inventory.registered_categories[category_name] then
|
||||
unified_inventory.registered_categories[category_name] = {
|
||||
symbol = "unknown_item.png",
|
||||
label = category_name
|
||||
}
|
||||
end
|
||||
if not unified_inventory.registered_category_items[category_name] then
|
||||
unified_inventory.registered_category_items[category_name] = {}
|
||||
end
|
||||
end
|
||||
|
||||
function unified_inventory.register_category(category_name, config)
|
||||
ensure_category_exists(category_name)
|
||||
config = config or {}
|
||||
if config.symbol then
|
||||
unified_inventory.set_category_symbol(category_name, config.symbol)
|
||||
end
|
||||
if config.label then
|
||||
unified_inventory.set_category_label(category_name, config.label)
|
||||
end
|
||||
if config.index then
|
||||
unified_inventory.set_category_index(category_name, config.index)
|
||||
end
|
||||
if config.items then
|
||||
unified_inventory.add_category_items(category_name, config.items)
|
||||
end
|
||||
update_category_list()
|
||||
end
|
||||
function unified_inventory.set_category_symbol(category_name, symbol)
|
||||
ensure_category_exists(category_name)
|
||||
unified_inventory.registered_categories[category_name].symbol = symbol
|
||||
update_category_list()
|
||||
end
|
||||
function unified_inventory.set_category_label(category_name, label)
|
||||
ensure_category_exists(category_name)
|
||||
unified_inventory.registered_categories[category_name].label = label
|
||||
update_category_list()
|
||||
end
|
||||
function unified_inventory.set_category_index(category_name, index)
|
||||
ensure_category_exists(category_name)
|
||||
unified_inventory.registered_categories[category_name].index = index
|
||||
update_category_list()
|
||||
end
|
||||
function unified_inventory.add_category_item(category_name, item)
|
||||
ensure_category_exists(category_name)
|
||||
unified_inventory.registered_category_items[category_name][item] = true
|
||||
end
|
||||
function unified_inventory.add_category_items(category_name, items)
|
||||
for _,item in ipairs(items) do
|
||||
unified_inventory.add_category_item(category_name, item)
|
||||
end
|
||||
end
|
||||
|
||||
function unified_inventory.remove_category_item(category_name, item)
|
||||
unified_inventory.registered_category_items[category_name][item] = nil
|
||||
end
|
||||
function unified_inventory.remove_category(category_name)
|
||||
unified_inventory.registered_categories[category_name] = nil
|
||||
unified_inventory.registered_category_items[category_name] = nil
|
||||
update_category_list()
|
||||
end
|
||||
|
||||
function unified_inventory.find_category(item)
|
||||
-- Returns the first category the item exists in
|
||||
-- Best for checking if an item has any category at all
|
||||
for category, items in pairs(unified_inventory.registered_category_items) do
|
||||
if items[item] then return category end
|
||||
end
|
||||
end
|
||||
function unified_inventory.find_categories(item)
|
||||
-- Returns all the categories the item exists in
|
||||
-- Best for listing all categories
|
||||
local categories = {}
|
||||
for category, items in pairs(unified_inventory.registered_category_items) do
|
||||
if items[item] then
|
||||
table.insert(categories, category)
|
||||
end
|
||||
end
|
||||
return categories
|
||||
end
|
@ -1,704 +0,0 @@
|
||||
local S = minetest.get_translator("unified_inventory")
|
||||
|
||||
unified_inventory.register_category('plants', {
|
||||
symbol = "flowers:tulip",
|
||||
label = S("Plant Life")
|
||||
})
|
||||
unified_inventory.register_category('building', {
|
||||
symbol = "default:brick",
|
||||
label = S("Building Materials")
|
||||
})
|
||||
unified_inventory.register_category('tools', {
|
||||
symbol = "default:pick_diamond",
|
||||
label = S("Tools")
|
||||
})
|
||||
unified_inventory.register_category('minerals', {
|
||||
symbol = "default:iron_lump",
|
||||
label = S("Minerals and Metals")
|
||||
})
|
||||
unified_inventory.register_category('environment', {
|
||||
symbol = "default:dirt_with_grass",
|
||||
label = S("Environment and Worldgen")
|
||||
})
|
||||
unified_inventory.register_category('lighting', {
|
||||
symbol = "default:torch",
|
||||
label = S("Lighting")
|
||||
})
|
||||
|
||||
|
||||
if unified_inventory.automatic_categorization then
|
||||
minetest.register_on_mods_loaded(function()
|
||||
|
||||
-- Add biome nodes to environment category
|
||||
for _,def in pairs(minetest.registered_biomes) do
|
||||
local env_nodes = {
|
||||
def.node_riverbed, def.node_top, def.node_filler, def.node_dust,
|
||||
}
|
||||
for i,node in pairs(env_nodes) do
|
||||
if node then
|
||||
unified_inventory.add_category_item('environment', node)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Add minable ores to minerals and everything else (pockets of stone & sand variations) to environment
|
||||
for _,item in pairs(minetest.registered_ores) do
|
||||
if item.ore_type == "scatter" then
|
||||
local drop = minetest.registered_nodes[item.ore].drop
|
||||
if drop and drop ~= "" then
|
||||
unified_inventory.add_category_item('minerals', item.ore)
|
||||
unified_inventory.add_category_item('minerals', drop)
|
||||
else
|
||||
unified_inventory.add_category_item('environment', item.ore)
|
||||
end
|
||||
else
|
||||
unified_inventory.add_category_item('environment', item.ore)
|
||||
end
|
||||
end
|
||||
|
||||
-- Add items by item definition
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
local group = def.groups or {}
|
||||
if not group.not_in_creative_inventory then
|
||||
if group.stair or
|
||||
group.slab or
|
||||
group.wall or
|
||||
group.fence then
|
||||
unified_inventory.add_category_item('building', name)
|
||||
elseif group.flora or
|
||||
group.flower or
|
||||
group.seed or
|
||||
group.leaves or
|
||||
group.sapling or
|
||||
group.tree then
|
||||
unified_inventory.add_category_item('plants', name)
|
||||
elseif def.type == 'tool' then
|
||||
unified_inventory.add_category_item('tools', name)
|
||||
elseif def.liquidtype == 'source' then
|
||||
unified_inventory.add_category_item('environment', name)
|
||||
elseif def.light_source and def.light_source > 0 then
|
||||
unified_inventory.add_category_item('lighting', name)
|
||||
elseif group.door or
|
||||
minetest.global_exists("doors") and (
|
||||
doors.registered_doors and doors.registered_doors[name..'_a'] or
|
||||
doors.registered_trapdoors and doors.registered_trapdoors[name]
|
||||
) then
|
||||
unified_inventory.add_category_item('building', name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- [[
|
||||
unified_inventory.add_category_items('plants', {
|
||||
"default:dry_grass_5",
|
||||
"default:acacia_sapling",
|
||||
"default:blueberry_bush_sapling",
|
||||
"default:grass_2",
|
||||
"default:pine_bush_stem",
|
||||
"default:leaves",
|
||||
"default:pine_needles",
|
||||
"default:cactus",
|
||||
"default:junglegrass",
|
||||
"default:pine_sapling",
|
||||
"default:sapling",
|
||||
"default:bush_stem",
|
||||
"default:dry_grass_2",
|
||||
"default:fern_1",
|
||||
"default:grass_3",
|
||||
"default:marram_grass_1",
|
||||
"default:pine_tree",
|
||||
"default:dry_grass_3",
|
||||
"default:dry_shrub",
|
||||
"default:grass_4",
|
||||
"default:marram_grass_2",
|
||||
"default:jungleleaves",
|
||||
"default:apple",
|
||||
"default:tree",
|
||||
"default:aspen_tree",
|
||||
"default:bush_sapling",
|
||||
"default:grass_5",
|
||||
"default:blueberry_bush_leaves_with_berries",
|
||||
"default:acacia_bush_sapling",
|
||||
"default:grass_1",
|
||||
"default:aspen_leaves",
|
||||
"default:marram_grass_3",
|
||||
"default:large_cactus_seedling",
|
||||
"default:junglesapling",
|
||||
"default:dry_grass_4",
|
||||
"default:acacia_bush_stem",
|
||||
"default:papyrus",
|
||||
"default:pine_bush_needles",
|
||||
"default:bush_leaves",
|
||||
"default:fern_3",
|
||||
"default:aspen_sapling",
|
||||
"default:acacia_tree",
|
||||
"default:apple_mark",
|
||||
"default:acacia_leaves",
|
||||
"default:jungletree",
|
||||
"default:dry_grass_1",
|
||||
"default:acacia_bush_leaves",
|
||||
"default:emergent_jungle_sapling",
|
||||
"default:fern_2",
|
||||
"default:blueberries",
|
||||
"default:sand_with_kelp",
|
||||
"default:blueberry_bush_leaves",
|
||||
"default:pine_bush_sapling",
|
||||
|
||||
"farming:cotton",
|
||||
"farming:cotton_1",
|
||||
"farming:cotton_2",
|
||||
"farming:cotton_3",
|
||||
"farming:cotton_4",
|
||||
"farming:cotton_5",
|
||||
"farming:cotton_6",
|
||||
"farming:cotton_7",
|
||||
"farming:cotton_8",
|
||||
"farming:cotton_wild",
|
||||
"farming:seed_cotton",
|
||||
"farming:seed_wheat",
|
||||
"farming:straw",
|
||||
"farming:wheat",
|
||||
"farming:wheat_1",
|
||||
"farming:wheat_2",
|
||||
"farming:wheat_3",
|
||||
"farming:wheat_4",
|
||||
"farming:wheat_5",
|
||||
"farming:wheat_6",
|
||||
"farming:wheat_7",
|
||||
"farming:wheat_8",
|
||||
|
||||
"flowers:chrysanthemum_green",
|
||||
"flowers:dandelion_white",
|
||||
"flowers:dandelion_yellow",
|
||||
"flowers:geranium",
|
||||
"flowers:mushroom_brown",
|
||||
"flowers:mushroom_red",
|
||||
"flowers:rose",
|
||||
"flowers:tulip",
|
||||
"flowers:tulip_black",
|
||||
"flowers:viola",
|
||||
"flowers:waterlily",
|
||||
"flowers:waterlily_waving",
|
||||
})
|
||||
|
||||
unified_inventory.add_category_items('tools', {
|
||||
"default:sword_diamond",
|
||||
"default:axe_diamond",
|
||||
"default:shovel_diamond",
|
||||
"default:axe_steel",
|
||||
"default:shovel_mese",
|
||||
"default:sword_wood",
|
||||
"default:pick_bronze",
|
||||
"default:axe_stone",
|
||||
"default:sword_stone",
|
||||
"default:pick_stone",
|
||||
"default:shovel_stone",
|
||||
"default:sword_mese",
|
||||
"default:shovel_bronze",
|
||||
"default:sword_bronze",
|
||||
"default:axe_bronze",
|
||||
"default:shovel_steel",
|
||||
"default:sword_steel",
|
||||
"default:axe_mese",
|
||||
"default:shovel_wood",
|
||||
"default:pick_mese",
|
||||
"default:axe_wood",
|
||||
"default:pick_diamond",
|
||||
"default:pick_wood",
|
||||
"default:pick_steel",
|
||||
|
||||
"farming:hoe_bronze",
|
||||
"farming:hoe_diamond",
|
||||
"farming:hoe_mese",
|
||||
"farming:hoe_steel",
|
||||
"farming:hoe_stone",
|
||||
"farming:hoe_wood",
|
||||
|
||||
"fire:flint_and_steel",
|
||||
"map:mapping_kit",
|
||||
"screwdriver:screwdriver",
|
||||
|
||||
"fireflies:bug_net",
|
||||
"bucket:bucket_empty",
|
||||
|
||||
"binoculars:binoculars",
|
||||
"default:skeleton_key",
|
||||
})
|
||||
|
||||
unified_inventory.add_category_items('minerals', {
|
||||
"default:stone_with_copper",
|
||||
"default:stone_with_gold",
|
||||
"default:stone_with_iron",
|
||||
"default:copper_ingot",
|
||||
"default:copper_lump",
|
||||
"default:gold_lump",
|
||||
"default:diamondblock",
|
||||
"default:stone_with_diamond",
|
||||
"default:stone_with_mese",
|
||||
"default:steel_ingot",
|
||||
"default:gold_ingot",
|
||||
"default:iron_lump",
|
||||
"default:tinblock",
|
||||
"default:tin_lump",
|
||||
"default:stone_with_tin",
|
||||
"default:mese_crystal",
|
||||
"default:diamond",
|
||||
"default:bronze_ingot",
|
||||
"default:mese",
|
||||
"default:mese_crystal_fragment",
|
||||
"default:copperblock",
|
||||
"default:stone_with_coal",
|
||||
"default:steelblock",
|
||||
"default:tin_ingot",
|
||||
"default:coalblock",
|
||||
"default:coal_lump",
|
||||
"default:bronzeblock",
|
||||
"default:goldblock",
|
||||
|
||||
"stairs:slab_bronzeblock",
|
||||
"stairs:slab_copperblock",
|
||||
"stairs:slab_steelblock",
|
||||
"stairs:slab_tinblock",
|
||||
"stairs:stair_bronzeblock",
|
||||
"stairs:stair_copperblock",
|
||||
"stairs:stair_inner_bronzeblock",
|
||||
"stairs:stair_inner_copperblock",
|
||||
"stairs:stair_inner_steelblock",
|
||||
"stairs:stair_inner_tinblock",
|
||||
"stairs:stair_outer_bronzeblock",
|
||||
"stairs:stair_outer_copperblock",
|
||||
"stairs:stair_outer_steelblock",
|
||||
"stairs:stair_outer_tinblock",
|
||||
"stairs:stair_steelblock",
|
||||
"stairs:stair_tinblock",
|
||||
})
|
||||
|
||||
unified_inventory.add_category_items('building', {
|
||||
"default:fence_rail_aspen_wood",
|
||||
"default:fence_rail_acacia_wood",
|
||||
"default:fence_junglewood",
|
||||
"default:fence_rail_junglewood",
|
||||
"default:fence_aspen_wood",
|
||||
"default:fence_pine_wood",
|
||||
"default:fence_rail_wood",
|
||||
"default:fence_rail_pine_wood",
|
||||
"default:fence_acacia_wood",
|
||||
"default:junglewood",
|
||||
"default:acacia_wood",
|
||||
"default:aspen_wood",
|
||||
"default:fence_wood",
|
||||
"default:pine_wood",
|
||||
"default:silver_sandstone",
|
||||
"default:desert_sandstone",
|
||||
"default:sandstone_block",
|
||||
"default:desert_sandstone_brick",
|
||||
"default:stone_block",
|
||||
"default:stonebrick",
|
||||
"default:obsidian_glass",
|
||||
"default:desert_sandstone_block",
|
||||
"default:silver_sandstone_brick",
|
||||
"default:brick",
|
||||
"default:obsidianbrick",
|
||||
"default:sandstonebrick",
|
||||
"default:sandstone",
|
||||
"default:desert_stone_block",
|
||||
"default:silver_sandstone_block",
|
||||
"default:wood",
|
||||
"default:obsidian_block",
|
||||
"default:glass",
|
||||
"default:clay_brick",
|
||||
"default:desert_stonebrick",
|
||||
"default:desert_cobble",
|
||||
"default:cobble",
|
||||
"default:mossycobble",
|
||||
|
||||
"doors:door_glass",
|
||||
"doors:door_glass_a",
|
||||
"doors:door_glass_b",
|
||||
"doors:door_glass_c",
|
||||
"doors:door_glass_d",
|
||||
"doors:door_obsidian_glass",
|
||||
"doors:door_obsidian_glass_a",
|
||||
"doors:door_obsidian_glass_b",
|
||||
"doors:door_obsidian_glass_c",
|
||||
"doors:door_obsidian_glass_d",
|
||||
"doors:door_steel",
|
||||
"doors:door_steel_a",
|
||||
"doors:door_steel_b",
|
||||
"doors:door_steel_c",
|
||||
"doors:door_steel_d",
|
||||
"doors:door_wood",
|
||||
"doors:door_wood_a",
|
||||
"doors:door_wood_b",
|
||||
"doors:door_wood_c",
|
||||
"doors:door_wood_d",
|
||||
"doors:gate_acacia_wood_closed",
|
||||
"doors:gate_acacia_wood_open",
|
||||
"doors:gate_aspen_wood_closed",
|
||||
"doors:gate_aspen_wood_open",
|
||||
"doors:gate_junglewood_closed",
|
||||
"doors:gate_junglewood_open",
|
||||
"doors:gate_pine_wood_closed",
|
||||
"doors:gate_pine_wood_open",
|
||||
"doors:gate_wood_closed",
|
||||
"doors:gate_wood_open",
|
||||
"doors:hidden",
|
||||
"doors:trapdoor",
|
||||
"doors:trapdoor_open",
|
||||
"doors:trapdoor_steel",
|
||||
"doors:trapdoor_steel_open",
|
||||
|
||||
"stairs:slab_bronzeblock",
|
||||
"stairs:slab_copperblock",
|
||||
"stairs:slab_steelblock",
|
||||
"stairs:slab_tinblock",
|
||||
"stairs:stair_bronzeblock",
|
||||
"stairs:stair_copperblock",
|
||||
"stairs:stair_inner_bronzeblock",
|
||||
"stairs:stair_inner_copperblock",
|
||||
"stairs:stair_inner_steelblock",
|
||||
"stairs:stair_inner_tinblock",
|
||||
"stairs:stair_outer_bronzeblock",
|
||||
"stairs:stair_outer_copperblock",
|
||||
"stairs:stair_outer_steelblock",
|
||||
"stairs:stair_outer_tinblock",
|
||||
"stairs:stair_steelblock",
|
||||
"stairs:stair_tinblock",
|
||||
|
||||
"stairs:slab_acacia_wood",
|
||||
"stairs:slab_aspen_wood",
|
||||
"stairs:slab_brick",
|
||||
"stairs:slab_cobble",
|
||||
"stairs:slab_desert_cobble",
|
||||
"stairs:slab_desert_sandstone",
|
||||
"stairs:slab_desert_sandstone_block",
|
||||
"stairs:slab_desert_sandstone_brick",
|
||||
"stairs:slab_desert_stone",
|
||||
"stairs:slab_desert_stone_block",
|
||||
"stairs:slab_desert_stonebrick",
|
||||
"stairs:slab_glass",
|
||||
"stairs:slab_goldblock",
|
||||
"stairs:slab_ice",
|
||||
"stairs:slab_junglewood",
|
||||
"stairs:slab_mossycobble",
|
||||
"stairs:slab_obsidian",
|
||||
"stairs:slab_obsidian_block",
|
||||
"stairs:slab_obsidian_glass",
|
||||
"stairs:slab_obsidianbrick",
|
||||
"stairs:slab_pine_wood",
|
||||
"stairs:slab_sandstone",
|
||||
"stairs:slab_sandstone_block",
|
||||
"stairs:slab_sandstonebrick",
|
||||
"stairs:slab_silver_sandstone",
|
||||
"stairs:slab_silver_sandstone_block",
|
||||
"stairs:slab_silver_sandstone_brick",
|
||||
"stairs:slab_snowblock",
|
||||
"stairs:slab_stone",
|
||||
"stairs:slab_stone_block",
|
||||
"stairs:slab_stonebrick",
|
||||
"stairs:slab_straw",
|
||||
"stairs:slab_wood",
|
||||
"stairs:stair_acacia_wood",
|
||||
"stairs:stair_aspen_wood",
|
||||
"stairs:stair_brick",
|
||||
"stairs:stair_cobble",
|
||||
"stairs:stair_desert_cobble",
|
||||
"stairs:stair_desert_sandstone",
|
||||
"stairs:stair_desert_sandstone_block",
|
||||
"stairs:stair_desert_sandstone_brick",
|
||||
"stairs:stair_desert_stone",
|
||||
"stairs:stair_desert_stone_block",
|
||||
"stairs:stair_desert_stonebrick",
|
||||
"stairs:stair_glass",
|
||||
"stairs:stair_goldblock",
|
||||
"stairs:stair_ice",
|
||||
"stairs:stair_inner_acacia_wood",
|
||||
"stairs:stair_inner_aspen_wood",
|
||||
"stairs:stair_inner_brick",
|
||||
"stairs:stair_inner_cobble",
|
||||
"stairs:stair_inner_desert_cobble",
|
||||
"stairs:stair_inner_desert_sandstone",
|
||||
"stairs:stair_inner_desert_sandstone_block",
|
||||
"stairs:stair_inner_desert_sandstone_brick",
|
||||
"stairs:stair_inner_desert_stone",
|
||||
"stairs:stair_inner_desert_stone_block",
|
||||
"stairs:stair_inner_desert_stonebrick",
|
||||
"stairs:stair_inner_glass",
|
||||
"stairs:stair_inner_goldblock",
|
||||
"stairs:stair_inner_ice",
|
||||
"stairs:stair_inner_junglewood",
|
||||
"stairs:stair_inner_mossycobble",
|
||||
"stairs:stair_inner_obsidian",
|
||||
"stairs:stair_inner_obsidian_block",
|
||||
"stairs:stair_inner_obsidian_glass",
|
||||
"stairs:stair_inner_obsidianbrick",
|
||||
"stairs:stair_inner_pine_wood",
|
||||
"stairs:stair_inner_sandstone",
|
||||
"stairs:stair_inner_sandstone_block",
|
||||
"stairs:stair_inner_sandstonebrick",
|
||||
"stairs:stair_inner_silver_sandstone",
|
||||
"stairs:stair_inner_silver_sandstone_block",
|
||||
"stairs:stair_inner_silver_sandstone_brick",
|
||||
"stairs:stair_inner_snowblock",
|
||||
"stairs:stair_inner_stone",
|
||||
"stairs:stair_inner_stone_block",
|
||||
"stairs:stair_inner_stonebrick",
|
||||
"stairs:stair_inner_straw",
|
||||
"stairs:stair_inner_wood",
|
||||
"stairs:stair_junglewood",
|
||||
"stairs:stair_mossycobble",
|
||||
"stairs:stair_obsidian",
|
||||
"stairs:stair_obsidian_block",
|
||||
"stairs:stair_obsidian_glass",
|
||||
"stairs:stair_obsidianbrick",
|
||||
"stairs:stair_outer_acacia_wood",
|
||||
"stairs:stair_outer_aspen_wood",
|
||||
"stairs:stair_outer_brick",
|
||||
"stairs:stair_outer_cobble",
|
||||
"stairs:stair_outer_desert_cobble",
|
||||
"stairs:stair_outer_desert_sandstone",
|
||||
"stairs:stair_outer_desert_sandstone_block",
|
||||
"stairs:stair_outer_desert_sandstone_brick",
|
||||
"stairs:stair_outer_desert_stone",
|
||||
"stairs:stair_outer_desert_stone_block",
|
||||
"stairs:stair_outer_desert_stonebrick",
|
||||
"stairs:stair_outer_glass",
|
||||
"stairs:stair_outer_goldblock",
|
||||
"stairs:stair_outer_ice",
|
||||
"stairs:stair_outer_junglewood",
|
||||
"stairs:stair_outer_mossycobble",
|
||||
"stairs:stair_outer_obsidian",
|
||||
"stairs:stair_outer_obsidian_block",
|
||||
"stairs:stair_outer_obsidian_glass",
|
||||
"stairs:stair_outer_obsidianbrick",
|
||||
"stairs:stair_outer_pine_wood",
|
||||
"stairs:stair_outer_sandstone",
|
||||
"stairs:stair_outer_sandstone_block",
|
||||
"stairs:stair_outer_sandstonebrick",
|
||||
"stairs:stair_outer_silver_sandstone",
|
||||
"stairs:stair_outer_silver_sandstone_block",
|
||||
"stairs:stair_outer_silver_sandstone_brick",
|
||||
"stairs:stair_outer_snowblock",
|
||||
"stairs:stair_outer_stone",
|
||||
"stairs:stair_outer_stone_block",
|
||||
"stairs:stair_outer_stonebrick",
|
||||
"stairs:stair_outer_straw",
|
||||
"stairs:stair_outer_wood",
|
||||
"stairs:stair_pine_wood",
|
||||
"stairs:stair_sandstone",
|
||||
"stairs:stair_sandstone_block",
|
||||
"stairs:stair_sandstonebrick",
|
||||
"stairs:stair_silver_sandstone",
|
||||
"stairs:stair_silver_sandstone_block",
|
||||
"stairs:stair_silver_sandstone_brick",
|
||||
"stairs:stair_snowblock",
|
||||
"stairs:stair_stone",
|
||||
"stairs:stair_stone_block",
|
||||
"stairs:stair_stonebrick",
|
||||
"stairs:stair_straw",
|
||||
"stairs:stair_wood",
|
||||
|
||||
"xpanes:bar",
|
||||
"xpanes:bar_flat",
|
||||
"xpanes:door_steel_bar",
|
||||
"xpanes:door_steel_bar_a",
|
||||
"xpanes:door_steel_bar_b",
|
||||
"xpanes:door_steel_bar_c",
|
||||
"xpanes:door_steel_bar_d",
|
||||
"xpanes:obsidian_pane",
|
||||
"xpanes:obsidian_pane_flat",
|
||||
"xpanes:pane",
|
||||
"xpanes:pane_flat",
|
||||
"xpanes:trapdoor_steel_bar",
|
||||
"xpanes:trapdoor_steel_bar_open",
|
||||
|
||||
"walls:cobble",
|
||||
"walls:desertcobble",
|
||||
"walls:mossycobble",
|
||||
})
|
||||
|
||||
unified_inventory.add_category_items('environment', {
|
||||
"air",
|
||||
"default:cave_ice",
|
||||
"default:dirt_with_rainforest_litter",
|
||||
"default:gravel",
|
||||
"default:dry_dirt_with_dry_grass",
|
||||
"default:permafrost",
|
||||
"default:desert_stone",
|
||||
"default:ice",
|
||||
"default:dry_dirt",
|
||||
"default:obsidian",
|
||||
"default:sand",
|
||||
"default:river_water_source",
|
||||
"default:dirt_with_snow",
|
||||
"default:dirt_with_grass",
|
||||
"default:water_flowing",
|
||||
"default:dirt",
|
||||
"default:desert_sand",
|
||||
"default:permafrost_with_moss",
|
||||
"default:dirt_with_coniferous_litter",
|
||||
"default:water_source",
|
||||
"default:dirt_with_dry_grass",
|
||||
"default:river_water_flowing",
|
||||
"default:stone",
|
||||
"default:snow",
|
||||
"default:lava_flowing",
|
||||
"default:lava_source",
|
||||
"default:permafrost_with_stones",
|
||||
"default:dirt_with_grass_footsteps",
|
||||
"default:silver_sand",
|
||||
"default:snowblock",
|
||||
"default:clay",
|
||||
|
||||
"farming:desert_sand_soil",
|
||||
"farming:desert_sand_soil_wet",
|
||||
"farming:dry_soil",
|
||||
"farming:dry_soil_wet",
|
||||
"farming:soil",
|
||||
"farming:soil_wet",
|
||||
})
|
||||
|
||||
unified_inventory.add_category_items('lighting', {
|
||||
"default:mese_post_light_junglewood",
|
||||
"default:torch_ceiling",
|
||||
"default:meselamp",
|
||||
"default:torch",
|
||||
"default:mese_post_light_acacia_wood",
|
||||
"default:mese_post_light",
|
||||
"default:torch_wall",
|
||||
"default:mese_post_light_pine_wood",
|
||||
"default:mese_post_light_aspen_wood"
|
||||
})
|
||||
--]]
|
||||
|
||||
|
||||
--[[ UNCATEGORISED
|
||||
|
||||
"farming:string",
|
||||
|
||||
"beds:bed_bottom",
|
||||
"beds:bed_top",
|
||||
"beds:fancy_bed_bottom",
|
||||
"beds:fancy_bed_top",
|
||||
"boats:boat",
|
||||
"bones:bones",
|
||||
|
||||
"bucket:bucket_lava",
|
||||
"bucket:bucket_river_water",
|
||||
"bucket:bucket_water",
|
||||
|
||||
"butterflies:butterfly_red",
|
||||
"butterflies:butterfly_violet",
|
||||
"butterflies:butterfly_white",
|
||||
"butterflies:hidden_butterfly_red",
|
||||
"butterflies:hidden_butterfly_violet",
|
||||
"butterflies:hidden_butterfly_white",
|
||||
|
||||
"carts:brakerail",
|
||||
"carts:cart",
|
||||
"carts:powerrail",
|
||||
"carts:rail",
|
||||
|
||||
"default:book",
|
||||
"default:book_written",
|
||||
"default:bookshelf",
|
||||
"default:chest",
|
||||
"default:chest_locked",
|
||||
"default:chest_locked_open",
|
||||
"default:chest_open",
|
||||
"default:clay_lump",
|
||||
"default:cloud",
|
||||
"default:coral_brown",
|
||||
"default:coral_cyan",
|
||||
"default:coral_green",
|
||||
"default:coral_orange",
|
||||
"default:coral_pink",
|
||||
"default:coral_skeleton",
|
||||
"default:flint",
|
||||
"default:furnace",
|
||||
"default:furnace_active",
|
||||
"default:key",
|
||||
"default:ladder_steel",
|
||||
"default:ladder_wood",
|
||||
"default:obsidian_shard",
|
||||
"default:paper",
|
||||
"default:sign_wall_steel",
|
||||
"default:sign_wall_wood",
|
||||
"default:stick",
|
||||
|
||||
"fire:basic_flame",
|
||||
"fire:permanent_flame",
|
||||
"fireflies:firefly",
|
||||
"fireflies:firefly_bottle",
|
||||
"fireflies:hidden_firefly",
|
||||
|
||||
"ignore",
|
||||
"unknown",
|
||||
|
||||
"tnt:boom",
|
||||
"tnt:gunpowder",
|
||||
"tnt:gunpowder_burning",
|
||||
"tnt:tnt",
|
||||
"tnt:tnt_burning",
|
||||
"tnt:tnt_stick",
|
||||
|
||||
"vessels:drinking_glass",
|
||||
"vessels:glass_bottle",
|
||||
"vessels:glass_fragments",
|
||||
"vessels:shelf",
|
||||
"vessels:steel_bottle",
|
||||
|
||||
"dye:black",
|
||||
"dye:blue",
|
||||
"dye:brown",
|
||||
"dye:cyan",
|
||||
"dye:dark_green",
|
||||
"dye:dark_grey",
|
||||
"dye:green",
|
||||
"dye:grey",
|
||||
"dye:magenta",
|
||||
"dye:orange",
|
||||
"dye:pink",
|
||||
"dye:red",
|
||||
"dye:violet",
|
||||
"dye:white",
|
||||
"dye:yellow",
|
||||
|
||||
"wool:black",
|
||||
"wool:blue",
|
||||
"wool:brown",
|
||||
"wool:cyan",
|
||||
"wool:dark_green",
|
||||
"wool:dark_grey",
|
||||
"wool:green",
|
||||
"wool:grey",
|
||||
"wool:magenta",
|
||||
"wool:orange",
|
||||
"wool:pink",
|
||||
"wool:red",
|
||||
"wool:violet",
|
||||
"wool:white",
|
||||
"wool:yellow",
|
||||
|
||||
"unified_inventory:bag_large",
|
||||
"unified_inventory:bag_medium",
|
||||
"unified_inventory:bag_small",
|
||||
--]]
|
||||
|
||||
--[[ LIST UNCATEGORIZED AFTER LOAD
|
||||
minetest.register_on_mods_loaded(function()
|
||||
minetest.after(1, function ( )
|
||||
local l = {}
|
||||
for name,_ in pairs(minetest.registered_items) do
|
||||
if not unified_inventory.find_category(name) then
|
||||
-- minetest.log("error", minetest.serialize(minetest.registered_items[name]))
|
||||
table.insert(l, name)
|
||||
end
|
||||
end
|
||||
table.sort(l)
|
||||
minetest.log(table.concat(l, '",'.."\n"..'"'))
|
||||
end)
|
||||
end)
|
||||
--]]
|
16
init.lua
16
init.lua
@ -67,9 +67,9 @@ ui.style_full = {
|
||||
formh = 12.25,
|
||||
-- Item browser size, pos
|
||||
pagecols = 8,
|
||||
pagerows = 9,
|
||||
pagerows = 11,
|
||||
page_x = 10.75,
|
||||
page_y = 2.30,
|
||||
page_y = 0.30,
|
||||
-- Item browser controls
|
||||
page_buttons_x = 11.60,
|
||||
page_buttons_y = 10.15,
|
||||
@ -108,9 +108,9 @@ ui.style_lite = {
|
||||
formh = 9.75,
|
||||
-- Item browser size, pos
|
||||
pagecols = 4,
|
||||
pagerows = 5,
|
||||
pagerows = 7,
|
||||
page_x = 10.5,
|
||||
page_y = 2.15,
|
||||
page_y = 0.15,
|
||||
-- Item browser controls
|
||||
page_buttons_x = 10.5,
|
||||
page_buttons_y = 6.15,
|
||||
@ -179,17 +179,9 @@ if sfinv then
|
||||
end
|
||||
|
||||
dofile(modpath.."/group.lua")
|
||||
dofile(modpath.."/category.lua")
|
||||
dofile(modpath.."/default-categories.lua")
|
||||
dofile(modpath.."/internal.lua")
|
||||
dofile(modpath.."/callbacks.lua")
|
||||
dofile(modpath.."/match_craft.lua")
|
||||
dofile(modpath.."/register.lua")
|
||||
|
||||
if minetest.settings:get_bool("unified_inventory_bags") ~= false then
|
||||
dofile(modpath.."/bags.lua")
|
||||
end
|
||||
|
||||
dofile(modpath.."/item_names.lua")
|
||||
dofile(modpath.."/waypoints.lua")
|
||||
dofile(modpath.."/legacy.lua") -- mod compatibility
|
||||
|
125
internal.lua
125
internal.lua
@ -79,10 +79,10 @@ local function formspec_tab_buttons(player, formspec, style)
|
||||
formspec[n+1] = "tooltip["..F(def.name)..";"..(def.tooltip or "").."]"
|
||||
n = n+2
|
||||
else
|
||||
formspec[n] = string.format("image[%g,%g;%g,%g;%s^[colorize:#808080:alpha]",
|
||||
pos_x, pos_y, style.btn_size, style.btn_size,
|
||||
def.image)
|
||||
n = n+1
|
||||
-- formspec[n] = string.format("image[%g,%g;%g,%g;%s^[colorize:#808080:alpha]",
|
||||
-- pos_x, pos_y, style.btn_size, style.btn_size,
|
||||
-- def.image)
|
||||
-- n = n+1
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -100,60 +100,6 @@ local function formspec_tab_buttons(player, formspec, style)
|
||||
formspec[n+3] = "scrollbaroptions[max=1000;arrows=default]"
|
||||
end
|
||||
end
|
||||
|
||||
-- Add category GUI elements (top right)
|
||||
local function formspec_add_categories(player, formspec, ui_peruser)
|
||||
local player_name = player:get_player_name()
|
||||
local n = #formspec + 1
|
||||
|
||||
local categories_pos = {
|
||||
ui_peruser.page_x,
|
||||
ui_peruser.page_y-ui_peruser.btn_spc-0.5
|
||||
}
|
||||
local categories_scroll_pos = {
|
||||
ui_peruser.page_x,
|
||||
ui_peruser.form_header_y - (ui_peruser.is_lite_mode and 0 or 0.2)
|
||||
}
|
||||
|
||||
formspec[n] = string.format("background9[%f,%f;%f,%f;%s;false;16]",
|
||||
ui_peruser.page_x-0.15, categories_scroll_pos[2],
|
||||
(ui_peruser.btn_spc * ui_peruser.pagecols) + 0.2, 1.4 + (ui_peruser.is_lite_mode and 0 or 0.2),
|
||||
"ui_smallbg_9_sliced.png")
|
||||
n = n + 1
|
||||
|
||||
formspec[n] = string.format("label[%f,%f;%s]",
|
||||
ui_peruser.page_x,
|
||||
ui_peruser.form_header_y + (ui_peruser.is_lite_mode and 0.3 or 0.2), F(S("Category:")))
|
||||
n = n + 1
|
||||
|
||||
local scroll_offset = 0
|
||||
local category_count = #ui.category_list
|
||||
if category_count > ui_peruser.pagecols then
|
||||
scroll_offset = ui.current_category_scroll[player_name]
|
||||
end
|
||||
|
||||
for index, category in ipairs(ui.category_list) do
|
||||
local column = index - scroll_offset
|
||||
if column > 0 and column <= ui_peruser.pagecols then
|
||||
local scale = 0.8
|
||||
if ui.current_category[player_name] == category.name then
|
||||
scale = 1
|
||||
end
|
||||
formspec[n] = formspec_button(ui_peruser, "category_"..category.name, category.symbol, categories_pos, {column-1, 0}, scale, category.label)
|
||||
n = n + 1
|
||||
end
|
||||
end
|
||||
if category_count > ui_peruser.pagecols and scroll_offset > 0 then
|
||||
-- prev
|
||||
formspec[n] = formspec_button(ui_peruser, "prev_category", "ui_left_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 2, 0}, 0.8, S("Scroll categories left"))
|
||||
n = n + 1
|
||||
end
|
||||
if category_count > ui_peruser.pagecols and category_count - scroll_offset > ui_peruser.pagecols then
|
||||
-- next
|
||||
formspec[n] = formspec_button(ui_peruser, "next_category", "ui_right_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 1, 0}, 0.8, S("Scroll categories right"))
|
||||
end
|
||||
end
|
||||
|
||||
local function formspec_add_search_box(player, formspec, ui_peruser)
|
||||
local player_name = player:get_player_name()
|
||||
local n = #formspec + 1
|
||||
@ -184,35 +130,17 @@ end
|
||||
local function formspec_add_item_browser(player, formspec, ui_peruser)
|
||||
local player_name = player:get_player_name()
|
||||
local n = #formspec + 1
|
||||
|
||||
-- Controls to flip items pages
|
||||
|
||||
local btnlist = {
|
||||
{ "ui_skip_backward_icon.png", "start_list", S("First page") },
|
||||
{ "ui_doubleleft_icon.png", "rewind3", S("Back three pages") },
|
||||
{ "ui_left_icon.png", "rewind1", S("Back one page") },
|
||||
{ "ui_right_icon.png", "forward1", S("Forward one page") },
|
||||
{ "ui_doubleright_icon.png", "forward3", S("Forward three pages") },
|
||||
{ "ui_skip_forward_icon.png", "end_list", S("Last page") },
|
||||
}
|
||||
|
||||
if ui_peruser.is_lite_mode then
|
||||
btnlist[2] = nil
|
||||
btnlist[5] = nil
|
||||
end
|
||||
|
||||
local bn = 0
|
||||
for _, b in pairs(btnlist) do
|
||||
formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s;]",
|
||||
ui_peruser.page_buttons_x + ui_peruser.btn_spc*bn,
|
||||
ui_peruser.page_buttons_y + ui_peruser.btn_spc,
|
||||
ui_peruser.btn_size, ui_peruser.btn_size,
|
||||
b[1],b[2])
|
||||
formspec[n+1] = "tooltip["..b[2]..";"..F(b[3]).."]"
|
||||
bn = bn + 1
|
||||
n = n + 2
|
||||
end
|
||||
|
||||
formspec[n] = string.format("image_button[%f,%f;%f,%f;ui_left_icon.png;rewind1;]",
|
||||
ui_peruser.page_buttons_x,
|
||||
ui_peruser.page_buttons_y + 1,
|
||||
ui_peruser.btn_size, ui_peruser.btn_size)
|
||||
formspec[n+1] = "tooltip[rewind1;"..F(S("Back one page")).."]"
|
||||
formspec[n+2] = string.format("image_button[%f,%f;%f,%f;ui_right_icon.png;forward1;]",
|
||||
ui_peruser.page_buttons_x + ui_peruser.btn_spc * 5,
|
||||
ui_peruser.page_buttons_y + 1,
|
||||
ui_peruser.btn_size, ui_peruser.btn_size)
|
||||
formspec[n+3] = "tooltip[forward1;"..F(S("Forward one page")).."]"
|
||||
n = n + 4
|
||||
-- Items list
|
||||
if #ui.filtered_items_list[player_name] == 0 then
|
||||
local no_matches = S("No matching items")
|
||||
@ -272,7 +200,7 @@ local function formspec_add_item_browser(player, formspec, ui_peruser)
|
||||
end
|
||||
formspec[n] = string.format("label[%f,%f;%s: %s]",
|
||||
ui_peruser.page_buttons_x + ui_peruser.btn_spc * (ui_peruser.is_lite_mode and 1 or 2),
|
||||
ui_peruser.page_buttons_y + 0.1 + ui_peruser.btn_spc * 2,
|
||||
ui_peruser.page_buttons_y - 0.3 + ui_peruser.btn_spc * 2,
|
||||
F(S("Page")), S("@1 of @2",page2,pagemax))
|
||||
end
|
||||
|
||||
@ -316,7 +244,6 @@ function ui.get_formspec(player, page)
|
||||
return table.concat(fs, "")
|
||||
end
|
||||
|
||||
formspec_add_categories(player, fs, ui_peruser)
|
||||
formspec_add_search_box(player, fs, ui_peruser)
|
||||
formspec_add_item_browser(player, fs, ui_peruser)
|
||||
|
||||
@ -369,32 +296,12 @@ function ui.apply_filter(player, filter, search_dir)
|
||||
end
|
||||
end
|
||||
ui.filtered_items_list[player_name]={}
|
||||
local category = ui.current_category[player_name] or 'all'
|
||||
if category == 'all' then
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
if valid_def(def)
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
end
|
||||
end
|
||||
elseif category == 'uncategorized' then
|
||||
for name, def in pairs(minetest.registered_items) do
|
||||
if (not ui.find_category(name))
|
||||
and valid_def(def)
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
end
|
||||
end
|
||||
else
|
||||
for name,exists in pairs(ui.registered_category_items[category]) do
|
||||
local def = minetest.registered_items[name]
|
||||
if exists and def
|
||||
and valid_def(def)
|
||||
and ffilter(name, def) then
|
||||
table.insert(ui.filtered_items_list[player_name], name)
|
||||
end
|
||||
end
|
||||
end
|
||||
table.sort(ui.filtered_items_list[player_name])
|
||||
ui.filtered_items_list_size[player_name] = #ui.filtered_items_list[player_name]
|
||||
ui.current_index[player_name] = 1
|
||||
|
137
register.lua
137
register.lua
@ -29,114 +29,11 @@ local trash = minetest.create_detached_inventory("trash", {
|
||||
})
|
||||
trash:set_size("main", 1)
|
||||
|
||||
ui.register_button("craft", {
|
||||
type = "image",
|
||||
image = "ui_craft_icon.png",
|
||||
tooltip = S("Crafting Grid")
|
||||
})
|
||||
|
||||
ui.register_button("craftguide", {
|
||||
type = "image",
|
||||
image = "ui_craftguide_icon.png",
|
||||
tooltip = S("Crafting Guide")
|
||||
})
|
||||
|
||||
ui.register_button("home_gui_set", {
|
||||
type = "image",
|
||||
image = "ui_sethome_icon.png",
|
||||
tooltip = S("Set home position"),
|
||||
hide_lite=true,
|
||||
action = function(player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.check_player_privs(player_name, {home=true}) then
|
||||
ui.set_home(player, player:get_pos())
|
||||
local home = ui.home_pos[player_name]
|
||||
if home ~= nil then
|
||||
minetest.sound_play("dingdong",
|
||||
{to_player=player_name, gain = 1.0})
|
||||
minetest.chat_send_player(player_name,
|
||||
S("Home position set to: @1", minetest.pos_to_string(home)))
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(player_name,
|
||||
S("You don't have the \"home\" privilege!"))
|
||||
ui.set_inventory_formspec(player, ui.current_page[player_name])
|
||||
end
|
||||
end,
|
||||
condition = function(player)
|
||||
return minetest.check_player_privs(player:get_player_name(), {home=true})
|
||||
end,
|
||||
})
|
||||
|
||||
ui.register_button("home_gui_go", {
|
||||
type = "image",
|
||||
image = "ui_gohome_icon.png",
|
||||
tooltip = S("Go home"),
|
||||
hide_lite=true,
|
||||
action = function(player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.check_player_privs(player_name, {home=true}) then
|
||||
if ui.go_home(player) then
|
||||
minetest.sound_play("teleport", {to_player = player_name})
|
||||
end
|
||||
else
|
||||
minetest.chat_send_player(player_name,
|
||||
S("You don't have the \"home\" privilege!"))
|
||||
ui.set_inventory_formspec(player, ui.current_page[player_name])
|
||||
end
|
||||
end,
|
||||
condition = function(player)
|
||||
return minetest.check_player_privs(player:get_player_name(), {home=true})
|
||||
end,
|
||||
})
|
||||
|
||||
ui.register_button("misc_set_day", {
|
||||
type = "image",
|
||||
image = "ui_sun_icon.png",
|
||||
tooltip = S("Set time to day"),
|
||||
hide_lite=true,
|
||||
action = function(player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.check_player_privs(player_name, {settime=true}) then
|
||||
minetest.sound_play("birds",
|
||||
{to_player=player_name, gain = 1.0})
|
||||
minetest.set_timeofday((6000 % 24000) / 24000)
|
||||
minetest.chat_send_player(player_name,
|
||||
S("Time of day set to 6am"))
|
||||
else
|
||||
minetest.chat_send_player(player_name,
|
||||
S("You don't have the settime privilege!"))
|
||||
ui.set_inventory_formspec(player, ui.current_page[player_name])
|
||||
end
|
||||
end,
|
||||
condition = function(player)
|
||||
return minetest.check_player_privs(player:get_player_name(), {settime=true})
|
||||
end,
|
||||
})
|
||||
|
||||
ui.register_button("misc_set_night", {
|
||||
type = "image",
|
||||
image = "ui_moon_icon.png",
|
||||
tooltip = S("Set time to night"),
|
||||
hide_lite=true,
|
||||
action = function(player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.check_player_privs(player_name, {settime=true}) then
|
||||
minetest.sound_play("owl",
|
||||
{to_player=player_name, gain = 1.0})
|
||||
minetest.set_timeofday((21000 % 24000) / 24000)
|
||||
minetest.chat_send_player(player_name,
|
||||
S("Time of day set to 9pm"))
|
||||
else
|
||||
minetest.chat_send_player(player_name,
|
||||
S("You don't have the settime privilege!"))
|
||||
ui.set_inventory_formspec(player, ui.current_page[player_name])
|
||||
end
|
||||
end,
|
||||
condition = function(player)
|
||||
return minetest.check_player_privs(player:get_player_name(), {settime=true})
|
||||
end,
|
||||
})
|
||||
-- ui.register_button("craft", {
|
||||
-- type = "image",
|
||||
-- image = "ui_craft_icon.png",
|
||||
-- tooltip = S("Crafting Grid")
|
||||
-- })
|
||||
|
||||
ui.register_button("clear_inv", {
|
||||
type = "image",
|
||||
@ -174,25 +71,27 @@ ui.register_page("craft", {
|
||||
local player_name = player:get_player_name()
|
||||
local formspec = {
|
||||
perplayer_formspec.standard_inv_bg,
|
||||
}
|
||||
local formspec2 = {
|
||||
perplayer_formspec.craft_grid,
|
||||
"label["..formheaderx..","..formheadery..";" ..F(S("Crafting")).."]",
|
||||
"listcolors[#00000000;#00000000]",
|
||||
"listring[current_name;craft]",
|
||||
"listring[current_player;main]"
|
||||
"listring[current_player;main]",
|
||||
string.format("label[%f,%f;%s]", craftx + 6.45, crafty + 2.4, F(S("Trash:"))),
|
||||
ui.make_trash_slot(craftx + 6.25, crafty + 2.5),
|
||||
ui.single_slot(craftx - 2.5, crafty + 2.5),
|
||||
string.format("label[%f,%f;%s]", craftx - 2.3, crafty + 2.4,F(S("Refill:"))),
|
||||
string.format("list[detached:%srefill;main;%f,%f;1,1;]", F(player_name), craftx - 2.5 + ui.list_img_offset, crafty + 2.5 + ui.list_img_offset),
|
||||
}
|
||||
local n=#formspec+1
|
||||
|
||||
if ui.trash_enabled or ui.is_creative(player_name) or minetest.get_player_privs(player_name).give then
|
||||
formspec[n] = string.format("label[%f,%f;%s]", craftx + 6.45, crafty + 2.4, F(S("Trash:")))
|
||||
formspec[n+1] = ui.make_trash_slot(craftx + 6.25, crafty + 2.5)
|
||||
n=n + 2
|
||||
end
|
||||
|
||||
if ui.is_creative(player_name) then
|
||||
formspec[n] = ui.single_slot(craftx - 2.5, crafty + 2.5)
|
||||
formspec[n+1] = string.format("label[%f,%f;%s]", craftx - 2.3, crafty + 2.4,F(S("Refill:")))
|
||||
formspec[n+2] = string.format("list[detached:%srefill;main;%f,%f;1,1;]",
|
||||
F(player_name), craftx - 2.5 + ui.list_img_offset, crafty + 2.5 + ui.list_img_offset)
|
||||
--copy formspec2 to formspec
|
||||
for i=1,#formspec2 do
|
||||
formspec[n]=formspec2[i]
|
||||
n = n+1
|
||||
end
|
||||
end
|
||||
return {formspec=table.concat(formspec)}
|
||||
end,
|
||||
|
348
waypoints.lua
348
waypoints.lua
@ -1,348 +0,0 @@
|
||||
local S = minetest.get_translator("unified_inventory")
|
||||
local F = minetest.formspec_escape
|
||||
local ui = unified_inventory
|
||||
local COUNT = 5
|
||||
|
||||
local hud_colors = {
|
||||
{"#FFFFFF", 0xFFFFFF, S("White")},
|
||||
{"#DBBB00", 0xf1d32c, S("Yellow")},
|
||||
{"#DD0000", 0xDD0000, S("Red")},
|
||||
{"#2cf136", 0x2cf136, S("Green")},
|
||||
{"#2c4df1", 0x2c4df1, S("Blue")},
|
||||
}
|
||||
|
||||
-- Storage compatibility code
|
||||
|
||||
--[[
|
||||
Stores temporary player data (persists until player leaves)
|
||||
[player_name] = {
|
||||
[<waypoint index>] = {
|
||||
edit = <edit current waypoint?>,
|
||||
hud = <hud ID>,
|
||||
},
|
||||
[<waypoint index>] = { ... },
|
||||
...
|
||||
}
|
||||
]]
|
||||
local waypoints_temp = {}
|
||||
|
||||
--[[
|
||||
Datastorage format (per-player):
|
||||
{
|
||||
selected = <waypoint index>,
|
||||
[<waypoint index>] = {
|
||||
name = <name or nil>
|
||||
world_pos = <coordinates vector>,
|
||||
color = <"hud_colors" index>,
|
||||
active = <hud show waypoint?>,
|
||||
display_pos = <hud display coorinates?>,
|
||||
},
|
||||
[<waypoint index>] = { ... },
|
||||
...
|
||||
}
|
||||
Player metadata format:
|
||||
{
|
||||
selected = <selected number>,
|
||||
-- Cannot mix integer/string keys in JSON
|
||||
data = {
|
||||
[<waypoint index>] = { same as above },
|
||||
...
|
||||
}
|
||||
}
|
||||
]]
|
||||
|
||||
local function set_waypoint_data(player, waypoints)
|
||||
local meta = player:get_meta()
|
||||
if not next(waypoints.data or {}) then
|
||||
-- Empty data. Do not save anything, or delete
|
||||
meta:set_string("ui_waypoints", "")
|
||||
else
|
||||
meta:set_string("ui_waypoints", minetest.write_json(waypoints))
|
||||
end
|
||||
end
|
||||
|
||||
local function migrate_datastorage(player, waypoints)
|
||||
-- Copy values from old table
|
||||
local new_data = {
|
||||
selected = waypoints.selected,
|
||||
data = {}
|
||||
}
|
||||
for i = 1, COUNT do
|
||||
new_data.data[i] = waypoints[i]
|
||||
end
|
||||
|
||||
set_waypoint_data(player, new_data)
|
||||
|
||||
-- Delete values, but keep one entry so that it's saved by datastorage
|
||||
for k, _ in pairs(waypoints) do
|
||||
waypoints[k] = nil
|
||||
end
|
||||
waypoints[1] = 1
|
||||
end
|
||||
|
||||
local have_datastorage = minetest.get_modpath("datastorage") ~= nil
|
||||
local function get_waypoint_data(player)
|
||||
local player_name = player:get_player_name()
|
||||
|
||||
-- Migration step
|
||||
if have_datastorage then
|
||||
local waypoints = datastorage.get(player_name, "waypoints")
|
||||
if waypoints.selected then
|
||||
migrate_datastorage(player, waypoints)
|
||||
minetest.log("action", "[unified_inventory] " ..
|
||||
"Migrated waypoints of player: " .. player_name)
|
||||
end
|
||||
end
|
||||
|
||||
-- Get directly from metadata
|
||||
local waypoints = player:get_meta():get("ui_waypoints")
|
||||
waypoints = waypoints and minetest.parse_json(waypoints) or {}
|
||||
waypoints.data = waypoints.data or {}
|
||||
|
||||
return waypoints
|
||||
end
|
||||
|
||||
ui.register_page("waypoints", {
|
||||
get_formspec = function(player)
|
||||
local player_name = player:get_player_name()
|
||||
local wp_info_x = ui.style_full.form_header_x + 1.25
|
||||
local wp_info_y = ui.style_full.form_header_y + 0.5
|
||||
local wp_bottom_row = ui.style_full.std_inv_y - 1
|
||||
local wp_buttons_rj = ui.style_full.std_inv_x + 10.1 - ui.style_full.btn_spc
|
||||
local wp_edit_w = ui.style_full.btn_spc * 4 - 0.1
|
||||
|
||||
local waypoints = get_waypoint_data(player)
|
||||
local sel = waypoints.selected or 1
|
||||
|
||||
local formspec = {
|
||||
ui.style_full.standard_inv_bg,
|
||||
string.format("label[%f,%f;%s]",
|
||||
ui.style_full.form_header_x, ui.style_full.form_header_y, F(S("Waypoints"))),
|
||||
"image["..wp_info_x..","..wp_info_y..";1,1;ui_waypoints_icon.png]"
|
||||
}
|
||||
local n=4
|
||||
|
||||
-- Tabs buttons:
|
||||
for i = 1, COUNT do
|
||||
local sw="select_waypoint"..i
|
||||
formspec[n] = string.format("image_button[%f,%f;%f,%f;%sui_%i_icon.png;%s;]",
|
||||
ui.style_full.main_button_x, wp_bottom_row - (5-i) * ui.style_full.btn_spc,
|
||||
ui.style_full.btn_size, ui.style_full.btn_size,
|
||||
(i == sel) and "ui_blue_icon_background.png^" or "",
|
||||
i, sw)
|
||||
formspec[n+1] = "tooltip["..sw..";"..S("Select Waypoint #@1", i).."]"
|
||||
n = n + 2
|
||||
end
|
||||
|
||||
local waypoint = waypoints.data[sel] or {}
|
||||
local temp = waypoints_temp[player_name][sel] or {}
|
||||
local default_name = S("Waypoint @1", sel)
|
||||
|
||||
-- Main buttons:
|
||||
local btnlist = {
|
||||
set_waypoint = {
|
||||
"ui_waypoint_set_icon.png",
|
||||
S("Set waypoint to current location")
|
||||
},
|
||||
toggle_waypoint = {
|
||||
waypoint.active and "ui_on_icon.png" or "ui_off_icon.png",
|
||||
waypoint.active and S("Hide waypoint") or S("Show waypoint")
|
||||
},
|
||||
toggle_display_pos = {
|
||||
waypoint.display_pos and "ui_green_icon_background.png^ui_xyz_icon.png" or "ui_red_icon_background.png^ui_xyz_icon.png^(ui_no.png^[transformR90)",
|
||||
waypoint.display_pos and S("Hide coordinates") or S("Show coordinates")
|
||||
},
|
||||
toggle_color = {
|
||||
"ui_circular_arrows_icon.png",
|
||||
S("Change color of waypoint display")
|
||||
},
|
||||
rename_waypoint = {
|
||||
"ui_pencil_icon.png",
|
||||
S("Edit waypoint name")
|
||||
}
|
||||
}
|
||||
|
||||
local x = 4
|
||||
for name, def in pairs(btnlist) do
|
||||
formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s%i;]",
|
||||
wp_buttons_rj - ui.style_full.btn_spc * x, wp_bottom_row,
|
||||
ui.style_full.btn_size, ui.style_full.btn_size,
|
||||
def[1], name, sel)
|
||||
formspec[n+1] = "tooltip["..name..sel..";"..F(def[2]).."]"
|
||||
x = x - 1
|
||||
n = n + 2
|
||||
end
|
||||
|
||||
-- Waypoint's info:
|
||||
formspec[n] = ("label[%f,%f;%s]"):format(
|
||||
wp_info_x, wp_info_y + 1.1,
|
||||
F(waypoint.active and S("Waypoint active") or S("Waypoint inactive"))
|
||||
)
|
||||
n = n + 1
|
||||
|
||||
if temp.edit then
|
||||
formspec[n] = string.format("field[%f,%f;%f,%f;rename_box%i;;%s]",
|
||||
wp_buttons_rj - wp_edit_w - 0.1, wp_bottom_row - ui.style_full.btn_spc,
|
||||
wp_edit_w, ui.style_full.btn_size, sel, (waypoint.name or default_name))
|
||||
formspec[n+1] = string.format("image_button[%f,%f;%f,%f;ui_ok_icon.png;confirm_rename%i;]",
|
||||
wp_buttons_rj, wp_bottom_row - ui.style_full.btn_spc,
|
||||
ui.style_full.btn_size, ui.style_full.btn_size, sel)
|
||||
formspec[n+2] = "tooltip[confirm_rename"..sel..";"..F(S("Finish editing")).."]"
|
||||
n = n + 3
|
||||
end
|
||||
|
||||
formspec[n] = string.format("label[%f,%f;%s: %s]",
|
||||
wp_info_x, wp_info_y+1.6, F(S("World position")),
|
||||
minetest.pos_to_string(waypoint.world_pos or vector.new()))
|
||||
formspec[n+1] = string.format("label[%f,%f;%s: %s]",
|
||||
wp_info_x, wp_info_y+2.10, F(S("Name")), (waypoint.name or default_name))
|
||||
formspec[n+2] = string.format("label[%f,%f;%s: %s]",
|
||||
wp_info_x, wp_info_y+2.60, F(S("HUD text color")), hud_colors[waypoint.color or 1][3])
|
||||
|
||||
return {formspec=table.concat(formspec)}
|
||||
end,
|
||||
})
|
||||
|
||||
ui.register_button("waypoints", {
|
||||
type = "image",
|
||||
image = "ui_waypoints_icon.png",
|
||||
tooltip = S("Waypoints"),
|
||||
hide_lite=true
|
||||
})
|
||||
|
||||
local function update_hud(player, waypoints, temp, i)
|
||||
local waypoint = waypoints.data[i]
|
||||
if not waypoint then return end
|
||||
|
||||
temp[i] = temp[i] or {}
|
||||
temp = temp[i]
|
||||
|
||||
local pos = waypoint.world_pos or vector.new()
|
||||
local name
|
||||
if waypoint.display_pos then
|
||||
name = minetest.pos_to_string(pos)
|
||||
if waypoint.name then
|
||||
name = name..", "..waypoint.name
|
||||
end
|
||||
else
|
||||
name = waypoint.name or S("Waypoint @1", i)
|
||||
end
|
||||
|
||||
-- Perform HUD updates
|
||||
if temp.hud then
|
||||
player:hud_remove(temp.hud)
|
||||
temp.hud = nil
|
||||
end
|
||||
if waypoint.active then
|
||||
temp.hud = player:hud_add({
|
||||
hud_elem_type = "waypoint",
|
||||
number = hud_colors[waypoint.color or 1][2] ,
|
||||
name = name,
|
||||
text = "m",
|
||||
world_pos = pos
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if formname ~= "" then return end
|
||||
|
||||
local player_name = player:get_player_name()
|
||||
local update_formspec = false
|
||||
local need_update_hud = false
|
||||
local hit = false
|
||||
|
||||
local waypoints = get_waypoint_data(player)
|
||||
local temp = waypoints_temp[player_name]
|
||||
for i = 1, COUNT do
|
||||
local waypoint = waypoints.data[i] or {}
|
||||
|
||||
if fields["select_waypoint"..i] then
|
||||
hit = true
|
||||
waypoints.selected = i
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if fields["toggle_waypoint"..i] then
|
||||
hit = true
|
||||
waypoint.active = not (waypoint.active)
|
||||
need_update_hud = true
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if fields["set_waypoint"..i] then
|
||||
hit = true
|
||||
local pos = vector.round(player:get_pos())
|
||||
waypoint.world_pos = pos
|
||||
need_update_hud = true
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if fields["rename_waypoint"..i] then
|
||||
hit = true
|
||||
temp[i] = temp[i] or {}
|
||||
temp[i].edit = true
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if fields["toggle_display_pos"..i] then
|
||||
hit = true
|
||||
waypoint.display_pos = not waypoint.display_pos
|
||||
need_update_hud = true
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if fields["toggle_color"..i] then
|
||||
hit = true
|
||||
local color = waypoint.color or 0
|
||||
color = color + 1
|
||||
if color > #hud_colors then
|
||||
color = 1
|
||||
end
|
||||
waypoint.color = color
|
||||
need_update_hud = true
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if fields["confirm_rename"..i] then
|
||||
hit = true
|
||||
temp[i] = temp[i] or {}
|
||||
temp[i].edit = false
|
||||
waypoint.name = fields["rename_box"..i]
|
||||
need_update_hud = true
|
||||
update_formspec = true
|
||||
end
|
||||
|
||||
if hit then
|
||||
-- Save first
|
||||
waypoints.data[i] = waypoint
|
||||
set_waypoint_data(player, waypoints)
|
||||
end
|
||||
-- Update after
|
||||
if need_update_hud then
|
||||
update_hud(player, waypoints, temp, i)
|
||||
end
|
||||
if update_formspec then
|
||||
ui.set_inventory_formspec(player, "waypoints")
|
||||
end
|
||||
|
||||
if hit then return end
|
||||
end
|
||||
end)
|
||||
|
||||
-- waypoints_temp must be initialized before the general unified_inventory
|
||||
-- joinplayer callback is run for updating the inventory
|
||||
table.insert(minetest.registered_on_joinplayers, 1, function(player)
|
||||
local player_name = player:get_player_name()
|
||||
local waypoints = get_waypoint_data(player)
|
||||
|
||||
waypoints_temp[player_name] = {}
|
||||
for i = 1, COUNT do
|
||||
update_hud(player, waypoints, waypoints_temp[player_name], i)
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
waypoints_temp[player:get_player_name()] = nil
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user