我正在開發的項目是Minecraft的可互動的庫存菜單Bukkit插件。Bukkit交互式菜單 - 頁面滾動
我打算在這個功能包括: - 能產卵從庫存中包含的項目的目錄項(此操作,並且作品) - 與菜單交互(這是我的工作)
具體而言,我試圖讓兩個按鈕(項目)在不同頁面(上一頁和下一頁)之間的庫存滾動中。我需要這樣做,因爲此庫存中的最大物品數量只能達到45,並且生成能力的物品包含40個插槽中的40個。其他5個用完了退出按鈕(工作),後退按鈕(工作/導航到前一個菜單),兩個頁面切換按鈕(不起作用)和一個空白區域。
我的問題是,我無法獲得切換按鈕以正確返回到上一頁的項目和或下一頁的項目。
該目錄旨在成爲一個可以增長的目錄中的項目數量不是一個常數值。
我確認下面的代碼確實做了3個不同的庫存(86個項目的測試目錄),但我無法設法讓每個庫存都轉到上一個或下一個庫存。我已經得到它在不同庫存之間滾動,但只在(0)和(2)或(1)和(2)的庫存之間滾動。
以下代碼片段的一些特定行爲是,由於某種原因,當調用click事件時,整個事件會運行x次。我只是不理解,爲了設置whiteCatalog的值,當它僅運行一次時,爲什麼它會循環點擊。
編輯:我可以通過執行whiteCatalog [0到2] .open(...)手動打開每個單獨的庫存,但是當我在索引中嘗試數學時,我得到奇怪的菜單結果跳到索引一個或兩個。
YamlConfiguration test = YamlConfiguration.loadConfiguration(Main.bannerCatalogs[0]);
int x = (int) Math.ceil((double)test.getConfigurationSection("Banners").getKeys(false).size()/40);
whiteCatalog = new InventoryMenu[x];
for(int i = 0; i < x; i++)
{
int offset = 0;
final int k = i;
offset = (40 * i);
whiteCatalog[i] = new InventoryMenu("Banner Catalog: white", 45, Main.plug, i, new IMenuItemClicked()
{
@Override
public void onMenuItemClicked(MenuItemClicked clickEvent)
{
clickEvent.setCanClose(false);
ItemStack clicked = clickEvent.getItemClicked();
BTBUtil.log(Prefix.TEST + "Inventory ID: " + clickEvent.getMenu().id);
if(clickEvent.getMenu().id == 0)
{
if(clicked.getType() == Material.BANNER)
clickEvent.getPlayer().getInventory().addItem(clicked);
else if(clicked.getType() == Material.BARRIER)
clickEvent.getPlayer().closeInventory();
else if(clicked.getType() == Material.SPRUCE_DOOR_ITEM)
catalogSelect.open(clickEvent.getPlayer());
}
BTBUtil.log(Prefix.TEST + whiteCatalog.length);
if(clicked.getType() == Material.STAINED_GLASS_PANE && clicked.getItemMeta().getDisplayName().equalsIgnoreCase("Previous Page"))
{
whiteCatalog[clickEvent.getMenu().id-1].open(clickEvent.getPlayer());
}
else if(clicked.getType() == Material.STAINED_GLASS_PANE && clicked.getItemMeta().getDisplayName().equalsIgnoreCase("Next Page"))
{
whiteCatalog[clickEvent.getMenu().id+1].open(clickEvent.getPlayer());
}
}
}).loadItemsFromConfig(0, offset)
.loadMenu();
}
}
我相信你將不得不爲每個頁面創建庫存的其他實例,並相應地打開它們。類似於你正在做的背景 – Kerooker
@Kerooker我需要使用分頁,但我不知道如何在這種情況下正確實施。 – zedlander1000
您可以爲每個頁面創建一個清單,並在需要時打開該清單 – Kerooker