Lampe qui s'allume quand on fait un clique droit ? et lampe qui clignote.

malfrax

Aventurier
22 Janvier 2012
14
0
1
33
Bonjours, je fais actuellement un mod qui permet de faire des lampes qui s'allume lorsque qu'elle sont allimenter en redstone. Je voudrais en plus faire une lampe qui s'allume quand on fait clique droit et une lampe qui clignote. Par dessus sa je voudrais faire aussi une lampe de couleur différente. Quelqu'un pourrait m'indiquer comment procédé pur faire la lampe qui s'allume au clique ? et comment faire une lampe qui clignote ? et aussi pour la couleur ^^ ?
J'ai fait comme ceci :

torchactive permet de changer de bloc afin que la lampe sois allumer. type contient le type de lampe (lampe qui s'allume avec redstone, avec clique du joueur, ou clignote quand elle est allimenter).
De plus la variable clign était a la base la méthode que je pensé faire pour pour la lampe qui clignote. Une variable qui a chaque updateTick augmente et quand elle atteind une valeur elle revient a zero et torchactive s'inverse.

type = 0 : lampe qui s'allume avec de la redstone
type = 1 : lampe qui s'allume avec de la redstone et qui clignote
type = 2 : lampe qui s'allume en cliquant.

Code:
package net.minecraft.src;
 
import java.util.Random;
 
public class BlockLampe extends BlockTorch
{
    boolean torchactive = false;
    int type = 0, clign = 0;
    protected BlockLampe(int i, int j)
    {
        super(i, j);
        setTickOnLoad(true);
    }
    public void settype(int i)
    {
        type = i;
    }
    public int idDropped(int i, Random random)
    {
        if(type == 1)
        {
            return mod_lumiere.lampeBlancheRE.blockID;
        }
        else if(type == 2)
        {
            return mod_lumiere.lampeBlancheCE.blockID;
        }
        else
        {
            return mod_lumiere.lampeBlancheE.blockID;
        }
    }
    public int tickRate()
    {
        return 2;
    }
    public void onNeighborBlockChange(World world, int i, int j, int k, int l)
    {
        if(world.isBlockIndirectlyGettingPowered(i, j, k) && type < 2)
        {
            torchactive = true;
        }   
        else if (type < 2)
        {
            torchactive = false;
        }
        if (dropTorchIfCantStay(world, i, j, k))
        {
            int i1 = world.getBlockMetadata(i, j, k);
            boolean flag = false;
            if (!world.func_41082_b(i - 1, j, k, true) && i1 == 1)
            {
                flag = true;
            }
            if (!world.func_41082_b(i + 1, j, k, true) && i1 == 2)
            {
                flag = true;
            }
            if (!world.func_41082_b(i, j, k - 1, true) && i1 == 3)
            {
                flag = true;
            }
            if (!world.func_41082_b(i, j, k + 1, true) && i1 == 4)
            {
                flag = true;
            }
            if (!canPlaceTorchOn(world, i, j - 1, k) && i1 == 5)
            {
                flag = true;
            }
            if (flag)
            {
                dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k), 0);
                world.setBlockWithNotify(i, j, k, 0);
            }
        }
        changelight(world,i,j,k);
    }
   
    public void onBlockClicked(World world, int i, int j, int k, EntityPlayer entityplayer)
    {
        if(type == 2)
        {
        if(torchactive)
        {
            torchactive = false;
        }
        else
        {
            torchactive = true;
        }
        }
        changelight(world,i,j,k);
    }
   
    public void onBlockAdded(World world, int i, int j, int k)
    {
        if(world.isBlockIndirectlyGettingPowered(i, j, k) && type == 0)
        {
            torchactive = true;
        }   
        else
        {
            torchactive = false;
        }
        changelight(world,i,j,k);
    }
    public void updateTick(World world, int i, int j, int k, Random random)
    {
        if(world.isBlockIndirectlyGettingPowered(i, j, k))
        {
            if(type == 1)
            {
                clign++;
                if(clign >= 50)
                {
                    clign = 0;
                    if(torchactive)
                    {
                        torchactive = false;
                    }
                    else
                    {
                        torchactive = true;
                    }
                }
            }
            else
            {
                torchactive = true;
            }
        }   
        else if (type == 0)
        {
            torchactive = false;
        }
        changelight(world,i,j,k);
    }
    public void changelight(World world, int i, int j, int k)
    {
        if(torchactive)
        {       
            if(type == 1)
            {
                world.setBlockWithNotify(i, j, k,  mod_lumiere.lampeBlancheRA.blockID);
            }
            else if(type == 2)
            {
                world.setBlockWithNotify(i, j, k, mod_lumiere.lampeBlancheCA.blockID);
            }
            else
            {
                world.setBlockWithNotify(i, j, k, mod_lumiere.lampeBlancheA.blockID);
            }
        }
        else
        {
            if(type == 1)
            {
                world.setBlockWithNotify(i, j, k,  mod_lumiere.lampeBlancheRE.blockID);
            }
            else if(type == 2)
            {
                world.setBlockWithNotify(i, j, k, mod_lumiere.lampeBlancheCE.blockID);
            }
            else
            {
                world.setBlockWithNotify(i, j, k, mod_lumiere.lampeBlancheE.blockID);
            }
        }
        dropTorchIfCantStay(world, i, j, k);
       
    }
    public void randomDisplayTick(World world, int i, int j, int k, Random random)
    {
    }   
    private boolean dropTorchIfCantStay(World world, int i, int j, int k)
    {
        if (!canPlaceBlockAt(world, i, j, k))
        {
            if (world.getBlockId(i, j, k) == blockID)
            {
                dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k), 0);
                world.setBlockWithNotify(i, j, k, 0);
            }
            return false;
        }
        else
        {
            return true;
        }
    }
    private boolean canPlaceTorchOn(World world, int i, int j, int k)
    {
        if (world.func_41082_b(i, j, k, true))
        {
            return true;
        }
        else
        {
            int l = world.getBlockId(i, j, k);
            return l == Block.fence.blockID || l == Block.netherFence.blockID;
        }
    }
}


Merci d'avance !!