• Bonjour,
    j’aimerai savoir si quelqu’un aurait une idée pour faire de la bonemeal custom, tout en gardant la propriété de celle de base.
    ( J’ai crée une plante, et j’aimerai savoir si ont pourrait supprimer la génération de la bonemeal et la remplacer par ma plante)

    ***But précis: ***
    Crée un item de type bonemeal, pouvoir faire pousse n’importe quelle arbre ( ou non ),
    pour la générations des plantes, ajouter mes plantes de mon mod, ou ceux de minecraft.

    Voici le code de ma plante :

    public class Herbe extends BlockBush{
    
    public Herbe()
       {
           super();
           this.setTickRandomly(true);
           float f = 0.2F;
           this.setBlockBounds(0.2F - f, 0.0F, 0.2F - f, 1.0F, -0.1F + f, 1.0F);
           this.setCreativeTab(CreativeTabs.tabDecorations);
       }
    
       @SideOnly(Side.CLIENT)
       public IIcon getIcon(int side, int metadata)
       {
        return blockIcon;
       }
    
       @SideOnly(Side.CLIENT)
       public void registerBlockIcons(IIconRegister iiconRegister)
       {
        this.blockIcon = iiconRegister.registerIcon(this.getTextureName());
       }
    
       protected boolean canPlaceBlockOn(Block block)
       {
            return block == Blocks.grass || block == Blocks.dirt || block == Principal.dirtroad
            || block == Principal.cobbleroad || block == Principal.podzolroad;
       }
    

    Le code de ma bonemeal je que souhaiterai customiser :

    :::

    public class MealBone extends Item{
    
    public MealBone() {
    super();
    this.setCreativeTab(CreativeTabs.tabMaterials);
           this.setMaxDamage(0);
    }
    
       public static boolean func_150919_a(ItemStack p_150919_0_, World p_150919_1_, int p_150919_2_, int p_150919_3_, int p_150919_4_)
       {
           if (p_150919_1_ instanceof WorldServer)
               return applyBonemeal(p_150919_0_, p_150919_1_, p_150919_2_, p_150919_3_, p_150919_4_, FakePlayerFactory.getMinecraft((WorldServer)p_150919_1_));
           return false;
       }
    
       private static boolean applyBonemeal(ItemStack p_150919_0_,
    World p_150919_1_, int p_150919_2_, int p_150919_3_,
    int p_150919_4_, FakePlayer minecraft) {
    // TODO Auto-generated method stub
    return false;
    }
    
    @Override
       public boolean onItemUse(ItemStack itemstack, EntityPlayer player, World world, int p_77648_4, int p_77648_5, int p_77648_6, int p_77648_7, float p_77648_8, float p_77648_9, float p_77648_10_)
          {
        Block block = world.getBlock(p_77648_4, p_77648_5, p_77648_6);
    
              BonemealEvent event = new BonemealEvent(player, world, block, p_77648_4, p_77648_5, p_77648_6);
              if (MinecraftForge.EVENT_BUS.post(event))
              {
                  return false;
              }
    
              if (event.getResult() == Result.ALLOW)
              {
                  if (!world.isRemote)
                  {
                      itemstack.stackSize–;
                  }
                  return true;
              }
    
              if (block instanceof IGrowable)
              {
                  IGrowable igrowable = (IGrowable)block;
    
                  if (igrowable.func_149851_a(world, p_77648_4, p_77648_5, p_77648_6, world.isRemote))
                  {
                      if (!world.isRemote)
                      {
                          if (igrowable.func_149852_a(world, world.rand, p_77648_4, p_77648_5, p_77648_6))
                          {
                              igrowable.func_149853_b(world, world.rand, p_77648_4, p_77648_5, p_77648_6);
                          }
    
                          --itemstack.stackSize;
                      }
    
                      return true;
                  }
              }
    
              return false;
       }
    }
    

    :::


  • 1. Ta plante doit être implements IGrowable
    2. Ta bonemeal fonctionne t-elle ?


  • Oui ma bonemeal marche
    Ok j’essaie ce que tu as dit 🙂

    EDIT

    Ma classe herbe deviens :

    :::

    public class Herbe extends BlockBush implements IGrowable{
    
    public Herbe()
    {
    super();
    this.setTickRandomly(true);
    float f = 0.2F;
    this.setBlockBounds(0.2F - f, 0.0F, 0.2F - f, 1.0F, -0.1F + f, 1.0F);
    this.setCreativeTab(CreativeTabs.tabDecorations);
    }
    
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int side, int metadata)
    {
    return blockIcon;
    }
    
    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister iiconRegister)
    {
    this.blockIcon = iiconRegister.registerIcon(this.getTextureName());
    }
    
    protected boolean canPlaceBlockOn(Block block)
    {
    return block == Blocks.grass || block == Blocks.dirt || block == Principal.dirtroad
    || block == Principal.cobbleroad || block == Principal.podzolroad;
    }
    
    @Override
    public boolean func_149851_a(World p_149851_1_, int p_149851_2_,
    int p_149851_3_, int p_149851_4_, boolean p_149851_5_) {
    // TODO Auto-generated method stub
    return true;
    }
    
    @Override
    public boolean func_149852_a(World p_149852_1_, Random p_149852_2_,
    int p_149852_3_, int p_149852_4_, int p_149852_5_) {
    // TODO Auto-generated method stub
    return true;
    }
    
    @Override
    public void func_149853_b(World p_149853_1_, Random p_149853_2_,
    int p_149853_3_, int p_149853_4_, int p_149853_5_) {
    // TODO Auto-generated method stub
    
    }
    

    :::

    Mais je ne voie pas comment je pourrait la rajouter dans ma bonemeal.

    Ps: J’apprend ^^
    Ps2: J’ai trouver un tuto sur youtube qui date de y’a 3 ans et le code est totalement différent et j’aimerai savoir si il marcherai en 1.7.10 ?


  • si c’est en 1.7 oui sinon il y à de grandes chances que cela ne fonctionne pas.


  • non y’a 3 ans la 1.7.10 n’était pas sortit x)


  • Pas faux, as tu les particule de la bone meal?


  • Non je n’est pas les particules, mais cela marche bien sur les pousse d’arbres ou la grass ^^’

    Ps: j’ai toujours pas mon herbe à la génération du clique droit de la boneMealCustom(La mienne)


  • Ta fonction onItemRightClick est bien appelée? Place un System.out.println(“ce que tu veux”)

  • Administrateurs Rédacteurs Moddeurs confirmés

    Après la condition
              if (block instanceof IGrowable)

    Tu ajoutes une condition pour tes propres plantes.
    Du genre
    if(block == ClassPrincipale.tonBlock)
    {
         // action (changer le metadata du bloc si c’est une petite plante, appeler le code de génération d’un arbre si c’est une pousse, etc …)
    }


  • Même si tu ma beaucoup aidé, je n’y arrive toujours pas, j’ai fait ce code :

    Mais cela ne change pas rien.

    if (block instanceof IGrowable)
    {
    IGrowable igrowable = (IGrowable)block;
    
    if(block == Principal.herbe){
    if(igrowable.func_149851_a(world, p_77648_4, p_77648_5, p_77648_6, world.isRemote)){
    if(!world.isRemote){
    if(igrowable.func_149852_a(world, world.rand, p_77648_4, p_77648_5, p_77648_6)){
    igrowable.func_149853_b(world, world.rand, p_77648_4, p_77648_5, p_77648_6);
    }
    }
    return true;
    }
    }
                  }
    
  • Administrateurs Rédacteurs Moddeurs confirmés

    Je me suis mal exprimé en disant après la condition avec IGrowable
    Il aurait fallut faire comme ça :

              if (block instanceof IGrowable)
              {
                  IGrowable igrowable = (IGrowable)block;
    
                  if (igrowable.func_149851_a(world, p_77648_4, p_77648_5, p_77648_6, world.isRemote))
                  {
                      if (!world.isRemote)
                      {
                          if (igrowable.func_149852_a(world, world.rand, p_77648_4, p_77648_5, p_77648_6))
                          {
                              igrowable.func_149853_b(world, world.rand, p_77648_4, p_77648_5, p_77648_6);
                          }
    
                          –itemstack.stackSize;
                      }
    
                      return true;
                  }
              }
              else if(block == Principal.herbe)
              {
                  //action ici, par exemple  world.setBlockMetadataWithNotify(x, y, z, world.getBlockMetadata(x,y,z) + 1, 2);
    return true;
              }
    

  • mais du coup je doit faire un return false juste au dessus puisque je ne veux pas les herbes + roses etc ?

    edit

    je n’ai rien plus rien ce fait, mon herbe n’apparait pas, et celle de minecraft aussi.

  • Administrateurs Rédacteurs Moddeurs confirmés

    J’ai en effet oublié un return true.


  • Non rien ne marche.

    Si tu aurait un code source, ou quelques lignes complète je prend avec plaisir ^^.

    ( Je n’aime pas tourner autour du pot pendant 5h voir + )

  • Administrateurs Rédacteurs Moddeurs confirmés

    Quand j’envoie du code tout fait c’est lorsque je regardes de mon côté, je ne fais ça seulement en dernier recours et surtout quand j’ai le temps. Or là je n’ai pas le temps pour faire des tests de mon côté, et j’estime que tu peux encore chercher un peu aussi de ton côté.


  • Je te propose 2 méthodes :
    1 - Mettre ta plante implements IGrowable, ne rien changer dans la classe de ta bonemeal et ré-écrire ces fonctions :

    • func_149851_a (retourne true si la plante est mature)
    • func_149852_a (retourne true si la plante peut grandir, dans ton cas il vaut mieux mettre toujours true)
    • func_149853_b (fonction appelée pour modifier la plante, c’est ici qu’il faut modifier le metadata)
      PS : utilise Alt + shift + S puis “override/implement methods” pour éviter les erreurs dans les paramètres des fonctions
      PS 2 : je te conseille cette méthode car elle est compatible avec les autres mods
      2 - Faire comme Robin a dit :
    • ne rien changer dans la classe de ta plante
    • rajouter un else if(block == tonBlock) et changer le metadata de ton block à cet endroit
  • Administrateurs Rédacteurs Moddeurs confirmés

    Par contre s’il utilise la méthode 1 la poudre d’os de Minecraft pourra aussi faire pousser ses plantes, je ne vois pas l’intérêt de faire un engrais custom dans ce cas.


  • Ma plante de mon coter ne pousse pas.
    Et après avoir essayé plusieurs fois, aucun succès.
    Donc je pense la faire à la méthode d’un ami ^^ ( worldedit : //replace et hop )


  • @‘iFuSion34’:

    Ma plante de mon coter ne pousse pas.
    Et après avoir essayé plusieurs fois, aucun succès.
    Donc je pense la faire à la méthode d’un ami ^^ ( worldedit : //replace et hop )

    Envoi ton code.


  • Merci de vouloir m’aider mais je suis partit sur une autre idée du coup ^^
    Si un jour ça me prend de vouloir faire ca je continuerai ce sujet. Je le mais en résolu.

    Merci de vos aides .