Modding FR

nostre

Aventurier
13 Novembre 2010
424
5
0
30
subject_mods_32.png

Minecraft est un jeu en plein développement,aussi bien du coté de chez Mojang que de celui de la communauté, qui ne cesse de développer toujours plus de mods et de extures packs.

Cependant, pour toute personne voulant tenter le modding de Minecraft,il faudra passer par les tutoriaux du forum officiel,où le français n'est pas vraiment courant.
De plus,si la personne en question ne connait pas un minimum certaines bases de code,sa devient vite un enfer de se lancer dans le domaines...

C'est pourquoi,devant l'absence total de tutoriel français sur le sujet,et afin d'encourager de nouveaux modder français,j'ai décidé de créer le 1er Tutoriel de Modding Minecraft FR.

Le but n'est pas seulement de créer un tutoriel en français,j'esseye de faire en sorte qu'il sois le plus accessible possible pour toutes personnes, compréhensible même pour des non initiés a toutes formes de codes (ou presque).

tutorial.gif


changelog.png
ChangeLog:
changelog.png

*27-02-11: Mise a jour des tutos I et III pour MCP 29a et ModLoader Beta 1.3_01v4.
*27-02-11: Correction d'une erreur dans le tuto II,merci a Woreck de me l'avoir fait remarquer !
*11-04-11: Mise a jour complète pour Minecraft Beta 1.4_01,MCP211 et ModLoader B1.4_01 v1.
*27-04-2011: Mise a jour pour Minecraft B1.5_01,MCP v2.12 et ModLoader v3 B1.5_01.
*30-04-2011: Correction d'une erreur avec les recettes,et mise a disposition des fichiers mod_MyMod.java et BlockMyBloc.java.
exclamation.gif
*29-05-11: Mise a jour pour Minecraft B1.6.5,MCP v3.3 et ModLoader v1 B1.6.5.


! Les liens suivants sont morts !

tuto.png

green-download-arrow-grey-line.png
Tutorial Modding FR - Téléchargement:
green-download-arrow-grey-line.png

asus_download_arrow004.gif
Tuto I - Téléchargement et installation
asus_download_arrow004.gif
Tuto II - Création d'un mod simple,ajout de nouveaux blocs
asus_download_arrow004.gif
Tuto III - Compilation et tests
asus_download_arrow004.gif
Tuto IV - Quelques petits trucs a savoir avant de continuer
asus_download_arrow004.gif
Tuto - Création de nouveaux objets
asus_download_arrow004.gif
Tuto - Ajouter des blocs et objets pour le four
asus_download_arrow004.gif
Tuto - Blocs – Autres possibilités
asus_download_arrow004.gif
Tuto - Autres possibilités - objets
asus_download_arrow004.gif
Sources du mod du Tuto II

Nouveaux fichiers ajoutés suite aux liens morts à la fin du message.
Il manque juste les "Sources du mod du Tuto II".
Je précise que ce sont les fichiers d'origine, le code est parfois obsolète !
 

Fichiers joints

bonjour je demende de l' aide jai cette erreur
je ve mettre 6 face a un bloc mais je ni arive pas c' est pour mon mod stargate

