Block qui drop des items tout les x ticks



  • Bonjour à tous !

    Je cherche à créer un **block **qui drop des items au sol au bout d'un intervalle de temps, 
    Mais je ne sais pas comment faire pour qu'un block drop des items …
    Si quelqu'un a une idée je suis intéressé !!

    Merci

    Sigma


  • Administrateurs

    Salut,
    Il faut faire spawner une EntityItem contenant l'item stack voulu dans le monde.
    Pour faire un action tous les x temps dans un bloc tu peux utiliser la fonction updateTick, le temps de tick se défini avec la fonction tickRate. Il faut ajouter un this.setRandomTick(true); dans le constructeur pour que cela fonctionne.



  • @'robin4002':

    Salut,
    Il faut faire spawner une EntityItem contenant l'item stack voulu dans le monde.
    Pour faire un action tous les x temps dans un bloc tu peux utiliser la fonction updateTick, le temps de tick se défini avec la fonction tickRate. Il faut ajouter un this.setRandomTick(true); dans le constructeur pour que cela fonctionne.

    Merci beaucoup !
    J'ai fais ça :

    public void updateTick(World world, int x, int y, int z)
    {
        EntityItem item = new EntityItem(world, x, y, z, new ItemStack(ItemMod.limber, 1));
    }
    
    public int tickRate() 
    { 
        return 10; 
    }
    

    Mais ça ne marche pas quelqu'un peut m'expliquer la connerie que j'ai faite et que j'ai pas vu …

    Merci ^^


  • Administrateurs

    Le problème c'est que ton code est incomplet, tu ne spawn jamais l'entité item. De plus la fonction updateTick a en argument en plus Random que tu n'as pas mis. Tu peux utiliser l'annotation @Override pour t'assurer qu'une fonction existe dans la classe mère.
    Il faut ajouter dans updateTick :
    world.spawnEntityInWorld(item);

    Par contre si l'entité spawn sur le world client tu vas avoir une entité fantôme impossible à ramasser. Donc il faudrait plutôt faire comme ça :

    @Override
    public void updateTick(World world, int x, int y, int z, Random rand)
    {
    if(!world.isRemote)
    {
    EntityItem item = new EntityItem(world, x, y, z, new ItemStack(ItemMod.limber, 1));
    world.spawnEntityInWorld(item);
    }
    }
    

    N'oublies pas d'ajouter setTickRandomly(true); dans le constructeur du bloc.



  • @'robin4002':

    Le problème c'est que ton code est incomplet, tu ne spawn jamais l'entité item. De plus la fonction updateTick a en argument en plus Random que tu n'as pas mis. Tu peux utiliser l'annotation @Override pour t'assurer qu'une fonction existe dans la classe mère.
    Il faut ajouter dans updateTick :
    world.spawnEntityInWorld(item);

    Par contre si l'entité spawn sur le world client tu vas avoir une entité fantôme impossible à ramasser. Donc il faudrait plutôt faire comme ça :

       @Override
       public void updateTick(World world, int x, int y, int z, Random rand)
       {
        if(!world.isRemote)
        {
        EntityItem item = new EntityItem(world, x, y, z, new ItemStack(ItemMod.limber, 1));
        world.spawnEntityInWorld(item);
        }
       }
    

    N'oublies pas d'ajouter setTickRandomly(true); dans le constructeur du bloc.

    Ça ne marche toujours pas 😕


  • Administrateurs

    Envoies le code complet de ta classe.