Das offizielle Minecraft Wiki twittert hier: Wiki-Twitter  –  Chatte im Wiki-Discord  –  Noch keinen Server gefunden? Es gibt einen Wiki-Server

Modifikation/Mods erstellen

Aus Minecraft Wiki
Wechseln zu: Navigation, Suche
Achtung.svg Diese Seite wird vom Minecraft Wiki nicht auf inhaltliche Richtigkeit und Vollständigkeit geprüft.

Das relativ einfache Modifizieren von Minecraft ist einer der Gründe für die Beliebheit von Modifikationen in der Gemeinschaft. Modifikationen verändern dabei den Programmcode und Funktionen, im Gegensatz zu Ressourcenpaketen, die nur das Aussehen anpassen. Für das Erstellen und die Funktion von Modifikationen sind verschiedene Werkzeuge notwendig.

Voraussetzung sind Kenntnisse in der Java-Programmierung.

Werkzeuge[Bearbeiten]

Die Werkzeuge unterscheiden sich funktionell in der Anbindung an das Hauptprogramm und der eigentlichen Programmierung:

  • Programmschnittstellen (APIs) standardisieren die Einbindung von Modifikationen, um eine Kompatiblität zwischen dem Spiel und der Modifikation herzustellen. Dazu stellen sie programmspezifische Funktionen (im Fall von Minecraft Java) zur Verfügung. Zu dieser Gruppe werden meist auch die Loader gezählt, die zur Verwaltung von Modifikationen und deren Kompatibilität dienen.
    • ModLoader gehört zu den ältesten APIs. (Unterstützt Minecraft nur bis Version 1.6.2)
    • Minecraft Forge ist eine neuere Version vom ModLoader und fügt hunderte von zusätzlichen Klassen und Auswahlmöglichkeiten ein.
  • Vereinfachte Mod-Generatoren (wie Mod Maker (veraltet) und MCreator) werden von Modifikation-Erstellern verwendet, die nicht direkt den Java-Code schreiben und kompilieren möchten. Generell sind diese aber nicht zu empfehlen, da sie eine schlechte Code-Qualität erzeugen.
  • Bei der Codenahen Programmierung helfen Dekompilierungs-Werkzeuge. Solche Programme werden nicht von Mojang veröffentlicht und müssen von den Entwicklern an neue Versionen angepasst werden.
    • Das Minecraft Coder Pack (kurz: MCP) ist das standardmäßige Werkzeug der Gemeinschaft zum Lesen oder Ändern des Minecraft-Codes.
    • Allzweck-Java-Dekompilierer (wie JAD oder fernflower) helfen, wenn MCP keine Funktionen zur Verfügung stellt (z.B. beim modifizieren von Entwicklungsversionen).
  • Ein IDE (Integrated Development Environment) ist sinnvoll für jede nicht-triviale Programmierung. MCP erzeugt automatisch Projekt-Dateien für die Verwendung in Eclipse, einer beliebten Java-IDE.
  • 3D-Modellierungswerkzeuge (wie z.B. Techne oder Cubik) helfen beim Erstellen von Blockmodellen oder Objekten (Entity).
  • Beim obligatorischen Debuggen helfen neben dem Absturzbericht im Startprogramm auch Protokoll-Analyse-Werkzeuge bei Mehrspieler-Modifikationen.
  • Eine Liste mit APIs findet man hier: APIs und Loader

Minecraft Forge API[Bearbeiten]

Die Minecraft Forge API ist ein sehr nützliches Werkzeug zum Erstellen von Modifikationen, das Konflikte zwischen der Modifikation und Minecraft verhindert. Es enthält neben vielen anderen Optionen auch einfachere Methoden zum Erstellen von Modifikationen, zum Beispiel fügt die Methode addSmelting() ein Schmelz-Rezept in das Spiel ein. Neben den offiziellen Einführungen gibt es auch viele Videoanleitungen. Es kann auf der offiziellen Internetseite heruntergeladen werden.

Java[Bearbeiten]

Minecraft wurde in Java programmiert, einer plattformübergreifenden, objektorientierten Programmiersprache. Für weitergehende Modifikationen ist die Kenntnis der grundlegenden Begriffe notwendig. Eine kurze Beschreibung der Grundbegriffe findet sich hier:

