mik3_1802 Posted August 13, 2017 Share Posted August 13, 2017 (edited) 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! Edited August 14, 2017 by mik3_1802 Bilder waren falsch gesetzt und etwas hinzugefügt Link to comment Share on other sites More sharing options...
mik3_1802 Posted August 14, 2017 Author Share Posted August 14, 2017 (edited) 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 Edited August 14, 2017 by mik3_1802 Code eingefügt Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now