[Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Hier könnt ihr Tutorials posten!
Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

[Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » So Mai 05, 2013 2:57 pm

Hey,
Da ich aktuell selber am modden bin und ich selber nicht allzu gut bin, ist mir die Idee für diese Tutorial Serie gekommen.
Das wenigste wird hier wird mein eigenes Material sein, ich werde vor allem englische Tuts übernehmen und übersetzen.
Also, viel Spaß :)


Inhaltsverzeichnis
1. Forge, MCP und Eclipse aufsetzen
2. Anfänge deines Mods
3. Items & Blöcke - Basics
4. Texturen, Creative Tabs und Itemstacks
5. Rezepte
Werd jetzt nur noch etwas erweiterte Sachen posten, hauptsächlich Sachen die ich nicht erkläre sondern einfach nur den Code zeigen.
Copy & Pasten könnt Ihr vergessen, ein bisschen müsst Ihr Java/MCP coden verstehen, oder überhaupt was mit Programmiersprachen sonst klappt das nicht.
Sinn ist deswegen, weil es die Anfängertutorials sehr zahlreich bereits im Netz gibt und ich nicht Lust habe das Rad neu zu erfinden.
Wenn Ihr Fragen habt, bezüglich was was tatsächlich macht, einfach PN oder hier im Thread.

6. Eigenes Buch
Zuletzt geändert von Nakroma am Mi Mai 29, 2013 3:53 pm, insgesamt 8-mal geändert.

Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » So Mai 05, 2013 2:57 pm

1. Forge, MCP und Eclipse aufsetzen

Als erstes braucht Ihr natürlich eine Arbeitsumgebung und Forge selbst.
Um das aber benutzen zu können braucht Ihr das Java Development Kit.
Eclipse ist hierbei optional, ich empfehle es aber.
Hier auf das letzte Thema gehen und die Forge Source downloaden. Forge Releases
Danach bei den Eclipse Downloads die Classic Version runterladen.

Nun extrahiert Ihr die beiden .Zip's irgendwo, wo Ihr wollt. Im Ordner /forge/ führt Ihr die install.cmd aus, das kann eine Weile dauern, aber dann ist MCP und Forge soweit fertig.
nun führt Ihr Eclipse aus und gebt bei Workspace euren /forge/mcp/eclipse Ordner ein, bei mir sieht das dann so aus:
Bild

Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » So Mai 05, 2013 4:49 pm

2. Anfänge deines Mods

Als erstes braucht man ein eigenes Package. Das ist im Prinzip der eigene Mod.
Dazu geht man in das linke Fenster und öffnet erst mal src im Minecraft Ordner.
Bild

Danach Rechtsklick auf den src Ordner, New, Package.
Bild

Dort gebt Ihr als Titel deinname.deinmod an, also zB nakroma.tutorialmod und danach auf Finish!
In diesem Package erstellt Ihr all eure Klassen. Wir benötigen aber erstmal eine BaseMod Klasse.
Also klickt Ihr Rechtsklick auf Euer Package, New -> Class
Bild

Das wird die Base Klasse, Ihr nennt sie am besten DeineModBase, oder so. In meinem Fall TutorialModBase. Finish!
Bild

Gut, nun weisen wir den Mod quasi so, also ergänzen wir unseren Code um folgende Stelle:
Nicht vergessen, überall euren eigenen Namen hinsetzen ;)

Code: Alles auswählen

package nakroma.tutorialmod;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.network.NetworkMod;

@Mod(modid = "tutorialmod", name = "Tutorial Mod", version = "0.0.1")
@NetworkMod(clientSideRequired = true, serverSideRequired = false)

public class TutorialModBase {

}


Nun geben wir die Proxy's an(die machen wir später genauer), bei Eclipse sollte jetzt vielleicht etwas rot unterstrichen sein, aber keine Sorge, das beheben wir später.

Code: Alles auswählen

package nakroma.tutorialmod;

import nakroma.farrier.ServerProxy;
import nakroma.farrier.mod_MainClass;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.network.NetworkMod;

@Mod(modid = "tutorialmod", name = "Tutorial Mod", version = "0.0.1")
@NetworkMod(clientSideRequired = true, serverSideRequired = false)

public class TutorialModBase {
   
   @SidedProxy(clientSide = "nakroma.tutorialmod.ClientProxy", serverSide = "nakroma.tutorialmod.ServerProxy")
   public static ServerProxy proxy;
   
   @Instance
   public static TutorialModBase instance = new TutorialModBase();
   
}


Nun kommen die Initalisierungen.

Code: Alles auswählen

package nakroma.tutorialmod;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;

@Mod(modid = "tutorialmod", name = "Tutorial Mod", version = "0.0.1")
@NetworkMod(clientSideRequired = true, serverSideRequired = false)

