Laden...

(MC) Zlib komprimierte Packets lesen

Erstellt von thexbasic vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.167 Views
T
thexbasic Themenstarter:in
8 Beiträge seit 2014
vor 8 Jahren
(MC) Zlib komprimierte Packets lesen

Hallo Forum,

zuletzt hatte ich mich mit dem Spiel Minecraft auseinandergesetzt und dafür einen Chat-Client in der Konsole geschrieben, wobei ein Spieler emuliert wird & sich auf einen Server verbindet.
Das klappte soweit ganz gut, selbst die AES-Verschlüsselung hab ich mit einiger Hilfe eines Freundes zum laufen bekommen.
Bisher hat das ganze 1A funktioniert.. nun aber mit der Version 1.8 kam die packet-compression hinzu.
Belesen wie das ganze funktioniert habe ich mich auch schon: HIER und HIER.

Nun zu meinem Problem...
Sobald Packet 0x03 mit dem Threshhold einmal eingetroffen ist, werden ausgehende Packets bereits mit der DotNetZipLib-DevKit-v1.9 komprimiert.
Allerdings weiss ich nicht, wie ich das empfangen umsetzen könnte, da das Packet Stückchenweise gelesen wird, aber im ganzen komprimiert ist..

Ich packe in den Anhang mal meine derzeitige Player-Class mit Utils und hoffe, dass mir jemand aushelfen kann (Jeder Tipp ist willkommen 😛).

Danke im Vorraus,
MfG. Basic

Hinweis von MrSparkle vor 8 Jahren

Angehängtes Projekt entfernt.

Bitte beachte [Hinweis] Wie poste ich richtig?, Punkt 4.1: Bitte keine kompletten Projekte posten

5.658 Beiträge seit 2006
vor 8 Jahren

Hi thexbasic,

es ist nicht der Sinn dieses Forums, hier einfach ein komplettes Projekt zu posten und andere den Fehler suchen zu lassen. Du kannst dein Problem auch beschreiben und evtl. mit einem kurzen Codeausschnitt veranschaulichen.

Wenn du allerdings davon ausgehst, daß sich jeder hier mit der Minecraft-API auskennt, wirst du wahrscheinlich wenig Erfolg haben.

Christian

Weeks of programming can save you hours of planning

T
thexbasic Themenstarter:in
8 Beiträge seit 2014
vor 8 Jahren

Hi MrSparkle,

Nun ja das Problem zu beschreiben habe ich grob versucht (einen stream beim lesen zu decompressen).. allerdings könnten Randbedingungen ja sein, dass es auch sein kann, dass NetworkStream verschlüsselt ist und daher über den AesStream gelesen werden muss (kenne mich da wie gesagt noch nicht so aus), von daher dachte ich wäre es einfacher wenn man sich selbst einen Überblick verschaffen kann, anstatt die Methoden alle einzeln und zusammenhanglos zu kopieren..

Im Prinzip hat das Problem auch nicht viel mit der Minecraft-Api, sondern wie geschrieben, lesen von streams zutun... Dazu kommt, wenn man sich in Minecraft (kinder?)-foren umschaut geht es größtenteils auch um Java, nicht C#.. Was auch zum letzten Punkt führt; Da ich selber am Ende mit meinem Spanisch bin dachte ich, frage ich lieber in einem Fach-Forum.

1.346 Beiträge seit 2008
vor 8 Jahren

Hallo thexbasic,

Ich habe mich vor einiger Zeit lange damit beschäftigt und eine Bibliothek geschrieben, die mit dem Minecraft Protokoll umgeht. Das ganze ist aber leider aktuell veraltet(der letzte Commit ist knapp 1.5 Jahre alt), aber vielleicht hilft es dir weiter.

Bibliothek

Sich darauf zu verlassen, dass Packete am Stück ankommen ist generell keine gute Idee, Ich habe damals eine Abstraktionsschicht über den Netzwerkstream geschrieben, welcher mir sicherstellt, dass immer so viel gelesen wird, wie ich erwarte.

Das findest du hier.

Lieben Gruß,
pdelvo

W
872 Beiträge seit 2005
vor 8 Jahren

Die ZLib bezieht sich auf einen komprimierten Stream - im Gegensatz zum Zip File Format, auf das sich die meisten Beispiele beziehen und das einen Stream mit einem zusätzlichen Header darstellt.
Hast Du es schon mal mit ZLibStream.Klasse probiert? Das sollte problemlos funktionieren.

T
thexbasic Themenstarter:in
8 Beiträge seit 2014
vor 8 Jahren

Hi pdelvo,
habe mir mal deine lib angeguckt, soweit ganz nett, allerdings - da ich ja eigentlich nur einen Chat schreiben wollte - ist das schon fast zu umfangreich 😄 aber danke

Und auch danke weismat, das mit der Stream-Klasse ist vollkommen an mir vorbei gegangen.. Habe jetzt aber eine grobe Idee und werde etwas rumprobieren.

MfG. Basic

Edit (2):

Hab es gelöst... Wer Interesse an dem fertigen Projekt hat kann sich per PM melden 😃