Forge installieren[Bearbeiten]

Siehe auf jeden Fall die aktuelle englische Dokumentation an "Getting Started with Forge: This is a simple guide to get you from nothing to a basic mod. The rest of this documentation is about where to go from here." Verweis

Dieses Video erklärt den Aufbau für IntelliJ 2017:

Falls diese Anleitung an einigen Stellen veraltet sein sollte: Im MDK (Mod Development Kit) ist immer eine Liesmich-Datei (Readme) enthalten, in der alles aktuell beschrieben ist.

Installation[Bearbeiten]

Lade als erstes die Installationsdatei von der Forge-Webseite herunter. Dann starte die Datei und gehe der Einführung nach. (Hinweis: Du benötigst die aktuelle Java Version von Oracle um Forge zu installieren.)

Lade dir immer die Version herunter, für die auch die Modifikationen verfügbar sind.

Modifikationen installieren[Bearbeiten]

Um eine Modifikation zu installieren, verschiebt man diese einfach in den "mods"-Ordner, welcher nach der Installation von Forge unter %appdata%/.minecraft/ entstanden sein sollte. Es kann sein, dass man Minecraft Forge im offiziellen Launcher erst einmal starten muss, um die Ordner generieren zu lassen.
Zu diesen Ordnern kommt man indem man die Adresse ( %appdata%/.minecraft/ ) in den Explorer als Pfad eingibt oder ⊞ Windows + R drückt und den Pfad in das erscheinende Dialogfenster eingibt.

Minecraft mit Forge starten[Bearbeiten]

Wenn du ein Profil auf Forge ändern möchtest, gehe auf Edit Profil, und Wähle die entsprechende Version (Sie befindet sich meistens ganz unten, oder oben in der Liste der Versionen).
Im Minecraft Launcher wurde nun ein Profil mit dem Namen "Forge" angelegt. Wenn man nun Minecraft startet, werden alle installierten Modifikationen geladen.

Modifikationen programmieren mit Forge[Bearbeiten]

Die Anleitung ist individuell und kann an einigen Stellen von deiner Programmierumgebung abweichen.

Vorbereiten[Bearbeiten]

  1. Es ist sinnvoll für die Modifikation einen eigenen Ordner zu erstellen, da Forge mehrere Dateien erstellt.
  2. Hier oder hier hast du eine Auswahl von Versionen für Minecraft Forge.
  3. Im Beitrag laden wir nun den Quellcode (engl. Sourcecode) herunter, welcher bei Source steht. (Ich nehme als Beispiel Forge für die Minecraft-Version 1.8)
  4. Sobald wir ihn direkt oder über AdLink heruntergeladen haben, kopieren wir die .zip Datei in den Ordner den wir für die Modifikation ausgesucht haben und entpacken diese.
  5. Jetzt müssen wir nur noch den Quellcode dekodieren und entpacken. Dazu müssen wir nur in den Ordner gehen und Umschalttaste + Rechtsklick machen und im Menü Eingabeaufforderung hier öffnen auswählen.
  6. Für den Aufbau siehe die Originaldoku. Dort werden auch terminalfreie Lösungen bereitgestellt.
  7. Der Aufbau kann je nach Rechnerleistung bis zu 30 Minuten oder länger dauern.
  8. Nun kannst du Eclipse starten.
  9. Forge hat automatisch einen Eclipse-Workspace erstellt. Das ist der eclipse-Ordner in dem Ordner, den du für die Modifikation erstellt hast.
  10. Dort sollte eine Beispiel-Modifikation bereits vorhanden sein.
  11. Solltest du dich nicht gut mit Java auskennen wäre es sinnvoll sich mit den Begriffen 'Paketen' und 'Klasse' auseinander zusetzen.

Grundaufbau[Bearbeiten]

