Ajouter code TNT.

Argoune

Aventurier
14 Mai 2011
17
0
1
30
Bonjour, j'écrit aujourd'hui un poste car j'aimerais ajouter à mon code un moyen de le faire exploser, si ont pause de la redstone et que l'on active le tous s'il vous plait quelqu'un connais le moyen ?

mod_Mod1.java
Code:
package net.minecraft.src;

public class mod_Mod1 extends BaseMod
{
	public mod_Mod1()
	{
	ModLoader.RegisterBlock(myBloc);
    ModLoader.AddName(myBloc, "Test");
	ModLoader.AddRecipe(new ItemStack(myBloc, 3), new Object[] {"###","XXX","#X#",Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Block.sand});

	}

	public static final Block myBloc = (new BlockMyBloc(99,224)).setHardness(1.0F)
	.setResistance(99F)
	.setBlockName("Test")
	.setLightValue(2.0F)
	.setStepSound(Block.soundMetalFootstep);
	
	



	public String Version()
	{
	return "V1";
	}
}


BlockMyBloc.java
Code:
package net.minecraft.src;

import java.util.Random;

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

	public int idDropped(int i, Random random)
	{
		return mod_Mod1.myBloc.blockID;
	}
}


PS: J'ai regarder dans le dossier source des TnT mais je voit pas quoi prendre.

BlockTNT.java
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:
//            Block, Material, World, EntityTNTPrimed, 
//            ItemStack, EntityPlayer, Item

public class BlockTNT extends Block
{

    public BlockTNT(int i, int j)
    {
        super(i, j, Material.tnt);
    }

    public int getBlockTextureFromSide(int i)
    {
        if(i == 0)
        {
            return blockIndexInTexture + 2;
        }
        if(i == 1)
        {
            return blockIndexInTexture + 1;
        } else
        {
            return blockIndexInTexture;
        }
    }

    public void onBlockAdded(World world, int i, int j, int k)
    {
        super.onBlockAdded(world, i, j, k);
        if(world.isBlockIndirectlyGettingPowered(i, j, k))
        {
            onBlockDestroyedByPlayer(world, i, j, k, 1);
            world.setBlockWithNotify(i, j, k, 0);
        }
    }

    public void onNeighborBlockChange(World world, int i, int j, int k, int l)
    {
        if(l > 0 && Block.blocksList[l].canProvidePower() && world.isBlockIndirectlyGettingPowered(i, j, k))
        {
            onBlockDestroyedByPlayer(world, i, j, k, 1);
            world.setBlockWithNotify(i, j, k, 0);
        }
    }

    public int quantityDropped(Random random)
    {
        return 0;
    }

    public void onBlockDestroyedByExplosion(World world, int i, int j, int k)
    {
        EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F);
        entitytntprimed.fuse = world.rand.nextInt(entitytntprimed.fuse / 4) + entitytntprimed.fuse / 8;
        world.entityJoinedWorld(entitytntprimed);
    }

    public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)
    {
        if(world.multiplayerWorld)
        {
            return;
        }
        if((l & 1) == 0)
        {
            dropBlockAsItem_do(world, i, j, k, new ItemStack(Block.tnt.blockID, 1, 0));
        } else
        {
            EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F);
            world.entityJoinedWorld(entitytntprimed);
            world.playSoundAtEntity(entitytntprimed, "random.fuse", 1.0F, 1.0F);
        }
    }

    public void onBlockClicked(World world, int i, int j, int k, EntityPlayer entityplayer)
    {
        if(entityplayer.getCurrentEquippedItem() != null && entityplayer.getCurrentEquippedItem().itemID == Item.flintAndSteel.shiftedIndex)
        {
            world.setBlockMetadata(i, j, k, 1);
        }
        super.onBlockClicked(world, i, j, k, entityplayer);
    }

    public boolean blockActivated(World world, int i, int j, int k, EntityPlayer entityplayer)
    {
        return super.blockActivated(world, i, j, k, entityplayer);
    }
}

Merci d'avance :)

Bonne journée
 
Le systeme d'explosion de la tnt est en faite :
- si activer par redstone
- destruction du bloc (setBlock(i, j, k, 0))
- apparition de l'entité TNTPrimed à la place de l'ancien bloc