public class TutorialModBase {
   
   @SidedProxy(clientSide = "nakroma.tutorialmod.ClientProxy", serverSide = "nakroma.tutorialmod.ServerProxy")
   public static ServerProxy proxy;
   
   @Instance
   public static TutorialModBase instance = new TutorialModBase();
   
   @PreInit
   public void load(FMLPreInitializationEvent PreEvent) {

   }
   
   @Init
   public void load(FMLInitializationEvent event) {
      proxy.registerRenderThings();
   }

   @PostInit
   public void PostLoad(FMLPostInitializationEvent PostEvent) {
      
   }
}


In der @Init wird sich der Großteil abspielen.
Nun müssen wir aber erstmal die Proxys erstellen um die Fehlermeldungen wegzubekommen.
(Diesen Trick merken): Ihr hovert nun auf das rot unterstrichene ServerProxy und klickt dann auf Create Class 'ServerProxy'.
Dort fügt Ihr noch folgendes ein:

Code: Alles auswählen

package nakroma.tutorialmod;

public class ServerProxy {

   public void registerRenderThings(){
      
   }
   
}


Jetzt solltet Ihr theoretisch nichts mehr Rot unterstrichen haben. Es kann sein das bestimme Sachen noch nicht importiert sind. Dann könnt Ihr entweder über das rot unterstrichene hovern und auf Import 'Blub' drücken, oder Ihr drückt Strg + Shift + O, das importiert alles was notwendig ist.
Allerdings fehlt noch der ClientProxy. Also Rechtsklick auf euer Package, New -> Class und ClientProxy eingeben.
Bild

Dort ändert Ihr noch folgende Sachen:

Code: Alles auswählen

package nakroma.tutorialmod;

import cpw.mods.fml.client.registry.RenderingRegistry;

public class ClientProxy [b]extends ServerProxy[/b] {

}



Das wars auch schon, eure Mod ist nun startklar und Ihr könnt anfangen zu modden!
Bis zum nächsten Tut,
Mfg
Zuletzt geändert von Nakroma am Di Mai 07, 2013 7:05 pm, insgesamt 1-mal geändert.

Benutzeravatar
XDClaner
Globaler Moderator
Beiträge: 40
Registriert: Di Apr 23, 2013 9:19 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon XDClaner » So Mai 05, 2013 7:18 pm

An sich eine super Idee, beim Lernen zugleich das Lernen für andere zu vereinfachen. Allerdings ist das Tutorial für einen Neueinsteiger nicht detailliert genug. Ich würde mir wünschen, dass du nicht nur den Code postest, sondern auch erklärt, was der genau macht. Mit "nun geben wir die Proxys an" kann jemand, der nicht weiß was Proxys sind, nichts anfangen.

Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » Di Mai 07, 2013 2:28 pm

Das Problem ist, das soll auch kein wirkliches Einsteiger Tutorial werden.
Ich versuch die ersten Tut's so detaliert wie möglich zu machen, danach wirds von mir aber nur reinen Code + ein paar Hinweise und Erklärungen geben.
Die Proxys sind (glaub ich, bin mir selber nicht so sicher) dafür da die Mod zu rendern, also der ClientProxy rendert für den Client und der ServerProxy für die anderen Spieler, ergo den Server.

Benutzeravatar
Neui
Schleifen-Versteher
Beiträge: 19
Registriert: Fr Apr 26, 2013 3:50 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Neui » Di Mai 07, 2013 5:18 pm

Kleine Nebeninformation, die [B]-Codes funktionieren nicht im [CODE]-tag. Bin gleicher Meinung wie XDClaner
© -NEUI☺ Mein Youtube-Channel: CraftNeui
BildRechtschreibfehlern haftet meine Tastatur.

Benutzeravatar
Vaixell
Schleifen-Versteher
Beiträge: 16
Registriert: Di Apr 23, 2013 7:42 pm
Wohnort: Ostbevern
Kontaktdaten:

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Vaixell » Di Mai 07, 2013 5:20 pm

@
Benutzeravatar
Nakroma

Du solltest die Code-Tags in [ code=Java ] ändern. Dann wird auch Syntax Highlighting genutzt.

Code: Alles auswählen

package bla.mist;
class Irgendwas{
    public static int gau; /* Weil wegen Baum und sou.. */ }

Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » Di Mai 07, 2013 7:27 pm

Items & Blöcke - Basics

Heute erstellen wir Items und Blöcke.
Da die Bold-Tags nicht funktionieren, hau ich einfach Kommentare hinter die eingefügten Zeilen :)
Zuerst einmal erstellen wir die Variablen nach der @Instance.
public static Art Name;