Das Grundgerüst ist immer gleich aufgebaut und enthält drei Hauptmethoden, wo drin alles bei Minecraft Forge registriert wird.
Eine Methode wird vor der Initialisierung von Minecraft aufgerufen, eine dabei und eine danach.
In der Beispiel-Modifikation wird allerdings nur die "init"-Methode deklariert.
Um alles zu verstehen löschen wir erstmal die Beispiel-Modifikation, indem wir rechts auf das Paket (Nicht auf das Java-Projekt!) einen Rechtsklick ausführen und auf Löschen klicken.
Nun können wir unsere eigene Modifikation erstellen.

Um die Grundstruktur zu erstellen brauchen wir eine eigene Klasse. Damit das Projekt immer übersichtlich bleibt erstellen wir uns ein Paket, dazu müssen wir nur Rechtsklick auf das Projekt machen und dann auf Neu -> Paket. Dieses können wir nennen wie wir wollen. Normalerweise heißt es aber:

  • Deine Internetseite/Server rückwärts und Name (Beispiel: Du hast einen Server (MeinServer.com), dann kann der Paketname so lauten: com.mainserver.deinname)
  • Nur dein Name
  • Modifikationenname


Nun erstellen wir uns eine Hauptklasse, diese nennen wir so wie unsere Modifikation heißen soll (Das kann man später auch noch ändern). Diese sollte automatisch so aussehen:

package com.mainserver;

public class TutorialMod {

}


Damit Forge erkennt das wir einen Mod programmieren müssen wir über dem public class [...] noch

@Mod(modid = "MOD_ID")

hinzufügen, dabei steht "MOD_ID" für die von dir gewählte ModID (Diese ist meistens der Modname in kleinen Buchstaben). Da wir diese ModID später noch brauchen können ist es sinnvoll sie in der Klasse selber zu speichern (Tipp: Nutze public static final um von allen Klassen aus die Variable zu sehen, aber nicht zu bearbeiten); die Klasse sieht dann so aus:

package com.mainserver;


@Mod(modid = TutorialMod.MOD_ID)
public class TutorialMod {

	public static final String MOD_ID = "tutorialmod";
}


Als Abschluss der Vorbereitung müssen nur noch drei "Event"-Methoden erstellt werden in denen später alles passiert, da dies immer das gleiche ist reicht es oft den Kode einfach zu kopieren.
Aber als Überischt:

Ereignisname Erklärung
FMLPreInitializationEvent Das FMLPreInitializationEvent wird immer aufgerufen bevor Minecraft startet, dort wird vieles registriert.
FMLInitializationEvent Das FMLInitializationEvent wird aufgerufen wenn Minecraft lädt.
FMLPostInitializationEvent Beim FMLPostInitializationEvent werden Weltgeneratoren und ähnliches geladen.

Eine ganze Klasse könnte so aussehen:

package com.mainserver;

import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

@Mod(modid = TutorialMod.MOD_ID)
public class TutorialMod {
	
	public static final String MOD_ID = "tutorialmod";
	
	@EventHandler
	public void preInit(FMLPreInitializationEvent event){
		
	}
	
	@EventHandler
	public void init(FMLInitializationEvent event){
		
	}
	
	@EventHandler
	public void postInit(FMLPostInitializationEvent event){
		
	}
}

Herstellungs-Rezepte hinzufügen[Bearbeiten]

Minecraft unterscheidet zwischen zwei verschiedenen Herstellungs-Arten. Dem "Formrezept" und dem "Formlosenrezept". Das Formlosenrezept hat im Gegensatz zu dem Formrezept keinen Aufbau, man muss also nur die Materialien irgendwie in die Flächen packen.
Die Herstellungsrezepte werden in der Klasse GameRegistry registriert. Die Methoden sind sehr einfach gestaltet:
Für ein Formlosenrezept:

GameRegistry.addShapelessRecipe(ItemStack output, Object... params);
Parameter Erklärung
output output ist der Itemstack der am Ende gecraftet wird
params params sind eine unbestimmte Anzahl von Itemstacks, welche benötigt werden

Hier 2 Beispiele für das Formlosenrezept:

GameRegistry.addShapelessRecipe(new ItemStack(Blocks.STONE), Blocks.DIRT);

Man kann nun aus einem Dirtblock einen Steinblock craften. Das Blocks.DIRT wird hier als Object gehändelt.

