Nederlands Minecraft Forum

Minecraft => Tutorials => Topic gestart door: bramie123 op 13 augustus 2012, 12:00:33

Titel: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 13 augustus 2012, 12:00:33
Brams modding tutorials
Ik had er graag ook nog video's bij gepost, maar ik heb nou eenmaal niet zo'n youtube stem :P

In deze modding tutorials ga ik met de Modloader API werken. Ik ga na deze tutorials ook SMP modding tutorials schrijven.
Maar genoeg gepraat, de inhoud:

1. MCP gebruiken :items_01_33:
2. Basis mod file :items_01_31:
3. Items :items_01_31:
4. Blocks :items_01_31:
5. Crafting recipes :items_01_31:
6. Smelting recipes :items_01_31:
7. Food :items_01_31:
8. Food met potion effecten :items_01_33:
9. Items en blokken aan de creative inventory toevoegen :items_01_31: 
10. Ores generaten :items_01_33: 
11. Tools :items_01_34: 
12. Gun door reint1234 :items_01_34:
13. Armor :items_01_34: 

Dit is mijn plan voor de tutorials.

Zwart = Af
Oranje = Wordt aan gewerkt
Rood = Niet af, komt nog

 :items_01_31: = Makkelijk

 :items_01_33: = Gemiddeld

 :items_01_34: = Moeilijk

Vereisten:
Een klein beetje programmeer kennis is handig.
Weten hoe je een mod installeert.
Risugami's modloader moet je gedownload hebben.
Minecraft coder pack.
Eclipse voor het schrijven van de code
Java JRE en JDK


1. MCP gebruiken

Toon inhoud
Ik ga ervan uit dat je de Java JDK hebt geïnstalleerd!

MCP (Minecraft coder pack) is een handig programma voor het modden. Je kan hiermee decompileren (ervoor zorgen dat je files kan aanpassen/toevoegen) en hercompileren (ervoor zorgen dat alles werkt met minecraft)
Eerst moet je MCP hier (http://www.mediafire.com/?hxui27dv5q4k8v4) downloaden.
Als je het gedownload hebt maak je ergens een mapje (voor het gemakt noem ik het altijd MCP {Modnaam}) en hier pak je de zip die je gedownload hebt uit.
Als je dat hebt gedaan moet je minecraft opstarten en force update doen. Als dit klaar is kopieer je de bin en resources map en plak je die in de map jars bij MCP
Plaats nu de files van Modloader in de minecraft.jar die in de MCP map staat. Delete de META-INF niet!
Klik nu op decompile.bat, en wacht tot hij klaar is.
Zodra hij klaar is moet je naar de map src/minecraft/net/minecraft/src/ gaan, daar is de source te vinden. Hier sla je alle files op!

Nu moet je eclipse hier (http://www.eclipse.org/downloads/) downloaden.
Je moet Eclipse Classic 4.2 hebben.

Zodra je Eclipse hebt geïnstalleerd start je hem op en ga je rechtsboven in naar File -> Switch workspace -> Other...
Hier ga je naar de MCP map en selecteer je de map eclipse.
Ga nu links in de package browser naar Client > src > net.minecraft.src
Nu kan je in Eclipse alle files zien van minecraft en je mod.
Let er wel goed op dat je de files wel in de src map zet, als je het via eclipse doet komt het niet goed.
Handmatig nieuwe files maken dus.

Als je eenmaal klaar bent met modden druk je op recompile.bat en wacht je tot die klaar is. Los eventuele errors eerst op en als je er niet uitkomt post ze dan hier.
Als je geen errors meer hebt druk je op reobfuscate.bat. Zodra die klaar is ga je naar de map /reobf/minecraft
Hier vind je de .class files die je in je minecraft.jar moet zetten.


2. Basis mod file
Toon inhoud
Een basis mod file ziet er zo uit:

Citaat
package net.minecraft.src;

public class mod_Tutorial extends BaseMod
{
    public void load()
   {
       
   }
   
   public string getVersion()
   {
       return "1.3.2";
   }
}

Vraag: Waarom is hier geen mod_modNaam() {}?
Antwoord: Omdat dit niet vereist is en het handiger is dat je het niet doet. Je kan public void load() prima gebruiken.

Dit zet je in een file en die sla je op als mod_Tutorial.java in de src map
Later gaan we hier veel meer mee doen, aangezien dit een hele belangrijke file is van de mod.


3. Items maken
Toon inhoud
Eerst moet je tegen java zeggen dat je een nieuw item maakt, dit doe je met deze code:

Citaat
public static final Item Zakdoek = new Zakdoek(2000).setItemName("Zakdoek");

Ok, even uitleg:
public static final Item Zakdoek zegt: Dit is een nieuw Item dat Zakdoek heet.
new Zakdoek betekend dat deze item gebasseerd is op Zakdoek.java, de file die we zo gaan maken.
De 2000 die je ziet is het item id. Blocks kunnen niet horen dan 256 en items hebben ook een bepaalde limiet, al weet ik dat je zeker van 257 tot 32000 snor zit.
setItemName("Zakdoek") zegt dat dat ze naam is die je in de rest van de file gaat gebruiken.
Zet dit stukje code gelijk na public class mod_Tutorial extends BaseMod{

Nu gaan we ervoor zorgen dat het item zijn in game naam en texture krijgt.
Dit doen we met de volgende code:

Citaat
ModLoader.addName(Zakdoek, "Zakdoek");
Zakdoek.iconIndex = ModLoader.addOverride("/gui/items.png", "/Tutorial/Zakdoek.png");

De eerste regels spreekt voor zichzelf, het item Zakdoek krijgt de naam Zakdoek in game.
Bij de tweede regel zegt ModLoader dat de texture niet uit items.png moet worden gehaald, maar uit Zakdoek.png die in de map Tutorial staat.
Je moet dus een texture die Zakdoek.png heet in een map zetten die Tutorial heet en die in de minecraft.jar zetten als je je mod wil gebruiken!
Deze code komt in public void load(){} te staan.

Voor een crafting recipe moet je bij de crafting recipe tutorial kijken.

Zakdoek.java
Dit is een redelijk simpel iets. In Zakdoek.java zet je deze code:

Citaat
package net.minecraft.src;

public class Zakdoek extends Item
{
        public Zakdoek(int i)
        {
                super(i);
                maxStackSize = 64;             
        }
}

Hier is maar 1 ding dat je moet weten, de maxStackSize, wat voor zichzelf spreekt. Het maximale aantal items in een stack.
Sla deze file ook op in de src map, dit moet voor alle files!

Alle code komt er uiteindelijk zo uit te zien dus:

mod_Tutorial.java

Citaat
package net.minecraft.src;

public class mod_Tutorial extends BaseMod
{
    public static final Item Zakdoek = new Zakdoek(2000).setItemName("Zakdoek");
   
    public void load()
   {
       ModLoader.addName(Zakdoek, "Zakdoek");
        Zakdoek.iconIndex = ModLoader.addOverride("/gui/items.png", "/Tutorial/Zakdoek.png");
   }
   
   public string getVersion()
   {
       return "1.3.2";
   }
}

Zakdoek.java

Citaat
public class Zakdoek extends Item
{
        public Zakdoek(int i)
        {
                super(i);
                maxStackSize = 64;             
        }
}


4. Blocks maken
Toon inhoud
Net zoals bij een item moeten we hier eerst tegen Java zeggen dat we iets nieuws gaan maken, alleen is het bij blocks iets anders.
Zo ziet het eruit bij een block:
Citaat
public static final Block CoalBlock = new CoalBlock(200, 0).setBlockName("CoalBlock").setHardness(3F).setResistance(15F).setLightValue(0F);
Aha, tja, uhhhhh....
Een boel code in een keer, even uitleg :)
Tot aan setBlockName("CoalBlock") werkt het ongeveer hetzelfde als met items, dit zal dan maar copy paste moeten :P
Verder bij setHardness(3F) kun je de hardheid van een block instellen. Dus hoelang het duurt om het block kapot te maken.
Ik weet de waarden niet precies, maar 5F ofzo is redelijk.
Dan bij setResistance(15F) kan je instellen hoeveel kracht een TNT block nodig heeft om hem te slopen. Als voorbeeld, obsidian heeft daar de waarde 2000F.
setLightValue kan je instellen hoeveel licht het block geeft. 1F is daar het maximale.
Dit zet je op de zelfde plek als je bij het item deed (gelijk na public class mod_Tutorial...... dus)

Dan nu de texture en naam. Dit werkt ook zo'n beetje hetzelfde als bij items:
Citaat
CoalBlock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Tutorial/CoalBlock.png");
ModLoader.addName(CoalBlock, "Coal block");
ModLoader.registerBlock(CoalBlock);
De eerste 2 regels hebben geen uitleg meer nodig na de item tutorial denk ik.
Het enige verschil is dat er nu /terrain.png staat ipv /gui/items.png
Dit komt omdat de textures van blocks in terrain.png staan.
Bij ModLoader.registerBlock(CoalBlock); zeg je dat het ook echt een block is.
Dit zet je in public void load(){}
Niet moeilijk toch?

Dan nu CoalBlock.java
Die komt er zo uit te zien:
Citaat
package net.minecraft.src;
import java.util.Random;

public class CoalBlock extends Block
{
                public CoalBlock(int i, int j)
                {
                        super(i, j, Material.rock);
                }


        public int idDropped(int i, Random random, int j)
        {
                return mod_Toolmod.CrystalBlock.blockID;
        }
        public int quantityDropped(Random random)
        {
                                return 1;
        }}
Dit is iets lastiger dan bij items, maar nog steeds makkelijk.
Bij super(i, j, Material.rock); zeg je van welk materiaal het is gemaakt, dus steen(rock) hier dus. Ik zal hier later alle materials nog wel even bijzetten.

Bij dit stukje:
Citaat
public int idDropped(int i, Random random, int j)
        {
                return mod_Toolmod.CoalBlock.blockID;
        }
Zeg je welk item/block gedropt moet worden als je het block kapot maakt.
In dit geval dus gewoon het block dat het zelf is.
Dan bij:
Citaat
public int quantityDropped(Random random)
        {
                                return 1;
        }
Moet je de 1 vervangen door het aantal dat gedropt moet worden.

Dit was het, nog even een overzicht van de code:

mod_Tutorial.java:

Citaat
package net.minecraft.src;

public class mod_Tutorial extends BaseMod
{
    public static final Block CoalBlock = new CoalBlock(200, 0).setBlockName("CoalBlock").setHardness(3F).setResistance(15F).setLightValue(0F);
    public void load()
   {
       CoalBlock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Tutorial/CoalBlock.png");
ModLoader.addName(CoalBlock, "Coal block");
ModLoader.registerBlock(CoalBlock);
   }
   
   public string getVersion()
   {
       return "1.3.2";
   }
}

CoalBlock.java:

Citaat
package net.minecraft.src;
import java.util.Random;

public class CoalBlock extends Block
{
                public CoalBlock(int i, int j)
                {
                        super(i, j, Material.rock);
                }


        public int idDropped(int i, Random random, int j)
        {
                return mod_Toolmod.CrystalBlock.blockID;
        }
        public int quantityDropped(Random random)
        {
                                return 1;
        }
}


5. Crafting recipes
Toon inhoud
Crafting recipes zijn redelijk simpel.
Dit is de code ervoor:
Citaat
ModLoader.addRecipe(new ItemStack(CoalBlock, 1), new Object[] {"###", "###", "###", Character.valueOf('#'), Item.coal});
Ik maak hier even het recipe voor de coal block die we hebben gemaakt bij de block tutorial.
bij new ItemStack(CoalBlock, 1) zeg je dat je 1 coalblock moet krijgen als dit gecraft wordt. bij het andere deel waar de ### staan teken je in feite het recipe. het eerste trio # is de bovenste rij, de tweede de middelste rij etc...
Als je nou het recipe voor een pickaxe zou hebben zou het zo zijn:
Citaat
ItemStack(ObsidianPickaxe, 1), new Object[] {"***", " @ ", " @ ", Character.valueOf('*'), Block.obsidian, Character.valueOf('@'), Item.stick});

De items die je gebruikt zoals ObsidianPickaxe moeten natuurlijk wel bestaan.
De crafting recipes zet je in public void load(){}


6. Smelting recipes
Toon inhoud
Een smelting recipe (over recept) is het makkelijkste stukje code dat je bij het modden hebt :P
Het ziet er zo uit (uitbreiding op de zakdoek die we hebben gemaakt bij de item tut):
Citaat
ModLoader.addSmelting(Item.paper.shiftedIndex, new ItemStack(Zakdoek, 1), 1.0F);
Bij Item.paper.shiftedIndex zeg je wel item er in de oven moet.
Let op dat je bij items .shiftedIndex erachter moet zetten en bij blocks .blockID
Bij new ItemStack(Zakdoek, 1) zeg je dat als het gesmolten is je het item Zakdoek krijgt, en het aantal is 1.
De 1.0F erachter is het aantal exp dat je krijgt.


7. Food
Toon inhoud
Food is erg simpel, dit is de code ervoor:
Citaat
package net.minecraft.src;
public class mod_Tutorial extends BaseMod
{
public static final Item NieuwVlees = new ItemFood(5001, 4, 1F, false).setItemName("NieuwVlees");

public void load()
{
         NieuwVlees.iconIndex = ModLoader.addOverride("/gui/items.png", "/Tutorial/NieuwVlees.png");
         ModLoader.addName(NieuwVlees, "Nieuw vlees);
}

public String getVersion()
{
         return "1.3.2";
}
}
Het enige wat ik moet uitleggen is het public static final gedeelte, de rest is allemaal al uitgelegd in de item tutorial.
Dit is het gedeelte waar het om gaat:
Citaat
new ItemFood(5001, 4, 1F, false)
De 5001 is de item id. Dan de 4 is hoeveel halve "food hartjes" het teruggeeft in de foodbar.
De 1F is een getal voor hoelang je geen honger meer hebt, ik weet alleen niet zo wat de maximale waarde is.
Als laatste het woordje false. Hier kan je ook true neerzetten en het zegt of honden het kunnen eten of niet.


8. Food met potion effecten
Toon inhoud
Dit is erg simpel. De code hiervoor is:
Citaat
.setPotionEffect(Potion.hunger.id, 15, 0, 1F)
Even een uitleg bij de getallen:
de 15 is het aantal seconden dat het effect duurt, de 0 weet ik niet (mooi laten staan dus) en de 1F is de kans dat het lukt.
1F is dus 100%, 0,5F 50%, etc...
Zo komt de code in het geheel er dus uit te zien:
Citaat
public static final Item NieuwVlees = new ItemFood(5001, 4, 1F, false).setPotionEffect(Potion.hunger.id, 15, 0, 1F).setItemName("NieuwVlees");
Let op, de setPotionEffect moet voor de setItemName staan.
Je kan Potion.hunger.id vervangen met andere potion effects, die allemaal in het bestand Potion.java staan.


9. Blocks en items aan de creative inventory toevoegen
Toon inhoud
Eigenlijk is deze stukken simpeler dan hoe het eerst moest.

Voor een block moet je het dikgedrukte stukje toevoegen (dit is een voorbeeld uit mijn eigen mod):
Citaat
package net.minecraft.src;
import java.util.Random;

public class CrystalOre extends Block
{
                public CrystalOre(int i, int j)
                {
                        super(i, j, Material.rock);
            this.setCreativeTab(CreativeTabs.tabBlock);
                }


        public int idDropped(int i, Random random, int j)
        {
                return mod_Toolmod.Crystal.shiftedIndex;
        }
        public int quantityDropped(Random random)
        {
                                return 2;
        }}

Nu kan je op het dikgedrukte stuk 10 dingen neerzetten, deze staan voor een tab in de creative inventory, namelijk:

Citaat
Voor de "Combat" tab:
this.setTabToDisplayOn(CreativeTabs.tabCombat);

Voor de "Building Blocks" tab:
this.setCreativeTab(CreativeTabs.tabBlock);

Voor de "Tools" tab
this.setTabToDisplayOn(CreativeTabs.tabTools);

Voor de "Brewing" tab:
this.setTabToDisplayOn(CreativeTabs.tabBrewing);

Voor de "Redstone" tab:
this.setTabToDisplayOn(CreativeTabs.tabRedstone);

Voor de "Material" tab:
this.setTabToDisplayOn(CreativeTabs.tabMaterials);

Voor de "Decoration" tab:
this.setTabToDisplayOn(CreativeTabs.tabDeco);

Voor de "Miscellaneous" tab:
this.setTabToDisplayOn(CreativeTabs.tabMisc);

Voor de "Foodstuff" tab:
this.setTabToDisplayOn(CreativeTabs.tabFood);

Voor de "Transport" tab:
this.setTabToDisplayOn(CreativeTabs.tabTransport);

Dat was het :)
Hier nog even het bestandje van een item en een block met een dikgedrukt stuk, zodat je weet waar je het neer moet zetten.

Block:
Citaat
package net.minecraft.src;
import java.util.Random;

public class CrystalOre extends Block
{
                public CrystalOre(int i, int j)
                {
                        super(i, j, Material.rock);
            this.setCreativeTab(CreativeTabs.tabBlock);
                }


        public int idDropped(int i, Random random, int j)
        {
                return mod_Toolmod.Crystal.shiftedIndex;
        }
        public int quantityDropped(Random random)
        {
                                return 2;
        }}

Item:
Citaat
package net.minecraft.src;

public class ItemSilver extends Item
{
        public ItemSilver(int i)
        {
                super(i);
        this.setTabToDisplayOn(CreativeTabs.tabMaterials);
                maxStackSize = 64;             
        }
}


10. Ores generaten
Toon inhoud
Een ore generaten is eigenlijk vrij simpel, maar er komen een aantal getalletjes bij kijken.
De theorie is dat je gewoon een block maakt en deze random laat generaten onder de grond.
Eerst zul je een block moeten maken, kijk hiervoor even bij de block tutorial.


Nu gaan we eerst een import toevoegen, de volgende:
Citaat
import java.util.Random;


Ok, dat was erg simpel.
Nu voegen we de volgende code toe zodat we de ores laten generaten.
Let erop dat dit niet in public void load() moet.
Citaat

public void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
        for(int i = 0; i < 4; i++)
        {
             int randPosX = chunkX + random.nextInt(16);
             int randPosY = random.nextInt(32);
             int randPosZ = chunkZ + random.nextInt(16);
             (new WorldGenMinable(CrystalOre.blockID, 4)).generate(world, random, randPosX, randPosY, randPosZ);
        }[size=78%]                  [/size]
    }
