Modifier le drop d'un bloc



  • Bonjours,
    pour mon mod j'aurais besoin de modifié le drop de certains bloc vanilla en autre la dirt et la grass.

    J'ai fait des recherches pour trouver comment faire avec forge sans trouver de méthodes direct.
    La solution que j'utilisais jusqu'à maintenant était de supprimer le bloc vanilla avec ce code (pour la dirt):

    Block.blocksList[Block.dirt.blockID] = null;
    

    et de recréer un bloc pour le remplacer avec les caractéristiques voulu.

    Le problèmes c'est que supprimer le bloc de grass de la liste des bloc fait planter le jeu au lancement même si celui-ci est remplacé après. Je suppose que cela vient de son type (BlockGrass et non Block) mais je ne trouve pas de solution pour résoudre ça.

    Pour résumer je cherche:
       -une méthode pour changer le drop des bloc vanilla
       -(et/ou) une méthode pour remplacer le bloc grass sans faire planter le jeu

    Merci de votre aide.



  • http://www.minecraftforgefrance.fr/showthread.php?tid=404
    Désolé, erreur 404 solution no found.

    Plus sérieusement, pour le drop il existe l'event drop de forge et pour remplacer le bloc d'herbe, le bloc par qui remplace le bloc d'herbe est il extends BlockGrass ?



  • Je vais aller voir du coté de l'event drop de forge ( j'ai du passer a coté ).

    Le bloc qui remplace le BlockGrass est bien extends BlockGrass mais dans le doute j'ai revu mon code et il y avait une erreur d'ID sur celui-ci.
    Donc pour le bloc d'herbe j'ai une erreur à la génération (ou au chargement) de la map c'est déjà mieu 😛 .

    Merci pour votre réponse rapide je vais essayer de résoudre le problème pour le bloc d'herbe et aller voir comment marche l'event drop si tout marche bien je posterais la solution plus en détail et je clôturerais le post.


  • Administrateurs

    @ForgeSubscribe
    public void onBlockDrop(HarvestDropsEvent event)
    {
    if(event.block.blockID == Block.grass.blockID)
    {
    event.drops.clear(); //supprime la liste de drop actuel
    event.drops.add(new ItemStack(Block.stone)); //ajoute un bloc de pierre à la liste des drops
    }
    }
    

    La classe a importer :
    import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;



  • Merci de m'avoir mâché le travail :p.



  • J'ai un probleme avec la commance "if(event.block.blockID == Block.grass.blockID)", le programme ne reconnait pas le block entre event et blockID


  • Administrateurs

    Existe plus depuis la 1.7.x
    Retires simplement les .blockID.



  • Le logiciel ne reconnait aucun mot en gras, il me manque juste ça et je pense que c'est okay …

    **@ForgeSubsribe **                                         
        public void onBlockDrop(HarvestDropsEvent event) {

    if(event.block == ModBlocks.rubyore) {
                event.getDrops().clear();
                ItemStack stack = new ItemStack(ModItems.ruby);
                event.getDrops().add(stack);
            }



  • Il faut remplacer le @ForgeSubscribe par @SubscribeEvent (puis l'importer) et le event.block à du être remplacé par event.getBlock() (pas sur à 100% dépend du la version où tu es).



  • Désolé de vous embèter avec ça mais j'ai actuellement ceci mais ça marche pas vraiment …

    @SubscribeEvent
        public void onBlockDrop(HarvestDropsEvent event) {

    if(event.getState().getBlock() == ModBlocks.rubyore) {
                event.getDrops().clear();
                ItemStack stack = new ItemStack(ModItems.ruby);
                event.getDrops().add(stack);
            }                    
        }


  • Administrateurs



  • Merci de votre aide, désolé pour le dérangement, j'ai finalement trouver la solution ❤