sa me mais sa
Code:
code:
== MCP v4.3 ==
> Recompiling client...
"C:\Program Files\Java\jdk1.6.0_25\bin\javac.exe" -g -verbose -classpath "lib/;l
ib/*;jars/bin/minecraft.jar;jars/bin/jinput.jar;jars/bin/lwjgl.jar;jars/bin/lwjg
l_util.jar" -sourcepath src/minecraft -d bin/minecraft src/minecraft\net\minecra
ft\client\*.java src/minecraft\net\minecraft\isom\*.java src/minecraft\net\minec
raft\src\*.java  conf/patches/*.java failed.
Return code : 1

== ERRORS FOUND ==

src\minecraft\net\minecraft\src\BlockMyBlocj.java:13: <identifier> expected
Texture1 = ModLoader.addOverride("/terrain.png", "/mod/Texture1.png");
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:14: <identifier> expected
Texture2 = ModLoader.addOverride("/terrain.png", "/mod/Texture2.png");
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:15: <identifier> expected
Texture3 = ModLoader.addOverride("/terrain.png", "/mod/Texture3.png");
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:16: <identifier> expected
Texture4 = ModLoader.addOverride("/terrain.png", "/mod/Texture4.png");
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:17: <identifier> expected
Texture5 = ModLoader.addOverride("/terrain.png", "/mod/Texture5.png");
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:18: <identifier> expected
Texture6 = ModLoader.addOverride("/terrain.png", "/mod/Texture6.png");
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:20: class, interface, or enum
expected
public int Texture1;
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:21: class, interface, or enum
expected
public int Texture2;
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:22: class, interface, or enum
expected
public int Texture3;
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:23: class, interface, or enum
expected
public int Texture4;
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:24: class, interface, or enum
expected
public int Texture5;
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:25: class, interface, or enum
expected
public int Texture6;
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:27: class, interface, or enum
expected
public int getBlockTextureFromSide(int i)
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:32: class, interface, or enum
expected
}
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:36: class, interface, or enum
expected
}
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:40: class, interface, or enum
expected
}
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:44: class, interface, or enum
expected
}
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:48: class, interface, or enum
expected
} else
^

src\minecraft\net\minecraft\src\BlockMyBlocj.java:51: class, interface, or enum
expected
}
^

src\minecraft\net\minecraft\src\mod_MyModj.java:14: ';' expected
.setStepSound(Block.soundStoneFootstep));
^

20 errors
==================

> Done in 9.64 seconds
> Recompiling server...
> Done in 12.57 seconds
Appuyez sur une touche pour continuer...[hr]


mod_MyModj:

Code:
package net.minecraft.src;
public class mod_MyModj extends BaseMod
{
public mod_MyModj()
{
ModLoader.RegisterBlock(myBloc);
ModLoader.AddRecipe(new ItemStack(myBloc, 1), new Object[]
{"###", "###", "###",Character.valueOf('#'), Item.redstone}) ;
ModLoader.AddName(myBloc, "redstonebloc");
}
public static final Block myBloc = (new
BlockMyBlocj(104,0)).setHardness(0.2F).setResistance(10F)
.setBlockName("redstonebloc")
.setStepSound(Block.soundStoneFootstep);
public String Version()
{
return "1.7.2";
}
}

BlockMyBlocj

Code:
package net.minecraft.src;
import java.util.Random;
public class BlockMyBlocj extends Block
{
public BlockMyBlocj(int i, int j)
{
super(i, j, Material.rock);
}
public int idDropped(int i, Random random)
{
return mod_MyModj.myBloc.blockID;
}
Texture1 = ModLoader.addOverride("/terrain.png", "/mod/Texture1.png");
Texture2 = ModLoader.addOverride("/terrain.png", "/mod/Texture2.png");
Texture3 = ModLoader.addOverride("/terrain.png", "/mod/Texture3.png");
Texture4 = ModLoader.addOverride("/terrain.png", "/mod/Texture4.png");
Texture5 = ModLoader.addOverride("/terrain.png", "/mod/Texture5.png");
Texture6 = ModLoader.addOverride("/terrain.png", "/mod/Texture6.png");
}
public int Texture1;
public int Texture2;
public int Texture3;
public int Texture4;
public int Texture5;
public int Texture6;

public int getBlockTextureFromSide(int i)
{
if(i == 0)
{
return Texture1;
}
if(i == 1)
{
return Texture2;
}
if(i == 2)
{
return Texture3;
}
if(i == 3)
{
return Texture4;
}
if(i == 4)
{
return Texture5;
} else
{
return Texture6;
}
}
 
Et voilà le code du sceau ;)
Code:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode 

package net.minecraft.src;

import java.util.Random;

// Referenced classes of package net.minecraft.src:
//            Item, EntityPlayer, Vec3D, MathHelper, 
//            World, MovingObjectPosition, EnumMovingObjectType, Material, 
//            ItemStack, WorldProvider, Block, EntityCow

public class ItemBucket extends Item
{

    public ItemBucket(int i, int j)
    {
        super(i);
        maxStackSize = 1;
        isFull = j;
    }

    public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
    {
        float f = 1.0F;
        float f1 = entityplayer.prevRotationPitch + (entityplayer.rotationPitch - entityplayer.prevRotationPitch) * f;
        float f2 = entityplayer.prevRotationYaw + (entityplayer.rotationYaw - entityplayer.prevRotationYaw) * f;
        double d = entityplayer.prevPosX + (entityplayer.posX - entityplayer.prevPosX) * (double)f;
        double d1 = (entityplayer.prevPosY + (entityplayer.posY - entityplayer.prevPosY) * (double)f + 1.6200000000000001D) - (double)entityplayer.yOffset;
        double d2 = entityplayer.prevPosZ + (entityplayer.posZ - entityplayer.prevPosZ) * (double)f;
        Vec3D vec3d = Vec3D.createVector(d, d1, d2);
        float f3 = MathHelper.cos(-f2 * 0.01745329F - 3.141593F);
        float f4 = MathHelper.sin(-f2 * 0.01745329F - 3.141593F);
        float f5 = -MathHelper.cos(-f1 * 0.01745329F);
        float f6 = MathHelper.sin(-f1 * 0.01745329F);
        float f7 = f4 * f5;
        float f8 = f6;
        float f9 = f3 * f5;
        double d3 = 5D;
        Vec3D vec3d1 = vec3d.addVector((double)f7 * d3, (double)f8 * d3, (double)f9 * d3);
        MovingObjectPosition movingobjectposition = world.rayTraceBlocks_do(vec3d, vec3d1, isFull == 0);
        if(movingobjectposition == null)
        {
            return itemstack;
        }
        if(movingobjectposition.typeOfHit == EnumMovingObjectType.TILE)
        {
            int i = movingobjectposition.blockX;
            int j = movingobjectposition.blockY;
            int k = movingobjectposition.blockZ;
            if(!world.func_6466_a(entityplayer, i, j, k))
            {
                return itemstack;
            }
            if(isFull == 0)
            {
                if(world.getBlockMaterial(i, j, k) == Material.water && world.getBlockMetadata(i, j, k) == 0)
                {
                    world.setBlockWithNotify(i, j, k, 0);
                    return new ItemStack(Item.bucketWater);
                }
                if(world.getBlockMaterial(i, j, k) == Material.lava && world.getBlockMetadata(i, j, k) == 0)
                {
                    world.setBlockWithNotify(i, j, k, 0);
                    return new ItemStack(Item.bucketLava);
                }
            } else
            {
                if(isFull < 0)
                {
                    return new ItemStack(Item.bucketEmpty);
                }
                if(movingobjectposition.sideHit == 0)
                {
                    j--;
                }
                if(movingobjectposition.sideHit == 1)
                {
                    j++;
                }
                if(movingobjectposition.sideHit == 2)
                {
                    k--;
                }
                if(movingobjectposition.sideHit == 3)
                {
                    k++;
                }
                if(movingobjectposition.sideHit == 4)
                {
                    i--;
                }
                if(movingobjectposition.sideHit == 5)
                {
                    i++;
                }
                if(world.isAirBlock(i, j, k) || !world.getBlockMaterial(i, j, k).isSolid())
                {
                    if(world.worldProvider.isHellWorld && isFull == Block.waterMoving.blockID)
                    {
                        world.playSoundEffect(d + 0.5D, d1 + 0.5D, d2 + 0.5D, "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F);
                        for(int l = 0; l < 8; l++)
                        {
                            world.spawnParticle("largesmoke", (double)i + Math.random(), (double)j + Math.random(), (double)k + Math.random(), 0.0D, 0.0D, 0.0D);
                        }

                    } else
                    {
                        world.setBlockAndMetadataWithNotify(i, j, k, isFull, 0);
                    }
                    return new ItemStack(Item.bucketEmpty);
                }
            }
        } else
        if(isFull == 0 && (movingobjectposition.entityHit instanceof EntityCow))
        {
            return new ItemStack(Item.bucketMilk);
        }
        return itemstack;
    }

    private int isFull;
}
 
J'ai trouvé dans EntityCow mais j'ai des erreurs

Code:
        ItemStack itemstack = entityplayer.inventory.getCurrentItem();
        if(itemstack != null && itemstack.itemID == ItemMyitem.shiftedIndex)
        {
            entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, new ItemStack(Item.bucketMilk));
            
        }


 
Hello encore une erreur



Code:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) braces deadcode

package net.minecraft.src;

import java.util.Random;

// Referenced classes of package net.minecraft.src:
//            EntityLiving, IMob, DataWatcher, NBTTagCompound,
//            MathHelper, AxisAlignedBB, World, EntityPlayer,
//            Item, Chunk

public class EntitySlime extends EntityLiving
    implements IMob
{

    public EntitySlime(World world)
    {
        super(world);
        slimeJumpDelay = 0;
        texture = "/mob/slime.png";
        int i = 1 << rand.nextInt(3);
        yOffset = 0.0F;
        slimeJumpDelay = rand.nextInt(20) + 10;
        setSlimeSize(i);
    }

    protected void entityInit()
    {
        super.entityInit();
        dataWatcher.addObject(16, new Byte((byte)1));
    }

    public void setSlimeSize(int i)
    {
        dataWatcher.updateObject(16, new Byte((byte)i));
        setSize(0.6F * (float)i, 0.6F * (float)i);
        health = i * i;
        setPosition(posX, posY, posZ);
    }

    public int getSlimeSize()
    {
        return dataWatcher.getWatchableObjectByte(16);
    }

    public void writeEntityToNBT(NBTTagCompound nbttagcompound)
    {
        super.writeEntityToNBT(nbttagcompound);
        nbttagcompound.setInteger("Size", getSlimeSize() - 1);
    }

    public void readEntityFromNBT(NBTTagCompound nbttagcompound)
    {
        super.readEntityFromNBT(nbttagcompound);
        setSlimeSize(nbttagcompound.getInteger("Size") + 1);
    }

    public void onUpdate()
    {
        field_767_b = field_768_a;
        boolean flag = onGround;
        super.onUpdate();
        if(onGround && !flag)
        {
            int i = getSlimeSize();
            for(int j = 0; j < i * 8; j++)
            {
                float f = rand.nextFloat() * 3.141593F * 2.0F;
                float f1 = rand.nextFloat() * 0.5F + 0.5F;
                float f2 = MathHelper.sin(f) * (float)i * 0.5F * f1;
                float f3 = MathHelper.cos(f) * (float)i * 0.5F * f1;
                worldObj.spawnParticle("slime", posX + (double)f2, boundingBox.minY, posZ + (double)f3, 0.0D, 0.0D, 0.0D);
            }

            if(i > 2)
            {
                worldObj.playSoundAtEntity(this, "mob.slime", getSoundVolume(), ((rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F) / 0.8F);
            }
            field_768_a = -0.5F;
        }
        field_768_a = field_768_a * 0.6F;
    }

    protected void updatePlayerActionState()
    {
        func_27021_X();
        EntityPlayer entityplayer = worldObj.getClosestPlayerToEntity(this, 16D);
        if(entityplayer != null)
        {
            faceEntity(entityplayer, 10F, 20F);
        }
        if(onGround && slimeJumpDelay-- <= 0)
        {
            slimeJumpDelay = rand.nextInt(20) + 10;
            if(entityplayer != null)
            {
                slimeJumpDelay /= 3;
            }
            isJumping = true;
            if(getSlimeSize() > 1)
            {
                worldObj.playSoundAtEntity(this, "mob.slime", getSoundVolume(), ((rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F) * 0.8F);
            }
            field_768_a = 1.0F;
            moveStrafing = 1.0F - rand.nextFloat() * 2.0F;
            moveForward = 1 * getSlimeSize();
        } else
        {
            isJumping = false;
            if(onGround)
            {
                moveStrafing = moveForward = 0.0F;
            }
        }
    }

    public void setEntityDead()
    {
        int i = getSlimeSize();
        if(!worldObj.multiplayerWorld && i > 1 && health == 0)
        {
            for(int j = 0; j < 4; j++)
            {
                float f = (((float)(j % 2) - 0.5F) * (float)i) / 4F;
                float f1 = (((float)(j / 2) - 0.5F) * (float)i) / 4F;
                EntitySlime entityslime = new EntitySlime(worldObj);
                entityslime.setSlimeSize(i / 2);
                entityslime.setLocationAndAngles(posX + (double)f, posY + 0.5D, posZ + (double)f1, rand.nextFloat() * 360F, 0.0F);
                worldObj.entityJoinedWorld(entityslime);
            }

        }
        super.setEntityDead();
    }

    public void onCollideWithPlayer(EntityPlayer entityplayer)
    {
        int i = getSlimeSize();
        if(i > 1 && canEntityBeSeen(entityplayer) && (double)getDistanceToEntity(entityplayer) < 0.59999999999999998D * (double)i && entityplayer.attackEntityFrom(this, i))
        {
            worldObj.playSoundAtEntity(this, "mob.slimeattack", 1.0F, (rand.nextFloat() - rand.nextFloat()) * 0.2F + 1.0F);
        }
    }

    protected String getHurtSound()
    {
        return "mob.slime";
    }

    protected String getDeathSound()
    {
        return "mob.slime";
    }

    protected int getDropItemId()
    {
        if(getSlimeSize() == 1)
        {
            return Item.slimeBall.shiftedIndex;
        } else
        {
            return 0;
        }
    }

    public boolean getCanSpawnHere()
    {
        Chunk chunk = worldObj.getChunkFromBlockCoords(MathHelper.floor_double(posX), MathHelper.floor_double(posZ));
        return (getSlimeSize() == 1 || worldObj.difficultySetting > 0) && rand.nextInt(10) == 0 && chunk.func_997_a(0x3ad8025fL).nextInt(10) == 0 && posY < 16D;
    }

    protected float getSoundVolume()
    {
        return 0.6F;
    }

        public boolean interact(EntityPlayer entityplayer)
    {
        ItemStack itemstack = entityplayer.inventory.getCurrentItem();
        if(itemstack != null && itemstack.itemID == mod_MyMod.ItemMyitem.shitedIndex)
        {
            entityplayer.inventory.setInventorySlotContents(entityplayer.inventory.currentItem, new ItemStack(Item.bucketMilk));
            return true;
        }

    }

    public float field_768_a;
    public float field_767_b;
    private int slimeJumpDelay;
}
 
Ah j'ai trouver, tu as mis shitedIndex au lieu de shiftedIndex
Remplace donc
Code:
     if(itemstack != null && itemstack.itemID == mod_MyMod.ItemMyitem.shitedIndex)

par

Code:
     if(itemstack != null && itemstack.itemID == mod_MyMod.ItemMyitem.shiftedIndex)
 
Bonjour

Je suis en train de créer un mod mais je dois créer un bloc qui agit comme le four, mais je veux que quand on clique droit dessus, l'interface soit un peu différente de celle du four :

furnaceu.png


Et je veux que l'on puisse récupérer quelque chose à la sortie du four seulement si les 4 cases de gauche sont remplies et avec les bons objets (items que j'ai créé).

Quelqu'un peut me dire comment faire ?

Merci d'avance