Welcome on MasterOf13FPS! MasterOf13FPS

Register today or sign up if you are already a member and never miss any cool content again :)

How to make an Injection Client (Easy)

MasterOf13FPS

Administrator
Staff member
Administrator
MasterOf13FPS
Joined
Jul 11, 2020
Messages
0
Reaction score
25
Points
0
Hallo,

Da es länger keine größeren Beiträge von meiner Seite aus gab, habe ich mich mal dazu entschieden, ein kleines Tutorial zu schreiben, wie man am einfachsten in Java einen Injection Client schreibt.

Vorraussetzungen

  • Minecraft (1.8 und aufwärts ist empfehlenswert. Ihr müsst die Version mindestens einmal im Launcher gestartet haben
  • Forge (Ihr benötigt das MDK, welches ihr hier herunterladen könnt)
  • Mixin (Das Injection Framework gibt es hier)
Installation

Als erstes muss Forge aufgesetzt werden.
Nachdem ihr das MDK heruntergeladen und entpackt habt, seht ihr mehrere Ordner und Dateien.
Alles außer die folgenden Dateien könnt ihr ohne Probleme löschen:



    • build.gradle
    • gradlew.bat
    • gradlew
    • gradle Ordner
    • gradle Konfigurationdatei
gradlew.bat und gradlew sind jeweils gradle wrapper. Gradle ist ein Projektverwaltungsprogramm und ermöglicht das organisieren und erstellen von Aufgaben. Kann ich selber nur empfehlen und benutze es in der Regel auch für meine Projekte.
Der gradle wrapper lädt die entsprechende gradle Version herunter (damit man das nicht selber tun muss und weil nicht jede gradle Version bei forge bspw. funktioniert) und führt dann die entsprechende Aufgabe aus.
Nun öffnet ein Kommandozeilenfenster in dem Forge MDK Ordner und gebt folgendes ein:

Linux:
Code:
./gradlew setupDecompWorkspace

Windows:
Code:
.\gradlew.bat setupDecompWorkspace

Dieser Vorgang dauert je nach Internet und Rechnerleistung 5-10 Minuten.

Als nächstes öffnet ihr mit eurer IDE das entstandene Projekt.
Mit Intellij einfach auf "Projekt importieren" und dann build.gradle auswählen,
Für Eclipse müsst ihr zusätzlich folgenden Befehl in der Kommandozeile eingeben:

Linux:
Code:
./gradlew eclipse

Windows:
Code:
.\gradlew.bat eclipse

Dies lädt noch zusätzlich Artefakte herunter, die für Eclipse notwendig sind.


Falls ihr mit Intellij das Projekt importiert habt, müsst ihr noch zusätzlich diesen Befehl eingeben:

Linux:
Code:
./gradlew genIntellijRuns

Windows:
Code:
.\gradlew.bat genIntellijRuns

Dies konfiguriert die IDE, sodass ihr den Client mit Gradle starten könnt.

Eine ausführliche Anleitung gibt es hier:
https://mcforge.readthedocs.io/en/latest/gettingstarted/


Nachdem nun Forge erfolgreich konfiguriert wurde, muss Mixin noch zum Projekt hinzugefügt werden.
Dazu muss als erstes das Github Projekt von Mixin kopiert werden.
Dies geht mit dem Befehl:

Code:
git clone https://github.com/SpongePowered/Mixin.git

Um Mixin nun mit Gradle zu kompilieren und entsprechend die Bibliotheken zu erstellen ist folgender Befehl erfordlerlich:
(Hierfür müsst ihr erst in den entstandenen Ordner navigieren)

Linux:
Code:
./gradlew build

Windows:
Code:
.\gradlew.bat build


in Mixin\build\libs befinden sich nun 5 .jar Dateien.
Diese müssen jeweils in der IDE dem Projekt hinzugefügt werden.


Verwendung

In eurer IDE müsst ihr als erstes alle Beispiele entfernen.
Heißt das Paket mit dem Namen com.examplemod und alles was dazugehört.
Auch mcmod.info und weitere Resources werden nicht benötigt.
Jetzt könnt ihr anfangen eure Client Base und alles weitere zu schreiben.
Wichtig ist jetzt, wie bekommen wir unsere "Mod" jetzt zum laden?
Erstellt dafür eine Klasse namens MixinMinecraft oder ähnlich.
Über der Klassendekleration fügen wir die Annotation
Code:
@Mixin(Minecraft.class)
hinzu.
Als Argument übergeben wir die Klasse, in die wir in den späteren Funktionen injecten wollen.
Jetzt erstellen wir eine Funktion, die aufgerufen wird, wenn Minecraft initialisiert wird.
Oder konkreter, wenn der Minecraft Konstruktor ganz am Start aufgerufen wird.
Diese Funktion sieht mit der @Inject Annotation so aus:
Code:
@Inject(method = "<init>", at = @At(value = "RETURN"))
    private void init(CallbackInfo ci) {
        // Hier könnt ihr euren Konstruktor aufrufen
    }
Als Argument geben wir die Methode und den "Ort" des Methodensprungs über.

<init> steht hier für den Konstruktoraufruf und "Return" dafür, dass wir am Ende des Konstruktoraufrufs injecten wollen.

Man sollte nicht den Fehler machen und jetzt sämtliche Cheat Komponenten laden, da die Minecraft Komponenten an sich noch nicht geladen wurden.
Dafür erstellen wir eine zweite Funktion, die aufgerufen wird, wenn das Fenster von Minecraft erstellt wird.

Code:
@Inject(method = "createDisplay", at = @At(value = "RETURN", target = "Lnet/minecraft/client/Minecraft;createDisplay()V"))[/SIZE][/SIZE][/SIZE][/SIZE]
[SIZE=5][SIZE=4][SIZE=5][SIZE=4]  private void startClient(CallbackInfo ci) {
       // Jetzt könnt ihr eure Cheat Komponenten laden
    }

Die Annotationsargumente sollten jetzt selbsterklärend sein.
Das V am Ende des target Arguments gibt den Rückgabedatentyp der Funktion an.
In diesem Falle steht V für void.
L gibt den Paketpfad zur Klasse an.

Nun wird das ganze noch nicht funktionieren, da Mixin selber nicht initialisiert wurde.
Dafür erstellt man eine neue Klasse mit einer Methode die folgendes beinhaltet:
https://hastebin.com/uwidinufit.java

In einer Zeile heißt es, dass wir eine Konfiguration hinzufügen.
Diese Konfigurationsdatei muss noch erstellt werden mit dem folgendem Inhalt
https://hastebin.com/ukabimevoz.json

Nun seit ihr fast Startklar.
Damit FML euren Loader auch startet, müsst ihr als VM Argument noch folgendes eingeben:
Code:
-Dfml.coreMods.load=de.client.Loader
Hier natürlich euren eigentlichen Paketpfad angeben.

Jetzt startet ihr von der IDE aus den Client mittels der Run Konfiguration, die gradle für euch erstellt hat und insofern ihr keine Fehler bekommt, habt ihr euren Injection Client fertig!

Ich werde dieses Tutorial evtl. noch erweitern, indem ich zeige, wie ihr am besten mit Events umgeht usw... aber vorerst rate ich euch einen Blick in meine Github Repo zu werfen, falls ihr nicht weiterkommt oder Anregung sucht.
Diese wird die Tage auch noch erweitert.

https://github.com/IntenceYT/NoTence


Ich hoffe alles war übersichtlich erklärt und wünsche euch noch viel Spaß beim rumprobieren!

Weitere Informationen gibt es hier:
https://github.com/SpongePowered/Mixin/wiki


 
Last edited by a moderator:
Oder einfach wie jeder andere normale Mensch das Mixin Wiki durchlesen
 
Oder einfach wie jeder andere normale Mensch das Mixin Wiki durchlesen
Bin mir sicher, dass die meisten das nicht verstehen werden.
Außerdem ist die Wiki viel zu umfangreich für das, was man eigentlich brauch um einen HackClient zu schreiben.
Hab die Wiki aber mal verlinkt!
 
Bin mir sicher, dass die meisten das nicht verstehen werden.
Außerdem ist die Wiki viel zu umfangreich für das, was man eigentlich brauch um einen HackClient zu schreiben.
Hab die Wiki aber mal verlinkt!
Oh, ich fande viele Sachen aus dem Wiki, zum Beispiel Accessors oder Injection points, sehr hilfreich.
 
Außerdem, wenn man Mixin anwenden will, dann sollte man sich auch damit auseinander setzen
 
Oh, ich fande viele Sachen aus dem Wiki, zum Beispiel Accessors oder Injection points, sehr hilfreich.
Außerdem, wenn man Mixin anwenden will, dann sollte man sich auch damit auseinander setzen
Du scheinst den Sinn des Threads nicht verstanden zu haben, also hör auf hier belanglose Antworten zu posten, wobei ich mir sowieso sicher bin, dass du die Mixin Wiki nicht verstanden hast.
 
Du scheinst den Sinn des Threads nicht verstanden zu haben, also hör auf hier belanglose Antworten zu posten, wobei ich mir sowieso sicher bin, dass du die Mixin Wiki nicht verstanden hast.
Achso, nur weil du es nach Monaten auch mal geschafft hast einen Forge Client mit Mixin aufzusetzen, heißt das das es kein anderer so schafft?
 
Achso, nur weil du es nach Monaten auch mal geschafft hast einen Forge Client mit Mixin aufzusetzen, heißt das das es kein anderer so schafft?
Feels like forge client base user
 
Achso, nur weil du es nach Monaten auch mal geschafft hast einen Forge Client mit Mixin aufzusetzen, heißt das das es kein anderer so schafft?
Habe ich nie behauptet.
Nur zweifle ich, dass gerade du kapierst, was in der Wiki überhaupt steht.
 
Habe ich nie behauptet.
Nur zweifle ich, dass gerade du kapierst, was in der Wiki überhaupt steht.
Zugegeben ich versteh nicht alles, aber mein Englisch ist für den großteil schon ausreichend gut
 
Hallo, können Sie dieses Tutorial ins Englische übersetzen? Ich danke Ihnen.
 
Hallo,

Da es länger keine größeren Beiträge von meiner Seite aus gab, habe ich mich mal dazu entschieden, ein kleines Tutorial zu schreiben, wie man am einfachsten in Java einen Injection Client schreibt.

Vorraussetzungen


  • Minecraft (1.8 und aufwärts ist empfehlenswert. Ihr müsst die Version mindestens einmal im Launcher gestartet haben
    Forge (Ihr benötigt das MDK, welches ihr hier herunterladen könnt)
    Mixin (Das Injection Framework gibt es hier)
Installation

Als erstes muss Forge aufgesetzt werden.
Nachdem ihr das MDK heruntergeladen und entpackt habt, seht ihr mehrere Ordner und Dateien.
Alles außer die folgenden Dateien könnt ihr ohne Probleme löschen:





    • build.gradle

    • gradlew.bat

    • gradlew

    • gradle Ordner

    • gradle Konfigurationdatei
gradlew.bat und gradlew sind jeweils gradle wrapper. Gradle ist ein Projektverwaltungsprogramm und ermöglicht das organisieren und erstellen von Aufgaben. Kann ich selber nur empfehlen und benutze es in der Regel auch für meine Projekte.
Der gradle wrapper lädt die entsprechende gradle Version herunter (damit man das nicht selber tun muss und weil nicht jede gradle Version bei forge bspw. funktioniert) und führt dann die entsprechende Aufgabe aus.
Nun öffnet ein Kommandozeilenfenster in dem Forge MDK Ordner und gebt folgendes ein:

Linux:
Code:
./gradlew setupDecompWorkspace

Windows:
Code:
.\gradlew.bat setupDecompWorkspace

Dieser Vorgang dauert je nach Internet und Rechnerleistung 5-10 Minuten.

Als nächstes öffnet ihr mit eurer IDE das entstandene Projekt.
Mit Intellij einfach auf "Projekt importieren" und dann build.gradle auswählen,
Für Eclipse müsst ihr zusätzlich folgenden Befehl in der Kommandozeile eingeben:

Linux:
Code:
./gradlew eclipse

Windows:
Code:
.\gradlew.bat eclipse

Dies lädt noch zusätzlich Artefakte herunter, die für Eclipse notwendig sind.


Falls ihr mit Intellij das Projekt importiert habt, müsst ihr noch zusätzlich diesen Befehl eingeben:

Linux:
Code:
./gradlew genIntellijRuns

Windows:
Code:
.\gradlew.bat genIntellijRuns

Dies konfiguriert die IDE, sodass ihr den Client mit Gradle starten könnt.

Eine ausführliche Anleitung gibt es hier:
https://mcforge.readthedocs.io/en/latest/gettingstarted/


Nachdem nun Forge erfolgreich konfiguriert wurde, muss Mixin noch zum Projekt hinzugefügt werden.
Dazu muss als erstes das Github Projekt von Mixin kopiert werden.
Dies geht mit dem Befehl:

Code:
git clone https://github.com/SpongePowered/Mixin.git

Um Mixin nun mit Gradle zu kompilieren und entsprechend die Bibliotheken zu erstellen ist folgender Befehl erfordlerlich:
(Hierfür müsst ihr erst in den entstandenen Ordner navigieren)

Linux:
Code:
./gradlew build

Windows:
Code:
.\gradlew.bat build


in Mixin\build\libs befinden sich nun 5 .jar Dateien.
Diese müssen jeweils in der IDE dem Projekt hinzugefügt werden.


Verwendung

In eurer IDE müsst ihr als erstes alle Beispiele entfernen.
Heißt das Paket mit dem Namen com.examplemod und alles was dazugehört.
Auch mcmod.info und weitere Resources werden nicht benötigt.
Jetzt könnt ihr anfangen eure Client Base und alles weitere zu schreiben.
Wichtig ist jetzt, wie bekommen wir unsere "Mod" jetzt zum laden?
Erstellt dafür eine Klasse namens MixinMinecraft oder ähnlich.
Über der Klassendekleration fügen wir die Annotation
Code:
@Mixin(Minecraft.class)
hinzu.
Als Argument übergeben wir die Klasse, in die wir in den späteren Funktionen injecten wollen.
Jetzt erstellen wir eine Funktion, die aufgerufen wird, wenn Minecraft initialisiert wird.
Oder konkreter, wenn der Minecraft Konstruktor ganz am Start aufgerufen wird.
Diese Funktion sieht mit der @Inject Annotation so aus:
Code:
@Inject(method = "<init>", at = @At(value = "RETURN"))
    private void init(CallbackInfo ci) {
        // Hier könnt ihr euren Konstruktor aufrufen
    }
Als Argument geben wir die Methode und den "Ort" des Methodensprungs über.

<init> steht hier für den Konstruktoraufruf und "Return" dafür, dass wir am Ende des Konstruktoraufrufs injecten wollen.

Man sollte nicht den Fehler machen und jetzt sämtliche Cheat Komponenten laden, da die Minecraft Komponenten an sich noch nicht geladen wurden.
Dafür erstellen wir eine zweite Funktion, die aufgerufen wird, wenn das Fenster von Minecraft erstellt wird.

Code:
@Inject(method = "createDisplay", at = @At(value = "RETURN", target = "Lnet/minecraft/client/Minecraft;createDisplay()V"))[/SIZE][/SIZE][/SIZE][/SIZE][/SIZE][/SIZE]
[SIZE=5][SIZE=4][SIZE=5][SIZE=4][SIZE=5][SIZE=4]  private void startClient(CallbackInfo ci) {
       // Jetzt könnt ihr eure Cheat Komponenten laden
    }

Die Annotationsargumente sollten jetzt selbsterklärend sein.
Das V am Ende des target Arguments gibt den Rückgabedatentyp der Funktion an.
In diesem Falle steht V für void.
L gibt den Paketpfad zur Klasse an.

Nun wird das ganze noch nicht funktionieren, da Mixin selber nicht initialisiert wurde.
Dafür erstellt man eine neue Klasse mit einer Methode die folgendes beinhaltet:
https://hastebin.com/uwidinufit.java

In einer Zeile heißt es, dass wir eine Konfiguration hinzufügen.
Diese Konfigurationsdatei muss noch erstellt werden mit dem folgendem Inhalt
https://hastebin.com/ukabimevoz.json

Nun seit ihr fast Startklar.
Damit FML euren Loader auch startet, müsst ihr als VM Argument noch folgendes eingeben:
Code:
-Dfml.coreMods.load=de.client.Loader
Hier natürlich euren eigentlichen Paketpfad angeben.

Jetzt startet ihr von der IDE aus den Client mittels der Run Konfiguration, die gradle für euch erstellt hat und insofern ihr keine Fehler bekommt, habt ihr euren Injection Client fertig!

Ich werde dieses Tutorial evtl. noch erweitern, indem ich zeige, wie ihr am besten mit Events umgeht usw... aber vorerst rate ich euch einen Blick in meine Github Repo zu werfen, falls ihr nicht weiterkommt oder Anregung sucht.
Diese wird die Tage auch noch erweitert.

https://github.com/IntenceYT/NoTence


Ich hoffe alles war übersichtlich erklärt und wünsche euch noch viel Spaß beim rumprobieren!

Weitere Informationen gibt es hier:
https://github.com/SpongePowered/Mixin/wiki


Das ist doch einfach nur nen Client der als Mod programmiert ist oder?
 
shape1
shape2
shape3
shape4
shape5
shape6
Back
Top