• Bonjour,

    je souhaite faire en sorte que mon block ne puisse être casser que par un outils spécifier ( juste ceux de minecraft )
    mon code du block :

    public class BogoPlank extends Block{
    
    public BogoPlank(Material material) {
    super(material);
    this.setCreativeTab(CreativeTabs.tabBlock);
           this.setHardness(5.0F);
    this.setBurning();
    }
    
               public Block getBlockDropped(int stack, Random rand, int metadata)
       {
    return Principal.bogoplanks;
       }
    
    @Override
    public boolean isWood(IBlockAccess world, int x, int y, int z)
    {
         return true;
    }
    
    @Override
    public int getFlammability(IBlockAccess world, int x, int y, int z, ForgeDirection face)
       {
           return 25;
       }
    @Override
       public boolean isFlammable(IBlockAccess world, int x, int y, int z, ForgeDirection face)
       {
           return true;
       }
    @Override
       public int getFireSpreadSpeed(IBlockAccess world, int x, int y, int z, ForgeDirection face)
       {
           return 25;
       }
    
       }
    

    je pensait que en rajoutant cela aurait fonctionner. Mais ce n’est pas le cas ^^

    private String toolMaterial;
    
    public BogoPlank(Material material) {
    super(material);
           this.toolMaterial = "axe";
    this.setCreativeTab(CreativeTabs.tabBlock);
           this.setHardness(5.0F);
    this.setBurning();
    }
    
       public Block getBlockDropped(int stack, Random rand, int metadata)
       {
        if(toolMaterial != null){
    return Principal.bogoplanks;
        } return null;
       }
    

    De plus j’ai chercher dans les classes Block & ItemTools je ne parviens pas à trouver le bon code.

  • Administrateurs Rédacteurs Moddeurs confirmés

    Tu peux utiliser la fonction getPlayerRelativeBlockHardness
    Si tu retourne -1 le bloc ne sera pas destructible. Si tu retourne une valeur positive ça sera le temps pour détruire le bloc :

    ​ public float getPlayerRelativeBlockHardness(EntityPlayer player, World world, int x, int y, int z)
    {
    if(player.getCurrentEquippedItem() != null && (player.getCurrentEquippedItem().getItem() == Items.itemVoulu1 || player.getCurrentEquippedItem().getItem() == Items.itemVoulu2))
    {
    return 5.0F;
    }
    return -1.0F;
    }
    

  • En version 1.8 il faut utiliser ça :

    public TonBloc()
    {
       super(Material.rock);
       this.setHarvestLevel("axe", 4);
    }
    

    axe étant l’outil et 4 le niveau de l’outil, 3 étant le diamant, 2 le fer, 1 la pierre, 0 le bois et l’or.


  • Merci robin !

    Par contre il ne prend pas en compte return 5.0F , il me le casse instant.
    Mais il prend bien en compte le -1.0F.

    EmotionFox , il n’y aurai pas le même en 1.7.10 ? Car en tapant il me mais bien toolClass & level, mais ne marche pas en jeux.


  • Comment ça ça ne fonctionne pas, aucun bloc dropé ou plutôt bloc dropé avec n’importe quel outil ?


  • Block dropé avec n’importe quel outil ^^

  • Administrateurs Rédacteurs Moddeurs confirmés

    setHarvestLevel

    permet juste de rendre le bloc plus rapide à se détruire avec la hache / pelle / pioche, et dans le cas de la pioche ne rien dropper si la pioche n’est pas assez forte.

    Seul mon code permet de rendre le code incassable sauf si le bon outil est utilisé. Mets 25 à la place de 5, 5 c’est trop peu.


  • Merci à vous deux, robin ton code ma l’air intéressant pour d’autre bloc mais pas pour celui-ci ^^.

  • Administrateurs Rédacteurs Moddeurs confirmés

    C’est sûr, avec cette fonction + l’event BlockEvent.BreakEvent on peut faire beaucoup de chose. Je les utilises beaucoup dans mon mod privatizer : https://github.com/FFMT/Privatizer