UpdateTick



  • bonjour j'ai un probléme : j'ai mis la méthode UpdateTick dans la class d'un block mais rien ne se passe
    voici mon code

    package com.mathiasetampes.algorythme.common;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.ItemStack;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ChatComponentTranslation;
    import net.minecraft.world.World;
    
    public class Algo extends Block
    {
    public static boolean Intermediaire = false;
    
    protected Algo(Material material)
    {
    super(material);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
       @Override
       public TileEntity createTileEntity(World world, int metadata)
       {
           return new TileEntityAire();
       }
    
       @Override
       public boolean hasTileEntity(int metadata)
       {
           return true;
       }
       public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
       {
        if(!world.isRemote)
            {
        Intermediaire = Algorythme(world ,x ,y+1 ,z );
                TileEntity tile = world.getTileEntity(x, y, z);
                if(tile instanceof TileEntityAire)
                {
                TileEntityAire.update();
                TileEntityAire tileTuto = (TileEntityAire)tile;
                   player.addChatMessage(new ChatComponentTranslation("tile.tutoriel2.number", tileTuto.getNumber()));
                   return true;
                }
            }
    
         return false;
       }
    
      public boolean Algorythme(World world ,int x , int y , int z)
      {  
       if((world.getBlock(x, y, z) == Blocks.air ))
    {
    for(int i = y; i < 255 ; i++)
    {
         if(world.getBlock(x, i, z) != Blocks.air)
      {
         break;  
      }  
     else if(i == 254)
     {
    return false;
     }
    }
    world.setBlock(x, y, z,algorythme.air2);
    if(Algorythme(world , x+1 ,  y ,  z)==false) return false;
        if(Algorythme(world , x-1 ,  y ,  z)==false) return false;
    if(Algorythme(world , x ,  y+1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y-1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y ,  z+1)==false) return false;
    if(Algorythme(world , x ,  y ,  z-1)==false){ return false; }
    return true;
    }
    return false;  
      }
    
     public void updateTick(World world, int x, int y, int z, Random random)
     {
    System.out.println("lel");
     }
    

  • Administrateurs

    Il me semble qu'il faut ajouter setTickRandomly(true) dans le constructeur du bloc.



  • @'Asmath':

    bonjour j'ai un probléme : j'ai mis la méthode UpdateTick dans la class d'un block mais rien ne se passe
    voici mon code

    package com.mathiasetampes.algorythme.common;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.ItemStack;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ChatComponentTranslation;
    import net.minecraft.world.World;
    
    public class Algo extends Block
    {
    public static boolean Intermediaire = false;
    
    protected Algo(Material material)
    {
    super(material);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
       @Override
       public TileEntity createTileEntity(World world, int metadata)
       {
           return new TileEntityAire();
       }
    
       @Override
       public boolean hasTileEntity(int metadata)
       {
           return true;
       }
       public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
       {
        if(!world.isRemote)
            {
        Intermediaire = Algorythme(world ,x ,y+1 ,z );
                TileEntity tile = world.getTileEntity(x, y, z);
                if(tile instanceof TileEntityAire)
                {
                TileEntityAire.update();
                TileEntityAire tileTuto = (TileEntityAire)tile;
                   player.addChatMessage(new ChatComponentTranslation("tile.tutoriel2.number", tileTuto.getNumber()));
                   return true;
                }
            }
       
         return false;
       }
       
      public boolean Algorythme(World world ,int x , int y , int z)
      {  
       if((world.getBlock(x, y, z) == Blocks.air ))
    {
    for(int i = y; i < 255 ; i++)
    {
         if(world.getBlock(x, i, z) != Blocks.air)
      {
         break;  
      }  
     else if(i == 254)
     {
    return false;
     }
    }
    world.setBlock(x, y, z,algorythme.air2);
    if(Algorythme(world , x+1 ,  y ,  z)==false) return false;
        if(Algorythme(world , x-1 ,  y ,  z)==false) return false;
    if(Algorythme(world , x ,  y+1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y-1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y ,  z+1)==false) return false;
    if(Algorythme(world , x ,  y ,  z-1)==false){ return false; }
    return true;
    }
    return false;  
      }
     
     public void updateTick(World world, int x, int y, int z, Random random)
     {
    System.out.println("lel");
     }
    

    Ajoutes dans cette méthode super.updateTick(world, x, y, z, random);
    et dis moi tout 😉 En tout cas je fais comme ça pour mes entity avec onUpdate et onLivingUpdate et pour mes items avec onUpdate aussi



  • @'Julot10085':

    @'Asmath':

    bonjour j'ai un probléme : j'ai mis la méthode UpdateTick dans la class d'un block mais rien ne se passe
    voici mon code

    package com.mathiasetampes.algorythme.common;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.ItemStack;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ChatComponentTranslation;
    import net.minecraft.world.World;
    
    public class Algo extends Block
    {
    public static boolean Intermediaire = false;
    
    protected Algo(Material material)
    {
    super(material);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
       @Override
       public TileEntity createTileEntity(World world, int metadata)
       {
           return new TileEntityAire();
       }
    
       @Override
       public boolean hasTileEntity(int metadata)
       {
           return true;
       }
       public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
       {
        if(!world.isRemote)
            {
        Intermediaire = Algorythme(world ,x ,y+1 ,z );
                TileEntity tile = world.getTileEntity(x, y, z);
                if(tile instanceof TileEntityAire)
                {
                TileEntityAire.update();
                TileEntityAire tileTuto = (TileEntityAire)tile;
                   player.addChatMessage(new ChatComponentTranslation("tile.tutoriel2.number", tileTuto.getNumber()));
                   return true;
                }
            }
       
         return false;
       }
       
      public boolean Algorythme(World world ,int x , int y , int z)
      {  
       if((world.getBlock(x, y, z) == Blocks.air ))
    {
    for(int i = y; i < 255 ; i++)
    {
         if(world.getBlock(x, i, z) != Blocks.air)
      {
         break;  
      }  
     else if(i == 254)
     {
    return false;
     }
    }
    world.setBlock(x, y, z,algorythme.air2);
    if(Algorythme(world , x+1 ,  y ,  z)==false) return false;
        if(Algorythme(world , x-1 ,  y ,  z)==false) return false;
    if(Algorythme(world , x ,  y+1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y-1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y ,  z+1)==false) return false;
    if(Algorythme(world , x ,  y ,  z-1)==false){ return false; }
    return true;
    }
    return false;  
      }
     
     public void updateTick(World world, int x, int y, int z, Random random)
     {
    System.out.println("lel");
     }
    

    Ajoutes dans cette méthode super.updateTick(world, x, y, z, random);
    et dis moi tout 😉 En tout cas je fais comme ça pour mes entity avec onUpdate et onLivingUpdate et pour mes items avec onUpdate aussi

    Le problème étant que ce n'est pas une entitée.



  • @'SCAREX':

    @'Julot10085':

    @'Asmath':

    bonjour j'ai un probléme : j'ai mis la méthode UpdateTick dans la class d'un block mais rien ne se passe
    voici mon code

    package com.mathiasetampes.algorythme.common;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.entity.item.EntityItem;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.ItemStack;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.ChatComponentTranslation;
    import net.minecraft.world.World;
    
    public class Algo extends Block
    {
    public static boolean Intermediaire = false;
    
    protected Algo(Material material)
    {
    super(material);
        this.setCreativeTab(CreativeTabs.tabBlock);
    }
       @Override
       public TileEntity createTileEntity(World world, int metadata)
       {
           return new TileEntityAire();
       }
    
       @Override
       public boolean hasTileEntity(int metadata)
       {
           return true;
       }
       public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
       {
        if(!world.isRemote)
            {
        Intermediaire = Algorythme(world ,x ,y+1 ,z );
                TileEntity tile = world.getTileEntity(x, y, z);
                if(tile instanceof TileEntityAire)
                {
                TileEntityAire.update();
                TileEntityAire tileTuto = (TileEntityAire)tile;
                   player.addChatMessage(new ChatComponentTranslation("tile.tutoriel2.number", tileTuto.getNumber()));
                   return true;
                }
            }
       
         return false;
       }
       
      public boolean Algorythme(World world ,int x , int y , int z)
      {  
       if((world.getBlock(x, y, z) == Blocks.air ))
    {
    for(int i = y; i < 255 ; i++)
    {
         if(world.getBlock(x, i, z) != Blocks.air)
      {
         break;  
      }  
     else if(i == 254)
     {
    return false;
     }
    }
    world.setBlock(x, y, z,algorythme.air2);
    if(Algorythme(world , x+1 ,  y ,  z)==false) return false;
        if(Algorythme(world , x-1 ,  y ,  z)==false) return false;
    if(Algorythme(world , x ,  y+1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y-1 ,  z)==false) return false;
    if(Algorythme(world , x ,  y ,  z+1)==false) return false;
    if(Algorythme(world , x ,  y ,  z-1)==false){ return false; }
    return true;
    }
    return false;  
      }
     
     public void updateTick(World world, int x, int y, int z, Random random)
     {
    System.out.println("lel");
     }
    

    Ajoutes dans cette méthode super.updateTick(world, x, y, z, random);
    et dis moi tout 😉 En tout cas je fais comme ça pour mes entity avec onUpdate et onLivingUpdate et pour mes items avec onUpdate aussi

    Le problème étant que ce n'est pas une entitée.

    Oui mais c'est une méthode qui s'update comme ce que je viens de citer dans mon message précédent :
    @'Julot10085':

    mes entity avec** onUpdate **et **onLivingUpdate **et pour mes items avec onUpdate aussi

    EDIT : Autant pour moi je pensais que ça marcherait.



  • çà ne marche pas



  • @'Asmath':

    çà ne marche pas

    Que veux-tu faire avec ? Je ne comprends pas vraiment. Si tu veux, il y a la fonction onNeighborChange qui est appelé dès qu'un bloc adjacent le met à jour.



  • je suis stupide vraiment je viens de m'appercevoir que cette commande devais ce trouvés dans le tileEntity et donc çà marche



  • en fait je cherche à faire une méthode qui test des condition comme par exemple si le bloc à tel coordonnées est de l'air et cela en permanence pour pouvoir faire les actions en conséquence quasi instantanément donc il faudrait faire une méthode qui s'active à chaque tick ou au moins 2 fois par seconde


  • Administrateurs

    Je remet dans non résolu alors ?
    La fonction onUpdate des tile entity est mit à jour à chaque tick (donc 20 fois / secondes)



  • non laisse dans dans résolu c'est bon je n'avais pas vue ton message et maintenant çà marche merci