• 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!

Fehler beim Scoreboard setzen.

Max Scha

Minecrafter
Mitglied seit
Jun 30, 2017
Beiträge
18
Alter
30
#1
Guten Tag Allerseits!
Nunja, nach ca. 2 Stunden von sinnlosem Anschauen meines Quelltextes bin ich nicht weiter gekommen, deswegen schilder ich mal hier mein Problem:

Mein aktuelles Projekt beschäftigt sich damit, dass die Punkte von einem Spieler in dem Scoreboard, welches hier das Problem ist, angezeigt werden. Ich verzweifele daran, dass das Scoreboard irgendwie die Punkte von allen Spielern gleich setzt obwohl doch eigentlich die Punktzahl jedes Spielers einzeln angezeigt werden sollte. Hier der Code der Methode:

Code:
public void UpdateKills(Player p) {
        kills.resetScores(selbst.getEntry());
        for (int i = 0; i < points.length; i++) {
            if (names[i].equals(p)) {
                selbst = oj.getScore("§e§l" + String.valueOf(points[i]));
                selbst.setScore(1);
                p.setScoreboard(kills);
                break;
            }
        }
    }
Das ganze ist so geregelt, dass es 2 Arrays gibt, die für Spieler und Punktzahl immer den Selben "Zähler" haben (Also das was in den Eckigen Klammern [] steht). Hier an der Stelle wird halt nach dem "Zähler" gesucht um dem Spieler seine Punkte zuzuweisen und diese ins Scoreboard einzufügen, dabei gibt es doch das Problem, dass hier Jeder Spieler irgendwie den Wert der Punkte des einen Spielers zugewiesen bekommt.

Danke für eure Hilfe!
 
F

Figz

Guest
#2
Nutze an Stelle deiner 2 Arrays eine HashMap.
Außerdem sehen wir hier nur einen kleinen Teil deines gesamten Quelltextes(hoffe ich zumindest).
Das erschwert uns dir zu helfen.

Dennoch einige Dinge, woran es liegen könnte:

• Die Variable "selbst" scheint mir global definiert zu sein: Hast du nicht für jeden Spieler eine eigene Instanz dieser Klasse(was ich vermute nicht der Fall ist) so wird diese Variable überschrieben.

if (names.equals(p)): Ich weiß nicht was du genau in der Variable "names" speicherst (Laut Namensgebung die Namen der Spieler) -> Somit würde ich aus dem Bauch heraus sagen, dass du dort immer ein "false" erhälst.

• Du verwendest für jeden Spieler das gleiche Scoreboard -> Ist das so gewollt?

• Ein Array ist soooo unglücklich gewählt für dein Vorhaben, dass es mich schon traurig macht.

 

Max Scha

Minecrafter
Mitglied seit
Jun 30, 2017
Beiträge
18
Alter
30
#3
Die hashmap war in Meinem Fall sehr ungünstig, da die Sortierung nicht so geklappt hat wie ich wollte (Das Scoreboard beinhaltet noch eine Topliste) und da ich auch Schwierigkeiten bei der Programmierung der Liste hatte bin ich im Array stecken geblieben.

Die Methode die ich da vorgelegt habe wird von einer "for-all" schleife ausgeführt -> Diese Methode wird für jeden einzelnen Spieler durchgeführt.

"Names" Speichert alle Spieler (als Player nicht als Name). Zudem funktioniert die Abfrage ja. Das Scoreboard wird lediglich für alle Spieler gesetzt... was es ja nicht soll
"Selbst" ist ein Scoreboard Objective für die eigenen Punkte.

Nun ist meine Frage: was meinst du mit dem gleichen Scoreboard für alle?
 
Zuletzt bearbeitet:

iTzCeddy

Minecrafter
Mitglied seit
Mai 31, 2015
Beiträge
24
Bewertungen
24
Minecraft
iTzCeddy
#4
Poste hier mal bitte deinen kompletten Code und deine beiden Arraylists. Ansonsten können wir nur raten, wo das Problem liegt.

Grüße
Ceddy
 
F

Figz

Guest
#5
"Names" Speichert alle Spieler (als Player nicht als Name). Zudem funktioniert die Abfrage ja. Das Scoreboard wird lediglich für alle Spieler gesetzt...
Dann benutze den Vergleichoperator "==", das Vergleichen von Referenzen geht deutlich schneller.