Ok, dit is een stukje uit mijn eigen mod. De ore heet hier crystal ore.
Het enige wat je eigenlijk hoeft te weten zijn de getalletjes. De eerste 0 laten we mooi staan.
Dan zie je een 4. Deze geeft aan hoe zeldzaam een ore moet zijn. Hoe lager hoe zeldzamer. 4 zit volgens mij tussen coal en iron ore in.
Dan zie je een twee keer 16. Deze geven aan hoe diep je in de chunk moet zoeken. (Laten staan als je het mij vraagt :P )
De 32 die er tussen in staat, is vanaf welke laag hij generate. Deze ore kan je dus pas tegenkomen vanaf Y = 32, oftewel laag 32.


Dan hebben we nog de 4, die geeft het aantal ores aan die de generator zal proberen aan te maken.
Dit was het eigenlijk. Als je meerde ores wilt toevoegen komt het er zo uit te zien (nog een voorbeeld uit mijn mod):
Citaat

public void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
        for(int i = 0; i < 4; i++)
        {
             int randPosX = chunkX + random.nextInt(16);
             int randPosY = random.nextInt(32);
             int randPosZ = chunkZ + random.nextInt(16);
             (new WorldGenMinable(CrystalOre.blockID, 4)).generate(world, random, randPosX, randPosY, randPosZ);
        }

        for(int i = 0; i < 2; i++)
        {
            int randPosX = chunkX + random.nextInt(16);
            int randPosY = random.nextInt(24);
            int randPosZ = chunkZ + random.nextInt(16);
            (new WorldGenMinable(RubyOre.blockID, 3)).generate(world, random, randPosX, randPosY, randPosZ);
        }                 
    }


De gehele mod_***.java code, het block aanmaken sla ik even over, je weet wel hoe dat moet.
Citaat

package net.minecraft.src;
import java.util.Random;


public class mod_Tutorial extends BaseMod
{
    public void load()
    {}


    [size=78%]public void generateSurface(World world, Random random, int chunkX, int chunkZ)[/size]
    {
        for(int i = 0; i < 4; i++)
        {
             int randPosX = chunkX + random.nextInt(16);
             int randPosY = random.nextInt(32);
             int randPosZ = chunkZ + random.nextInt(16);
             (new WorldGenMinable(CrystalOre.blockID, 4)).generate(world, random, randPosX, randPosY, randPosZ);
        }

        for(int i = 0; i < 2; i++)
        {
            int randPosX = chunkX + random.nextInt(16);
            int randPosY = random.nextInt(24);
            int randPosZ = chunkZ + random.nextInt(16);
            (new WorldGenMinable(RubyOre.blockID, 3)).generate(world, random, randPosX, randPosY, randPosZ);
        }                 
    }


}


11. Tools
Toon inhoud
Ok, in principe zijn tools nog niet zo heel moeilijk, maar er komen veel cijfertjes bij.
Ik zal in deze tutorial ook voornamelijk code posten en wat minder uitleg geven, voornamelijk bij de tool files.


Ok, om te beginnen heb je 7 files nodig:
Je mod_***.java
Je moet deze files erbij maken:
TutorialPickaxe.java
TutorialSpade.java
TutorialAxe.java
TutorialHoe.java
TutorialSword.java
TutorialEnumToolMaterial.java
TutorialTool.java


Om te beginnen moeten we eerst de tools als normale items maken.
Dus gewoon simpel zo:
Citaat
package net.minecraft.src;
public class mod_Tutorial extends BaseMod
{

public static final Item TutorialPickaxe

public void load()
{

public static final Item TutorialPickaxe =  new TutorialPickaxe(20001, TutorialEnumToolMaterial.TUTORIAL).setItemName("TutorialPickaxe");
   public static final Item TutorialSpade =  new TutorialSpade(20002, TutorialEnumToolMaterial.TUTORIAL).setItemName("TutorialSpade");
   public static final Item TutorialAxe =  new TutorialAxe(20003, TutorialEnumToolMaterial.TUTORIAL).setItemName("TutorialAxe");
   public static final Item TutorialHoe =  new TutorialHoe(20004, TutorialEnumToolMaterial.TUTORIAL).setItemName("TutorialHoe");
   public static final Item TutorialSword =  new TutorialSword(20005, TutorialEnumToolMaterial.TUTORIAL).setItemName("TutorialSword");}

public String getVersion()
{
         return "1.3.2";
}
}
Niet zo moeilijk dus, al is dit stukje wel heel belangrijk:
Citaat
TutorialEnumToolMaterial.TUTORIAL
Hiermee bepaal je de durability, snelheid, etc. van de toolset.
Wil je een andere naam dan verplaats je TUTORIAL voor iets anders, maar het moet wel in hoofdletters zijn!
Later zullen we deze Enums aanmaken in TutorialEnumToolMaterial.
Eerst moeten we 6 andere files vullen, de tool files.
Het volgende moet je gewoon kopiëren en plakken, verder niet moeilijk doen :P

