Nametag ohne echten Namen bei Nick-Change ändern

Dieses Thema im Forum "Programmierung" wurde erstellt von leReturn, 16. August 2016.

  1. leReturn
    Offline

    leReturn

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    6
    Hallo, ich habe ein Nick-Plugin entwickelt, welches mir beim JoinEvent einen zufälligen Nicknamen gibt. Dieser wird als Displayname, in der Tablist und als Nametag gesetzt. Wenn ich vor einem anderen Spieler stehe, updatet sich auch entsprechend der Nametag, das heißt, er wird so, wie der jetzige Displayname ist. Die Tablist und der Displayname updatet sich logischerweise auch mit. Jetzt aber zu meiner Frage; Als Nametag wird zwar der Displayname gesetzt, allerdings nicht nur der Nickname, sondern auch der echte Name. Dann sind beide Namen hintereinander als nametag. Kann man das irgendwie ändern? Das müsste doch auch mit den Scoreboards gehen, oder? Bis jetzt habe ich das alles nur mit den Scoreboards gemacht.
     
    #1
  2. Verschraubt
    Offline

    Verschraubt

    Nein.
    Ein ScoreboardTeam, das als Nametag verwendet wird kann 3 sichtbare Abschnitte haben:
    [Suffix]|[Name]|[Präfix]
    Das Problem dabei ist - naja, es ist nicht wirklich ein Problem, nur eine Falsche Lösung für diese Situation - , dass man nur Suffix und Präfix verändern kann, da der Server die Mitglieder, die in einer Liste des entsprechenden ScoreboardTeams gespeichert sind, an dem Namen identifiziert und dadurch das Team zuordnen kann. Das erinnert einen an die Zeiten, bevor die UUIDs eingeführt wurden.

    Es gibt aber andere Möglichkeiten.

    Du kannst zum Beispiel das Attribut name des GameProfiles deines Spielers, das den Spielernamen als Wert hat, "quick and dirty" mit deinem Nickname austauschen. Diese Methode hat sich auch bei meinen Projekten bewährt und hat selten Probleme gemacht.

    Eine weitere Idee wäre es, alle Pakete, die serverseitig an andere Spieler gesendet werden und irgendetwas mit dem Namen des Spielers XY zutun haben, zu bearbeiten und den Namen entsprechend austauschen. Somit hättest du keine Probleme, den "genickten" Spieler einem ScoreboardTeam zuzuordnen.
    Nachteil: Es werden vermutlich viele Packets gesendet, die man jeweils mit Reflections bearbeiten muss. Spigot gefällt nicht, wenn man das zu häufig macht...
     
    #2
    jensIO gefällt das.
  3. leReturn
    Offline

    leReturn

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    6
    Diese Möglichkeit läuft über Packets, richtig? Wenn ich dann diese Methode verwenden würde, hätte das dann auch Einfluss auf die Tablist, oder würde mir das nur erlauben, den Nametag dementsprechend zu modifizieren?
     
    #3
  4. Verschraubt
    Offline

    Verschraubt

    Das hätte Einfluss auf fast alle Situationen, in welcher der reale Spielername vorkommen würde.

    Jofkos hat dazu eine sehr schöne Klasse bereitgestellt. Tuh mir aber den Gefallen und ließ dir das wirklich durch. Fragen zu einzelnen Abschnitten werden dir hier im Forum auch gerne beantwortet.
     
    #4
  5. leReturn
    Offline

    leReturn

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    6
    So, ich habe mir das nun durchgelesen und in dem Abschnitt
    wird ja dem genickten Spieler die UUID seines echten Namens mitgeteilt. Dient das dem Zweck, dass dieser genickte Spieler nicht als komplett neuer Spieler erkannt wird? Denn ich habe mal ein Nick-Plugin gesehen, welches fast gleich funktioniert, jedoch wurde man zum Spawn teleportiert, wenn man den Server mit einem Nick-Namen, der über Packets gesetzt wurde, betrat. Man wurde sozusagen als neuer Spieler erkannt, was nicht der Fall sein sollte.
     
    #5
  6. Verschraubt
    Offline

    Verschraubt

    Erstmal, warum fügst du in der nickSet Methode jedes mal die gleichen Namen hinzu? Wäre es nicht um einiges sinnvoller, das einmal im Konstruktor zu tun?
    Du hast eine nickSet und eine nickRemove Methode. Ich weiß nicht, was du jetzt genau suchst, aber es sieht so aus, als könnte man mit "deiner" Klasse bereits den Namen abändern.
     
    #6
  7. leReturn
    Offline

    leReturn

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    6
    Ich habe nun eine andere Möglichkeit gefunden, das über Packets umzusetzen. Der Nametag, die Tablist und der Displayname wird entsprechend geändert, alles funktioniert einwandfrei. Jedoch danke für deine Hilfe :D
     
    #7