mik3_1802 Geschrieben 13. August 2017 Share Geschrieben 13. August 2017 (bearbeitet) Hey Leute, ich komme wieder nicht weiter.. Ich schreibe gerade ein Plugin für eine PVP-Map die alle 10min Kisten befüllt. Dafür habe ich in meiner Datenbank zwei Tabellen angelegt: - Eine für die Kistenpositionen und den Kistentyp(Ich will das in Kisten die schwer zugänglich sind(Typ = 1) bessere Items sind) - Eine für die Items. Da wird angegeben welche Items es für den Typ 1, Typ 2 usw gibt. Was die maximale anzahl (die dann per random geholt wird) ist und die Wahrscheinlichkeit, wie wahrscheinlich es ist das dieses Item in der Kiste landet (Eine Zahl zwischen 1 - 100) Die Datenbank Connection und das abrufen der Tabelle funktioniert einwandfrei. Nur irgendwie kommt es mir so vor als Würde er die Daten nur teilweise abrufen.. Ich weiß nicht warum. Und in die Kisten wird es auch nicht geladen. Nur ab und zu und dann mit der falschen Anzahl. Um das zu prüfen hab ich an zwei Stellen im Code etwas in den öffentlichen Chat schreiben lassen. Einmal "1 + Materialname aus der DB" und dann nochmal "2 + Materialname aus DB" nachdem per Random die Wahrscheinlichkeit "überprüft" wurde. Edit: Irgendwie wird in der While-Schleife nur die erste Spalte aus dem ResultSet durchgegangen, also die erste Kiste. Und die wird nur befüllt mit den Items, wenn ich den Server stoppe und dann wieder starte. Und was die Items angeht, ist das so als würde das Plugin nach Lust und Laune einfach an irgendeiner Stelle stoppen... Hier erstmal der Code: public void FillChests () { Random generator = new Random(); World world = Bukkit.createWorld(WorldCreator.name("world")); /* Hier werden aus der MySQL Klasse alle Kisten mit dem Typ und der Position aus der Datenbank abgerufen */ ResultSet pvpChests = mysql.getAllChests(); try { // Eine While-Schleife die je Kiste ausgeführt wird while (pvpChests.next()) { int type = pvpChests.getInt("type"); int posx = pvpChests.getInt("posx"); int posy = pvpChests.getInt("posy"); int posz = pvpChests.getInt("posz"); // Die Position der Kiste Location loc = new Location(world, posx, posy, posz); Block block = loc.getBlock(); // Hier erstelle ich ein neues Inventar mit 27 Slots (Wie eine einzelne Kiste) Inventory inv = Bukkit.createInventory(null, 27); // Hier werden alle Items für die Kiste nach dem jeweiligen Typ aus der Datenbank abgerufen ResultSet items = mysql.getChestItems(type); // Eine Schleife die für jedes Item ausgeführt wird while (items.next()) { // Name des Materials String mat = items.getString("blocktype"); // Maximale Anzahl int anzahl = items.getInt("maximal"); // Die Wahrscheinlichkeit (1 - 100) int zufall = items.getInt("prob"); // Jetzt wird eine zufällige Zahl für die Wahrscheinlichkeit erzeugt int ergebnis = generator.nextInt(100); // Die eben erwähnte Nachricht Bukkit.broadcastMessage("1" + mat); // Wenn die eben erzeugte Zahl kleiner/gleich als die Wahrscheinlichkeit ist: if (ergebnis <= zufall) { // Die eben erwähnte zweite Nachricht Bukkit.broadcastMessage("2" + mat); ergebnis = 0; // So lange die Anzahl 0 ist, wird eine neue Zahl generiert while (ergebnis == 0) { ergebnis = generator.nextInt(anzahl); } // Item wird dem Inventar hinzugefügt inv.addItem(new ItemStack(Material.getMaterial(mat), ergebnis)); } } // Die Chest wird abgerufen Chest chest = (Chest) block.getState(); // Das Inventar der Chest wird agerufen Inventory chestinv = chest.getInventory(); // Die Kiste wird geleert chestinv.clear(); // Das Inventar wird in ein ItemStack Array gelegt ItemStack[] itemss = inv.getContents(); // Die Items werden dem Inventar der Kiste hinzugefügt for (ItemStack is : itemss) { if (is != null) { chestinv.addItem(is); } } } } catch (SQLException e) { e.printStackTrace(); } } Irgendwie läuft der Code ab der (Ab dem Kommentar im Code "// Item wird dem Inventar hinzugefügt") Stelle einfach nicht weiter. Ich bekomme keinen Fehler, keine Meldung einfach garnichts.. Weiß jemand was da dass Problem ist? Was da sein könnte warum das einfach nicht weiter läuft.. Danke im Voraus für Antworten! bearbeitet 14. August 2017 von mik3_1802 Bilder waren falsch gesetzt und etwas hinzugefügt Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
mik3_1802 Geschrieben 14. August 2017 Autor Share Geschrieben 14. August 2017 (bearbeitet) Also ich hab das Problem gelöst, nachdem ich bis um 4/5Uhr morgens weiter probiert habe Ich hab das jetzt so geregelt, das ich die Chest und das Inventory vor der while-Schleife definiert habe. Irgendwie macht das Probleme wenn es innerhalb der Schleife ist. Dann habe ich noch die Variable int ergebnis, die ich für die Wahrscheinlichkeit und für die Anzahl benutzt habe getrennt. Also einen Integer für die Wahrscheinlichkeit und einen extra für die Anzahl der Items. public void FillChests () { World world = Bukkit.createWorld(WorldCreator.name("world")); ResultSet pvpChests = mysql.getAllChests(); // Hier habe ich die Chest und das Inventory vor (!) der Schleife definiert Chest chest = null; Inventory chestinv = null; /* Und hier die Integer für Wahrscheinlichkeit (int ergebnis) und für die Anzahl (int anz) getrennt */ int ergebnis = 0; int anz = 0; try { while (pvpChests.next()) { Danach hat es funktioniert bearbeitet 14. August 2017 von mik3_1802 Code eingefügt Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden