Problème HarvestDropsEvent



  • Bonjour, j'ai rencontré un problème que je n'arrive pas à corriger.
    J'essaye de faire en sorte que le bloc de stone de Minecraft vanilla drop des particules de minerais mais avec des chance de drop différentes selon celles ci. Mais le problème c'est qu'il y a seulement les particules de charbon, de cuivre et d'étain qui drop (les trois premières).
    Voici mon code :

        @SubscribeEvent
        public void onDrops(BlockEvent.HarvestDropsEvent event)
        {
        if(event.block == Blocks.stone)
        {
        event.drops.add(new ItemStack(ItemMod.coal_particle, 1));
        event.drops.add(new ItemStack(ItemMod.copper_particle, 1));
        event.drops.add(new ItemStack(ItemMod.tin_particle, 1));
        event.dropChance = 0.5F;
        }
        else if(event.block == Blocks.stone){
        event.drops.add(new ItemStack(ItemMod.iron_particle, 1));
        event.drops.add(new ItemStack(ItemMod.redstone_particle, 1));
        event.dropChance = 0.1F;
        }
        else if(event.block == Blocks.stone){
        event.drops.add(new ItemStack(ItemMod.silver_particle, 1));
        event.drops.add(new ItemStack(ItemMod.gold_particle, 1));
        event.dropChance = 0.05F;
        }
        else if(event.block == Blocks.stone) {
        event.drops.add(new ItemStack(ItemMod.diamond_particle, 1));
        event.drops.add(new ItemStack(ItemMod.emerald_particle, 1));
        event.dropChance = 0.01F;
        }
        }
    

    Si quelqu'un pouvait m'aider s'il vous plait je le remercie.



  • Salut. Si uniquement fonctionne les trois premiers drops c'est parce que ta condition et toujours la même. Si c'est un block de stone fais cela … si***NON*** (si c'est un block de stone) fais cela … . Jamais la seconde condition (et celles d'après) ne seront exécuté (J'espère que j'ai bien expliqué). Et pour event.dropChance = …; je pense qu'il vaut mieux utiliser le setter de la classe HarvestDropsEvent (event.setDropChance(0.5f);). J'espère t'avoir un peu aider.

    PS : Désolé pour les fautes d'orthographe.



  • Est ce que tu pourrais me montrer comment l'utiliser s'il te plait ? J'ai cherché mais je bloque (je ne le trouve même pas).



  • @ghyla a dit dans Problème HarvestDropsEvent :

    Est ce que tu pourrais me montrer comment l'utiliser s'il te plait ? J'ai cherché mais je bloque (je ne le trouve même pas).

    Pour faire simple tu fait, si le block casser est un block de stone tu fait ça sinon tu fait ça, le sinon n'est exuster qui si le si n'est pas positif, en gros ça restera toujours bloquer au premier.
    Dans cette situation utilise plutôt la class Random
    Exemple :

    @SubscribeEvent
        public void onDrops(BlockEvent.HarvestDropsEvent event)
        {
        if(event.block == Blocks.stone)
        {
        	    int rand = new Random().nextInt(4);
                if(rand == 0){
    		    event.drops.add(new ItemStack(ItemMod.coal_particle, 1));
    		    event.drops.add(new ItemStack(ItemMod.copper_particle, 1));
    		    event.drops.add(new ItemStack(ItemMod.tin_particle, 1));
    		    event.dropChance = 0.5F;
    	    }
    	    else if(rand == 1){
    		    event.drops.add(new ItemStack(ItemMod.iron_particle, 1));
    		    event.drops.add(new ItemStack(ItemMod.redstone_particle, 1));
    		    event.dropChance = 0.1F;
    	    }
    	    else if(rand == 2){
    		    event.drops.add(new ItemStack(ItemMod.silver_particle, 1));
    		    event.drops.add(new ItemStack(ItemMod.gold_particle, 1));
    		    event.dropChance = 0.05F;
    	    }
    	    else if(rand == 3) {
    		    event.drops.add(new ItemStack(ItemMod.diamond_particle, 1));
    		    event.drops.add(new ItemStack(ItemMod.emerald_particle, 1));
    		    event.dropChance = 0.01F;
    	    }
        }


  • Merci ! 😄


Log in to reply