TutorialTool.java:
Toon inhoud
Citaat

package net.minecraft.src;


public class TutorialTool extends Item
{
    private Block[] blocksEffectiveAgainst;
    protected float efficiencyOnProperMaterial = 4.0F;


    private int damageVsEntity;


    protected TutorialEnumToolMaterial toolMaterial;


    protected TutorialTool(int par1, int par2, TutorialEnumToolMaterial par3TutorialEnumToolMaterial, Block[] par4ArrayOfBlock)
    {
        super(par1);
        this.toolMaterial = par3TutorialEnumToolMaterial;
        this.blocksEffectiveAgainst = par4ArrayOfBlock;
        this.maxStackSize = 1;
        this.setMaxDamage(par3TutorialEnumToolMaterial.getMaxUses());
        this.efficiencyOnProperMaterial = par3TutorialEnumToolMaterial.getEfficiencyOnProperMaterial();
        this.damageVsEntity = par2 + par3TutorialEnumToolMaterial.getDamageVsEntity();
        this.setTabToDisplayOn(CreativeTabs.tabTools);
    }


    public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
    {
        Block[] var3 = this.blocksEffectiveAgainst;
        int var4 = var3.length;


        for (int var5 = 0; var5 < var4; ++var5)
        {
            Block var6 = var3[var5];


            if (var6 == par2Block)
            {
                return this.efficiencyOnProperMaterial;
            }
        }


        return 1.0F;
    }


    public boolean hitEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving, EntityLiving par3EntityLiving)
    {
        par1ItemStack.damageItem(2, par3EntityLiving);
        return true;
    }


    public boolean func_77660_a(ItemStack par1ItemStack, World par2World, int par3, int par4, int par5, int par6, EntityLiving par7EntityLiving)
    {
        if ((double)Block.blocksList[par3].getBlockHardness(par2World, par4, par5, par6) != 0.0D)
        {
            par1ItemStack.damageItem(1, par7EntityLiving);
        }


        return true;
    }


    public int getDamageVsEntity(Entity par1Entity)
    {
        return this.damageVsEntity;
    }


    public boolean isFull3D()
    {
        return true;
    }


    public int getItemEnchantability()
    {
        return this.toolMaterial.getEnchantability();
    }


    public String func_77861_e()
    {
        return this.toolMaterial.toString();
    }
}


TutorialPickaxe.java:
Toon inhoud
Citaat

package net.minecraft.src;


public class TutorialPickaxe extends TutorialTool
{
    private static Block[] blocksEffectiveAgainst = new Block[] {Block.cobblestone, Block.stoneDoubleSlab, Block.stoneSingleSlab, Block.stone, Block.sandStone, Block.cobblestoneMossy, Block.oreIron, Block.blockSteel, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.netherrack, Block.oreLapis, Block.blockLapis, Block.oreRedstone, Block.oreRedstoneGlowing, Block.rail, Block.railDetector, Block.railPowered};


    protected TutorialPickaxe(int par1, TutorialEnumToolMaterial par2TutorialEnumToolMaterial)
    {
        super(par1, 2, par2TutorialEnumToolMaterial, blocksEffectiveAgainst);
    }


    public boolean canHarvestBlock(Block par1Block)
    {
        return par1Block == Block.obsidian ? this.toolMaterial.getHarvestLevel() == 3 : (par1Block != Block.blockDiamond && par1Block != Block.oreDiamond ? (par1Block == Block.oreEmerald ? this.toolMaterial.getHarvestLevel() >= 2 : (par1Block != Block.blockGold && par1Block != Block.oreGold ? (par1Block != Block.blockSteel && par1Block != Block.oreIron ? (par1Block != Block.blockLapis && par1Block != Block.oreLapis ? (par1Block != Block.oreRedstone && par1Block != Block.oreRedstoneGlowing ? (par1Block.blockMaterial == Material.rock ? true : par1Block.blockMaterial == Material.iron) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2)) : this.toolMaterial.getHarvestLevel() >= 2);
    }




    public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
    {
        return par2Block != null && (par2Block.blockMaterial == Material.iron || par2Block.blockMaterial == Material.rock) ? this.efficiencyOnProperMaterial : super.getStrVsBlock(par1ItemStack, par2Block);
    }
}


TutorialSpade.java:
Toon inhoud
Citaat

package net.minecraft.src;


public class TutorialSpade extends TutorialTool
{
    private static Block[] blocksEffectiveAgainst = new Block[] {Block.grass, Block.dirt, Block.sand, Block.gravel, Block.snow, Block.blockSnow, Block.blockClay, Block.tilledField, Block.slowSand, Block.mycelium};


    public TutorialSpade(int par1, TutorialEnumToolMaterial par2TutorialEnumToolMaterial)
    {
        super(par1, 1, par2TutorialEnumToolMaterial, blocksEffectiveAgainst);
    }


    public boolean canHarvestBlock(Block par1Block)
    {
        return par1Block == Block.snow ? true : par1Block == Block.blockSnow;
    }
}




TutorialAxe.java:
Toon inhoud
Citaat

package net.minecraft.src;


public class TutorialAxe extends TutorialTool
{
    private static Block[] blocksEffectiveAgainst = new Block[] {Block.planks, Block.bookShelf, Block.wood, Block.chest, Block.stoneDoubleSlab, Block.stoneSingleSlab, Block.pumpkin, Block.pumpkinLantern};


    protected TutorialAxe(int par1, TutorialEnumToolMaterial par2TutorialEnumToolMaterial)
    {
        super(par1, 3, par2TutorialEnumToolMaterial, blocksEffectiveAgainst);
    }


    public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
    {
        return par2Block != null && par2Block.blockMaterial == Material.wood ? this.efficiencyOnProperMaterial : super.getStrVsBlock(par1ItemStack, par2Block);
    }
}




TutorialHoe.java:
Toon inhoud
Citaat

package net.minecraft.src;


public class TutorialHoe extends Item
{
    protected TutorialEnumToolMaterial field_77843_a;


    public TutorialHoe(int par1, TutorialEnumToolMaterial par2TutorialEnumToolMaterial)
    {
        super(par1);
        this.field_77843_a = par2TutorialEnumToolMaterial;
        this.maxStackSize = 1;
        this.setMaxDamage(par2TutorialEnumToolMaterial.getMaxUses());
        this.setTabToDisplayOn(CreativeTabs.tabTools);
    }


    public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
        if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6))
        {
            return false;
        }
        else
        {
            int var11 = par3World.getBlockId(par4, par5, par6);
            int var12 = par3World.getBlockId(par4, par5 + 1, par6);


            if ((par7 == 0 || var12 != 0 || var11 != Block.grass.blockID) && var11 != Block.dirt.blockID)
            {
                return false;
            }
            else
            {
                Block var13 = Block.tilledField;
                par3World.playSoundEffect((double)((float)par4 + 0.5F), (double)((float)par5 + 0.5F), (double)((float)par6 + 0.5F), var13.stepSound.getStepSound(), (var13.stepSound.getVolume() + 1.0F) / 2.0F, var13.stepSound.getPitch() * 0.8F);


                if (par3World.isRemote)
                {
                    return true;
                }
                else
                {
                    par3World.setBlockWithNotify(par4, par5, par6, var13.blockID);
                    par1ItemStack.damageItem(1, par2EntityPlayer);
                    return true;
                }
            }
        }
    }


    public boolean isFull3D()
    {
        return true;
    }


    public String func_77842_f()
    {
        return this.field_77843_a.toString();
    }
}




TutorialSword.java:
Toon inhoud
Citaat

package net.minecraft.src;
public class TutorialSword extends Item
{
        private int weaponDamage;
        private final TutorialEnumToolMaterial toolMaterial;
        public TutorialSword(int par1, TutorialEnumToolMaterial par2TutorialEnumToolMaterial)
        {
                super(par1);
                toolMaterial = par2TutorialEnumToolMaterial;
                maxStackSize = 1;
                this.setTabToDisplayOn(CreativeTabs.tabCombat);
                setMaxDamage(par2TutorialEnumToolMaterial.getMaxUses());
                weaponDamage = 4 + par2TutorialEnumToolMaterial.getDamageVsEntity();
        }


        public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
        {
                return par2Block.blockID != Block.web.blockID ? 1.5F : 15F;
        }


        public boolean hitEntity(ItemStack par1ItemStack, EntityLiving par2EntityLiving, EntityLiving par3EntityLiving)
        {
                par1ItemStack.damageItem(1, par3EntityLiving);
                return true;
        }
        public boolean onBlockDestroyed(ItemStack par1ItemStack, int par2, int par3, int par4, int par5, EntityLiving par6EntityLiving)
        {
                par1ItemStack.damageItem(2, par6EntityLiving);
                return true;
        }


        public int getDamageVsEntity(Entity par1Entity)
        {
                return weaponDamage;
        }


        public boolean isFull3D()
        {
                return true;
        }


        public EnumAction getItemUseAction(ItemStack par1ItemStack)
        {
                return EnumAction.block;
        }


        public int getMaxItemUseDuration(ItemStack par1ItemStack)
        {
                return 0x11940;
        }


        public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
        {
                par3EntityPlayer.setItemInUse(par1ItemStack, getMaxItemUseDuration(par1ItemStack));
                return par1ItemStack;
        }


        public boolean canHarvestBlock(Block par1Block)
        {
                return par1Block.blockID == Block.web.blockID;
        }


        public int getItemEnchantability()
        {
                return toolMaterial.getEnchantability();
        }
}


Nu gaan we verder met de TutorialEnumToolMaterial.java file verder.
Zet eerst dit erin:
Toon inhoud
Citaat

package net.minecraft.src;
public enum TutorialEnumToolMaterial
{
      TUTORIAL(3, 800, 13F, 3, 22),
                ANDERS(2, 300, 6F, 2, 14);
        private final int harvestLevel;
        private final int maxUses;
        private final float efficiencyOnProperMaterial;
        private final int damageVsEntity;
        private final int enchantability;
        private TutorialEnumToolMaterial(int par3, int par4, float par5, int par6, int par7)
        {
                harvestLevel = par3;
                maxUses = par4;
                efficiencyOnProperMaterial = par5;
                damageVsEntity = par6;
                enchantability = par7;
        }
        public int getMaxUses()
        {
                return maxUses;
        }
        public float getEfficiencyOnProperMaterial()
        {
                return efficiencyOnProperMaterial;
        }
        public int getDamageVsEntity()
        {
                return damageVsEntity;
        }
        public int getHarvestLevel()
        {
                return harvestLevel;
        }
        public int getEnchantability()
        {
                return enchantability;
        }
}
Ok, het gaat nu om dit deel:
Citaat

TUTORIAL(3, 800, 13F, 3, 22),
ANDERS(2, 300, 6F, 3, 14);
Hiermee bepalen we de snelheid, etc.
Ik heb er voor het gemak even een tweede enum bijgezet, namelijk ANDERS.
Dit om te laten zien hoe je meerdere enums moet toevoegen.


Ik zal de getallen van TUTORIAL uitleggen:
De 3 bepaald welke blokken het kan minen etc.
Ik weet niet welke blokken bij welke waardes horen, maar wel dat 3 bij obsidian hoort :P (voor een pickaxe dan)
Ik raad je aan om hier 1, 2 of 3 in te vullen.