GameRegistry.addShapelessRecipe(new ItemStack(Items.STONE), new Object[] {
    new ItemStack(Blocks.DIRT),
    new ItemStack(Items.APPLE)
});

Aus DIRT und APPLE kann man nun einen STONE herstellen. Bei mehreren Ausgangsstoffen muss man ein Object erzeugen, das die Materialien enthält.

Gegenstand beim Herstellen beschädigen[Bearbeiten]

Hierbei manipuliert man die Daten eines "ItemStacks". Zuerst muss man allerdings dieses "ItemStack" erstellen. Hier heißt es stack.

ItemStack stack = new ItemStack(item, amount);

oder

ItemStack stack = new ItemStack(block, amount);

Jetzt kann man es manipulieren, zu beachten ist allerdings, dass die Zahl nie größer sein darf als die maximale Haltbarkeit.

stack.setItemDamage(amount);

Also beim Craften an Beispiel eines Eisenschwertes:

ItemStack stack = new ItemStack(Items.IRON_SWORD, 1);
stack.setItemDamage(240);
GameRegistry.addShapelessRecipe(stack, Items.IRON_SWORD);

Unendlich einsetzbare Gegenstände[Bearbeiten]

Ofen-Rezepte hinzufügen[Bearbeiten]

Bei den Offenrezepten gibt man das gleiche wie bei den Herstellungsrezepten "GameRegistry" an. Allerdings wird hier nach dem Punkt "addSmelltingRecipe" angegeben. In den Klammern dahinter kommt dann zuerst der Gegenstand oder Block der hineingelegt werden sollte, danach der Gegenstand oder Block, das ausgegeben werden sollte, und dannach die Anzahl an EP die man durch das Schmelzen dazubekommen mit einem f dahinter (muss als float angegeben werden). In den Klammern müssen die Angaben natürlich mit einem Komma getrennt sein.

Block hinzufügen[Bearbeiten]

Um einen Block zu erstellen brauchen wir 4 Dateien.

- 3 Json-Dateien
- 1 Textur

Gegenstand hinzufügen[Bearbeiten]

Um ein Gegenstand zu erstellen, braucht man 3 Dateien und das InitializationEvent.

  • 1 Json-Datei
  • 1 Textur
  • 1 Java-Datei

Zum Erstellen eines Gegenstandes muss man die Textur im src/main/resources/assets/tutorialmod/textures/items-Verzeichnis einfügen. Daraufhin wird im Verzeichnis src/main/resource/assets/tutorialmod/models/item eine leere Datei erstellt, die so heißen könnte (in unserem Beispiel ein Rubin): ruby.json. Die Dateiendung .json ist Pflicht! In der .json Datei werden nun neue Parameter hineingeschrieben (wie in unserem Beispiel)

{ "parent": "builtin/generated",
  "textures": {
   "layer0": "tutorialmod:items/ruby"
   
   },
   "display": {
   "thirdperson": {
   "rotation": [ -90, 0, 0 ],
   "translation": [ 0, 1, -3 ],
   "scale": [ 0.55, 0.55, 0.55 ]
   
   },
   "firstperson": {
   "rotation": [ 0, -135, 25 ],
   "translation": [ 0, 4, 2 ],
   "scale": [ 1.7, 1.7, 1.7 ]
   }
  }
} 

"parent" sorgt dafür, das diese Textur überhaupt entsteht.

"textures" ist die Textur des Gegenstandes (NICHT DIE DATEIENDUNG MITSCHREIBEN!).

"display" zeigt euch je nach Parameter an, wie das Gegenstand aussieht, wenn es in der Hand ist.

Anschließend wird im InitializationEvent eine GameRegistry erstellt. Hier ein Beispiel:

GameRegistry.registerItem(ruby, "ruby");

Dies registriert den Gegenstand und weist eine ID zu.

Und darunter ein weiterer Befehl:

Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(ruby, 0, new ModelResourceLocation("tutorialmod:ruby", "inventory"));

Dies bewirkt, dass für den Gegenstand ruby ein Inventarmodell aus der Datei assets/tutorialmod/models/item/ruby.json geladen wird. Wenn man für Metadata 1 ein anderes Modell hinzufügen möchte, kann man so den zweiten Parameter hinter dem Gegenstand verändern:

Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(ruby, 1, new ModelResourceLocation("tutorialmod:ruby_cracked", "inventory"));

