• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Problem mit array

Vinnie

Vorarbeiter
Registriert
28 Juni 2014
Beiträge
263
Alter
28
Diamanten
50
Minecraft
Vinnie
Hallo zusammen,

ich erstelle und übe mich gerade an meinem ersten Plugin mit Hilfe des Tutorial von DeBukkit.
Dort bin ich an dem Part, wo man ein array anlegen soll, hängen geblieben und komme nicht weiter.

Der DeBukkit schreibt in seinem Tut. die Zeilen so:

Code:
        //Kommando "hidden"
        if(cmd.getName().equalsIgnoreCase("hidden"))
        {
            if(args.length > 1)
            {
                return false;
            }
            if(args.length == 0)
            {
                Player[] Ziel = getServer().getOnlinePlayers();
               
                for(Player targetPlayer : Ziel)
                {
                   
                }
            }
               
        }

Dies funktioniert bei mir aber nicht. Bei der Zeile: Player[] Ziel = getServer().getOnlinePlayers();
wird folgende Fehlermeldung angezeigt:
Type mismatch: cannot convert from Collection<capture#1-of ? extends Player> to
Player[]

Kann mir da jemand helfen?

Vielen Dank im Vorraus

Dakvain
 

Sabbertran

Kuhfänger
Registriert
24 April 2012
Beiträge
75
Diamanten
0
Minecraft
Sabbertran
Ohne Array könntest du das ganze so machen:

Code:
//Kommando "hidden"
if(cmd.getName().equalsIgnoreCase("hidden"))
{
if(args.length > 1)
{
return false;
}
if(args.length == 0)
{

for(Player targetPlayer : getServer().getOnlinePlayers())
{

}
}

}

Sorry für die nicht vorhandene einrückung. Beim kopieren kommt die nicht mit :D
 

Vinnie

Vorarbeiter
Registriert
28 Juni 2014
Beiträge
263
Alter
28
Diamanten
50
Minecraft
Vinnie
Danke schonmal für die Antwort, ich weiß das es ebenfalls auch so funktioniert und habe dieses Verfahren vorher schon genutzt.
Aber da nun im Tutorial ein array genutzt wird, und ich das auch gerne erlernen möchte, würde ich das gerne so machen. :)
Zudem möchte ich gerne das Geheimnis lüften, warum das bei DeBukkit funktioniert und bei mir, mit dem selben Programm nicht.
 
X

|| xX [DEV][LP] Ms. DivaCraft Xx ||

Guest
Genau deswegen lernt man nicht bei DeBukkit oder sonstigen 'selbsternannte' Experten, man lernt Java und guckt sich dann die JavaDoku an.
Type mismatch: cannot convert from Collection<capture#1-of ? extends Player> to
Player[]
Lässt auf eine relativ neue Version schließen, denn CraftBukkit ändert die Signatur. Steht dort ja auch. Eine Liste kann nicht zu einem Array umgewandelt werden. (Macht auch keinen Sinn)

Bei Java 8 lässt sich daher die neuen Lamda ausdrücke Nutzen.

Code:
// Gegeben Liste task mit einer Klasse, dessen Methode Handle einen String erwartet.
tasks.forEach(h -> {
                h.handle("DoSomething")
});
 

Vinnie

Vorarbeiter
Registriert
28 Juni 2014
Beiträge
263
Alter
28
Diamanten
50
Minecraft
Vinnie
Das ist mir bewusst, dass man nicht bei iwelchen selbsternannten Experten aus dem Internet alles richtig lernt. Aber wo kann ich denn Java richtig lernen?
Gibt es da iwas, was du mir für ein Selbststudium empfehlen könntest?
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
Das ist mir bewusst, dass man nicht bei iwelchen selbsternannten Experten aus dem Internet alles richtig lernt. Aber wo kann ich denn Java richtig lernen?
Gibt es da iwas, was du mir für ein Selbststudium empfehlen könntest?


Java lernen, nicht Bukkit.

Kauf dir Bücher, lies sie und dann, wenn du grundlegende Dinge in Java drauf hast, kannst du dich der Verwendung anderer Libraries, wie Bukkit, zuwenden.
 
G

games6471

Guest
Seit diesem commit, gibt es eine weitere getOnlinePlayer Methode. Diese gibt List<CraftPlayer> zurück. Die alte Methode wurde als ungültig markiert und existiert nicht mehr in der API (Bukkit), jedoch ist sie noch im im Server aus Kompatibilitätsgründen von alten Plugins noch vorhanden (Craftbukkit). Wenn du also Craftbukkit als dependency einsetzt oder eine etwas älter Bukkit API, dann kannst du die alte Methode ohne Probleme verwenden. Desweiteren gibt es auch schon einige Bibliotheken, die dieses Problem umgehen.

Die neue Methode kannst dennoch nutzen und wird von Bukkit auch empfohlen. Du solltest dabei nicht vergessen, dass diese auf älteren Servern nicht verfügbar ist. Selbst bei einer For-Each-Schleife kann dies leicht passieren, obwohl man das gar nicht ahnt. Beispielcode:

Code:
        for (Player player : Bukkit.getOnlinePlayers()) {
            System.out.println(player);
        }

Obwohl man bei Betrachtung auf Source-Code kein Array oder Collection erkennen kann, verändert sich trotzdem der Bytecode (.class; compilierter Java code; die Jar ist ein Archiv, das aus diesen Dateien besteht)


Code:
stack=2, locals=3, args_size=1
0: invokestatic #2 // Method org/bukkit/Bukkit.getOnlinePlayers:()Ljava/util/Collection;
3: invokeinterface #3, 1 // InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
8: astore_1
9: aload_1
10: invokeinterface #4, 1 // InterfaceMethod java/util/Iterator.hasNext:()Z
15: ifeq 38
18: aload_1
19: invokeinterface #5, 1 // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
24: checkcast #6 // class org/bukkit/entity/Player
27: astore_2
28: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream;
31: aload_2
32: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
35: goto 9
38: return

Code:
stack=2, locals=5, args_size=1
0: invokestatic #2 // Method org/bukkit/Bukkit.getOnlinePlayers:()[Lorg/bukkit/entity/Player;
3: astore_1
4: aload_1
5: arraylength
6: istore_2
7: iconst_0
8: istore_3
9: iload_3
10: iload_2
11: if_icmpge 33
14: aload_1
15: iload_3
16: aaload
17: astore 4
19: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
22: aload 4
24: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
27: iinc 3, 1
30: goto 9
33: return
 
Zuletzt bearbeitet von einem Moderator:

Vinnie

Vorarbeiter
Registriert
28 Juni 2014
Beiträge
263
Alter
28
Diamanten
50
Minecraft
Vinnie
Vielen Dank, dann werde ich mich jetzt wohl mal dran setzen! :)

Auch im Zeitalter der modernsten Computer und Maschinen kommt man wohl ohne lesen von Büchern nicht aus. :D

Vielen Dank nochmal!
 
Oben