Beiträge von KingSarkasmus

    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. :)

    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.

    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.

    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

    Schön, dass der Thread noch nicht geschlossen wurde. ^^
    Ich bin auf ein Problem gestoßen. Wenn man mit gedrücktem Rechtsklick mehrere Items hintereinander essen möchte dann wird ab dem zweiten Item Die Essanimation unendlich abgespielt. Man isst in dieser Zeit auch nichts, es wird nur die Animation abgespielt und man ist langsamer, so als wenn man essen würde. Das hängt wohl damit zusammen, dass ich das Event Cancel und halt meinen eigenen kram ausführen lasse.


    Natürlich habe ich schon gegoogelt wie son bekloppter, aber alles was ich bisher dazu finden konnte waren Aussagen wie: "Du musst das Event nicht canceln, schau in den Docs nach!"
    Da ich die Docs wohl mittlerweile im schlaf rückwerts rülpsen kann, dieses Event betreffend, weiss ich nicht was ich mit get-, und setItem machen soll damit er die Animation auch beendet wenn das Item gegessen wurde, aber mein ganzer Code ohne den Standart MC Code ausgeführt wird. Denn ohne Canceln werden alle von mir festgelegten Werte gesetzt und auch die originalen.


    Ursprünglich gab es auch einen Bug welchen den Client so lange essen lies wie er das Item in der Hand hielt, also das Geräusch wurde perma abgespielt aber der Spieler hat nicht mehr gegessen, wobei es auch nur die Spieler um ihn herum gehört haben, nicht er selber. Dies konnte ich mit dem PacketPlayOutEntityStatus unterbinden, weil ich dem Client mitteile, dass das Item gegessen wurde. So etwas gibt es auch richtung Server aber leider weiss ich nicht wie ich mein Plugin das abschicken lasse.


    Hat vielleicht jemand eine Idee?
    LG Patrik

    Ich glaube der Doppelpost ist zu Entschuldigen, da es sich um eine ganz andere Frage handelt als sie bisher aufgekommen ist, aber dennoch zur Thematik gehört.


    Die Frage dreht sich um das CraftItemEvent und das Shift-klicken um mehrere Items gleich in sein Inventar gelegt zu bekommen (vorrausgesetzt natürlich es wurden genug Items in die Rezeptfelder der Workbench gelegt). Zwar funktioniert das Tag setzen, durch das InventoryClickEvent, bei der Entnahme des Items aus der Workbench sehr gut, aber wenn man mit Shift-klick das ganze rausnimmt wird der Tag nur für das eine Item gesetzt auf welches geklickt wurde.


    Dies hat wohl den Hintergrund, dass das CraftItemEvent nur bei dem einen Item gefeuert wird, beim Rest nicht und ich bisher keine Möglichkeit gefunden habe die restlichen Items abzufragen.
    Die Idee die Rezepte und dementsprechende Results selbst zu schreiben bzw. die alten Rezepte damit zu überschreiben brachte leider keinen Erfolg. (ich habe die original Rezepte natürlich vorher aus der globalen Rezeptliste von MC entfernt)
    Da jedesmal das normale Item ohne Tag gegeben wurde und ich keine Ahnung habe aus welchen Grund, weshalb ich etwas mit der Meta rumgespielt habe und diese wird auch korrekt gesetzt, aber der Tag nicht.


    Ich würde nur ungern meine letzte Möglichkeit umsetzen die wie folgt ist:
    bevor die Items gegeben werden wird das Inventar in nem ItemStack Array gespeichert und nachdem die Items gegeben wurden, wird das Inventar nochmal gespeichert. Diese Arrays werden dann miteinandern verglichen und den Items die vorher null waren wird dann der Tag gesetzt. Selbstverständlich sind vorher noch ein paar Abfragen um wirklich sicher zugehen, dass es sich um ein Item handelt wo sich der Aufwand lohnt.


    Ich halte die letzte Methode für ziemlich Ressourcenaufwendig, wegen des ganzen Iterierens auch wenns in nem seperaten Thread läuft und würde darauf gerne verzichten wenns doch etwas gibt was einfacher ist. Auch diesmal ist google nicht die größte Hilfe.


    Bin für jede Idee offen. :3


    EDIT 25.10.16 21:45: Problem hat sich gelöst. Man braucht weder das CraftItemEvent noch muss man irgendwas abfragen oder iterieren. Man muss das Rezept richtig erstellen, hatte da nen variablen Fehler (den Fehler mit einer Variable, nicht ein variabler Fehler xD) drin. Habe dem Rezept die falsche variable zugewiesen weswegen nur das ursprüngliche ItemStack übernommen wurde nicht das modifizierte.


    #Vote4Close

    @monst12

    Wie verhält sich das denn im Gameplay?

    Hab noch nichts ausprobiert, bzw. habe ich angefangen zu coden und stieß dann auf diese Frage.



    Denn man könnte auch beim Kiste öffnen bereits alle Tags, der in der Kiste enthaltenen Items setzen (InventoryOpenEvent, wird übrigens nicht mal beim eigenen Inventar öffnen gecallt.) Denn dann spart man sich die ganzen Klicks abzufragen.

    Allerdings denke ich, dass es weniger performance frisst wenn man die klicks abfragt als jeden Slot im Inventar der Chest durchzugehen.



    Als Alternative der Alternative gäbe es noch das InventoryMoveItemEvent, denn der Spieler muss ja schließlich das Item in sein Inventar ziehen (?). Da aber bitte die Docs mal lesen, denn man darf ein paar Methoden nicht verwenden.

    Das ist ne sehr gute idee, da werde ich mal mehr nachschauen, vielen Dank :D


    LG Patrik


    EDIT: Das InventoryMoveItemEvent ist für diese Situation nicht geeignet, habe damit grade mal etwas rumgespielt. Es wird immer dann gefeuert wenn ein Entity (bsplw. HopperMinecart) mit einem Block (bsplw. Chest) Items "austauscht".
    Werde mir jetzt mal das InventoryDragEvent ansehen, das klingt recht vielversprechend in der Description. :)


    EDIT2: Das InventoryDragEvent ist auch nicht das richtige. Es ist wohl für das ablegen von Items mit gedrückt halten der rechten Maustaste und ähnlichem in Inventaren verantwortlich. Aus meiner Sicht bleibt wohl nur noch das InventoryClickEvent. Dort dann das material abfrage und den tag satzen sollte, sich dann auch für villager eignen.

    @BewUssTlos So hatte ich es ursprünglich gedacht, aber dann muss ich nicht nur das item des damagers abfragen und den wert setzen sondern auch für eventuell vorhandene enchantments und deren Level. Da schien es mir sinniger den Angriffschaden des items zu setzen und den rest ganz standart in MC zu berechnen.


    @KeEpITMeLLo
    Schwert durch craften:
    Ob man das gleich mit ins Rezept einbauen kann weiss ich grade nicht, sollte aber eigentlich gehen. Allerdings muss dann auch wieder für jedes Item das Rezept überschrieben werden. Denke da kann ich das Item einfach am ende als Result geben.


    schwert durch kiste:
    Denke das mit dem inventory klick event wäre sonst wirklich die einzige möglichkeit, macht eigentlich auch am meisten sinn. ^^


    schwert durch kisten abbauen (als drop):
    Danke für den tipp da habe ich noch gar nicht dran gedacht. :D


    villagershop:
    da werde ich mal schauen aber klingt plausibel.


    Danke für eure Anregungen, mit gleichgesinnten zu sprechen und deren gedanken dazu zu hören(lesen) bringt mich oft sehr viel weiter. :)


    LG Patrik

    Uff, danke aber das ist mir zu ressourcenaufwendig bzw. zu "unsicher". Denn wenn der Spieler innerhalb dieser fünf Minuten bsplw. ein Schwert findet dann hat es bis zum nächsten Check einen anderen Angriffschaden als nach dem Check. Das ist leider nicht so optimal. Ich schätze ich muss tatsächlich mit einem der InventarEvents arbeiten.... auch wenn ich das sehr unschön finde weil der Check dann jedesmal beim (bspl) öffnen oder verschieben eines Items passiert.


    Dennoch danke für die Idee.
    LG Patrik

    Danke für deine Anregungen. :)
    Also bisher ist der Rest Standart Minecraft, auch das Handeln (ja mit Dorfbewohnern) und die LootChests (Dungeons, Pyramiden, etc...). Bei den LootChests bin ich mir nicht sicher wie ich Abfrage ob die Kiste schoneinmal geöffnet bzw. das Item bereits bewegt wurde, denn dann wäre dieser Tag schon gesetzt. Immer wieder ein Inventar Event benutzen wollte ich eigentlich vermeiden, da dies ja sehr oft ausgeführt wird.


    Danke dir. :3
    LG Patrik

    Hey Leute,
    es ist spät, bitte habt Nachsicht mit mir. ^^
    Ich möchte den Angriffschaden von Waffen und Werkzeugen verändern mittels NBT-Tag. Habe mich in Bezug darauf auch schon schlau gemacht. Ich bin mir aber nicht sicher welche Events ich benutzen sollte um diesen Tag zu setzen. Hatte an das ItemCraftEvent gedacht, allerdings kann man ja auch auf andere Weise als nur durch Craften (bsplw. Handel, LootChests) an diese Items kommen.
    Es muss ja auch kein Event sein was perma bei einer gewissen Aktion irgendwas kontrolliert da der Tag ja nur einmal gesetzt werden muss. (Nicht bezogen auf das ItemCaftEvent)
    Ein Richtungsweisender Tip, wie vor kurzem, reicht da denke ich aus. ^^
    Google ist zwar mein Freund, aber gefunden habe ich bisher nur Dinge die mit dem NBT Tag zu tun haben und nicht welches Event man nutzen könnte.


    Vielen Dank. :)
    Patrik

    Danke dir. :D Das klingt sehr einfach und der Code setzt sich gerade in meinem Kopf schon zusammen. ^^ Hätte echt nicht gedacht, dass es so simpel ist.


    EDIT 10 Tage später ^^: Nochmals vielen Dank für den Hinweis, hat soweit alles echt gut funktioniert.
    Für jeden der ähnliches schreiben möchte dem sei gesagt, dass er sich unbedingt wissen über:
    PotionEffects,
    das Sättigungssystem,
    das FoodLevelsystem,
    das Erschöpfungssystem
    und das Heilungssystem
    zulegen sollte. Musste mir noch ne ganze menge anlesen aber das Hungersystem funzt echt nice bisher.
    LG Patrik


    #Vote4Close

    Hey Leute,
    ich hatte eine ganze weile keine Zeit für Minecraft, Programmierung, etc.... Nun beschäftige ich mich seit gut ner Woche wieder damit und was mit persönlich immer wieder ab MC 1.9 aufstößt ist das Hungersystem. Ich bin kein Fan davon und kann mich irgendwie nicht umgewöhnen. -Das Kampfsystem kann man ja glücklicherweise problemlos umgehen.- Nun habe ich mir einfach mal völlig random die frage gestellt ob ich das nicht einfach umcoden könnte. Allerdings habe ich nicht allzuviel, mittels Google, dazu finden können (oder ich habe einfach mal wieder die falschen Schlagwörter benutzt ^^ ).


    Meine fragen dazu sind jetzt ob da jemand schon Erfahrung mit hat:
    ist das überhaupt möglich?
    Was muss man dazu modifizieren, Server, Client, beides?
    Wenn Server, muss ich dazu die spigot.jar bearbeiten oder kann ich mir auch nen Plugin schreiben welches das ganze ersetzt?


    Danke für eure Bemühungen.
    LG Patrik

    In der tat, ich, sry wohl eher wir haben es hinbekommen :D Was fürn geiler Schice :D:D:D Ich sitze seit Monaten immer mal wieder an dem kram. Vielen Dank an alle die hier ihr Wissen preisgegeben haben und mir geholfen haben.


    Ihr könnt euch gar nicht vorstellen wie ich hier grade Party mache. :D:D:D:D

    Habe das ganze nun mit einem Singleton umgesetzt, allerdings lässt sich das plugin nun nicht mehr starten und ich bekomme Anfangs eine InvalidPluginException mit der Begründung No public constructor. Ist ja auch irgendwie logisch. Den Constructor dann public zu machen, macht keinen Sinn (habs aber dennoch mal probiert -> PluginAlreadyInitializedException) denn dann könnte man sich ja neue Instanzen davon erstellen, was dadurch ja unterbunden werden soll....

    Wir reden von der Connection variable, oder? Diese speicher ich doch zwischen in der Klasse in der sie erzeugt wird aber da doch eine neue Instanz jedesmal aufgerufen wird wenn es darum geht eine abfrage abzuarbeiten ist sie ja leer...


    Danke, allerdings versuche ich das ganze in einem Forum zu behandeln damit nicht nur ich der einzige bin dem geholfen wird. Das beugt anderen Anfragen vor, auch wenn es für mich länger dauert ans Ziel zu kommen. Ich denke das klingt jetzt etwas patzig, soll es aber nicht: Aber könnte man sich bitte ein wenig simpler ausdrücken, wenn ich bei Google "Java Klasseninstanz speichern" oder "Java Klasseninstanz in variable speichern" (oder ähnliches) eingebe kommt nur Grütz bei raus. Es kann vielleicht auch sein dass ich das schonmal gemacht habe, dass es aber dann anders genannt wurde und ich daher grade keine Verbindung zwischen den beiden Sachen finde, who knows....


    Ihr habt doch oben meinen Code, ich denke mal wenn da so krass viel dran falsch wäre, dann hätte hier schon jemand losgelegt. Dann sagt mir doch bitte was fehlt, denn eine Connection die Null ist hatte ich bisher nicht.