Compare commits

..

4 Commits
1.6 ... 1.6.1

5 changed files with 42 additions and 35 deletions

4
API.md
View File

@ -17,9 +17,7 @@ i3.new_tab("stuff", {
-- Determine if the tab is visible by a player, `false` or `nil` hide the tab -- Determine if the tab is visible by a player, `false` or `nil` hide the tab
access = function(player, data) access = function(player, data)
local name = player:get_player_name() local name = player:get_player_name()
if name == "singleplayer" then return name == "singleplayer"
return false
end
end, end,
formspec = function(player, data, fs) formspec = function(player, data, fs)

View File

@ -167,6 +167,13 @@ function i3.set_fs(player)
sort_inventory(player, data) sort_inventory(player, data)
end end
for i, tab in ipairs(i3.tabs) do
if data.tab == i and tab.access and not tab.access(player, data) then
data.tab = 1
break
end
end
local fs = make_fs(player, data) local fs = make_fs(player, data)
player:set_inventory_formspec(fs) player:set_inventory_formspec(fs)
end end
@ -221,8 +228,8 @@ function i3.set_tab(player, tabname)
return return
end end
for i, def in ipairs(i3.tabs) do for i, tab in ipairs(i3.tabs) do
if def.name == tabname then if tab.name == tabname then
data.tab = i data.tab = i
return return
end end

View File

@ -592,7 +592,7 @@ local function add_hud_waypoint(player, name, pos, color)
return player:hud_add { return player:hud_add {
hud_elem_type = "waypoint", hud_elem_type = "waypoint",
name = name, name = name,
text = " m", text = "m",
world_pos = pos, world_pos = pos,
number = color, number = color,
z_index = -300, z_index = -300,

View File

@ -494,17 +494,21 @@ local function get_container(fs, data, player, yoffset, ctn_len, award_list, awa
local _skins = skins.get_skinlist_for_player(name) local _skins = skins.get_skinlist_for_player(name)
local skin_name = skins.get_player_skin(player).name local skin_name = skins.get_player_skin(player).name
local btn_y = yextra + 0.75 local spp, add_y = 24, 0
local spp = 24
data.skin_pagemax = max(1, ceil(#_skins / spp)) if #_skins > spp then
local btn_y = yextra + 0.75
add_y += 0.6
fs("image_button", 1.5, btn_y, 0.35, 0.35, "", "prev_skin", "") data.skin_pagemax = max(1, ceil(#_skins / spp))
fs("image_button", 3.85, btn_y, 0.35, 0.35, "", "next_skin", "")
fs"style[skin_page;font=bold;font_size=18]" fs("image_button", 1.5, btn_y, 0.35, 0.35, "", "prev_skin", "")
fs("button", 1.85, btn_y - 0.23, 2, 0.8, "skin_page", fs("image_button", 3.85, btn_y, 0.35, 0.35, "", "next_skin", "")
fmt("%s / %u", clr(colors.yellow, data.skin_pagenum), data.skin_pagemax))
fs"style[skin_page;font=bold;font_size=18]"
fs("button", 1.85, btn_y - 0.23, 2, 0.8, "skin_page",
fmt("%s / %u", clr(colors.yellow, data.skin_pagenum), data.skin_pagemax))
end
local first = (data.skin_pagenum - 1) * spp local first = (data.skin_pagenum - 1) * spp
local last = first + spp - 1 local last = first + spp - 1
@ -523,7 +527,7 @@ local function get_container(fs, data, player, yoffset, ctn_len, award_list, awa
local X = (i % 3) * 1.93 local X = (i % 3) * 1.93
local Y = ceil((i % spp - X) / 3 + 1) local Y = ceil((i % spp - X) / 3 + 1)
Y += (Y * 2.45) + yextra - 2.15 Y += (Y * 2.45) + yextra - 2.75 + add_y
fs("image_button", X, Y, 1.86, 3.4, "", btn_name, "") fs("image_button", X, Y, 1.86, 3.4, "", btn_name, "")
fs(fmt("tooltip[%s;%s]", btn_name, ESC(skin.name))) fs(fmt("tooltip[%s;%s]", btn_name, ESC(skin.name)))
@ -688,9 +692,10 @@ local function get_inventory_fs(player, data, fs)
elseif i3.modules.skins and data.subcat == 3 then elseif i3.modules.skins and data.subcat == 3 then
local spp = 24 local spp = 24
local _skins = skins.get_skinlist_for_player(data.player_name) local _skins = skins.get_skinlist_for_player(data.player_name)
local num = max(1, min(spp, #_skins - ((data.skin_pagenum - 1) * spp))) local nb = #_skins
local num = max(1, min(spp, nb - ((data.skin_pagenum - 1) * spp)))
max_val += ceil(num / 3) * 34 max_val += ceil(num / 3) * (nb > spp and 34 or 31)
elseif i3.modules.awards and data.subcat == 4 then elseif i3.modules.awards and data.subcat == 4 then
award_list = awards.get_award_states(data.player_name) award_list = awards.get_award_states(data.player_name)
@ -1511,6 +1516,7 @@ local function make_fs(player, data)
fs("bg9", 0, 0, data.inv_width, full_height, PNG.bg_full, 10) fs("bg9", 0, 0, data.inv_width, full_height, PNG.bg_full, 10)
local tab = i3.tabs[data.tab] local tab = i3.tabs[data.tab]
if tab then if tab then
tab.formspec(player, data, fs) tab.formspec(player, data, fs)
end end
@ -1521,7 +1527,15 @@ local function make_fs(player, data)
get_items_fs(fs, data, player, full_height) get_items_fs(fs, data, player, full_height)
end end
if #i3.tabs > 1 then local visible_tabs = 1
for _, def in ipairs(i3.tabs) do
if visible_tabs < 2 and def.access and def.access(player, data) then
visible_tabs++
end
end
if visible_tabs > 1 then
get_tabs_fs(fs, player, data, full_height) get_tabs_fs(fs, player, data, full_height)
end end

View File

@ -16,30 +16,18 @@ i3.new_tab("test2", {
end, end,
}) })
i3.new_tab("test3", { i3.new_tab("test_creative", {
description = "Test 3", description = "Test creative",
access = function(player, data) access = function(player, data)
local name = player:get_player_name() local name = player:get_player_name()
if name == "singleplayer" then return core.is_creative_enabled(name)
return true
end
end, end,
formspec = function(player, data, fs) formspec = function(player, data, fs)
fs("label[3,1;Test 3]") fs("label[3,1;Creative enabled]")
end, end,
fields = function(player, data, fields) fields = i3.set_fs,
i3.set_fs(player, "label[3,2;Test extra_fs]")
end,
}) })
i3.override_tab("test2", {
description = "Test override",
image = "i3_mesepick.png",
formspec = function(player, data, fs)
fs("label[3,1;Override!]")
end,
})