thxgeiles tut
Ja, es hat mich sehr viel weitergebracht!
Ja, es ist in Ordnung.
Jedes Tutorial ist gut!
Nein, ich mag keine Tutorials.
Bitte schickt mir keine privaten Nachrichten, wenn ihr einen Error habt oder nicht mehr weiter wisst. Am besten postet ihr euren Error-Log und die betroffene .java Datei hier im Thread. (Achtung: Verwendet bitte [ code] [/ code] (ohne Leerzeichen) wenn ihr Errors/Dateien postet)
Wenn ihr keine Ahnung von Coden mit Modloader habt, folgt diesem Link: [Tut] Minecraft coden mit Modloader
Übersicht:
1. Techne
2. Textur
3. Fertigstellung des Models
4. Java-Dateien erstellen
5. Zusätze und Erweiterungena. Mobs in bestimmten Biomen spawnen lassen und ihre Art bestimmen (Monster, Land- oder Wasserlebewesen)
1. Techne
Techne ist ein kleines Helferprogramm für Coder, es ist eine Art "3D Model-Viewer" und natürlich kann man damit auch Modelle von Mobs für Minecraft erstellen, da es ja für Minecraft entwickelt wurde. Techne kann man hier downloaden. Folgt dem Link und ihr werdet auch einige Videos über Techne sehen können.
Voreinstellungen:
Nach der Installation, startet Techne (Start > Alle Programme > ZeuX and r4wk > Techne)
Techne startet und es öffnet sich direkt ein kleines Fenster, bei dem wir unter "Model Name" "Model" + den Namen des Mobs (den wir erstellen wollen) eingeben. In unserem Fall "ModelDeer", was soviel wie "ModelReh" heißt. Bei "Base Class" kann man zwischen "ModelBase", "ModelBiped" und "ModelQuadruped" auswählen. Bei "ModelBase" wird keine Vorlage gegeben, bei "ModelBiped" gibt es den Menschen als Vorlage und bei "ModelQuadruped" bekommt man das Schwein als Vorlage. "Base Class" ist eine sehr hilfreiche Funktion da man die Größe des erstellten Mobs mit der eines Menschens oder eines Schweines vergleichen kann. Ich benutze "ModelBase".
Objekt erstellen:
Wir erstellen als erstes einen Würfel, dazu drücken wir links auf den "Cube" Button (violett) und geben dem erstellten Würfel links oben einen Namen (rot). Die Größe des Würfels können wir links, unter dem Punkt "Dimensions" (gelb) bestimmen. Die Postion ändern wir unter dem Punkt "Position" (grün), um den Körper auch mit Beinen usw. verbinden zu können. Unter "Texture Offset" (blau) kann man einstellen, welchen Bereich der Würfel/Quader bei der Textur einnimmt. Um die Größe besser zu "sehen" drehen wir unsere Ansicht (rot, rechts unten), indem wir die rechte Maustaste gedrückt halten und die Maus bewegen.
Größe eines Objektes ändern: (siehe Spoiler von Objekt erstellen)
Um die Größe eines Objektes zu ändern, klicken wir links unter dem Punkt "Dimensions" bei der ersten Box den Pfeil nach oben um es nach rechts/links zu vergrößern, zum verkleinern den Pfeil nach unten drücken. Bei der zweiten Box wird es nach oben/unten vergrößert bzw. verkleinert. Bei der dritten Box wird es nach hinten/vorne vergrößert bzw. verkleinert.
Position eines Objektes ändern: (siehe Spoiler von Objekt erstellen)
Um die Position eines Objektes zu ändern, klicken wir links unter dem Punkt "Position" bei der ersten Box den Pfeil nach oben um es nach rechts/links zu verschieben. Bei der zweiten Box wird es nach oben/unten verschoben. Bei der dritten Box wird es nach hinten/vorne verschoben.
Drehung eines Objektes: (Was sind die Achsen x, y und z?)
Um ein Objekt zu Drehen benötigen wir die drei Boxen unter dem Punkt "Rotation" auf der linken Seite. Die erste Box bestimmt die Drehung um die y-Achse, die zweite Box die Drehung um die z-Achse und die dritte Box bestimmt die Drehung um die x-Achse.
Die Drehung kann man auch mit den darüberliegenden drei Leisten bestimmen.
2. Textur
Für eine Textur braucht man zuerst ein fertiges Model! Wenn man sein Model fertig hat, klickt man in Techne "Datei > Export > as texturemap", es öffnet sich ein Fenster, wo man auswählen kann wie es heißen soll und wo es gespeichert wird. Speichert es!
Textur bearbeiten:
Öffnet die soeben gespeicherte Datei mit einem Bildbearbeitungsprogramm (Photoshop, GIMP...), dort sieht man farbige Kästen, welche dir bei der Erstellung einer Textur helfen sollen. Hier die Legende: Grüne Flächen sind beim Model oben und unten, rote Flächen sind links und rechts, blaue Flächen sind vorne und hinten. Am besten erstellt ihr eine neue Ebene und bearbeitet die Flächen so, wie ihr wollt. Danach speichert ihr euere Textur als .png Datei. Die Textur muss das Format .png haben, sonst wir eure Textur womöglich falsch oder garnicht angezeigt!
Hier eine kleine Vorlage, wenn dein Objekt die Maße 2 x 3 x 5 hat:
Textur in Techne anzeigen lassen:
Um die Textur nun auch in Techne einzufügen, klickt ihr in Techne links auf den untersten Button namens "LoadTexture". Nun wählt ihr eure Textur aus. Nun kommt die Funktion "Texture Offset" ins Spiel, wählt zum Beispiel den Kopf von eurem Model aus und nun werdet ihr rechts oben eure Textur sehen (vielleicht auch schon vorher). Bei "Texture Offset" gibt es wieder drei Boxen, nun ändert ihr die Zahl der ersten Box und schaut rechts oben auf eure Textur. Ein Feld bewegt sich, dieses Feld zieht ihr genau über die Stelle an der euer Bereich für den Kopf ist. Und siehe da, bei deinem Model wird nun eine Textur auf dem Kopf angezigt. Diesen Schritt wiederholt ihr bei jedem einzelnen Objekt, das ihr erstellt habt.
3. Fertigstellung des Models:
Damit du das nicht alles umsonst gemacht hast, musst du dein Model natürlich speichern. Dafür klickst du in Techne "Datei > Save as" und speicherst dein Model. Um es nun auch noch für MCP zu gebrauchen, klcikst du "Datei > Export > as java" und speicherst die Datei zum Beispiel am Desktop.
4. Java-Dateien erstellen:
Java Dateien sind das Wichtigste für den Coder, denn was würde er machen wenn er keine Java Dateien mehr hat?
Model* Datei erstellen:
Die Model Datei ist die Datei, welche bestimmt wie groß ein Objekt ist oder wo sich ein Objekt befindet, natürlich auch wo welcher Bereich der Textur ist. Nun zum Code: Wir öffnen die Datei die wir in Techne mit "to java" erhalten haben. Bei mir sieht sie so aus:
Diese Datei muss ich jetzt als "ModelDeer.java" speichern und in meinen src Ordner des MCP's kopieren.Code:package net.minecraft.src; //Exported java file //Keep in mind that you still need to fill in some blanks // - ZeuX public class ModelDeer extends ModelBase { public ModelDeer() { Body = new ModelRenderer(0, 0); Body.addBox(0, 0, 0, 6, 7, 16, 0F); Body.setRotationPoint(0, 8, 0); Body.rotateAngleX = 0F; Body.rotateAngleY = 0F; Body.rotateAngleZ = 0F; Body.mirror = false; Leg1 = new ModelRenderer(28, 5); Leg1.addBox(0, 0, 0, 2, 9, 2, 0F); Leg1.setRotationPoint(0, 15, 0); Leg1.rotateAngleX = 0F; Leg1.rotateAngleY = 0F; Leg1.rotateAngleZ = 0F; Leg1.mirror = false; Leg2 = new ModelRenderer(28, 5); Leg2.addBox(0, 0, 0, 2, 9, 2, 0F); Leg2.setRotationPoint(4, 15, 0); Leg2.rotateAngleX = 0F; Leg2.rotateAngleY = 0F; Leg2.rotateAngleZ = 0F; Leg2.mirror = false; Leg4 = new ModelRenderer(28, 5); Leg4.addBox(0, 0, 0, 2, 9, 2, 0F); Leg4.setRotationPoint(0, 15, 14); Leg4.rotateAngleX = 0F; Leg4.rotateAngleY = 0F; Leg4.rotateAngleZ = 0F; Leg4.mirror = false; Leg3 = new ModelRenderer(28, 5); Leg3.addBox(0, 0, 0, 2, 9, 2, 0F); Leg3.setRotationPoint(4, 15, 14); Leg3.rotateAngleX = 0F; Leg3.rotateAngleY = 0F; Leg3.rotateAngleZ = 0F; Leg3.mirror = false; Neck = new ModelRenderer(2, 8); Neck.addBox(0, 0, 0, 3, 5, 3, 0F); Neck.setRotationPoint(1.5F, 5, -1.5F); //bei solchen Zahlen (wie 1.5) muss du immer ein "F" dahinter setzen Neck.rotateAngleX = 0.3490658F; Neck.rotateAngleY = 0F; Neck.rotateAngleZ = 0F; Neck.mirror = false; Head = new ModelRenderer(0, 0); Head.addBox(0, 0, 0, 3, 3, 5, 0F); Head.setRotationPoint(1.5F, 4, -3.5F); Head.rotateAngleX = 0.1745329F; Head.rotateAngleY = 0F; Head.rotateAngleZ = 0F; Head.mirror = false; Ear1 = new ModelRenderer(19, 2); Ear1.addBox(0, 0, 0, 1, 2, 1.46666666666667F, 0F); Ear1.setRotationPoint(1.53333333333333F, 1.5F, 0); Ear1.rotateAngleX = 0F; Ear1.rotateAngleY = 0F; Ear1.rotateAngleZ = 0F; Ear1.mirror = false; Ear2 = new ModelRenderer(18, 2); Ear2.addBox(0, 0, 0, 1, 2, 1.46666666666667F, 0F); Ear2.setRotationPoint(3.5F, 1.5F, 0); Ear2.rotateAngleX = 0F; Ear2.rotateAngleY = 0F; Ear2.rotateAngleZ = 0F; Ear2.mirror = false; Tail = new ModelRenderer(0, 0); Tail.addBox(0, 0, 0, 1, 1, 1, 0F); Tail.setRotationPoint(2.5F, 9, 16); Tail.rotateAngleX = 0F; Tail.rotateAngleY = 0F; Tail.rotateAngleZ = 0F; Tail.mirror = false; } public void render(float f, float f1, float f2, float f3, float f4, float f5) //dieser Teil ist dazu da, den Mob auch zu rendern { super.render(float f, float f1, float f2, float f3, float f4, float f5) setRotationAngles(f, f1, f2, f3, f4, f5); Body.render(f5); Leg1.render(f5); Leg2.render(f5); Leg4.render(f5); Leg3.render(f5); Neck.render(f5); Head.render(f5); Ear1.render(f5); Ear2.render(f5); Tail.render(f5); } public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) { super.setRotationAngles(f, f1, f2, f3, f4, f5); } //fields public ModelRenderer Body; public ModelRenderer Leg1; public ModelRenderer Leg2; public ModelRenderer Leg4; public ModelRenderer Leg3; public ModelRenderer Neck; public ModelRenderer Head; public ModelRenderer Ear1; public ModelRenderer Ear2; public ModelRenderer Tail; }
"ModelDeer" heißt sie deshalb, weil oben bei "public class" "ModelDeer" steht, wenn ihr tum Beispiel einen Hasen macht, schreibt ihr da "ModelRabbit" oder "ModelHase" hin, aber es muss immer "Model" vorne stehen.
Entity* Datei erstellen:
Die Entity Datei bestimmt die Eigenschaften, die dein Mob letztendlich hat. Sie bestimmt welche Sounds dein Mob macht, wie viel Leben dein Mob hat usw. Zum Code:
Render* Datei erstellen:Code:package net.minecraft.src; // Referenced classes of package net.minecraft.src: // EntityAnimal, Item, EntityPlayer, InventoryPlayer, // ItemStack, World, NBTTagCompound public class EntityDeer extends EntityAnimal { public EntityDeer(World world) { super(world); texture = "/mob/deer.png"; //bestimmt die Textur, welche in "bin/minecraft/mob" liegt setSize(0.9F, 1.3F); health = 20; //bestimmt das Leben deines Mobs, "20" bedeutet dein Mob hat 10 Herzen } public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); } public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); } protected String getLivingSound() { return; //Sound den dein Mob macht, bei der Kuh steht and der Stelle: return "mob.cow"; } protected String getHurtSound() { return; //Sound den dein Mob macht, wenn es verletzt wird, bei der Kuh steht and der Stelle: return "mob.cowhurt"; } protected String getDeathSound() { return; //Sound den dein Mob macht, wenn es stirbt, bei der Kuh steht and der Stelle: return "mob.cowhurt"; } protected float getSoundVolume() { return 0.4F; //Lautstärke der Sounds, "0.4F" ist Standart } protected int getDropItemId() { return Item.leather.shiftedIndex; //Item oder Block den dein Mob droppt, in dem Fall werden 0-3 Leder gedroppt } }
Zum Schluss muss dein Mob noch gerendert werden, damit er auch im Spiel angezigt werden kann. Hier darf man nur die Namen der Dateien ändern! Der Code dazu:
mod_* Datei erstellen:Code:package net.minecraft.src; // Referenced classes of package net.minecraft.src: // RenderLiving, EntityDeer, ModelBase, EntityLiving, // Entity public class RenderDeer extends RenderLiving { public RenderDeer(ModelBase modelbase, float f) { super(modelbase, f); } public void renderDeer(EntityDeer entitydeer, double d, double d1, double d2, float f, float f1) { super.doRenderLiving(entitydeer, d, d1, d2, f, f1); } public void doRenderLiving(EntityLiving entityliving, double d, double d1, double d2, float f, float f1) { renderDeer((EntityDeer)entityliving, d, d1, d2, f, f1); } public void doRender(Entity entity, double d, double d1, double d2, float f, float f1) { renderDeer((EntityDeer)entity, d, d1, d2, f, f1); } }
Jetzt noch die mod_* Datei und wir sind fertig!
Vielleicht kommen noch Erweiterungen, wie:Code:package net.minecraft.src; import java.util.*; import java.util.Map; public class mod_Deer extends BaseMod { public mod_Deer() { ModLoader.RegisterEntityID(EntityDeer.class, "Deer", ModLoader.getUniqueEntityId()); ModLoader.AddSpawn(EntityDeer.class, 12, EnumCreatureType.creature); //12 bestimmt die wie oft das Tier gespawnt wird } public void AddRenderer(Map map) { map.put(net.minecraft.src.EntityDeer.class, new RenderDeer(new ModelDeer(), 0.7F)); //0.7F ist die Größe des Schattens } public String Version() { return "1.7.3"; } }
Erweiterungen beim Spawnen lassen (siehe Übersicht)
Animation von Körperteilen
Sounds selber erstellen
So, dass war es! Ich hoffe ich kann euch damit helfen. Bei Fragen & Problemen hier im Thread melden - nicht per PN!
JuMa2906, MCenderdragon, Naruto1310, Toast?, BigBoB, Bierzumir, EvolutionGamer, pitman-87 mag diesen Beitrag
sehr gut mach ich dann wenn ich alles andere kann![]()
Stuuupiiid mag diesen Beitrag
Öhhmmm 21 Errors WTF?
ModelDrunken.java :Code:== MCP v4.3 == > Recompiling client... "C:\Program Files\Java\jdk1.6.0_26\bin\javac.exe" -g -verbose -classpath "lib/;l ib/*;jars/bin/minecraft.jar;jars/bin/jinput.jar;jars/bin/lwjgl.jar;jars/bin/lwjg l_util.jar" -sourcepath src/minecraft -d bin/minecraft src/minecraft\net\minecra ft\client\*.java src/minecraft\net\minecraft\isom\*.java src/minecraft\net\minec raft\src\*.java conf/patches/*.java failed. Return code : 1 == ERRORS FOUND == src\minecraft\net\minecraft\src\ModelDrunken.java:55: '.class' expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: ';' expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: <identifier> expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: not a statement super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: ';' expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: <identifier> expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: not a statement super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: ';' expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\ModelDrunken.java:55: ';' expected super.render(float f, float f1, float f2, float f3, float f4, float f5) ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: not a statement renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: not a statement renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: not a statement renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: not a statement renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: not a statement renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ src\minecraft\net\minecraft\src\RenderDrunken.java:25: ';' expected renderDrunken(EntityDrunken)entityliving, d, d1, d2, f, f1); ^ 21 errors ================== > Done in 1.83 seconds > Recompiling server... !! Can not find server sources !! Drücken Sie eine beliebige Taste . . .
RenderDrunken.java:Code:package net.minecraft.src; //Exported java file //Keep in mind that you still need to fill in some blanks // - ZeuX public class ModelDrunken extends ModelBase { public ModelDrunken() { Brust = new ModelRendererTurbo(0, 0, 9, 10, 4); Brust.addBox(0, 0, 0, 0); Brust.setPosition(0, 0, 0); Brust.rotationX = 0; Brust.rotationY = 0; Brust.rotationZ = 0; Kopf = new ModelRendererTurbo(0, 19, 5, 5, 4); Kopf.addBox(0, 0, 0, 0); Kopf.setPosition(2, -5, 0); Kopf.rotationX = 0; Kopf.rotationY = 0; Kopf.rotationZ = 0; Rechtes_Bein = new ModelRendererTurbo(0, 0, 2, 7, 3); Rechtes_Bein.addBox(0, 0, 0, 0); Rechtes_Bein.setPosition(1, 10, 1); Rechtes_Bein.rotationX = 0; Rechtes_Bein.rotationY = 0; Rechtes_Bein.rotationZ = 0; New_Shape1 = new ModelRendererTurbo(0, 0, 2, 7, 3); New_Shape1.addBox(0, 0, 0, 0); New_Shape1.setPosition(6, 10, 1); New_Shape1.rotationX = 0; New_Shape1.rotationY = 0; New_Shape1.rotationZ = 0; Sagichnicht = new ModelRendererTurbo(0, 0, 1, 0.53333333333333, 3); Sagichnicht.addBox(0, 0, 0, 0); Sagichnicht.setPosition(4, 9, -2.46666666666667); Sagichnicht.rotationX = 0; Sagichnicht.rotationY = 0; Sagichnicht.rotationZ = 0; } public void render(float f, float f1, float f2, float f3, float f4, float f5) { super.render(float f, float f1, float f2, float f3, float f4, float f5) setRotationAngles(f, f1, f2, f3, f4, f5); Brust.render(f5); Kopf.render(f5); Rechtes_Bein.render(f5); New_Shape1.render(f5); Sagichnicht.render(f5); } public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) { super.setRotationAngles(f, f1, f2, f3, f4, f5); } //fields public ModelRendererTurbo Brust; public ModelRendererTurbo Kopf; public ModelRendererTurbo Rechtes_Bein; public ModelRendererTurbo New_Shape1; public ModelRendererTurbo Sagichnicht; }
Bitte Hilfe ! Ist wichtig !Code:package net.minecraft.src; // Referenced classes of package net.minecraft.src: // EntityAnimal, Item, EntityPlayer, InventoryPlayer, // ItemStack, World, NBTTagCompound public class EntityDrunken extends EntityAnimal { public EntityDrunken(World world) { super(world); texture = "/mob/drunken.png"; //bestimmt die Textur, welche in "bin/minecraft" liegt setSize(0.9F, 1.3F); health = 6; //bestimmt das Leben deines Mobs, "20" bedeutet dein Mob hat 10 Herzen } public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); } public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); } protected String getLivingSound() { return; //Sound den dein Mob macht, bei der Kuh steht and der Stelle: return "mob.cow"; } protected String getHurtSound() { return; //Sound den dein Mob macht, wenn es verletzt wird, bei der Kuh steht and der Stelle: return "mob.cowhurt"; } protected String getDeathSound() { return; //Sound den dein Mob macht, wenn es stirbt, bei der Kuh steht and der Stelle: return "mob.cowhurt"; } protected float getSoundVolume() { return 0.4F; //Lautstärke der Sounds, "0.4F" ist Standart } protected int getDropItemId() { return Item.leather.shiftedIndex; //Item oder Block den dein Mob droppt, in dem Fall werden 0-3 Leder gedroppt } }
MGLVGFG TheLadyBrynna
N G C
Ein Server wie kein anderer !
Du musst da nen String returnen, steht doch im Kommentar.Code:protected String getLivingSound() { return; //Sound den dein Mob macht, bei der Kuh steht and der Stelle: return "mob.cow"; } protected String getHurtSound() { return; //Sound den dein Mob macht, wenn es verletzt wird, bei der Kuh steht and der Stelle: return "mob.cowhurt"; } protected String getDeathSound() { return; //Sound den dein Mob macht, wenn es stirbt, bei der Kuh steht and der Stelle: return "mob.cowhurt"; } protected float getSoundVolume() { return 0.4F; //Lautstärke der Sounds, "0.4F" ist Standart }
Hey, cool danke das des mal jmd macht
Soll ich des bei meinen tut verlinken oder darf ichs generell rein hauen=?
Do the complete list