Jump to content

[GELÖST] Problem beim Kiste befüllen <BUKKIT API>


Empfohlene Beiträge

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)

pvparenachests.png.e272bac51fc38e958ab8c8c614c7fbf4.png

 

- 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)

pvparenachestinv.png.8bf3d2bce041726dfc1382b6c2babbf1.png

 

 

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 von mik3_1802
Bilder waren falsch gesetzt und etwas hinzugefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich hab das Problem gelöst, nachdem ich bis um 4/5Uhr morgens weiter probiert habe :D

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 :D

bearbeitet von mik3_1802
Code eingefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B