De 800 zijn het aantal uses, dus het aantal blokken dat je kan minen of het aantal keer dat je kan slaan met een zwaard.


De 13F is de snelheid. Ik raad je aan om in de file EnumToolMaterial.java te kijken om een goed idee te krijgen wat een beetje goed is.


Dan de 3, ik heb echt geen idee waar die voor staat. Mooi laten dus.


Als laatste de 22, dit is de enchantablilty. Ik raad je ook hiervoor aan om in EnumToolMaterial.java te kijken, al werkt enchanten met Modloader helaas niet.


Dit was het :)
Als er fouten in de tutorial zitten zeg het dan alsjeblieft!


12. Gun door reint1234
Toon inhoud
Oke, Hier de ItemGun: (bijna overal staat uitleg achter )

package net.minecraft.src;

public class ItemGun extends Item
{
   public ItemGun(int par1)
   {
      super(par1);
      this.maxStackSize = 1; //Hoeveel keer je hem stacken, dit kan bij alle items
      this.setMaxDamage(64); //Dit is hoeveel keer je hem kan gebruiken!
   }
   public EnumAction getItemUseAction(ItemStack par1ItemStack)
    {
        //dit kan handig zijn, voeg dit dan toe bij je spawn entity etc: par3EntityPlayer.setItemInUse(par1ItemStack)
       
    }
   // Voeg dit toe als je damage wilt op het item, dus net zoals een tool zegmaar, dat je hem niet eewig kan gebruiken! (verwijder /* en */ (voor en achter)   (dit kan bij alle items als je wilt!)
   /*public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
        if (par7 == 0)
        {
            --par5;
        }

        if (par7 == 1)
        {
            ++par5;
        }

        if (par7 == 2)
        {
            --par6;
        }

        if (par7 == 3)
        {
            ++par6;
        }

        if (par7 == 4)
        {
            --par4;
        }

        if (par7 == 5)
        {
            ++par4;
        }

        if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6))
        {
            return false;
        }
        else
        {
            int var11 = par3World.getBlockId(par4, par5, par6);

            if (var11 == 0)
            {
               
            }

           
            return true;
        }
    } */
   
   public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
   {      boolean var5 = par3EntityPlayer.inventory.hasItem(341);
         
         if (var5 || par3EntityPlayer.inventory.hasItem(mod_Gun.Bullet.shiftedIndex))
         {
            //Hier gebeurt alles als je het item dat je      /\ hier kan veranderen hebt in je inventory!
            par2World.spawnEntityInWorld(new EntityBullet(par2World, par3EntityPlayer));  //DIT MOET JE HEBBEN hier vuurt hij de entity die je gaat (of hebt) gemaakt mee, dus
            par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));   //het geluid
            par3EntityPlayer.inventory.consumeInventoryItem(mod_Gun.Bullet.shiftedIndex); //Dit zorgt ervoor dat het bullet item per schot 1 keer weggaat!
            par1ItemStack.damageItem(1, par3EntityPlayer); //als je met damage hebt, zorgt dit dat er per schot 1 afgaat
         }
         {                                if (!var5)
         {                                        par3EntityPlayer.inventory.consumeInventoryItem(Item.slimeBall.shiftedIndex); //ehm laat dit maar gewoon staan
         if (!par2World.isRemote)
         {
           
         }
         
         par3EntityPlayer.inventory.consumeInventoryItem(mod_Gun.Bullet.shiftedIndex); //Dit is onnodig, maar als hij het heir niet door doet, gewoon verwijderen
         par1ItemStack.damageItem(1, par3EntityPlayer);  //zelfde als bij deze
         
   }
         

         return par1ItemStack;        }
   }}
EntityBullet:
package net.minecraft.src;
public class EntityBullet extends EntityThrowable
{
   public EntityBullet(World par1World)
   {
      super(par1World);
     
      this.getBoundingBox();
     
      this.getTexture();
     
       
   }
   
    public void onCollideWithPlayer(EntityPlayer par1EntityPlayer)
       {
       //par1EntityPlayer.inventory.consumeInventoryItem(Item.slimeBall.shiftedIndex);
       
       }
   protected float getGravityVelocity()
    {
        return 0.04F;  //de zwaartekracht, hoe hoger, hoe sneller naar de grond.
    }
   
   
   public EntityBullet(World par1World, EntityLiving par2EntityLiving)
   {
      super(par1World, par2EntityLiving);
      }
   public EntityBullet(World par1World, double par2, double par4, double par6)
   {
      super(par1World, par2, par4, par6);
   }
   protected void onImpact(MovingObjectPosition par1MovingObjectPosition)
   {
      if (par1MovingObjectPosition.entityHit != null)
      {
         
           byte var2 = 2;  //Hier kan je de damage instellen
         
         if (par1MovingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.thrower), var2))
         {
            ;   //hier kan je instellen wat er gebeurt als je een entity raakt.
           
         }
         
         }
      if (!this.worldObj.isRemote && this.rand.nextInt( 8) == 0)
        {
            byte var2 = 1; 

           

           
        }
      for (int var3 = 0; var3 < 8; ++var3)
      {
         this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);  //dit gebeurt er als hij de grond raakt.
      }
      if (!this.worldObj.isRemote)
      {
         this.setDead();
      }
      }}
Je moet verder nog 2 items maken, een item genaamt Gun, en een item genaamt Bullet, en als je het met deze tut wilt kloppent maken moet het in een mod_ file die mod_Gun heet!

Errors posten
Heb je een error waar je niet uitkomt? post hem dan met dit formulier en code tags:
Mijn error:
[spoiler]
Je error zet je hier neer
[/spoiler]

Mijn code:
[spoiler]
hier zet je je code neer
[/spoiler]
Maak voor elke file een nieuwe spoiler!

Tips:
Titel: Re: [TUT][1.3.1]Brams modding tutorials
Bericht door: bramie123 op 13 augustus 2012, 12:00:56
Gereserveerd
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 19 augustus 2012, 11:39:59
Zo tutorials zijn 1.3.2, hoefde niks te veranderen :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Tiihm op 19 augustus 2012, 23:29:18
erg mooie tutorial, binnenkort is gebruik van maken, ik wacht alleen nog even op mod api
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: DutchxDreamzZ op 20 augustus 2012, 00:15:01
Goede en goed uitgelegde tutorial.

Keep up the Good Work! ;)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 18:10:37
Hey ik heb een probleem, de items zie lijken niet te bestaan maar er zijn geen foutmeldingen volgens mij.

Mijn error(ik weet niet zeker of ik een error heb maar dit staat in de log):
Toon inhoud
27 achievements
195 recipes
Setting user: Player265, -
Client asked for parameter: server
LWJGL Version: 2.4.2
ModLoader 1.3.2 Initializing...
Done.

Starting up SoundSystem...
Initializing LWJGL OpenAL
    (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)
OpenAL initialized.

aug 29, 2012 6:06:34 PM net.minecraft.src.IntegratedServer startServer
INFO: Starting integrated minecraft server version 1.3.2
aug 29, 2012 6:06:34 PM net.minecraft.src.IntegratedServer startServer
INFO: Generating keypair
aug 29, 2012 6:06:34 PM net.minecraft.server.MinecraftServer initialWorldChunkLoad
INFO: Preparing start region for level 0
aug 29, 2012 6:06:35 PM net.minecraft.src.ServerConfigurationManager initializeConnectionToPlayer
INFO: Player265[/127.0.0.1:0] logged in with entity id 315 at (-209.0199160023291, 63.0, 141.1251086345214)
java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftSkins/Player265.png
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:48)
Caused by: java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftSkins/Player265.png
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at java.net.HttpURLConnection.getResponseCode(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:37)
java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftCloaks/Player265.png
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:48)
Caused by: java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftCloaks/Player265.png
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at java.net.HttpURLConnection.getResponseCode(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:37)
Placed stronghold in INVALID biome at (-35, 49)
aug 29, 2012 6:07:12 PM net.minecraft.src.IntegratedServer tick
INFO: Saving and pausing game...
aug 29, 2012 6:07:12 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Overworld
aug 29, 2012 6:07:12 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Nether
aug 29, 2012 6:07:12 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/The End
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer stopServer
INFO: Stopping server
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer stopServer
INFO: Saving players
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer stopServer
INFO: Saving worlds
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Overworld
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Nether
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/The End
Stopping!

SoundSystem shutting down...
    Author: Paul Lamb, www.paulscode.com




Mijn code:
Mod_plutgame:
Toon inhoud
package net.minecraft.src;

public class Mod_plutgame extends BaseMod
{
   public static final Block benzineblock = new benzineblock(160, 0).setBlockName("benzineblock").setHardness(3F).setResistance(4F).setLightValue(3F);
   public static final Item benzine = new benzine(143).setItemName("benzine");
   
   public void load()
   {
      
      ModLoader.addRecipe(new ItemStack(benzineblock, 1), new Object [] {"%%%", "%%%", "%%%", Character.valueOf('%'), Block.dirt});
      benzineblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "http://i47.tinypic.com/acsjti.png");
      ModLoader.registerBlock(benzineblock);
      ModLoader.addName(benzineblock, "Benzineblock");
      benzine.iconIndex = ModLoader.addOverride("/gui/items.png", "http://i48.tinypic.com/2nqqu7p.png");
      ModLoader.addName(benzine, "Benzine");
   }
   
   public Mod_plutgame()
   {
      
      
   }
   
   public String getVersion()
   {
      return "1.3.2";
   }

}



benzine.java:
Toon inhoud
package net.minecraft.src;
import java.util.Random;

public class benzine extends Item
{
   public benzine(int i)
   {
      super(i);
      this.setTabToDisplayOn(CreativeTabs.tabMaterials);
      maxStackSize = 64;
   }
}



benzineblock.java
Toon inhoud
package net.minecraft.src;
import java.util.Random;


