1.7.x Drop des blocs et modification d'un harvestlevel



  • Bonjour. Alors voila, ça fait un moment que je code un mod (je ne suis qu'un débutant) et j'aimerais changer le drop d'un bloc par exemple que le minerais de sapphir drop du sapphir :).
    Mais j'ai aussi un autre problème j'aimerais changer l'harvestlevel qui ne soit plus limité à 1-2-3. Par exemple l'harvestlevel est une pioche de jade. Si quelqu'un à une voire les deux solutions poster les.
    Merci d'avance.


    Et j'ai oublier de préciser que pour la pioche de jade ça serait setHarvestLevel("pickaxe", 4); voila tout


  • Rédacteurs

    c'est très simple et rapide regarde ici :
    mon github

    oublie pas d'enregistrer l'event :

    MinecraftForge.EVENT_BUS.register(new BlockEvent());
    

    Regarde dans l'event pour le harvestlevel tu devrais trouver ce que tu cherche



  • Pour le drop de l'item j'ai trouvé mais ce que tu viens de me donner je ne comprends pas trop c'est pour changer le harvestlevel ?


  • Moddeurs confirmés Modérateurs

    Oui c'est pour créer une classe event de bloc pour ainsi rajouter un harvest level



  • Si je veux ajouter une harvestlevel je dois prendre sont github et le mettre dans ma classe du minerai ?


  • Moddeurs confirmés Modérateurs

    Oue mais faudrat le modifier



  • par exemple quesque je devrais modifier si je veux que l'harvestLevel 4 soit la picohe en jade :

    @SubscribeEvent
    public void onBlockDrop(HarvestDropsEvent event)
    {
        if(Properties.activeSpecialsDrops)
        {
            if(event.block == Blocks.iron_ore)
            {
                event.drops.clear();
                event.drops.add(new ItemStack(ModItemsList.dusts, event.world.rand.nextInt(Properties.dropIron), 0));
            }
            if(event.block == Blocks.gold_ore)
            {
                event.drops.clear();
                event.drops.add(new ItemStack(ModItemsList.dusts, event.world.rand.nextInt(Properties.dropGold), 1));
            }
        }
    }
    

  • Rédacteurs

    Cette méthode te donne le harvestLevel ensuite tu testes les valeurs valeur :

    int harvestLevel = event.world.getBlock(event.x, event.y, event.z).getHarvestLevel(event.world.getBlockMetadata(event.x, event.y, event.z));
    

    Utilise cette méthode pour le harvestLevel :

    public void setHarvestLevel(String toolClass, int level)
    {
    for (int m = 0; m < 16; m++)
    setHarvestLevel(toolClass, level, m);
    }
    
    

    Pour le HarvestLevel :

    if(event.block == Blocks.iron_ore)
    {
    event.drops.clear();
    event.drops.add(new ItemStack(ModItemsList.dusts, event.world.rand.nextInt(Properties.dropIron), 0));
    }
    

    tu modifie le bloc et l'item qui drop



  • Je dois le mettre dans la classe principale ou dans une autre ?


  • Rédacteurs

    tout va dans la class de l'event sauf le setHarvestLevel qui va dans la class du block


  • Moddeurs confirmés Rédacteurs Administrateurs

    Phenix, il cherche à modifier le drop de ces propres blocs, il n'a pas besoin d'un event.

    Pour le bloc :

    package fr.minecraftforgefrance.tutoriel.common;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.item.Item;
    
    public class BlockTutoriel extends Block
    {
    protected BlockTutoriel(Material material)
    {
    super(material);
    this.setHarvestLevel("pickaxe", 4); // défini le niveau harvest sur 4
    }
    
    public Item getItemDropped(int metadata, Random rand, int fortune)
    {
    return ModTutoriel.itemTutoriel; // drop un item tutoriel
    }
    }
    

    Pour ta pioche :

    package fr.minecraftforgefrance.tutoriel.common;
    
    import net.minecraft.item.ItemPickaxe;
    import net.minecraft.item.ItemStack;
    
    public class ItemTutoPickaxe extends ItemPickaxe
    {
    protected ItemTutoPickaxe(ToolMaterial material)
    {
    super(material);
    this.setHarvestLevel("pickaxe", 4); // harvest niveau 4
    }
    
    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(repair.getItem() == ModTutoriel.itemTutoriel)
    {
    return true;
    }
    return false;
    }
    }
    


  • Cette technique ne marche pas non plus pourtant elle me semblait plus favorable à moins que je me sois trompé

    Pour la pioche :

    package fr.craftandfight.serveur.common;
    
    import net.minecraft.item.ItemPickaxe;
    import net.minecraft.item.ItemStack;
    
    public class JadePickaxe extends ItemPickaxe
    {
    protected JadePickaxe(ToolMaterial material)
    {
    super(material);
    this.setHarvestLevel("pickaxe", 4); // harvest niveau 4
    }
    
    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(repair.getItem() == ModCraftAndFight.jade)
    {
    return true;
    }
    return false;
    }
    }
    

    et pour le bloc :

    package fr.craftandfight.serveur.common;
    
    import java.util.Random;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.item.Item;
    
    public class RainbowOre extends Block
    {
    
    protected RainbowOre(Material material)
    {
    super(material);
    this.setHarvestLevel("Pickaxe", 4);
    }
    @Override
    public Item getItemDropped(int metadata, Random random, int fortune)
    {
    return ModCraftAndFight.rainbowPearl;
    }
    }
    

    quelqu'un aurait la solution à mon problème svp ?


  • Moddeurs confirmés Modérateurs

    met les balise on pourra mieux lire


  • Moddeurs confirmés Rédacteurs Administrateurs

    this.setHarvestLevel("jadePickaxe", 4);
    Juste pickaxe, pas jadePickaxe



  • re désolé je devais y aller je vais tester ça de suite


    ça ne marche pas même avec pickaxe


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tu peux détailler ? Tu arrive toujours a casser avec les autres pioches ou pas ?



  • Alors je peux casser avec les autres pioches et je drop toujours une "rainbowPearl"


    Mais ça va beacoup plus vite avec la pioche en jade


    Sinon envoie moi ton skype en mp et je t'ajouterai pour que tu m'aides


    Robin tu peux m'accepter skype stp ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tout est normal sauf le fait que le bloc drop avec une mauvaise pioche. Normalement il devrait pas droppé si tu casse avec une pioche inférieur à 4.



  • Ben je suis d'accord mais ça veut dire que nous n'arrivons pas au résultat attendu 😛


  • Moddeurs confirmés Rédacteurs Administrateurs

    Problème réglé, ça venant de la majuscule à Pickaxe. Il ne dois pas en avoir :
    this.setHarvestLevel("pickaxe", 4);


Log in to reply