Gelöst Probleme mit Bungee-Modul

Dieses Thema im Forum "Programmierung" wurde erstellt von Xhadius, 24. Oktober 2016.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Xhadius
    Online

    Xhadius Administrator

    Registriert seit:
    9. März 2012
    Beiträge:
    762
    Ort:
    Freiburg im Breisgau
    Minecraft:
    Xhadius
    Hallöchen,

    ich wollte aktuell ein kleines Bungee-Modul schreiben, welches im Prinzip eine erweiterte "Whitelist" ist.
    Soweit funktioniert auch alles Einwandfrei, jedoch bin ich noch nicht ganz mit der Ausführung zufrieden.

    Was ich erreichen möchte, ist dass nach einer negativen Abfrage entsprechend der Nutzer vom Proxy getrennt wird und entsprechend eine Meldung hierzu erhält.
    Das habe ich auch über das LoginEvent in Bungee problemlos geschafft, da PreLoginEvent unpraktisch wäre da es keine UUID trägt und PostLoginEvent zu spät ist.

    Der relevante Code hierzu (der dafür sorgt dass du beim Join einfach direkt rausgeschmissen wirst, bevor das an die Spigot-Instanz dahinter gelangst) ist hier zu sehen:
    http://hastebin.com/sigasaroke.java

    Das funktioniert soweit auch alles Einwandfrei, verursacht aber ein Problem:
    Ich erhalte eine abartig lange Fehlermeldung, dass die Authentifizierung mit minecraft.net fehlschlägt, was reproduzierbar an dem Abbrechen des Events liegt.
    Breche ich das Event aber nicht ab, wird der Spieler erstmal auf den Server geleitet bevor er eine Sekunde später dann getrennt wird, was eben nicht das ist was ich erreichen möchte.
    http://hastebin.com/egubupetoj

    Ich wäre ziemlich froh zu erfahren ob ich hier etwas falsch mache oder falsch bedenke.
    Nach ähnlichen Problemen habe ich vergeblich gegoogelt.
    Ich habe auch schon versucht mit Intends zu arbeiten und damit die ganze Eventabarbeitung davon abhängig zu machen um das Abbrechen zu vermeiden, jedoch ohne Erfolg.
    Die Fehlermeldung taucht trotzdem noch in der Konsole auf.

    Gruß
    Xhadius
     
    #1
  2. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Hey,

    danke für die schön formatierte und gut ausgeschmückte Fehlermeldung, damit kann man arbeiten und da hilft man gern. Ein paar Dinge ließen sich dazu finden:
    https://github.com/SpigotMC/BungeeCord/issues/1114

    Den Fehler sollte es eigentlich nicht mehr geben und er ist Jahre alt. Da er trotzdem auftritt, tiefer forschen.
    Hier ist die Zeile, in der in BungeeCord der Disconnect stattfindet: https://github.com/SpigotMC/BungeeC..._5/bungee/connection/InitialHandler.java#L535

    In deiner Fehlermeldung lassen sich unter anderem folgende Zeilen finden:
    Code (Javascript):
    1.    at net.md_5.bungee.api.chat.TextComponent.fromLegacyText(TextComponent.java:35)
    2.     at net.md_5.bungee.connection.InitialHandler.disconnect(InitialHandler.java:535)
    3.     at net.md_5.bungee.connection.InitialHandler$6.done(InitialHandler.java:482)
    Das Problem lässt sich weiter bis hierhin verfolgen: https://github.com/SpigotMC/BungeeC...t/md_5/bungee/api/chat/TextComponent.java#L35

    Auf die Schnelle erschließt sich mir der Fehler nicht. Hast du es mal versucht, direkt mit BaseComponent zu arbeiten, auch wenn du das erst später vorhast? Damit kannst du das eventuell umgehen ( https://github.com/SpigotMC/BungeeC..._5/bungee/connection/InitialHandler.java#L535 )
     
    #2
  3. Xhadius
    Online

    Xhadius Administrator

    Registriert seit:
    9. März 2012
    Beiträge:
    762
    Ort:
    Freiburg im Breisgau
    Minecraft:
    Xhadius
    Hallo und danke für die schnelle Antwort!

    Ich habe nun entsprechend über TextComponent (wie es im BungeeCord-Wiki empfohlen wird) eine kleine Testnachricht erstellt.

    Insgesamt sieht der Code nun wie folgt aus:
    http://hastebin.com/ucosuyajib.java

    Im Endeffekt ändert sich nun wieder nichts, die Nachricht wird ausgegeben und die Verbindung gekappt.
    Die Fehlermeldung ist exakt die selbe geblieben: http://hastebin.com/wowugiqovi.lua

    Das Problem taucht wie erwähnt nur dann auf, solange die Zeile 5 existiert.
    Diese ist aber notwendig um zu gewährleisten dass der Spieler nicht direkt den Server betritt um dann gekickt zu werden, sondern direkt vom Proxy aufgehalten wird.

    Gruß
    Xhadius

    // Edit
    Um das hier zu verhindern: https://xkcd.com/979/

    Das Problem lag darin, dass der Cancelreason gefehlt hat.
    Vor
    event.setCancelled(true);
    muss ein
    event.setCancelReason("");
    gesetzt werden.

    Dieser darf auch leer sein, er wird in dem Zusammenhang ohnehin nicht angezeigt.

    Vielen lieben Dank an [Dev] iTzSasukeHDxLP der im Chat dann den richtigen Einfall hatte! :D
     
    #3
Status des Themas:
Es sind keine weiteren Antworten möglich.