public class benzineblock extends Block
{
   public benzineblock(int i, int j)
   {
        super(i, j, Material.rock);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
   
   public int idDropped(int i, Random random, int j)
   {
      return Mod_plutgame.benzineblock.blockID;
   }
   public int quantityDropped(Random random)
   {
      return 2;
   }

}


hopelijk snel antwoord,
alvast bedankt!
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wout_ op 29 augustus 2012, 18:11:34
Bedankt voor deze tutorial. Deze ga ik eens proberen.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 18:56:13
Hey ik heb een probleem, de items zie lijken niet te bestaan maar er zijn geen foutmeldingen volgens mij.

Mijn error(ik weet niet zeker of ik een error heb maar dit staat in de log):
Toon inhoud
27 achievements
195 recipes
Setting user: Player265, -
Client asked for parameter: server
LWJGL Version: 2.4.2
ModLoader 1.3.2 Initializing...
Done.

Starting up SoundSystem...
Initializing LWJGL OpenAL
    (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org (http://www.lwjgl.org))
OpenAL initialized.

aug 29, 2012 6:06:34 PM net.minecraft.src.IntegratedServer startServer
INFO: Starting integrated minecraft server version 1.3.2
aug 29, 2012 6:06:34 PM net.minecraft.src.IntegratedServer startServer
INFO: Generating keypair
aug 29, 2012 6:06:34 PM net.minecraft.server.MinecraftServer initialWorldChunkLoad
INFO: Preparing start region for level 0
aug 29, 2012 6:06:35 PM net.minecraft.src.ServerConfigurationManager initializeConnectionToPlayer
INFO: Player265[/127.0.0.1:0] logged in with entity id 315 at (-209.0199160023291, 63.0, 141.1251086345214)
java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftSkins/Player265.png (http://skins.minecraft.net/MinecraftSkins/Player265.png)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:48)
Caused by: java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftSkins/Player265.png (http://skins.minecraft.net/MinecraftSkins/Player265.png)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at java.net.HttpURLConnection.getResponseCode(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:37)
java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftCloaks/Player265.png (http://skins.minecraft.net/MinecraftCloaks/Player265.png)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
   at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
   at java.lang.reflect.Constructor.newInstance(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:48)
Caused by: java.io.IOException: Server returned HTTP response code: 503 for URL: http://skins.minecraft.net/MinecraftCloaks/Player265.png (http://skins.minecraft.net/MinecraftCloaks/Player265.png)
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
   at java.net.HttpURLConnection.getResponseCode(Unknown Source)
   at net.minecraft.src.ThreadDownloadImage.run(ThreadDownloadImage.java:37)
Placed stronghold in INVALID biome at (-35, 49)
aug 29, 2012 6:07:12 PM net.minecraft.src.IntegratedServer tick
INFO: Saving and pausing game...
aug 29, 2012 6:07:12 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Overworld
aug 29, 2012 6:07:12 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Nether
aug 29, 2012 6:07:12 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/The End
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer stopServer
INFO: Stopping server
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer stopServer
INFO: Saving players
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer stopServer
INFO: Saving worlds
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Overworld
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/Nether
aug 29, 2012 6:07:13 PM net.minecraft.server.MinecraftServer saveAllDimensions
INFO: Saving chunks for level 'New World'/The End
Stopping!

SoundSystem shutting down...
    Author: Paul Lamb, www.paulscode.com (http://www.paulscode.com)




Mijn code:
Mod_plutgame:
Toon inhoud
package net.minecraft.src;

public class Mod_plutgame extends BaseMod
{
   public static final Block benzineblock = new benzineblock(160, 0).setBlockName("benzineblock").setHardness(3F).setResistance(4F).setLightValue(3F);
   public static final Item benzine = new benzine(143).setItemName("benzine");
   
   public void load()
   {
     
      ModLoader.addRecipe(new ItemStack(benzineblock, 1), new Object [] {"%%%", "%%%", "%%%", Character.valueOf('%'), Block.dirt});
      benzineblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "http://i47.tinypic.com/acsjti.png (http://i47.tinypic.com/acsjti.png)");
      ModLoader.registerBlock(benzineblock);
      ModLoader.addName(benzineblock, "Benzineblock");
      benzine.iconIndex = ModLoader.addOverride("/gui/items.png", "http://i48.tinypic.com/2nqqu7p.png (http://i48.tinypic.com/2nqqu7p.png)");
      ModLoader.addName(benzine, "Benzine");
   }
   
   public Mod_plutgame()
   {
     
     
   }
   
   public String getVersion()
   {
      return "1.3.2";
   }

}



benzine.java:
Toon inhoud
package net.minecraft.src;
import java.util.Random;

public class benzine extends Item
{
   public benzine(int i)
   {
      super(i);
      this.setTabToDisplayOn(CreativeTabs.tabMaterials);
      maxStackSize = 64;
   }
}



benzineblock.java
Toon inhoud
package net.minecraft.src;
import java.util.Random;


public class benzineblock extends Block
{
   public benzineblock(int i, int j)
   {
        super(i, j, Material.rock);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
   
   public int idDropped(int i, Random random, int j)
   {
      return Mod_plutgame.benzineblock.blockID;
   }
   public int quantityDropped(Random random)
   {
      return 2;
   }

}


hopelijk snel antwoord,
alvast bedankt!


Je textures kunnen niet op internet staan.
Je moet ze gewoon in je minecraft.jar doen en daar het path naartoe doen.



Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 19:08:43

Je textures kunnen niet op internet staan.
Je moet ze gewoon in je minecraft.jar doen en daar het path naartoe doen.





lukt ook niet, maar in welke minecraft.jar? die van mcp of de gewone? en moet ik dan wel de hele path of niet? ik heb nu

benzine.iconIndex = ModLoader.addOverride("/gui/items.png", "/gui/benzineblock.png");

benzineblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/gui/benzineblock.png");
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 19:10:44
Gewoon als je de mod installeert.
Je moet het path naar het mapje (maakt niet uit welke) maken en de afbeelding die erin staat gebruiken in de code, en dan als je de mod installeert gewoon het mapje met de texture ook in de minecraft.jar doen.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 20:42:07
nee het lijkt wel of het hele Item niet gemaakt is want hij kent ook niet het ID dat ik heb opgegeven
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 21:24:57
Gebruik je Eclipse?


EDIT Items ID's moeten hoger dan 256 zijn en block ID's mogen niet hoger dan 256 zijn.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 21:50:03
Gebruik je Eclipse?


EDIT Items ID's moeten hoger dan 256 zijn en block ID's mogen niet hoger dan 256 zijn.

ja ik gebruik eclipse, en nu heb ik het Item ID veranderd maar hij doet het nog steeds neit?

moet ik eens de bestanden sturen?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 21:51:08
Geeft Eclipse errors weer?
Zet je code nog eens hier neer.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 21:57:43
Mod_plutgame:
Toon inhoud
package net.minecraft.src;
import java.util.Random;

public class Mod_plutgame extends BaseMod
{
   public static final Block benzineblock = new benzineblock(160, 0).setBlockName("benzineblock").setHardness(3F).setResistance(4F).setLightValue(3F);
   public static final Item benzine = new benzine(2000).setItemName("benzine");
   
   public void load()
   {
      
      ModLoader.addRecipe(new ItemStack(benzineblock, 1), new Object [] {"%%%", "%%%", "%%%", Character.valueOf('%'), Block.dirt});
      benzineblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/gui/benzineblock.png");
      ModLoader.registerBlock(benzineblock);
      ModLoader.addName(benzineblock, "Benzineblock");
      benzine.iconIndex = ModLoader.addOverride("/gui/items.png", "/gui/benzineblock.png");
      ModLoader.addName(benzine, "Benzine");
   }
   
   public Mod_plutgame()
   {
      
      
   }
   
   public String getVersion()
   {
      return "1.3.2";
   }

}


benzine:
Toon inhoud
package net.minecraft.src;
import java.util.Random;

public class benzine extends Item
{
   public benzine(int i)
   {
      super(i);
      this.setTabToDisplayOn(CreativeTabs.tabMaterials);
      
      maxStackSize = 64;
   }
}


benzineblock:
Toon inhoud
package net.minecraft.src;
import java.util.Random;

public class benzineblock extends Block
{
   public benzineblock(int i, int j)
   {
        super(i, j, Material.rock);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
   
   public int idDropped(int i, Random random, int j)
   {
      return Mod_plutgame.benzineblock.blockID;
   }
   public int quantityDropped(Random random)
   {
      return 2;
   }

}


eclipse errors/problems:

Description   Resource   Path   Location   Type
Project 'Server' is missing required library: 'jars/minecraft_server.jar'   Server      Build path   Build Path Problem

Description   Resource   Path   Location   Type
The project cannot be built until build path errors are resolved   Server      Unknown   Java Problem

warings:

Description   Resource   Path   Location   Type
Build path specifies execution environment JavaSE-1.6. There are no JREs installed in the workspace that are strictly compatible with this environment.    Client      Build path   JRE System Library Problem
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 22:02:41
En wanneer doet hij het niet? Tijdens het recompilen of als je Minecraft opstart met de mod?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 22:05:21
En wanneer doet hij het niet? Tijdens het recompilen of als je Minecraft opstart met de mod?

hij lijkt het gewoon te doen, maar in minecraft zelf zie ik de items en blocks niet, en de ID's bestaan niet
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 22:06:12
Dat de ID's niet bestaan klopt wel.
Je moet ze nog toevoegen aan creative inventory, probeer eens.
EDIT oh heb je wel gedaan.
Ik zal er nog eens goed naar kijken.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 29 augustus 2012, 22:09:29
al gedaan?

package net.minecraft.src;
import java.util.Random;

public class benzineblock extends Block
{
public benzineblock(int i, int j)
{
        super(i, j, Material.rock);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }

public int idDropped(int i, Random random, int j)
{
return Mod_plutgame.benzineblock.blockID;
}
public int quantityDropped(Random random)
{
return 2;
}

}



package net.minecraft.src;
import java.util.Random;

public class benzine extends Item
{
public benzine(int i)
{
super(i);
this.setTabToDisplayOn(CreativeTabs.tabMaterials);

maxStackSize = 64;
}
}

this.setCreativeTab(CreativeTabs.tabBlock);

this.setTabToDisplayOn(CreativeTabs.tabMaterials);
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 augustus 2012, 22:11:58
Hm het enige wat ik kan verzinnen is dat je de plaatjes niet goed hebt, maar dat zou Modloader opmerken.
Ik zal morgen even verder kijken.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 30 augustus 2012, 11:48:15
Hm het enige wat ik kan verzinnen is dat je de plaatjes niet goed hebt, maar dat zou Modloader opmerken.
Ik zal morgen even verder kijken.

Oke moet ik anders ff de bestanden sturen?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 30 augustus 2012, 14:16:13
De class files en plaatjes is wel handig ja.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 30 augustus 2012, 15:04:09
http://37.59.182.135/~plutcraf/mod.rar (http://37.59.182.135/~plutcraf/mod.rar)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 30 augustus 2012, 16:57:08
Volgens mij komt het omdat je bestand Mod_Plutgame heet.
Het moet mod_Plutgame zijn, aangezien Java hoofdletter gevoelig is.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 30 augustus 2012, 18:37:11
Volgens mij komt het omdat je bestand Mod_Plutgame heet.
Het moet mod_Plutgame zijn, aangezien Java hoofdletter gevoelig is.

tnx man hij werkt weer!
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: woutj86 op 02 september 2012, 13:39:10
Ik ik een foutmelding als ik decompile terwijl ik de nieuweste java's, jdk en jre heb geinstalleert.   EDIT: Je mcp moet je updaten. Heb de laaste versie gedownload en die werkt wel met de nieuwste java ;)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 06 september 2012, 09:07:20
plz voeg de ores generaten toe
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 06 september 2012, 15:35:37
Ik zal het zo snel mogelijk doen, zo snel als mogelijk is met de drukte die ik heb :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 07 september 2012, 15:56:05
Ore generate tutorial toegevoegd.
Hij is ietwat snel in elkaar gezet, maar volgens mij is hij goed.
Kritiek altijd welkom :)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Rofl op 07 september 2012, 23:01:38
Goed dat je dit doet Bram voor de Nederlandse MineCrafters die willen modden onder ons  ^_^
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: umbrarush op 13 september 2012, 19:05:36
Bij basis mod opbouw heb je string in plaats van String , Als je dus errors krijgt dit is een fout
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 13 september 2012, 21:20:35
Tis gewoon goed hoor ;)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 14 september 2012, 08:50:40
Hi, bram,

Als je armor maakt en je wilt het in je texture mapje, inplaats van de armor map, wat moet je dan veranderen?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 14 september 2012, 09:03:58
Volgens mij kan dat niet met Modloader, dan zul je Forge moeten gebruiken.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 14 september 2012, 15:11:02
Volgens mij kan dat niet met Modloader, dan zul je Forge moeten gebruiken.
Ok, dus al mijn armor.png dingen moet dus in de armor folder?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 14 september 2012, 15:44:32
Ja, obsidian_1.png en obsidian_2.png als voorbeeld.
Maar als je een degelijke archiver gebruikt (Winrar en 7Zip dus) en je voegt daar de armor map toe aan de .minecraft voegt hij ze gewoon samen, dus problemen levert het niet op ;)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: umbrarush op 14 september 2012, 16:20:32
Code voor creative inventory kan je ook doen als
Citaat
.setCreativeTab(CreativeTabs.tabBlock)
bij public static final item/block (is mischien wat overzichtelijker)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 14 september 2012, 17:13:57
Kan, maar dit is makkelijker voor als je meerdere items op 1 file maakt, zoals tools.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: umbrarush op 15 september 2012, 09:22:04
dan is het idd makkelijker maar als je meerdere soorten items maakt is mijn manier handiger :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 15 september 2012, 10:29:13
Kweet niet, mijn manier is overzichtelijker.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 24 september 2012, 15:29:38
Ik heb geen errors bij het opstarten.
Maar ik heb nu twee items gemaakt en het eerste item krijgt de texture van het tweede en de tweede krijgt de texture van een hoed.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 24 september 2012, 16:30:48
Kan je je code even posten?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 25 september 2012, 08:20:19
mod_MoreStuff.java
Toon inhoud
public class mod_MoreStuff extends BaseMod{
   
   public static final Block BontomOre = new BontomOre(200, 0).setBlockName("Bontom Ore").setHardness(3F).setResistance(20F);
   
   public static final Item BontomIngot = new BontomIngot(2010).setItemName("Bontom Ingot");
   
    public static final Item Bontom = new Bontom(2000).setItemName("Bontom");
   
    public void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
       
        for(int i = 0; i < 6; i++)
        {
            int randPosX = chunkX + random.nextInt(16);
            int randPosY = random.nextInt(40);
            int randPosZ = chunkZ + random.nextInt(16);
            (new WorldGenMinable(BontomOre.blockID, 6)).generate(world, random, randPosX, randPosY, randPosZ);
        }                 
    }
   
    public void load()
   {
       ModLoader.addName(BontomIngot, "Bontom Ingot");
        Bontom.iconIndex = ModLoader.addOverride("/gui/items.png", "/items/BontomIngot.png");
       
        ModLoader.addName(Bontom, "Bontom");
        Bontom.iconIndex = ModLoader.addOverride("/gui/items.png", "/items/BontomOre.png");
             
        BontomOre.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/items/BontomOreOre.png");
      ModLoader.addName(BontomOre, "Bontom Ore");
      ModLoader.registerBlock(BontomOre);
   
      
   }

Bontom:
Toon inhoud
package net.minecraft.src;

public class Bontom extends Item
{
        public Bontom(int i)
        {
                super(i);
                maxStackSize = 64;   
                this.setTabToDisplayOn(CreativeTabs.tabMaterials);
        }
}

BontomIngot:
Toon inhoud
package net.minecraft.src;

public class BontomIngot extends Item
{
        public BontomIngot(int i)
        {
                super(i);
                maxStackSize = 64;   
                this.setTabToDisplayOn(CreativeTabs.tabMaterials);
        }
}
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 25 september 2012, 18:09:03
Je hebt 2 keer de texture voor Bontom gedefineerd, dat is het enige wat ik kan ontdekken.
Probeer het zo eens:
public class mod_MoreStuff extends BaseMod{
   
   public static final Block BontomOre = new BontomOre(200, 0).setBlockName("Bontom Ore").setHardness(3F).setResistance(20F);
   
   public static final Item BontomIngot = new BontomIngot(2010).setItemName("Bontom Ingot");
   
    public static final Item Bontom = new Bontom(2000).setItemName("Bontom");
   
    public void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
       
        for(int i = 0; i < 6; i++)
        {
            int randPosX = chunkX + random.nextInt(16);
            int randPosY = random.nextInt(40);
            int randPosZ = chunkZ + random.nextInt(16);
            (new WorldGenMinable(BontomOre.blockID, 6)).generate(world, random, randPosX, randPosY, randPosZ);
        }                 
    }
   
    public void load()
   {
       ModLoader.addName(BontomIngot, "Bontom Ingot");
        Bontom.iconIndex = ModLoader.addOverride("/gui/items.png", "/items/BontomIngot.png");
             
        BontomOre.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/items/BontomOreOre.png");
      ModLoader.addName(BontomOre, "Bontom Ore");
      ModLoader.registerBlock(BontomOre);
   
     
   }
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 25 september 2012, 19:12:51
Ik heb het gefixd je moest voor elk item een mod_... maken maar nu hoe moet ik een furnace repice maken want als ik twee items bij elkaar zet dan word eentje een hoed...
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 25 september 2012, 19:52:13
Niet voor elk item een mod_ file maken, dat is niet de manier om het te doen.
Ik raad je aan om gewoon de tutorial eens door te lezen want je hebt iets fout gedaan.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 26 september 2012, 15:33:46
Is twee mod_... Ook goed want ik heb nu 1 voor de hoofd en 1 voor de ores
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: umbrarush op 26 september 2012, 15:48:38
Kijk zoiets, hierin staat redelijk veel
Citaat
package net.minecraft.src;

import java.util.List;
import java.util.Random;

public class mod_Cheese extends BaseMod
{
   public static final Block CheesyDirt = new CheesyDirt(163, 0).setBlockName("CheesyDirt").setHardness(1F).setResistance(4F).setLightValue(1F).setCreativeTab(CreativeTabs.tabBlock);;
   public static final Block CheesyGrass = new CheesyGrass(162, 0).setBlockName("Cheesy Grass").setHardness(1F).setResistance(4F).setLightValue(1F).setCreativeTab(CreativeTabs.tabBlock);;
   public static final Item Cheese = new ItemFood(5001, 2, 1F, false).setItemName("Cheese");
   public static final Item IngotCheese = new ItemFood(5005, 2, 1F, false).setItemName("Cheese ingot");
   public static final Item Tosti = new ItemFood(5000, 10, 1F, false).setItemName("Tosti");
   public static final Item CheeseSandwich = new ItemFood(5002, 6, 1F, false).setItemName("CheeseSandwich");
   public static final Item HolyCheese = new ItemFood(5003, 4, 1F, false).setPotionEffect(Potion.regeneration.id, 600, 0, 1F).setItemName("Holy Cheese");
   public static final Item BolyCheese = new ItemFood(5004, 4, 1F, false).setPotionEffect(Potion.poison.id, 600, 0, 1F).setItemName("Holy Cheese");
    public static final Block CheeseBlock = new CheeseBlock(160, 0).setBlockName("CheeseBlock").setHardness(1F).setResistance(4F).setLightValue(0F).setCreativeTab(CreativeTabs.tabBlock);;
    public static final Block CheeseCloud = new CheeseCloud(164, 0).setBlockName("Cheese Cloud").setHardness(1F).setResistance(4F).setLightValue(1F).setCreativeTab(CreativeTabs.tabBlock);;
    public static final Block CheeseOre = new CheeseOre(161, 0).setBlockName("CheeseOre").setHardness(1F).setResistance(4F).setLightValue(0F).setCreativeTab(CreativeTabs.tabBlock);;
    public static final Item CheesyPickaxe = new ItemPickaxe(2001, EnumToolMaterial.CHEESE).setItemName("Cheesy Pickaxe");
    public static final Item CheesySpade= new ItemSpade(2002, EnumToolMaterial.CHEESE).setItemName("Cheesy Spade");
    public static final Item CheesyAxe= new ItemAxe(2003, EnumToolMaterial.CHEESE).setItemName("Cheesy Axe");
    public static final Item CheesyHoe= new ItemHoe(2004, EnumToolMaterial.CHEESE).setItemName("Cheesy Hoe");
    public static final Item CheesySword= new ItemSword(2005, EnumToolMaterial.CHEESE).setItemName("Cheesy Sword");
    public static final BiomeGenBase Cheesy = (new BiomeGenCheesy(41)).setBiomeName("Cheesy");
    public static final BiomeGenBase Clouds = (new BiomeGenCheesy(42)).setBiomeName("Clouds");
   
    public void load()
   {
        ModLoader.addName(Cheese, "Cheese");
        Cheese.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Cheese.png");
        ModLoader.addRecipe(new ItemStack(Cheese, 1), new Object[] {"#", Character.valueOf('#'), Item.bucketMilk});
        ModLoader.addName(Tosti, "Tosti");
        ModLoader.addSmelting(CheeseSandwich.shiftedIndex, new ItemStack(Tosti, 1), 1.0F);
        Tosti.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Tosti.png");
        ModLoader.addName(CheeseSandwich, "CheeseSandwich");
        CheeseSandwich.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/CheeseSandwich.png");
        ModLoader.addRecipe(new ItemStack(CheeseSandwich, 3), new Object[] {"###", "@@@", "###", Character.valueOf('#'), Item.bread, Character.valueOf('@'), Cheese});
        CheeseBlock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Cheese/CheeseBlock.png");
        ModLoader.registerBlock(CheeseBlock);
        ModLoader.addName(CheeseBlock, "CheeseBlock");
        ModLoader.addRecipe(new ItemStack(CheeseBlock, 1), new Object[] {"###", "###", "###", Character.valueOf('#'), Cheese});
        ModLoader.addRecipe(new ItemStack(Cheese, 9), new Object[] {"#", Character.valueOf('#'), CheeseBlock});
        ModLoader.addName(BolyCheese, "Holy Cheese");
        BolyCheese.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/BolyCheese.png");
        ModLoader.addRecipe(new ItemStack(BolyCheese, 9), new Object[] {"#@#", "@&@", "#@#", Character.valueOf('&'), Cheese, Character.valueOf('@'), Item.diamond, Character.valueOf('#'), Item.ingotGold });
        ModLoader.addName(HolyCheese, "Holy Cheese");
        HolyCheese.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/HolyCheese.png");
        ModLoader.addRecipe(new ItemStack(HolyCheese, 9), new Object[] {"#@#", "@&@", "#@#", Character.valueOf('&'), Cheese, Character.valueOf('#'), Item.diamond, Character.valueOf('@'), Item.ingotGold });
        CheeseOre.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Cheese/CheeseOre.png");
        ModLoader.registerBlock(CheeseOre);
        ModLoader.addName(CheeseOre, "CheeseOre");
        ModLoader.addRecipe(new ItemStack(CheeseOre, 1), new Object[] {"#", Character.valueOf('#'), Block.dirt});
        ModLoader.addName(IngotCheese, "Cheese ingot");
        IngotCheese.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/CheeseIngot.png");
        ModLoader.addSmelting(CheeseOre.blockID, new ItemStack(IngotCheese, 1), 1.0F);
        CheesyPickaxe.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Cpick.png");
        CheesySpade.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Cshovel.png");
        CheesyAxe.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Caxe.png");
        CheesyHoe.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Choe.png");
        CheesySword.iconIndex = ModLoader.addOverride("/gui/items.png", "/Cheese/Csword.png");

        ModLoader.addName(CheesyPickaxe, "Cheesy Pickaxe");
        ModLoader.addName(CheesySpade, "Cheesy Shovel");
        ModLoader.addName(CheesyAxe, "Cheesy Axe");
        ModLoader.addName(CheesyHoe, "Cheesy Hoe");
        ModLoader.addName(CheesySword, "Cheesy Sword");

        ModLoader.addRecipe(new ItemStack(CheesyPickaxe, 1), new Object[] {"***", " @ ", " @ ", Character.valueOf('*'), IngotCheese, Character.valueOf('@'), Item.stick});
        ModLoader.addRecipe(new ItemStack(CheesyAxe, 1), new Object[] {"** ", "*@ ", " @ ", Character.valueOf('*'), IngotCheese, Character.valueOf('@'), Item.stick});
        ModLoader.addRecipe(new ItemStack(CheesySpade, 1), new Object[] {" * ", " @ ", " @ ", Character.valueOf('*'), IngotCheese, Character.valueOf('@'), Item.stick});
        ModLoader.addRecipe(new ItemStack(CheesyHoe, 1), new Object[] {"** ", " @ ", " @ ", Character.valueOf('*'), IngotCheese, Character.valueOf('@'), Item.stick});
        ModLoader.addRecipe(new ItemStack(CheesySword, 1), new Object[] {" * ", " * ", " @ ", Character.valueOf('*'), IngotCheese, Character.valueOf('@'), Item.stick});
       
        ModLoader.addBiome(Cheesy);
        ModLoader.addBiome(Clouds);
        CheesyDirt.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Cheese/CheesyDirt.png");
        ModLoader.registerBlock(CheesyDirt);
        ModLoader.addName(CheesyDirt, "Cheesy Dirt");
        CheesyGrass.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Cheese/CheesyGrass.png");
        ModLoader.registerBlock(CheesyGrass);
        ModLoader.addName(CheesyGrass, "Cheesy Grass");
        CheeseCloud.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/Cheese/CheesyCloud.png");
        ModLoader.registerBlock(CheeseCloud);
        ModLoader.addName(CheeseCloud, "Cheese Cloud");
        }
    public void generateSurface(World var1, Random var2, int var3, int var4)
    {
        BiomeGenBase var5 = var1.getWorldChunkManager().getBiomeGenAt(var3, var4);
        new WorldGenPumpkin();
        int var7;
        int var8;
        int var9;
        int var10;

        if (var5 instanceof BiomeGenCheesy)
        {
            for (var7 = 0; var7 < 2; ++var7)
            {
                WorldGenPumpkin var6 = new WorldGenPumpkin();
                var8 = var3 + var2.nextInt(16);
                var9 = var4 + var2.nextInt(16);
                var10 = var1.getHeightValue(var8, var9);
                var6.generate(var1, var2, var8, var10, var9);
            }
        }

        if (var5 instanceof BiomeGenCheesy)
        {
            for (var7 = 0; var7 < 2; ++var7)
            {
                var8 = var3 + var2.nextInt(16);
                var9 = var2.nextInt(128);
                var10 = var4 + var2.nextInt(16);
                (new WorldGenFlowers(CheeseCloud.blockID)).generate(var1, var2, var8, var9, var10);
        }
        if (var5 instanceof BiomeGenClouds)
         {
                for (var7 = 0; var7 < 2; ++var7)
                {
                    var8 = var3 + var2.nextInt(16);
                    var9 = var2.nextInt(128);
                    var10 = var4 + var2.nextInt(16);
                    (new WorldGenFlowers(CheeseBlock.blockID)).generate(var1, var2, var8, var9, var10);
                }
        }

        for (var7 = 0; var7 < 3; ++var7)
        {
            var8 = var3 + var2.nextInt(16);
            var9 = var2.nextInt(36);
            var10 = var4 + var2.nextInt(16);
            (new WorldGenMinable(CheeseOre.blockID, 4)).generate(var1, var2, var8, var9, var10);
        }
    }
}
    public String getVersion()
    {
        return "1.3.2";
    }
}

Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 26 september 2012, 16:29:38
Ik heb er gewoon 1tje voor mn mod, die heeft 1000 regels code :P
Best wel weinig eigenlijk.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 26 september 2012, 16:41:38
Ik heb er gewoon 1tje voor mn mod, die heeft 1000 regels code :P
Best wel weinig eigenlijk.
Logisch met 1000den items erin :P (toch?)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 26 september 2012, 16:42:21
Is er ook iets dat je een ore aleen kan mijnen met bv. iron of diamond of gold
?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 26 september 2012, 16:44:12
Is er ook iets dat je een ore aleen kan mijnen met bv. iron of diamond of gold
?

ofcourse :P dan moet je de hardness verhogen (dit bedoel je toch?)

btw mijn mod_BurnMod file heeft 1393 woorden :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 26 september 2012, 16:50:25
woorden is iets anders dan regels :P
Mijne heeft er dan minimaal 10.000 en alleen in het hoofdbestand.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 26 september 2012, 16:59:10
Nice :P ik heb ook een kleinere mod als jij (denk ik)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 26 september 2012, 17:33:57
ofcourse :P dan moet je de hardness verhogen (dit bedoel je toch?)

btw mijn mod_BurnMod file heeft 1393 woorden :P
Nee want dan kan je hem nog steed met een wooden pickaxe mijnen ik bedoel egt gwn aleen met b.v Iron of hoger...
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 26 september 2012, 18:45:25
Nu bij het craften:
ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'), Item.Meel)});

een ___ onder Meel hoezo?
Meel is aangegeven in hetzelfde mod_... als waarin ik de crafting recipe doe
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 26 september 2012, 19:52:38
Je zegt nu dat Meel in de class Item.java moet staan doordat je er Item. voor zet.
Dat moet je dus weghalen.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 26 september 2012, 21:00:40
Is er een andere manier om makkelijk gwn twee dingen in de crafting table te stoppen en dan iets krijgen in plaats van dit doen?

       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#@ ", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"# @", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#  ", "@  ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#  ", " @ ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#  ", "  @", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#  ", "   ", "@  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#  ", "   ", " @ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"#  ", "   ", "  @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@# ", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" #@", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" # ", "@  ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" # ", " @ ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" # ", "  @", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" # ", "   ", "@  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" # ", "   ", " @ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" # ", "   ", "  @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@ #", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @#", "   ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  #", "@  ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  #", " @ ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  #", "  @", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  #", "   ", "@  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  #", "   ", " @ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  #", "   ", "  @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@  ", "#  ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @ ", "#  ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  @", "#  ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "#@ ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "# @", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "#  ", "@  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "#  ", " @ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "#  ", "  @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@  ", " # ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @ ", " # ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  @", " # ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "@# ", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " #@", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " # ", "@  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " # ", " @ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " # ", "  @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@  ", "  #", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @ ", "  #", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  @", "  #", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "@ #", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " @#", "   ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "  #", "@  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "  #", " @ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "  #", "  @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@  ", "   ", "#  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @ ", "   ", "#  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  @", "   ", "#  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "@  ", "#  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " @ ", "#  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "  @", "#  ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", "#@ ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", "# @", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@  ", "   ", " # ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @ ", "   ", " # ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  @", "   ", " # ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "@  ", " # ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " @ ", " # ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "  @", " # ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", "@# ", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", " #@", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"@  ", "   ", "  #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {" @ ", "   ", "  #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"  @", "   ", "  #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "@  ", "  #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", " @ ", "  #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "  @", "  #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", "@ #", Character.valueOf('#'), Item.sugar,('@'),Meel});
       ModLoader.addRecipe(new ItemStack(Deeg, 1), new Object[] {"   ", "   ", " @#", Character.valueOf('#'), Item.sugar,('@'),Meel});
       
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 26 september 2012, 21:37:46
Ja, dan moet je even googlen op ModLoader shapeless recipe.
Ik weet niet meer hoe het gaat aangezien ik nu alleen nog maar met forge werk.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 27 september 2012, 16:26:39
Wat is er fijn aan forge?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 27 september 2012, 17:15:05
Maak je tools nog een keer af?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 27 september 2012, 17:16:01
tools zijn niet super moeilijk (tenminste als je gewone basic tools doe)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 28 september 2012, 07:07:29
tools zijn niet super moeilijk (tenminste als je gewone basic tools doe)
Zeg de code maar : D
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 28 september 2012, 15:40:23
Zeg de code maar : D

Oke maar dat is wel best veel code dus zal ik het in een PM sturen of gewoon een TUT topic aanmaken?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 28 september 2012, 15:43:18
En Bram en plutgame, nu jullie die gun tut hebben, je moet best wel veel veranderen om het kloppent te krijgen, ±D
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 28 september 2012, 15:46:11
En Bram en plutgame, nu jullie die gun tut hebben, je moet best wel veel veranderen om het kloppent te krijgen, ±D

Ja ik heb het ook dankzij jou tip om bij ItemBow te kijken voor elkaar gekregen alleen het EntityKogel werkt nog niet zo goed omdat als je schiet je nog niks kan zien ;P alleen de mob of animal die word wel gehit als je goed schiet
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: LikeCrafting op 28 september 2012, 15:49:05
Oke maar dat is wel best veel code dus zal ik het in een PM sturen of gewoon een TUT topic aanmaken?
Stuur maar PM
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 28 september 2012, 15:55:47
Ja ik heb het ook dankzij jou tip om bij ItemBow te kijken voor elkaar gekregen alleen het EntityKogel werkt nog niet zo goed omdat als je schiet je nog niks kan zien ;P alleen de mob of animal die word wel gehit als je goed schiet
Xd je moet iets volgens mij in Itemgun een if ding weghalen
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 28 september 2012, 15:56:04
Reint stuur me gewoon ff de source dan is veel makkelijker xD
En dan kan ik eventueel een goede tut hier neerzetten.
Maar ik zal vandaag een tools tutorial proberen te maken.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 28 september 2012, 16:23:48
Reint stuur me gewoon ff de source dan is veel makkelijker xD
En dan kan ik eventueel een goede tut hier neerzetten.
Maar ik zal vandaag een tools tutorial proberen te maken.

hierzo bramie kun je meteen erin zetten (miss wat wijzigingen)



Toon inhoud
Alle keren als er staat JOUMOD of JOUTOOL moet je dat veranderen in de naam van jou tools of mod

Dit voeg je toe aan de je mod class (mod_JOUMOD)

public static final Item jouPickaxe = (new ItemPickaxe(200, EnumToolMaterial.MATERIALNAAM)).setItemName("jouPickaxe");
public static final Item jouAxe = (new ItemAxe(201, EnumToolMaterial.MATERIALNAAM)).setItemName("jouAxe");
public static final Item jouShovel = (new ItemSpade(202, EnumToolMaterial.MATERIALNAAM)).setItemName("jouShovel");
public static final Item jouSword = (new ItemSword(203, EnumToolMaterial.MATERIALNAAM)).setItemName("jouSword");
public static final Item jouHoe = (new ItemHoe(204, EnumToolMaterial.MATERIALNAAM)).setItemName("jouHoe");

Dan voeg je dit toe aan je mod_JOUMOD (dit moet tussen de public void load()

jouPickaxe.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/jouPickaxe.png");
jouAxe.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/jouAxe.png");
jouShovel.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/jouShovel.png");
jouSword.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/jouSword.png");
jouHoe.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/jouHoe.png");

ModLoader.addRecipe(new ItemStack(jouPickaxe, 1), new Object [] {"###", " X ", " X ", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});
ModLoader.addRecipe(new ItemStack(jouShovel, 1), new Object [] {"#", "X", "X", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});
ModLoader.addRecipe(new ItemStack(jouSword, 1), new Object [] {"#", "#", "X", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});
ModLoader.addRecipe(new ItemStack(jouAxe, 1), new Object [] {"##", "#X ", " X", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});
ModLoader.addRecipe(new ItemStack(jouAxe, 1), new Object [] {"##", "X#", "X ", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});
ModLoader.addRecipe(new ItemStack(jouHoe, 1), new Object [] {"##", " X", " X", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});
ModLoader.addRecipe(new ItemStack(jouHoe, 1), new Object [] {"##", "X ", "X ", Character.valueOf('#'), jouItem, Character.valueOf('X'), Item.stick});

ModLoader.addName(jouPickaxe, "Pickaxe Naam");
ModLoader.addName(jouAxe, "Axe Naam");
ModLoader.addName(jouShovel, "Shovel Naam");
ModLoader.addName(jouSword, "Sword Naam");
ModLoader.addName(jouHoe, "Hoe Naam");

Dan ga je naar EnumToolMaterial dan zie je dit (behalve dat MATERIALNAAM(3, 1248, 6F, 3, 10);)

package net.minecraft.src;
public enum EnumToolMaterial
{
WOOD(0, 59, 2.0F, 0, 15),
STONE(1, 131, 4.0F, 1, 5),
IRON(2, 250, 6.0F, 2, 14),
EMERALD(3, 1561, 8.0F, 3, 10),
GOLD(0, 32, 12.0F, 0, 22),
MATERIALNAAM(3, 1248, 6F, 3, 10);
/**
         * The level of material this tool can harvest (3 = DIAMOND, 2 = IRON, 1 = STONE, 0 = IRON/GOLD)
         */
private final int harvestLevel;
/**
         * The number of uses this material allows. (wood = 59, stone = 131, iron = 250, diamond = 1561, gold = 32)
         */
private final int maxUses;
/**
         * The strength of this tool material against blocks which it is effective against.
         */
private final float efficiencyOnProperMaterial;
/** Damage versus entities. */
private final int damageVsEntity;
/** Defines the natural enchantability factor of the material. */
private final int enchantability;
private EnumToolMaterial(int par3, int par4, float par5, int par6, int par7)
{
         this.harvestLevel = par3;
         this.maxUses = par4;
         this.efficiencyOnProperMaterial = par5;
         this.damageVsEntity = par6;
         this.enchantability = par7;
}
/**
         * The number of uses this material allows. (wood = 59, stone = 131, iron = 250, diamond = 1561, gold = 32)
         */
public int getMaxUses()
{
         return this.maxUses;
}
/**
         * The strength of this tool material against blocks which it is effective against.
         */
public float getEfficiencyOnProperMaterial()
{
         return this.efficiencyOnProperMaterial;
}
/**
         * Damage versus entities.
         */
public int getDamageVsEntity()
{
         return this.damageVsEntity;
}
/**
         * The level of material this tool can harvest (3 = DIAMOND, 2 = IRON, 1 = STONE, 0 = IRON/GOLD)
         */
public int getHarvestLevel()
{
         return this.harvestLevel;
}
/**
         * Return the natural enchantability factor of the material.
         */
public int getEnchantability()
{
         return this.enchantability;
}
}

Je voeg dan MATERIALNAAM(3, 1248, 6F, 3, 10); toe onder GOLD

uitleg van MATERIALNAAM(3, 1248, 6F, 3, 10);


Vervang MATERIALNAME met de naam van je materiaal. (Caps vereist)

3 is de Harvestlevel van uw gereedschap materiaal. Dit is het niveau van het materiaal van deze tool (3 = DIAMOND, 2 = IRON, 1 = STONE, 0 = IRON / GOLD)

1248 is het aantal keer dat deze tool iets kan slopen voordat het zelf breekt. (hout = 59, stone = 131, iron = 250, diamond = 1561, gold = 32)

6F is hoe snel dit materiaal kan minen.

3 is de hoeveelheid schade hij geeft aan een vijand (3 is 1,5 hartje)

10 de natuurlijke enchantability factor.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 28 september 2012, 16:25:50
Nee das geen goede, je past een base class aan he.
6 files meer en wat copy paste en je hebt een goede :P
Heb nu een klein begin gemaakt en ga vanavond verder.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 28 september 2012, 16:27:00
Bram, ik geef je wel de tut source ;) morgen... Want ik moet nu weg van mijn eigen pc...
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 28 september 2012, 16:29:06
Nee das geen goede, je past een base class aan he.
6 files meer en wat copy paste en je hebt een goede :P
Heb nu een klein begin gemaakt en ga vanavond verder.

6 files?!?! dan maak jij hem zeker uitgebreider als mijne ;P

en inderdaad je kan ook zelf een EnumToolMaterial erbij maken
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 28 september 2012, 18:25:21
Jep, en zo voorkom je een hoop gedoe, en het is de echte manier.
Met forge is het nog makkelijker zelfs, maar 5 nieuwe files :P


Oh en Reint, toch wel de aangepaste wel werkende he :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 28 september 2012, 18:27:17
bram mag ik ook nog een tut voor hier schrijven met hoe je de grote van een blok veranderd? (en wat andere kleine dingetjes)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 28 september 2012, 19:01:34
Heel graag zelfs :)

Ik heb de tool tutorial af, maar het kan zijn dat er een paar foutjes inzitten omdat hij nogal vlug is gemaakt.
Nu eventjes tot rust komen met Black ops :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 28 september 2012, 19:07:53
Ik dacht dat de 3 was voor hoeveel hartjes eraf gingen als je bijvoorbeeld met een pickaxe sloeg maar dat weet ik niet zeker (3 zou dan 1,5 hartje zijn)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 28 september 2012, 19:16:30
Oh kan best, ik zal morgen wel even kijken.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 29 september 2012, 10:21:28
Oke, Hier de ItemGun: (bijna overal staat uitleg achter :D)

package net.minecraft.src;

public class ItemGun extends Item
{
public ItemGun(int par1)
{
super(par1);
this.maxStackSize = 1; //Hoeveel keer je hem stacken, dit kan bij alle items
this.setMaxDamage(64); //Dit is hoeveel keer je hem kan gebruiken!
}
public EnumAction getItemUseAction(ItemStack par1ItemStack)
    {
        //dit kan handig zijn, voeg dit dan toe bij je spawn entity etc: par3EntityPlayer.setItemInUse(par1ItemStack)
       
    }
// Voeg dit toe als je damage wilt op het item, dus net zoals een tool zegmaar, dat je hem niet eewig kan gebruiken! (verwijder /* en */ (voor en achter)   (dit kan bij alle items als je wilt!)
/*public boolean tryPlaceIntoWorld(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    {
        if (par7 == 0)
        {
            --par5;
        }

        if (par7 == 1)
        {
            ++par5;
        }

        if (par7 == 2)
        {
            --par6;
        }

        if (par7 == 3)
        {
            ++par6;
        }

        if (par7 == 4)
        {
            --par4;
        }

        if (par7 == 5)
        {
            ++par4;
        }

        if (!par2EntityPlayer.canPlayerEdit(par4, par5, par6))
        {
            return false;
        }
        else
        {
            int var11 = par3World.getBlockId(par4, par5, par6);

            if (var11 == 0)
            {
               
            }

           
            return true;
        }
    } */

public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
{      boolean var5 = par3EntityPlayer.inventory.hasItem(341);

if (var5 || par3EntityPlayer.inventory.hasItem(mod_Gun.Bullet.shiftedIndex))
{
//Hier gebeurt alles als je het item dat je      /\ hier kan veranderen hebt in je inventory!
par2World.spawnEntityInWorld(new EntityBullet(par2World, par3EntityPlayer));  //DIT MOET JE HEBBEN hier vuurt hij de entity die je gaat (of hebt) gemaakt mee, dus
par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));   //het geluid
par3EntityPlayer.inventory.consumeInventoryItem(mod_Gun.Bullet.shiftedIndex); //Dit zorgt ervoor dat het bullet item per schot 1 keer weggaat!
par1ItemStack.damageItem(1, par3EntityPlayer); //als je met damage hebt, zorgt dit dat er per schot 1 afgaat
}
{                                if (!var5)
{                                        par3EntityPlayer.inventory.consumeInventoryItem(Item.slimeBall.shiftedIndex); //ehm laat dit maar gewoon staan :D
if (!par2World.isRemote)
{

}

par3EntityPlayer.inventory.consumeInventoryItem(mod_Gun.Bullet.shiftedIndex); //Dit is onnodig, maar als hij het heir niet door doet, gewoon verwijderen
par1ItemStack.damageItem(1, par3EntityPlayer);  //zelfde als bij deze

}


return par1ItemStack;        }
}}

 
EntityBullet:
package net.minecraft.src;
public class EntityBullet extends EntityThrowable
{
public EntityBullet(World par1World)
{
super(par1World);

this.getBoundingBox();

this.getTexture();

       
}

public void onCollideWithPlayer(EntityPlayer par1EntityPlayer)
    {
//par1EntityPlayer.inventory.consumeInventoryItem(Item.slimeBall.shiftedIndex);

    }
protected float getGravityVelocity()
    {
        return 0.04F;  //de zwaartekracht, hoe hoger, hoe sneller naar de grond.
    }


public EntityBullet(World par1World, EntityLiving par2EntityLiving)
{
super(par1World, par2EntityLiving);
}
public EntityBullet(World par1World, double par2, double par4, double par6)
{
super(par1World, par2, par4, par6);
}
protected void onImpact(MovingObjectPosition par1MovingObjectPosition)
{
if (par1MovingObjectPosition.entityHit != null)
{

  byte var2 = 2;  //Hier kan je de damage instellen

if (par1MovingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.thrower), var2))
{
;   //hier kan je instellen wat er gebeurt als je een entity raakt.

}

}
if (!this.worldObj.isRemote && this.rand.nextInt(8) == 0)
        {
            byte var2 = 1; 

           

           
        }
for (int var3 = 0; var3 < 8; ++var3)
{
this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D);  //dit gebeurt er als hij de grond raakt.
}
if (!this.worldObj.isRemote)
{
this.setDead();
}
}}


