Demande d'aide pour créer une pioche à spawner [Forge 1.7.10]



  • Bonjour, j'ai un petit soucis j’essaie de crée une pioche qui permet de récupérer les "mob_spawner" donc déjà tout d'abord je déclare mon événement dans ma Class Event

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

    et crée la class lui correspondant

    public class DropsBlock 
    {
        @SubscribeEvent
        public void BlockDestroyed(HarvestDropsEvent events)
        {
            if(events.block == Blocks.mob_spawner)
            {
                events.drops.add(new ItemStack(Blocks.mob_spawner));
            }
        }
    }
    

    Oui je sais je n'est pas intégré la condition pour que ma Pioche à Spawner uniquement puisse récupérer le "mob_spawner" (a vrai dire je ne vois pas vraiment comment faire) , mais ce n'est pas encore l'heure de ce pré-occuper de ce problème mon problème actuel et que ben tout simplement mon évent ne marche pas j'ai ma petite idée je pense que c'est du au fait que j'utilise HarvestDropsEvent et pas BreakBlock, donc si une âme charitable pourrait m'accorder son aide.


  • Moddeurs confirmés Rédacteurs Administrateurs

    Salut,
    En effet HarvestDropsEvent n'est appelé que lorsqu'un bloc drop des items, ce qui n'est pas le cas du spawner.
    Il faut absolument utiliser BlockEvent.BreakEvent (tu peux drop un item en faisant spawn l'EntityItem dans le monde).



  • Merci de ta réponse qui confirme mon hypothèse de base par malchance je ne sais pas comment utiliser cette Event correctement j'ai essayer déjà mais sans succès


  • Moddeurs confirmés Rédacteurs Administrateurs

    De la même façon que les autres event.
    Tu peux envoyer le code d'une de tes tentatives ?



  • Non je l'es malheureusement supprimer car je ne trouvais d'ailleurs plus comment drops le block au sol

    Edit à 19:10 H donc j'ai re-tester un code en bidouillant

    public class DropSpawner extends BreakEvent {
    
    	public DropSpawner(int x, int y, int z, World world, Block block, int blockMetadata, EntityPlayer player) 
    	{
    		super(x, y, z, world, block, blockMetadata, player);
    		
    		if(block == Blocks.mob_spawner)
    		{
    			world.setBlock(x, y, z, Blocks.mob_spawner);
    		}
    	}	
    }
    

    Donc il marche mais je ne sais pas si il y a mieux et ensuite j'vois pas trop comment rajouter ma condition pour ma Pioche. j'me doute bien que dans mon if j'doit dire que l'item qui effectue le break = Item.diamond_pickaxe mais c'est le "item qui effectue le break" que je n'arrive pas à faire


  • Moddeurs confirmés Rédacteurs Administrateurs

    L'event doit être utilisé comme les autres event :

        @SubscribeEvent
        public void BlockDestroyed(BreakEvent events)
        {
            if(events.block == Blocks.mob_spawner)
            {
                events.world.spawnEntityInWorld(new EntityItem(x, y, z, new ItemStack(Blocks.mob_spawner)));
            }
        }
    


  • D'accord merci et pour la condition pour vérifier la pioche car je ne trouve pas s'il te plaît


  • Moddeurs confirmés Rédacteurs Administrateurs

    depuis event.player il faut get le current item (et vérifier qu'il n'est pas null)


Log in to reply