[Spigot] InventoryClickEvent Fehler?
Hallo Community!
Ich programmiere gerade ein LobbySystem und bin gerade dabei einen Navigator zu programmieren. Mit Rechtsklick auf Item in der Hotbar öffnet sich ein Inventar sobald ich aber auf ein Item im Inventar klicke welches in einem Listener registriert ist passiert nichts.
Hier der Code:
Die Class in dem die Items angelegt werden:
public class NavigatorInventory {
public static void openNavigatorInventory(Player player) {
Inventory NavigatorInv = Bukkit.createInventory(null, 9*1, "§6§lNavigator");
ItemStack placeholder = new ItemAPI("§e", Material.STAINED_GLASS_PANE, (byte)15, 1).build();
NavigatorInv.setItem(0, placeholder);
NavigatorInv.setItem(1, placeholder);
NavigatorInv.setItem(2, placeholder);
NavigatorInv.setItem(3, placeholder);
NavigatorInv.setItem(4, new ItemAPI("§aCityBuild", Material.STONE_AXE, (byte)0, 1, "§7Spiele CityBuild", "§7Klicke um zu connecten.").build());
NavigatorInv.setItem(5, placeholder);
NavigatorInv.setItem(6, new ItemAPI("§3Testitem", Material.ENDER_STONE, (byte)0, 1).build());
NavigatorInv.setItem(7, placeholder);
NavigatorInv.setItem(8, placeholder);
player.openInventory(NavigatorInv);
}
}
public class NavigatorInventoryListener implements Listener {
private Main main;
public NavigatorInventoryListener(Main main) {
this.main = main;
Bukkit.getPluginManager().registerEvents(this, main);
}
@EventHandler
public void onClick(InventoryClickEvent e) {
Player player = (Player) e.getWhoClicked();
player.sendMessage("l");
if(!main.canBuild.contains(player)) {
e.setCancelled(true);
}
if(e.getInventory().getName().equals("§6§lNavigator")){
if(e.getCurrentItem().getItemMeta().getDisplayName().equals("§aCityBuild")) {
player.sendMessage("§3CityBuildTest");
}
else if (e.getCurrentItem().getItemMeta().getDisplayName().equals("§3Testitem")) {
player.sendMessage("§3TestItemTest");
}
}
}
}
Jetzt sollten eigentlich die Testnachrichten ausgegeben werden (später ein Inventory) Aber als Ausgabe bekomme ich keine Errors keine Nachricht etc
Alle Class Dateien sind in der Main registriert.
Kann mir jemand helfen?
Mit Freundlichen Grüßen
2 Antworten
Guten Abend,
für dich als Tipp, wenn du keine Ausgabe erzeugt bekommst, dann wird es meistens daran liegen, dass der jeweilige Block der Ausgabe nicht aufgerufen wird. Da würde ich dir empfehlen zunächst die Ausgabe direkt in die Funktion zu setzen (ohne if oder sonst etwas), damit du sehen kannst, ob die Funktion aufgerufen wird. Danach kannst du die Ausgabe immer einen Block tiefer legen und sehen, ob diese dort immernoch funktioniert und damit dein Troubleshooting betreiben und sehen an welcher Stelle, die Ausgabe nicht mehr ausgegeben wird.
Ich würde dir auch raten für die Überprüfung eine seperate Ausgabe zu verwenden, wie einfach
player.sendMessage("t");
oder
Bukkit.getLogger().info("t");
MfG
Könnte es sein, dass §6§lNavigator vielleicht der falsche Name ist und stattdessen dort einfach nur Navigator richtig wäre? Versuch am besten mal den Namen des Inventars in deiner Nachricht auszugeben, anstatt ein t, dann wirst du sehen, wie der Name definiert ist
Jo, wenn man es genau so macht geht es sobald man es mit §6§l macht nichtmehr obwohl der Name so ist, wie kann das sein?
MFG
Es kann sein, dass eine andere Formatierung benutzt wird, als die §6§l, wie beispielsweise, dass die Farbe eigenständig ausgewählt wird, wodurch sich der String selbst natürlich ändert. Ich glaube du könntest eine genaue Ausgabe des Navigators haben, indem du es mit
Bukkit.getLogger().info(e.getInventory().getName());
versuchst, da es dort nicht formatiert wird. Dann könntest du diesen String auch mit contains angeben
Okay probiere ich auch gleich mal, habe es jetzt auch zum laufen bekommen indem ich Inventory ... = Bukkit.createNewInventory ... Einfach außerhalb der Methode gesetzt habe mit public static ... und dann einfach als Abfrage :
if(e.getInventory().equals(NavigatorInventory.NavigatorInv)) {
Und das geht
Aber jetzt das Item abfragen geht auch wieder nicht :(
Und das Item kann ich ja nicht so abfragen wie das Inventory jetzt xD
Das ist sehr interessant. Aber solange es funktioniert, ist es doch gut
Guten Mittag, habe nochmal was getestet, und alles lag nur an den Farbcodes, das heißt sobald ich einfach das Item ohne §6§l erstellt habe und dies abgefragt haben ohne Farbcode funktioniert alles einwandfrei sowohl das Inv wie das Item
Das ist sehr gut. Dann viel Spaß und weiterhin viel Erfolg damit
Jo, vielen Dank mal schauen ob mit Farbcode auch irgendwie geht.
An welcher stelle ist dennn das if false?
Vielen Dank, habe das schon vorher mal getestet und ja eine Ausgabe ohne eine if bekomme ich
Bild: https://prnt.sc/pfcyol