"Selbst" ist ein Scoreboard Objective für die eigenen Punkte.
Falsch "selbst" ist eine Variable der Klasse "Score".

"oj" ist dein Objective.

as Scoreboard wird lediglich für alle Spieler gesetzt... was es ja nicht soll
Wenn jeder Spieler das gleiche Scoreboard gesetzt bekommt, liegt es daran, dass du für jeden Spieler das gleiche Scoreboard setzt.
Dein Scoreboard "kills" scheint mir wie gesgt eine Instanzvariable zu sein.

Wenn du willst, dass jeder Spieler ein eigenes Scoreboard hat, musst du an irgendeiner Stelle ein neues Scoreboard für den Spieler erstellen.
Und dann musst du es entweder irgendwo Speichern (HashMap) oder du ziehst es dir jedes mal aus dem Player. Ich würde mich für das erste entscheiden.


Die hashmap war in Meinem Fall sehr ungünstig, da die Sortierung nicht so geklappt hat wie ich wollte (Das Scoreboard beinhaltet noch eine Topliste) und da ich auch Schwierigkeiten bei der Programmierung der Liste hatte bin ich im Array stecken geblieben.
Und wie erstellst du jetzt deine Topliste mit Hilfe des Arrays? Du kannst auch durch eine Map iterieren.
Wenn du die Elemente in der Reihenfolge haben willst, wie du sie einfügst(Wo ich persönlich keinen Sinn sehe) dann kannst du auch die LinkedHashMap verwenden.


Ich denke dir fehlt noch eine ganze Menge an Java Kenntnissen, das ist aber nicht schlimm. Nimm einfach unsere Tipps an und versuche dann auf dieser Grundlage deine anderen Probleme zu lösen. Du wirst damit schneller vorankommen, als wenn du z.B. bei deinen Arrays bleibst.
 

Max Scha

Minecrafter
Mitglied seit
Jun 30, 2017
Beiträge
18
Alter
30
#6
Dann benutze den Vergleichoperator "==", das Vergleichen von Referenzen geht deutlich schneller.
ok, danke

Falsch "selbst" ist eine Variable der Klasse "Score".

"oj" ist dein Objective.
Ja mimimi ist ok, ich weiß jetzt auch nicht alles aus dem FF, aaaber ich kann es benutzen :p

Wenn jeder Spieler das gleiche Scoreboard gesetzt bekommt, liegt es daran, dass du für jeden Spieler das gleiche Scoreboard setzt.
Dein Scoreboard "kills" scheint mir wie gesgt eine Instanzvariable zu sein.

Wenn du willst, dass jeder Spieler ein eigenes Scoreboard hat, musst du an irgendeiner Stelle ein neues Scoreboard für den Spieler erstellen.
Und dann musst du es entweder irgendwo Speichern (HashMap) oder du ziehst es dir jedes mal aus dem Player. Ich würde mich für das erste entscheiden.
Das Scoreboard wird ja für jeden Spieler "neu bearbeitet", da es sowieso ständig updaten muss. Was ich halt nicht verstehe ist, wieso das Eine Scoreboard für alle gesetzt werden kann, wenn doch für jeden Spieler ein neues gesetzt wird.

Heißt ich habe eine forEach schleife für jeden Spieler und diese funktioniert auch. Jeder Spieler bekommt innerhalb dieser Schleife ein Scoreboard gesetzt.