Sprache[Bearbeiten]

Um Namen zu definieren, müssen wir wie in einem Ressourcenpaket eine Sprachdatei erstellen. In Minecraft kannst du die Beschriftung der Gegenstände, der Tabs des Kreativmenüs oder andere ablesen (zum Beispiel: tile.testblock.name). Dann kannst du in die Datei title.testblock.name=Testblock schreiben. Nach dem Gleichheitszeichen kannst du alles schreiben, was angezeigt werden soll, dies können ganze Sätze aber auch ein Leerzeichen sein.

Um Farbcodes zu benutzen, kannst du im Text, nach dem Gleichheitszeichen mit diesem Code: §X, Farben hinzufügen (hierbei muss X durch eine Zahl bzw. einen Buchstaben ersetzt werden).

Biome erstellen[Bearbeiten]

Kreatur hinzufügen[Bearbeiten]

Rüstungen erstellen[Bearbeiten]

Hinweise[Bearbeiten]

  • Eine der einfachsten Arten von Modifikationen sind hinzugefügte und veränderte Blöcke / Gegenstände. Man kopiert eine Klasse und bearbeitet sie. Wenn ein Block / Gegenstand sich nur minimal von einem bestehenden unterscheiden soll ist es einfacher, der bereits vorhandenen Klasse eine Unterklasse hinzuzufügen, in der nur ein paar Feinheiten geändert werden. Je nach gewünschtem Verhalten des neuen Blocks / Gegenstands kann es notwendig sein, auch andere Klassen zu bearbeiten.

Fehler mit Intel[Bearbeiten]

Bei Integrierten Grafikkarten von Intel kann eine "LWJGLException" auftreten. Versuche in diesem Fall deine Grafikkartentreiber zu aktualisieren, sollte der Fehler weiterhin auftreten wird die Grafikkarte nicht mehr unterstützt.

Natürlich kann man jedes Mal die Modifikation exportieren und mit dem "normalen" Minecraft starten, dies kann allerdings bei älteren Rechnern, wo dieser Fehler eher auftritt, sehr lange dauern da Minecraft immer komplett neu gestartet werden muss.

Häufige Fehler[Bearbeiten]

JAVA_HOME ist falsch gesetzt

  • Beachte, dass du JAVA_HOME in deinen System-Umgebungsvariablen (Rechtsklick auf Computer -> Eigenschaften -> Erweiterte Systemeinstellungen -> Umgebungsvariablen) auf dein JDK einstellen musst. Das machst du, indem du den JDK-Pfad kopierst und dann JAVA_HOME auf diesen stellst. Falls es keine Variable mit dem Namen JAVA_HOME gibt, dann erstelle eine.

Minecraft startet gar nicht / blinkt kurz auf.

  • Mojang unterstützt ab der Version 1.7.2 nur noch OpenGL 3 oder höher, update die Treiber falls möglich.

Die Namen aus der Sprachdatei werden nicht übernommen.

  • Beachte, dass du die richtige Sprache in Minecraft ausgewählt hast.

Forge zeigt einen Fehler beim Laden von Minecraft an, bevor die Mod initialisiert wird.

  • Das ist normal, der Fehler steht nur dafür, dass sich Minecraft nicht mit Mojang verbinden kann.

Modifikationen erstellen ohne MCP[Bearbeiten]

MCP ist das Mod Coder Pack, eine Sammlung von Scripten und Werkzeuge, die Entwicklern helfen Modifikationen für Minecraft zu erstellen.

Manchmal ist es aber auch nützlich Modifikationen ohne MCP zu erstellen. MCP ist z.B. nicht für Entwicklerversionen verfügbar. Dekompilierten, allerdings verschleierten, Code gibt es hier. Es wäre in diesem Fall möglich die Verschleierung des Codes manuell durchzuführen, dies ist allerdings sehr zeitaufwending.

Es gibt auch noch andere Projekte die versuchen den Code automatisch von besagter Verschleierung zu befreien, als Beispiel: Der Deobfuscator 3.0