Moin zusammen,
ich habe mich nach einiger Zeit mal wieder an ein eigenes Bukkit-/Spigot-Plugin gewagt und habe aktuell einen Bug, den ich nicht behoben bekomme.
Im grundlegenden schreibe ich gerade an einem Subsystem, welches es mir ermöglichen soll, Inventory-Menüs mit Seitenumbrüchen zu erzeugen. Der Rest meines Codes läuft absolut rund, nur beim initialen Aufruf des Inventory sind alle Items unsichtbar und erscheinen erst, wenn man irgendwo in das Inventory klickt.
Hier mal mein Code:
Ich habe mal die drei wichtigen Methoden hier eingefügt und etwas kommentiert. Wie zu sehen ist hat das Inventory keinen Besitzer bis zu dem Zeitpunkt wo ich es aufrufe.
Nun zur Frage:
Woran kann es liegen, dass die Items beim ersten Aufruf des Menüs über die "open"-Methode unsichtbar sind? Was mache ich falsch?
Ich bin offen für Kritik und Verbesserungen, da ich nun seit knapp 3 Jahren nicht mehr für Bukkit programmiert habe
ich habe mich nach einiger Zeit mal wieder an ein eigenes Bukkit-/Spigot-Plugin gewagt und habe aktuell einen Bug, den ich nicht behoben bekomme.
Im grundlegenden schreibe ich gerade an einem Subsystem, welches es mir ermöglichen soll, Inventory-Menüs mit Seitenumbrüchen zu erzeugen. Der Rest meines Codes läuft absolut rund, nur beim initialen Aufruf des Inventory sind alle Items unsichtbar und erscheinen erst, wenn man irgendwo in das Inventory klickt.
Hier mal mein Code:
Java:
/**
* Mit dieser Methode kann ich das Inventory für einen
* Speieler öffnen
*/
public void open(Player player) {
if(player != null) {
player.openInventory(_inventory);
player.updateInventory();
_holder = player;
}
}
/**
* Diese Methode legt die Items ins Inventory
*/
private void renderItems(int page) {
page = Math.min(_maxPages, page);
int endIndex = Math.min(_items.size(), _usabledSpace * page);
int startIndex = _usabledSpace * page - _usabledSpace;
int maxIndex = endIndex - startIndex;
List<MenuItem> pageItems = _items.subList(startIndex, endIndex);
for(int i = 0; i < maxIndex; i++) {
MenuItem menuItem = pageItems.get(i);
ItemStack item = new ItemStack(menuItem.getMaterial());
ItemMeta meta = item.getItemMeta();
if(menuItem.getName() != null)
meta.setDisplayName(menuItem.getName());
if(menuItem.getLore() != null)
meta = formatLore(menuItem.getLore(), meta);
item.setItemMeta(meta);
_inventory.setItem(i, item);
}
}
/**
* Der Konstruktor der Manager-Klasse
*/
public PagedItemMenu(String name, int rows, List<MenuItem> items) {
if(rows < 2)
rows = 2;
_rows = rows;
_usabledSpace = _rows * 9 - 9;
_inventory = Bukkit.createInventory(null, rows * 9, name);
_items = items;
_currentPage = 1;
_maxPages = (int)Math.ceil((double)_items.size() / (double)_usabledSpace);
_menus.put(_inventory, this);
_receiver = new ArrayList<BiConsumer<HumanEntity, ItemStack>>();
}
Ich habe mal die drei wichtigen Methoden hier eingefügt und etwas kommentiert. Wie zu sehen ist hat das Inventory keinen Besitzer bis zu dem Zeitpunkt wo ich es aufrufe.
Nun zur Frage:
Woran kann es liegen, dass die Items beim ersten Aufruf des Menüs über die "open"-Methode unsichtbar sind? Was mache ich falsch?
Ich bin offen für Kritik und Verbesserungen, da ich nun seit knapp 3 Jahren nicht mehr für Bukkit programmiert habe