Code: Alles auswählen

public class TutorialModBase {
   
    @SidedProxy(clientSide = "nakroma.tutorialmod.ClientProxy", serverSide = "nakroma.tutorialmod.ServerProxy")
    public static ServerProxy proxy;
   
    @Instance
    public static TutorialModBase instance = new TutorialModBase();

    public static Item TutItem;  //
    public static Block TutBlock;  //
   
    @PreInit
    public void load(FMLPreInitializationEvent PreEvent) {
 
    }


Nun müssen wir diese natürlich definieren, das machen wir in der @Init.
Blockname = new Blockklasse(ID).Attribute.setUnlocalizedName("Blockname");
Itemname = new Itemklasse(ID).setUnlocalizedName("Itemname");

Code: Alles auswählen

   @Init
   public void load(FMLInitializationEvent event) {
      proxy.registerRenderThings();
      
      TutBlock = new TutBlock(2000).setHardness(3.0F).setResistance(5.0F).setUnlocalizedName("TutBlock"); //
      TutItem = new TutItem(5000).setUnlocalizedName("TutItem"); //

}


Nun merkt Ihr vielleicht das die Klassen rot unterstrichen werden. Bevor wir das beseitigen müssen wir aber noch folgendes machen:
Den Block registrieren und beidem einen Namen geben. Das kommt nach der eigentlichen Definition, aber immernoch in der @Init.
GameRegistry.registerBlock(Blockname, "Unlocalized Name");
LanguageRegistry.addName(Name, "Ingame Name");

Code: Alles auswählen

   @Init
   public void load(FMLInitializationEvent event) {
      proxy.registerRenderThings();
      
      TutBlock = new TutBlock(2000).setHardness(3.0F).setResistance(5.0F).setUnlocalizedName("TutBlock");
      TutItem = new TutItem(5000).setUnlocalizedName("TutItem");

                GameRegistry.registerBlock(TutBlock, "TutBlock"); //

      LanguageRegistry.addName(TutBlock, "Tut Block"); //
      LanguageRegistry.addName(TutItem, "Tut Item"); //

}


Nun erstellen wir aus den rot unterstrichenen Sachen zwei neue Klassen.
Nun aufpassen!
Wir schreiben hinter die Klassen folgendes:

Code: Alles auswählen

public class TutItem extends Item {
public class TutBlock extends Block {


Dies erweitert eure aktuelle Klasse um die Eigenschaften der Vanilla-Klassen. Nun wird jeweils Item und Block rot unterstrichen. Das liegt daran, das sie nicht importiert sind.
Drüberhovern und importieren! Nun müssen wir noch einen Konstruktor erstellen, der dafür zuständig ist alle in der Base Klasse übergebenen Werte richtig einzutragen, in unserem Fall ist das nur die ID. Über das rot unterstrichene TutItem und TutBlock drüberhovern und einen Konstruktor erstellen.

Fertig ist unser Basiszeug. Im nächsten Tutorial gibts dann Texturen, Creative Tabs und Itemstacks. Eventuell noch Metadata.
Mfg

Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » Mi Mai 08, 2013 5:48 pm

4. Texturen, Creative Tabs und Itemstacks

Widmen wir uns erstmal den Texturen. Dafür müssen wir erstmal wissen wo diese zu finden sind.
Am besten erstellt Ihr einen Ordner in eurem Projektordner oder auf dem Desktop namens mods.
Nun sieht der Pfad so aus:
/mods/DeinMod/textures/items/
/mods/DeinMod/textures/blocks/
Dort kommen dann die einzelnen PNG's rein.
Wenn Ihr euren Mod testen wollt, geht Ihr in den Ordner /forge/mcp/jars/bin/, öffnet die minecraft.jar mit 7zip oder WinRar und tut den /mods/ Ordner darein.

Nun müssen wir den Items/Blöcken natürlich auch noch die Textur zuordnen. Die Codeschnipsel kommen einfach die Hauptklasse (public class TutBlock [...]).
.registerIcon("DerModWieImPfadAngegeben:DeineTexturOhne.png")

Blöcke

Code: Alles auswählen

    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister)
    {
        this.blockIcon = par1IconRegister.registerIcon("DeinMod:DeineTextur");
    }


Items

Code: Alles auswählen

    @SideOnly(Side.CLIENT)
    public void registerIcons(IconRegister par1IconRegister)
    {
        this.itemIcon = par1IconRegister.registerIcon("DeinMod:DeineTextur");
    }


Nun kommen wir zum eigenen Creative Tab.
Wir definieren in der @Instance bei den anderen Definitionen den CreativeTab, wie gehabt.

Code: Alles auswählen

public static CreativeTabs TutTab;


Und definieren ihn wie gehabt in der @Init.

Code: Alles auswählen