Je moet verder nog 2 items maken, een item genaamt Gun, en een item genaamt Bullet, en als je het met deze tut wilt kloppent maken moet het in een mod_ file die mod_Gun heet!

Dit is de gun tut :D je moet hem maar met je eigen kennis wat advanced maken.. maar gewoon proberen tot je wat leuks krijg, doe ik ook altijd :D
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 29 september 2012, 10:29:44
Ik zal hem even toevoegen bij de tuts.
Ook ga ik er zelf nu even er wat mee klooien :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 31 oktober 2012, 20:09:46
In 1.4 geld dit:
Citaat
  this.setCreativeTab(CreativeTabs.tabBlock);

Ook voor items, dus niet meer setcreativetabtodisplay()  maar het bovenste. :D
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 31 oktober 2012, 20:17:07
In 1.4 geld dit:
Ook voor items, dus niet meer setcreativetabtodisplay()  maar het bovenste. :D

ik gebruikte met 1.3 ook al
  this.setCreativeTab(CreativeTabs.tabBlock);
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 31 oktober 2012, 20:18:13
ik gebruikte met 1.3 ook al
  this.setCreativeTab(CreativeTabs.tabBlock);
Maar bij items… (maarja..) tis wel handig want je krijgt errors als je het niet doet
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 31 oktober 2012, 20:23:39
Denk dat ik ga stoppen met deze tutorials, omdat ik het te druk heb en ik het niet aanmoedig om modloader te gebruiken :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 31 oktober 2012, 20:27:53
Denk dat ik ga stoppen met deze tutorials, omdat ik het te druk heb en ik het niet aanmoedig om modloader te gebruiken :P
-Ahw-
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 31 oktober 2012, 22:18:27
Misschien, heel misschien maak ik forge tutorials (een ja dus)
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Wolf op 01 november 2012, 07:42:23
Misschien, heel misschien maak ik forge tutorials (een ja dus)
Dan doe ik wel de modloader tut’s :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: Menno op 01 november 2012, 14:27:56
Je laat dit topic toch wel open staan?
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: bramie123 op 01 november 2012, 16:14:06
Tuurlijk, ik zal altijd blijven helpen als er vragen zijn.
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: umbrarush op 01 november 2012, 19:36:03
Dan doe ik wel de modloader tut’s :P
Ik help wel :P
Titel: Re: [TUT][1.3.2]Brams modding tutorials
Bericht door: darkstraem op 24 november 2012, 21:56:01
nice :D