L'origine de l'explosion se trouve donc dans EntityTNTPrimed.
 
J'pense qu'en copiant la définition qui gère l'explosion des Entitée, on doit pouvoir la mettre sur un bloc.

J'y jetterais un oeil tout à l'heure ^^.
 
Merci pour vos com, je vais refaire des tests :) .

Si j'ai trouver je poste la solution sinon je revient prendre un peu de votre temps ^^.

c'est bien ceci que je doit rajouter dans le fichier mod_Mod1.java ?

Code:
	    public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)
    {
        if(world.multiplayerWorld)
        {
            return;
        }
        if((l & 1) == 0)
        {
            dropBlockAsItem_do(world, i, j, k, new ItemStack(Block.tnt.blockID, 1, 0));
        } else
        {
            EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F);
            world.entityJoinedWorld(entitytntprimed);
            world.playSoundAtEntity(entitytntprimed, "random.fuse", 1.0F, 1.0F);
        }
    }

voici mon mod_Mod1.java actuel

Code:
package net.minecraft.src;

public class mod_Mod1 extends BaseMod
{
	public mod_Mod1()
	{
	ModLoader.RegisterBlock(myBloc);
    ModLoader.AddName(myBloc, "Test");
	ModLoader.AddRecipe(new ItemStack(myBloc, 3), new Object[] {"###","XXX","#X#",Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Block.sand});

	}

	public static final Block myBloc = (new BlockMyBloc(99,224)).setHardness(1.0F)
	.setResistance(99F)
	.setBlockName("Test")
	.setLightValue(2.0F)
	.setStepSound(Block.soundMetalFootstep);
	
	    public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)
    {
        if(world.multiplayerWorld)
        {
            return;
        }
        if((l & 1) == 0)
        {
            dropBlockAsItem_do(world, i, j, k, new ItemStack(Block.tnt.blockID, 1, 0));
        } else
        {
            EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F);
            world.entityJoinedWorld(entitytntprimed);
            world.playSoundAtEntity(entitytntprimed, "random.fuse", 1.0F, 1.0F);
        }
    }



	public String Version()
	{
	return "V1";
	}
}

et voici l'erreur

http://imageshack.us/photo/my-images/148/capturett.png/


Merci beaucoup de votre aide.
 
Non, ça ça doit être dans ton bloc ;).
Par contre, la ça va te faire apparaître une Entitée, celle de la TNT ( Tu sais, c'est quand elle tombe du ciel, là ça va te faire pareil. )


Essaie de copier coller ça dans ton bloc :
Code:
    private void explode()
    {
        float f = 4F;
        worldObj.createExplosion(null, posX, posY, posZ, f);
    }

Et pour s'en servir, suffira de faire
Code:
explode();

Néanmoins, je sais pas comment l'activer par la RedStone ... Je cherche aussi ...

par contre, ça te fera exploser le bloc instantanément.
 
Merci beaucoup de votre aide mais j'y arrive pas du tous, quand je recompile j'ai une erreur(toujours la même).

Vous pouvez me donner le code complet du block pour que je comprennent mon erreur s'il vous plait ?


Ps: Désolé pour l'orthographe
 
Code:
package net.minecraft.src;

import java.util.Random;

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

			    public void onBlockDestroyedByPlayer(World world, int i, int j, int k, int l)
    {
        if(world.multiplayerWorld)
        {
            return;
        }
        if((l & 1) == 0)
        {
            dropBlockAsItemWithChance.(world, i, j, k, new ItemStack(Block.tnt.blockID, 1, 0));
        } else
        {
            EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (float)i + 0.5F, (float)j + 0.5F, (float)k + 0.5F);
            world.entityJoinedWorld(entitytntprimed);
            world.playSoundAtEntity(entitytntprimed, "random.fuse", 1.0F, 1.0F);
        }
    }
	
	public int idDropped(int i, Random random)
	{
		return mod_Mod1.myBloc.blockID;
	}
}

l'erreur http://imageshack.us/photo/my-images/847/capturewu.png/

Je vois comprend pas :/