Packets in/out abfangen und verändern, droppen oder replacen mit Netty

  • Lang lang ists her und irgendwie finde ich immer hier her zurück. xD


    Hey Leute :3


    Ich arbeite derzeit an einer lokalisation für unser MCProjekt. Dabei stieß ich auf ein kleine Probleme welche mich quasi zwingen Packets abzufangen und zu verändern oder komplett mit einem neuen zu ersetzen. Nachdem ich wieder mehrere Tage gegoogelt und gelesen habe bin ich zu dem Schluß gekommen, dass es performancetechnisch wohl am sinnigsten ist, das ganze über Netty abzuwickeln. Wie Netty, standalone, funktioniert habe ich, denke ich zumindest, begriffen aber wie kann ich mich da geschmeidig einklinken wenn bereits ein ganzes System drumherum (Minecraft) existiert?
    Zusätzlich soll das ganze dann natürlich auch Packetflexibel sein, damit man es für andere Sachen, wie z.B. nen Nicksystem, benutzen kann.


    2015/2016 wurde diese Thematik wohl viel behandelt da die meisten Tuts oder Codeschnipsel aus der Zeit sind, die ich finden konnte. Leider warf mir das was ich bisher sehen durfte immer mal wieder Fragen auf. :/


    Versteht mich nicht falsch ich möchte definitiv keinen fertigen Code oder irgendwas, mehr so ein bisschen Hilfestellung bei Fragen meinerseits und Denkanstöße. :3



    LG Patrik

  • Natürlich wäre selbst machen eine Option. Aber ist das an dieser Stelle sinnvoll? Um das System hinter ProtocolLib zu verstehen ist es natürlich schön sich eine eigene Lösung zu basteln, um daran zu lernen. Man kann aus akademischen Gründen so ziemlich schreiben und nicht schreiben, was man will. Aber wenn du dann ein echtes Produkt entwickeln willst, das im Produktivbetrieb arbeiten soll, dann setzt man meistens besser auf etablierte, stabile und gut supportete Lösungen, die man dann eventuell auch einem Kunden verkaufen kann. Mach ruhig deinen ProtocolLib Klon und probier aus ob er funktioniert. Aber sobald du deine Software produktiv nutzen willst, geh auf Nummer sicher und nutz ProtocolLib, allein schon weil du dessen Funktionsumfang und Essenz nicht in allzu kurzer Zeit so replizieren kannst, dass es im Produktivbetrieb Sinn macht.

    Mit freundlichen Grüßen

    Nathalie


    "Ich geh' nach vorne rauf, wer will mich aufhalten? Ich bin eine Maschine, niemand kann mich ausschalten"


    "Wenn mir mal jemand meine Visage poliert, dann an der Statue von mir."


    "Ich verhandel nicht Snitch ich sprech im Imperativ"

  • Ich kann deine argumentation durchaus nachvollziehen, allerdings wird es noch eine ganze Weile dauern bis es tatsächlich produktiv werden soll, aber es soll natürlich irgendwann darauf hinauslaufen. Du fragst ob es "an dieser Stelle" sinnvoll wär, wo ich mir dann die frage stelle, wann denn? Wann ist etwas wirklich sinnvoll selbst zu machen ohne eine API eines anderen Entwicklers zu nutzen? Bin mir auch nicht sicher ob ich zwingend ne API brauche die rund 1,4 MB groß ist nur um mir ein paar funktionen zu ermöglichen.

    EDIT: und ja ich weiss es gibt auch TinyProtocol was im gegensatz zum großen Bruder ein wahres leichtgewicht ist.

  • Das Tut hat mir google sehr früh bei meiner suche nach Infos ausgegeben und es hat mir einen sehr guten Einblick in die ganze Thematik und den Aufbau gegeben. Allerdings war ich mir nicht besonders schlüssig darüber wie sich das Abfangen von ausgehenden Packets verhält. Soweit ich den Aufbau des Tuts verstanden habe ist es in zwei Segmente unterteilt. Das erste Segment zeigt wie man eingehende Packets abfängt und das zweite wie man ausgehende abfängt.

    Ich nicht nachvollziehen wie man im zweiten Segment allein beim Überschreiben, ohne Listener, Packets abfangen kann, zumal ich die Aufgabe, dass ich das ganze Packetunabhängig machen soll, spontan nicht lösen konnte, da mit "instanceof" beim Override die übereinstimmung des Packets abgefragt wird und ich nicht weiss wie ich das zu überprüfende Packet an die stelle bekomme... hatte dann erst an sowas wie ne Liste mit den eingetragenen Packets in der mainclass gedacht und die wird einfach immer durchiteriert, schien mir aber nicht wirklich effizient zumal das weitere Vorgehen dann ja auch wieder weiterer abfragen bedarf und dann kann ichs auch Hardcoden.


    Wie ich im Nachhinein in reinen Nettytutorials sah gibt es auch den ChannelDuplexhandler, welcher in o.g. Thread auch von jemandem erwähnt wird, sodass ich mir dann die frage stellte warum nicht einfach der benutzt wird.

  • Kleines Update: Ich benutze nun doch TinyProtocol, warum das Rad neu erfinden. ^-^ Es ist ein leichtgewicht und macht für mich genau das was ich möchte. Allerdings ist der Examplecode stark veraltet, weswegen ich mit dem Code, zu Verständnis und Testzwecken, in dem Sinne nicht viel Anfangen kann, aber mir dessen Funktion dennoch klar wurde.

    Arbeitet hier ganz zufällig noch jemand mit TinyProtocol?

    Schaffe es leider nicht im zu sagen, dass er ein Arrayfeld (gleichgültig wessen Typs) in der angegebenen Klasse suchen soll. Vllt hat einer ja ne idee. :)