1. 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!
  2. Möchtest du für deinen Server werben und mehr Spieler finden, solltest du an unseren Bauwerk Showcases teilnehmen. Damit erreichst du innerhalb von 14 Tagen bis zu 50.000 Aufrufe. Mehr dazu hier.

Fehler beim Scoreboard setzen.

Dieses Thema im Forum "Spigot" wurde erstellt von Max Scha, 17. April 2018 um 12:38 Uhr.


  1. Max Scha
    Offline

    Max Scha

    Registriert seit:
    30. Juni 2017
    Beiträge:
    16
    Geschlecht:
    männlich
    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 (Text):
    1. public void UpdateKills(Player p) {
    2.         kills.resetScores(selbst.getEntry());
    3.         for (int i = 0; i < points.length; i++) {
    4.             if (names[i].equals(p)) {
    5.                 selbst = oj.getScore("§e§l" + String.valueOf(points[i]));
    6.                 selbst.setScore(1);
    7.                 p.setScoreboard(kills);
    8.                 break;
    9.             }
    10.         }
    11.     }
    12.  
    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!
     
  2. Werbung
    Online

    Werbung

  3. Figz
    Offline

    Figz

    Registriert seit:
    9. Mai 2016
    Beiträge:
    193
    Geschlecht:
    männlich
    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.

     
    • Hilfreich Hilfreich x 2
  4. Max Scha
    Offline

    Max Scha

    Registriert seit:
    30. Juni 2017
    Beiträge:
    16
    Geschlecht:
    männlich
    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: 17. April 2018 um 17:59 Uhr
  5. iTzCeddy
    Offline

    iTzCeddy

    Registriert seit:
    31. Mai 2015
    Beiträge:
    23
    Geschlecht:
    männlich
    Minecraft:
    iTzCeddy
    Poste hier mal bitte deinen kompletten Code und deine beiden Arraylists. Ansonsten können wir nur raten, wo das Problem liegt.

    Grüße
    Ceddy
     
  6. Figz
    Offline

    Figz

    Registriert seit:
    9. Mai 2016
    Beiträge:
    193
    Geschlecht:
    männlich
    Dann benutze den Vergleichoperator "==", das Vergleichen von Referenzen geht deutlich schneller.

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

    "oj" ist dein Objective.

    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.


    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.
     
    • Hilfreich Hilfreich x 1
  7. Max Scha
    Offline

    Max Scha

    Registriert seit:
    30. Juni 2017
    Beiträge:
    16
    Geschlecht:
    männlich
    ok, danke

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

    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 (Text):
    1. public void updateScoreboard() {
    2.  
    3.         for (Player player : Bukkit.getServer().getOnlinePlayers()) {
    4.             for (int i = 0; i < points.length; i++) {
    5.                 if (names[i]==player) {
    6.                     System.out.println(player+" hat Zahl "+i+" und "+points[i]+ " Punkte!");
    7.                  
    8.                  
    9.                     kills.resetScores(selbst.getEntry());
    10.                     selbst = oj.getScore("§e§l" + String.valueOf(points[i]));
    11.                     selbst.setScore(1);
    12.                     break;
    13.                 }
    14.             }
    15.  
    16. //Hier kommt noch anderes, unwichtiges zeug.
    17.  
    18. player.setScoreboard(kills);
    19. }
    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.

    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.

    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.
     
  8. BlackHole
    Offline

    BlackHole

    Registriert seit:
    1. Juli 2012
    Beiträge:
    511
    Geschlecht:
    männlich
    Minecraft:
    BlackHole
    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.
     
    • Gefällt mir Gefällt mir x 1
  9. Max Scha
    Offline

    Max Scha

    Registriert seit:
    30. Juni 2017
    Beiträge:
    16
    Geschlecht:
    männlich
    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 ._.
     
  10. UnityGaming
    Offline

    UnityGaming

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    321
    Geschlecht:
    männlich
    Minecraft:
    FastFelix771
    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.

    Offenbar ja nicht wirklich...

    Die zwei Aussagen heben sich quasi gegenseitig auf.

    Wo?
    Poste doch bitte einfach mal den gesamten Code - nicht nur irgendeine Methode die komplett aus dem Kontext gerissen da steht.
     
  11. Figz
    Offline

    Figz

    Registriert seit:
    9. Mai 2016
    Beiträge:
    193
    Geschlecht:
    männlich
    Vor Allem würde ich gerne sehen, was der Variable "kills" zugewiesen 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.