Code:
public void updateScoreboard() {

        for (Player player : Bukkit.getServer().getOnlinePlayers()) {
            for (int i = 0; i < points.length; i++) {
                if (names[i]==player) {
                    System.out.println(player+" hat Zahl "+i+" und "+points[i]+ " Punkte!");
                  
                  
                    kills.resetScores(selbst.getEntry());
                    selbst = oj.getScore("§e§l" + String.valueOf(points[i]));
                    selbst.setScore(1);
                    break;
                }
            }

//Hier kommt noch anderes, unwichtiges zeug.

player.setScoreboard(kills);
}
Ja ich habe das Ganze etwas verschoben, damit ich dort eventuell etwas bezwecke aber das hat bis jetzt nichts erreicht. Zudem sieht man jetzt auch wie ich mir das eigentlich gedacht habe.

Und wie erstellst du jetzt deine Topliste mit Hilfe des Arrays? Du kannst auch durch eine Map iterieren.
Wenn du die Elemente in der Reihenfolge haben willst, wie du sie einfügst(Wo ich persönlich keinen Sinn sehe) dann kannst du auch die LinkedHashMap verwenden.
Meine Arrays werden beim Start des Minispiels erstellt, in meiner Klasse befindet sich eine Eigene Methode.
Bei der Hashmap hatte ich, wie bei den Arrays auch, auch einen Sortieralgorithmus, der die Hashmap letzendlich in eine TreeMap gemacht hat. Nur hatte ich das Problem, dass mein eingetragener Wert, egal was ich gemacht habe zu "null" wurde und somit nichts funktioniert hat. Da ich mich mit Maps auch nicht besonders auskenne habe ich das alles dann in Arrays gepackt. Ja mir ist bewusst, dass das unschön ist aber mir fiel einfach schlichtweg nichts besseres ein.

Ich denke dir fehlt noch eine ganze Menge an Java Kenntnissen, das ist aber nicht schlimm. Nimm einfach unsere Tipps an und versuche dann auf dieser Grundlage deine anderen Probleme zu lösen. Du wirst damit schneller vorankommen, als wenn du z.B. bei deinen Arrays bleibst.
Ja das kann durchaus sein, da ich Java im Informatik Unterricht in der Schule lerne/gelernt habe und ich weiß selber, dass mir da noch ein paar dinge fehlen. Jedoch bemühe ich mich etwas zu lernen.
 

Max Scha

Minecrafter
Mitglied seit
Jun 30, 2017
Beiträge
18
Alter
30
#8
OK, wenn du dir nicht helfen lassen will, warum schreibst du dann hier im Forum? Aber zum Glück bietet dieses Forum ja eine Ignoreliste.
Was ist denn los? Das war schlichtweg als Spaß gedacht. Ich wusste ja auch, dass ich mich falsch ausgedrückt hab aber man wusste ja was gemeint war ._.
 
Mitglied seit
Okt 25, 2015
Beiträge
490
Bewertungen
372
Alter
18
Minecraft
FastFelix771
#9
Was ist denn los? Das war schlichtweg als Spaß gedacht. Ich wusste ja auch, dass ich mich falsch ausgedrückt hab aber man wusste ja was gemeint war ._.
Man kommt sich da eher veräppelt vor, als alles andere.
Wenn du Hilfe suchst, dann solltest du die Ratschläge die man dir gibt auch ernst nehmen!
Da ist sowas einfach unpassend! Punkt.

da ich Java im Informatik Unterricht in der Schule lerne/gelernt habe
Offenbar ja nicht wirklich...

Jedoch bemühe ich mich etwas zu lernen.
Ja mimimi ist ok, ich weiß jetzt auch nicht alles aus dem FF, aaaber ich kann es benutzen :p
Die zwei Aussagen heben sich quasi gegenseitig auf.

Das Scoreboard wird ja für jeden Spieler "neu bearbeitet"
Wo?
Poste doch bitte einfach mal den gesamten Code - nicht nur irgendeine Methode die komplett aus dem Kontext gerissen da steht.
 
F

Figz

Guest
#10
Poste doch bitte einfach mal den gesamten Code - nicht nur irgendeine Methode die komplett aus dem Kontext gerissen da steht.
Vor Allem würde ich gerne sehen, was der Variable "kills" zugewiesen wird.
Das Scoreboard wird ja für jeden Spieler "neu bearbeitet", da es sowieso ständig updaten muss. Was ich halt nicht verstehe ist, wieso das Eine Scoreboard für alle gesetzt werden kann, wenn doch für jeden Spieler ein neues gesetzt wird.
In deinem neuen Code setzt du das Scoreboard bei keinem Spieler mehr. => Ist allerdings nicht schlimm, solange du es irgendwo anders einmalig setzt.

Wenn du Lust hast (nur ein Vorschlag) können wir uns mal auf Discord unterhalten und ich erkläre es dir.
 

Max Scha

Minecrafter
Mitglied seit
Jun 30, 2017
Beiträge
18
Alter
30
#11
Man kommt sich da eher veräppelt vor, als alles andere.
Wenn du Hilfe suchst, dann solltest du die Ratschläge die man dir gibt auch ernst nehmen!
Da ist sowas einfach unpassend! Punkt.
-.- auf solche Weisen Worte kann ich verzichten...

Vor allem Wenn du mich hier auch noch beleidigen willst.

Die zwei Aussagen heben sich quasi gegenseitig auf.
Ich kenne meinen Code doch nicht auswendig? Aber ich weiß was er macht. Du musst es ja nicht verstehen wenn du nicht willst.

Wo?
Poste doch bitte einfach mal den gesamten Code - nicht nur irgendeine Methode die komplett aus dem Kontext gerissen da steht.
Es ist mir einfach unangenehm meinen Gesamten Code in einem Forum zu veröffentlichen. In dem Code den ich als Antwort angegeben habe steht alles was für meine eigentlich relativ leichte Frage relevant ist, weil in keiner anderen Methode das Scoreboard gesetzt wird. Deswegen verstehe ich auch nicht warum das da passiert.

Vor Allem würde ich gerne sehen, was der Variable "kills" zugewiesen wird.
Sorry jetzt weiß ich nicht was du damit meinst xd

Wenn du Lust hast (nur ein Vorschlag) können wir uns mal auf Discord unterhalten und ich erkläre es dir.
Sehr gerne
 
F

Figz

Guest
#12
alles was für meine eigentlich relativ leichte Frage relevant ist, weil in keiner anderen Methode das Scoreboard gesetzt wird. Deswegen verstehe ich auch nicht warum das da passiert
Leider eben nicht. Das Scoreboard ist schon ein relativ komplexes Thema.. Unter anderem wissen wir auch zum Teil garnicht welchen Typ deine Variablen haben. Wenn es dir unangenehm ist, dass poste deinen Code auf pastebin und schick mir den link per pm.

Ich werde ihn schon nicht verwenden oder veröffentlichen, ich habe meine eigene Scoreboard API, die sowieso besser ist, als jede die derzeit öffentlich verfügbar ist.
 
Mitglied seit
Okt 25, 2015
Beiträge
490
Bewertungen
372
Alter
18
Minecraft
FastFelix771
#13
-.- auf solche Weisen Worte kann ich verzichten...
Vor allem Wenn du mich hier auch noch beleidigen willst.
Das ist überhaupt nicht als Beleidigung gemeint, eher als (konstruktiv orientierte) Kritik, aber da stoßen wir grade kollektiv auf Granit.

Ich kenne meinen Code doch nicht auswendig?
Mag gut sein, allerdings hast du ihn, im Gegensatz zu uns, bei dir komplett vorliegen!
Wir kennen deinen Code ebenfalls nicht auswendig und dadurch, dass wir keinen umfassenderen Einblick in den Code bekommen, können wir dir nichts Genaueres sagen zu deinem Problem - du bist also gefragt! Wenn du uns nur einen Bruchteil gibst, können wir wenig helfen.

Es ist mir einfach unangenehm meinen Gesamten Code in einem Forum zu veröffentlichen.
Das kann ich mir sehr gut vorstellen, so grantig wie du reagierst.
Nobody's perfect. Du brauchst dich nicht unnötig zu zieren und fürchten, dass jemand ein schlechtes Wort über deinen Code verlieren könnte.

In dem Code den ich als Antwort angegeben habe steht alles was für meine eigentlich relativ leichte Frage relevant ist, weil in keiner anderen Methode das Scoreboard gesetzt wird. Deswegen verstehe ich auch nicht warum das da passiert.
Das mag sein, aber du erstellst das Scoreboard dort nicht - du nimmst irgendwelche Variablen von außerhalb der gezeigten Methode mit dazu. Und der interessante Part, also was diese Variablen sind und wo sie wirklich herkommen, bleibt uns verborgen.

Ich hoffe du kannst dein Problem mit @Figz' Hilfe lösen.
Ist wirklich ein nettes Angebot, by the way. +1

PS:
Sorry jetzt weiß ich nicht was du damit meinst xd
Nichts für Ungut, aber das passt eben nicht ganz zusammen.
Du müsstest doch ganz genau sehen können was wir meinen? :confused:
 

Max Scha

Minecrafter
Mitglied seit
Jun 30, 2017
Beiträge
18
Alter
30
#14
@Figz erstmal danke, dass du mir deine Hilfe anbietest. Ich sollte dir eigentlich eine PN oder sowas in der Art geschickt haben xd.
 
Allgemein
Help Benutzer
    Matthias Matthias: und Nougat Bits <3
    Oben