Nachdem wir jetzt unsere Mod-Datei erstellt haben, wagen wir uns an den ersten Block heran. Auch hier wird der komplete Source Code noch einmal zum Download stehen.
Zu erst öffnen wir unsere Mod-Datei. Dort finden wir die den Code von letztem mal. Diesen modifizieren wir jetzt ein wenig.
Code:
public class mod_XX extends BaseMod {
public static Block xxBlock;
Dies kommt jetzt an den Anfang.
Als nächstes müssen wir uns um die Texturen kümmern. Dazu erstellen wir einen neuen Sprite (ein Bild das 256x256 groß ist).
Dies muss mit einem transparenten hintergrund erstellt werden.
Ich empfehle Gimp. In diesem Bild muss man dann eine 16x16 Pixel große Textur erstellen. Wie man mehrere Texturen für einen Block erstellt kommt später.
Achtung diese Textur muss ganz links oben bei 0x0 sein.
Als nächstes speichert man die Datei in eclipse/Client/bin/texture.png. Ich speichere zusätzlich die Texture noch in einem neuen Ordner. Das heißt mein Pfad lautet jetzt: eclipse/Client/bin/tut/terrain.png.
Außerdem sollte man eine Sicherungskopie erstellen, da Eclipse ab und zu den eclipse-Ordner leert.
Jetzt muss man die Texturen preloaden. Das bedeutet, dass man die ursprüngliche Terrain-Datei mit der neu erstellten überschreibt.
Dies funktioniert so:
Code:
MinecraftForgeClient.preloadTexture("/tut/terrain.png"); // Der Pfad sollte natürlich angepasst werden.
Jetzt wird der Block noch erstellt, registriert und benannt:
Code:
xxBlock = new Block(125, 0, Material.wood).setHardness(3F).setResistance(5F).setStepSound(Block.soundWoodFootstep).setBlockName("xxBlock");
ModLoader.registerBlock(xxBlock);
ModLoader.addName(xxBlock, "Irgendein Block");
Die Block funktion ist folgendermaßen aufgebaut:
Code:
Block(BlockID, TextureID, Material)
BlockIDs sind ab 125 frei.
TextureIDs sind die IDs die in unserer Texture-Datei erstellt werden. Dabei zählt man von links nach rechts und von oben nach unten.
Material braucht man, dass Minecraft weiß, wie man's abbauen soll.
Code:
setHardness(Härte);
Erklärt sich von selbst.
Code:
setResistance(Resistäns)
Wird bei TNT, usw. verwendet.
Code:
setStepSound(Sound)
Definiert das Geräusch, dass beim auftretten gemacht wird.
Code:
setBlockName("xxBlock")
Wird zur Regestration vom Block benötigt und hat nichts mit dem Namen im Spiel zu tun.
Code:
ModLoader.registerBlock(Block);
Registriert den Block im Spiel.
Code:
ModLoader.addName(Block, "Name");
Definiert den Namen für den Block im Spiel.
Der fertige Source Code sollte jetzt so aussehen:
Code:
package net.minecraft.src;
import net.minecraft.src.forge.MinecraftForgeClient;
public class mod_XX extends BaseMod {
public static Block xxBlock;
@Override
public String getVersion() {
return "XX - 1.2.5";
}
@Override
public void load() {
MinecraftForgeClient.preloadTexture("/tut/terrain.png");
xxBlock = new Block(125, 0, Material.wood).setHardness(3F).setResistance(5F).setStepSound(Block.soundWoodFootstep).setBlockName("xxBlock");
ModLoader.registerBlock(xxBlock);
ModLoader.addName(xxBlock, "Irgendein Block");
}
}
Nun sollte man Minecraft starten können. (Wieder den grünen Pfeil anklicken und warten.)
Download:
Alter Download
Download
Nachtrag:
Der Block funktioniert nur, wenn man eine externe Klasse erstellt die BlockXX.java heißt (XX immer ersetzen). So sieht dann der Source Code aus:
BlockXX.java:
Code:
package net.minecraft.src;
public class BlockXX extends Block {
public BlockXX(int par1, int par2, Material par3Material) {
super(par1, par2, par3Material);
}
public String getTextureFile()
{
return "/tut/terrain.png";
}
}
XX.java:
Code:
package net.minecraft.src;
import net.minecraftforge.client.MinecraftForgeClient;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
@Mod(modid = "101", name = "Tutorial Mod", version="1.0.0")
public class XX {
public static Block xxBlock;
@Init
public void load(FMLInitializationEvent event)
{
xxBlock = new BlockXX(137, 0, Material.wood).setHardness(3F).setResistance(5F).setStepSound(Block.soundWoodFootstep).setBlockName("xxBlock");
ModLoader.registerBlock(xxBlock);
ModLoader.addName(xxBlock, "Irgendein Block");
}
@PreInit
public void preLoad(FMLPreInitializationEvent evt)
{
MinecraftForgeClient.preloadTexture("/tut/terrain.png");
}
@PostInit
public void postLoad(FMLPostInitializationEvent evt)
{
}
}