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

Probleme mit Bungee-Modul

Status
Für weitere Antworten geschlossen.
D

deleted28539

Guest
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
 

FelixKlauke

Erzengel
Ehem. Teammitglied
Registriert
5 Januar 2014
Beiträge
1.038
Diamanten
299
Minecraft
FelixKlauke
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:
Javascript:
   at net.md_5.bungee.api.chat.TextComponent.fromLegacyText(TextComponent.java:35)
    at net.md_5.bungee.connection.InitialHandler.disconnect(InitialHandler.java:535)
    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 )
 
D

deleted28539

Guest
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
 
Status
Für weitere Antworten geschlossen.
Oben