   TutTab = new TutTab(CreativeTabs.getNextID(),"TutTab");


Drüberhovern, Klasse erstellen.
Bei getTabIconItemIndex geben wir das Icon zurück, welches dann auf dem Creative Tab gesetzt wird.
Bei getTranslatedTabLabel wird im Prinzip der im Spiel ausgegebene Name des Tabs definiert.

Code: Alles auswählen

public class TutTab extends CreativeTabs {
   public TutTab(int position, String tabID) {
      super(position, tabID);
   }
   
   @SideOnly(Side.CLIENT)
   public int getTabIconItemIndex()
   {
      return Item.ingotIron.itemID;
                //return Block.dirt.blockID; //Für Blöcke
   }

   public String getTranslatedTabLabel()
   {
      return "Tutorial Mod";
   }
}


Nun müssen wir aber erstmal einen CreativeTab setzen. Gleichzeitig, als Rand-Info kommt daneben noch bis wieviel das Item/der Block maximal stackbar ist(Standard ist dann 64).
Das ganze kommt in den Konstruktor unter super.

Code: Alles auswählen

   public TutItem(int par1) {
      super(par1);
      this.maxStackSize = 16; //
      this.setCreativeTab(TutorialModBase.TutTab); //
                // this.setCreativeTab(CreativeTabs.tabBlock) // für Vanilla-Tabs
   }


Nächste mal gibts dann Metadata.

Benutzeravatar
Nakroma
Spender
Beiträge: 39
Registriert: Fr Apr 26, 2013 2:51 pm

Re: [Forge, 1.5.2] Nakroma's Minecraft Modding Tutorials

Beitragvon Nakroma » Do Mai 09, 2013 11:57 am

5. Rezepte

Das zieh ich jetzt mal vor, danach kommt dann wirklich Metadata ;)
Das ganze kommt in die @Init der Base-Klasse am besten ganz unten hin, nach den Namenszuweisungen.

Fangen wir mit Crafting Recipes an, dabei gibt es zwei Arten:

Code: Alles auswählen

GameRegistry.addRecipe(new ItemStack(TutBlock), new Object[]{
                    "XXX",
                    "FFF",
                    "XXX",
                    'X', Item.ingotGold, 'F', Block.stone
             });


Das ist das "geformte" Rezept, sollte klar sein. Man definiert erst das 3x3 Crafting Grid und danach weißt man den Buchstaben Items oder Blöcke zu.
Dann gibt es noch das formlose Rezept, dabei ist es egal wie man die Items anordnet, es werden nur die Items angegeben die drin vorkommen.
In diesem Beispiel braucht es um ein TutItem zu craften, einen Diamant und einen TutBlock, beliebig platziert.

Code: Alles auswählen

GameRegistry.addShapelessRecipe(new ItemStack(TutItem), new Object[]{
                    new ItemStack(Item.diamond), new ItemStack(TutBlock)
             });


Und als letztes natürlich die Schmelzrezepte:
FurnaceRecipes.smelting().addSmelting(Input: Item/Block Mit itemID oder blockID, Metadata, Output im ItemStack, XP);

Code: Alles auswählen

FurnaceRecipes.smelting().addSmelting(Item.beefCooked.itemID, 0, new ItemStack(tutorialItem), 0.1F);


Nun gibt es noch zwei Sachen die man beachten sollte.
Bestimmte Items oder Blöcke haben Metadata, zum Beispiel die Färbemittel. Das ist damit das Game nicht damit überläuft.
Wenn Ihr nun zB Lapis Lazuli im Rezept benutzen wollt macht Ihr das im Crafting Rezept:
new ItemStack(Item/Block, Anzahl, Metadata)

Code: Alles auswählen

 GameRegistry.addShapelessRecipe(enchanted, new Object[]{
            new ItemStack(Item.pickaxeStone), new ItemStack(Item.flint), ItemStack(Item.dyePowder, 1, 4)
});


Im Smelting Recipe ist das ganze einen Tick anders, beim Output ist es das gleiche wie beim Crafting Recipe, ein ItemStack.
Beim Input müsst Ihr einfach an die zweite Stelle die Metadata setzten, in etwa so:

Code: Alles auswählen

FurnaceRecipes.smelting().addSmelting(Item.dyePowder.itemID, 4, new ItemStack(tutorialItem), 0.1F);


Die Metadata der Items/Blöcke könnt Ihr hier nachschauen:
http://www.minecraftwiki.net/wiki/Data_values
Im nächsten Tutorial zeige Ich euch dann, wie man ein eigenes Item/eigenen Block mit Metadata erstellt.


Zurück zu „Knowledge“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste