Cool, leider kann ich noch nicht Coden, aber ich werde es mal versuchen (nächstes Jahr xD)
Dieser Thread ist zu verstehen als kleine Wissensdatenbank, um euer Verständnis über minecraft modden zu erweitern und häufig gestellte Fragen zu beantworten. Wird ständig erweitert.
Das ist kein Tutorial und sollte nur von Leuten verwendet werden, die schon etwas vom modden verstehen.
Blöcke:
- Rendertypen von Blöcken ändern (unten)
- Tolle Block Funktionen
- Neue Blöcke in World Generator einbinden
- Blöcke mit Metadata in der Welt generieren lassen
- Blöcken mehrere Texturen zuweisen
- Mehrere Items/Blöcke bei Zerstörung eines Blockes droppen lassen
- Einen Block was anderes droppen lassen
- Einen Block was anderes droppen lassen (erweitert)
- Schaden durch Block bekommen
- Ein eigenes Block-Modell erstellen
- Einen Block nur mit bestimmten Gegenständen abbauen
- eigenen-Block-Render-Typ erstellen
- sinnvolles nutzen der Update-Funktion
- Redstonesignal erzeugen
- Blöcke auf ein Redstonesignale Reagieren lassen
- Blockgenerierung (alle Dimensionen)
- Eine Textur für mehrere Blöcke/Items zuweisen
- [Forge]TileEntity's synchronisieren
Items/Tools/Rezepte:Verschiedenes:
- Rüstungsteile gewisse Funktionen geben (mit Modloader)
- Rüstungsteile gewisse Funktionen geben (ohne Modloader)
- Rezepte mit Farben
- neue MusicDisc erstellen
- Items eine animation geben (wie Bogen)
- Enchantments für eigene Tools verwenden
- Effekte für Items (schimmern, Namen, usw.)
- Item im Amboss reparieren lassen
- Enchantete Items craften
- Custom Item Modell
- eigenes PotionReciept hinzufügen
Ich fang dann mal an:
- etwas über den Chat ausgeben lassen
- einen Key(Tastatur) einbinden
- Erklärung der XYZ-Achsen
- bereits existierenden Block/Item modifizieren
- eigene Achievements hinzufügen
- Achievement Belohnung (ML/Forge)
- simple Animationen bei Mobs
- eigene Particle erstellen
- GUI:drawTexturedModalRect() verstehen und verwenden
- GUI: Schriftgrößen ändern
- Unterschiede MCP <-> Bukkit
- Achievements übersetzen
- Namen von Items nd Blöcken übersetzen
- Spielernamen einfärben (Bukkit)
- Strukturen/Dungeons generieren lassen
- Zugriff auf geschützte Variablen (protected/private/default)
- Spezielle Inventarnamen
- einen beliebigen Spieler rendern
- Forge: Texturen ab 1.5
- eigenes LanguageFile hinzufügen
- Keybindings (Forge)
- eigenes CreativeTab (Forge)
Rendertypen von Blöcken ändern:
Um einen Block wie eine Pflanze oder anderem aussehen zu lassen müsst ihr folgendes in euren Block nach bedarf hinzufügen:
Sobald euer Block von einem soliden und viereckigen Block abweicht muss das unbedingt mit drin stehen:
Hier gebt ihr an wie euer Block gerendert werden soll:Code:public boolean renderAsNormalBlock() { return false; }
Code:public int getRenderType() { return 1; }Hier wird festgelegt ob man Hinter dem Block die Texturen Rendern sollte, sonst kann man durch die Map schauen !
- 0 Falltür
- 1 Pflanze (über kreuz, kann zB für runde Blöcke verwendet werden)
- 2 Fackeln
- 3 Feuer
- 4 Flüssigkeiten (Wasser/Lava)
- 5 Redstone
- 6 Samen/Getreide
- 7 Tür
- 8 Leiter
- 9 Schienen
- 10 Treppen
- 11 Zaun
- 12 Schalter
- 13 Kaktus
- 14 Bett
- 15 Redstone Repeater
- 16 Piston-Körper
- 17 Piston-Kopf
- -1 keine Textur/ zB Schild hat eigenes Model
Code:public boolean isOpaqueCube() { return false; }
Für alle Nicht-Soliden Blöcke gebraucht, der Spieler kann durch die Blöcke durchgehen (wie Blumen) und bleibt nicht dran hängen.
Code:public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) { return null; }
Geändert von pitman-87 (11.05.2013 um 21:28 Uhr)
minestar77, nikolaij1998, adowrath, SimsVilla, Nexus, MisteriosM, Minecrafty, MCenderdragon, TheStarman, Universum, BrainStone, MCUnlimit, iCookienator, MeisterSkywalker, HARIBO_MAN, Buttas, Stuuupiiid, yocky96, sfan, Strawberrymaker, EvolutionGamer, vXvInfinityvXv, TeeLuk, KingEldarion, Der-Eddy, Toast?, Nentiker mag diesen Beitrag
Cool, leider kann ich noch nicht Coden, aber ich werde es mal versuchen (nächstes Jahr xD)
Rüstungsteile gewisse Funktionen geben
Tolle Block Funktionen
![]()
Geändert von gerbon (11.05.2012 um 20:23 Uhr)
Do the complete list
Hey,
Hab mal eine Frage.
Wenn man den Block schon fertig gecodet hätte, wo Muss ich dann das Bild davon abspeichern?
wird in den Tuts erklärt
Do the complete list
etwas über den Chat ausgeben lassen
wenn ihr wollt dass der Spieler irgendetwas erfahren soll (Warnhinweise etc) könnt ihr das mit folgender Zeile machen:
Wichtig dabei ist, dass ihr Zugriff auf den entityplayer habt, falls nicht gibt es noch eine andere Möglichkeit über den Modloader:Code:entityplayer.addChatMessage("hello world");
Code:ModLoader.getMinecraftInstance().thePlayer.addChatMessage("hello world");
Oder falls ihr ohne Modloader arbeitet, braucht ihr allerdings Zugriff auf world um euch eine Liste mit allen geladenen Playern zu holen (was im SSP natürlich nur einer ist).
aber import java.util.Iterator; nicht vergessen!Code:Iterator<EntityPlayer> playerList= world.playerEntities.iterator(); while(playerList.hasNext()){ playerList.next().addChatMessage("Hello World!"); }
Oder ihr holt euch mit der Methode den Player direkt und speichert den zwischen, was allerdings Fehleranfälliger sein kann.
Code:EntityPlayer player = (EntityPlayer) world.playerEntities.iterator().next(); player.addChatMessage("hello");
Geändert von pitman-87 (22.12.2011 um 23:52 Uhr)
cool danke schön
werde ich füher oder später mal anwenden![]()
sinnvolles nutzen der Update-Funktion
Notch hat Items und Blöcken eine nützliche Funktion in Items und Blöcken eingebaut, welche mehrmals pro Sekunde aufgerufen wird.
Dies kann man geschickt nutzen, um bestimmte Abläufe zu kontrollieren oder etwas wiederholt darzustellen.
Zum besseren Verständnis gebe ich euch zwei Beispiele
Items:
public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag)
Diese Methode wird mehrmals die Sekunde aufgerufen, zB kann man damit erreichen, dass Mobs sekündlichen Schaden bekommen als seien diese Vergiftet.
sobald ein Mob (Entity) geschlagen wird (hitEntity), wird er in der ArrayList aufgenommen. ArrayList ist einfach nur eine Speicherungsart wie Arrays oder Hashmaps, mit denen man gut arbeiten kann.Code:import java.util.ArrayList; public static ArrayList<EntityLiving> entities = new ArrayList(); public static int counter = 0; public boolean hitEntity(ItemStack itemstack, EntityLiving entityliving, EntityLiving entityliving1) { super.hitEntity(itemstack, entityliving, entityliving1); entities.add(entityliving); return true; } public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag) { super.onUpdate(itemstack, world, entity, i, flag); if (entities != null && counter > 10) { for (int j = 0; j < entities.size(); j++) { EntityLiving entity1 = entities.get(j); entity1.attackEntityFrom(entity, 1); } counter = 0; return; } ++counter; }
In der onUpdatefunktion wird nun gecheckt ob die Mobliste nicht leer ist und ob der Zähler (counter) über 10 ist.
Falls die Bedingung erfüllt ist, geht man in eine Schleife und die holt sich jeden Mob einzeln und fügt ihm ein halbes Herz schaden zu (attackEntityFrom), danach wird der Zähler wieder auf 0 zurückgesetzt. Falls die Bedingung nicht stimmt und der Zähler unter 10 ist wird dieser einfach eins hochgesetzt.
Der Zähler ist dafür da, dass der Mob nicht zu oft Schaden pro Sekunde bekommt, also eine Art Bremse.
Blöcke:
public void randomDisplayTick(World world, int i, int j, int k, Random random)
funktioniert genau wie onUpdate beim Item.
zB könnt ihr damit bei einem Block Rauch spawnen lassen, wie bei einem Ofen oder so.
Code:public void randomDisplayTick(World world, int i, int j, int k, Random random) { double d = (float)i + random.nextFloat(); double d1 = (float)j + random.nextFloat(); double d2 = (float)k + random.nextFloat(); world.spawnParticle("largesmoke", d, d1, d2, 0,0,0); }
mit world.spawnParticle werden schwarze Rauchpartikel über dem Block angezeigt. Normalerweise passiert das nur einmal (zB bei einer Explosion, an mehreren Stellen) aber dank der nette Funktion kommt es mehrmals in der Sekunde vor und erscheint so dauerhaft.
Es gibt auch noch andere Partikel:
"smoke", "lava", "portal", "explode", "note", "reddust", "bubble", "splash", "heart"
achtet darauf, dass die richtig geschrieben wurden, sonst schmiert minecraft ab![]()
Geändert von pitman-87 (22.07.2011 um 23:33 Uhr)
Weis Jemand von euch, wie man Blöcke unter der Erde spawnen lässt? Also wie z.B. GoldOre, man findet es fasst immer in einer Mehrzahl, also z.B. 4Stück auf einmal; würde mich sehr interessieren![]()
Solltest du gerne mal so Sachen wie Team Deathmatch, Search & Destroy oder Conquest in Minecraft spielen wollen, so nimm bitte Teil an dieser (englischen!) Umfrage
<<<CLICK>>>
wenn ihr neue Blöcke in den wordl genreator ein bauen wollt
müsste ihr in eure mod_deinmod.java diesen code ein fügen:
Wie viele blöcke in der nähe spawnen sollenCode:public void GenerateSurface(World world, Random rand, int chunkX, int chunkZ) { for(int i = 0; i <= Rate; i++) { int randPosX = chunkX + rand.nextInt(16); int randPosY = rand.nextInt(Höhe); int randPosZ = chunkZ + rand.nextInt(16); (new WorldGenMinable(mod_deinmod.blcokname.blockID, 5)).generate(world, rand, randPosX, randPosY, randPosZ); } }
Die Chanche wie oft der block vor kommen soll
Die Höhe ist selbst erklärend zwischen 1 bis 120
Übertreibt es nicht mit den zahlen bei der Rate würde ich nicht höher als 500 gehen und bei den blöcken nicht mehr als 50 (absturtzt gefahr von Minecraft und Bluescreen gefahr)
Gruß
Dangroove
Geändert von Dangroove (23.07.2011 um 09:50 Uhr)
Trax, MCenderdragon, IceTrailer, Minecrafty, Petra1999, Nentiker, obergamler, MeisterSkywalker, sfan, EvolutionGamer mag diesen Beitrag