Ajouter des sons pour ses entité



  • Bonjour. J'aimerais ajouter des sons perso pour mes entités avec

        protected SoundEvent getAmbientSound() {
            return SoundEvents.ENTITY_ZOMBIE_AMBIENT; //A CHANGER
        }
    
        protected SoundEvent getHurtSound() {
            return SoundEvents.ENTITY_ZOMBIE_HURT; //A CHANGER
        }
    
        protected SoundEvent getDeathSound() {
            return SoundEvents.ENTITY_ZOMBIE_DEATH; //A CHANGER
        }
    

    Mais je n'arrive pas à mettre mes propres sons. J'ai regarder mais les sujets les plus récents que j'ai trouvé sur les sons datent de la 1.6, et les codes ne marche plus vraiment, et du coup je n'ai pas vraiment d'idée de comment faire (peut-être avec l'event SoundLoadEvent, mais j'ai beau essayer impossible d'y arriver) J'espère que vous pourrez m'aider.


  • Moddeurs confirmés Rédacteurs Modérateurs Administrateurs

    Bonjour,
    pour ajouter des sons, c'est assez simple.
    Dans un premier temps, il faut déclarer ton nouveau son :

    public static final SoundEvent WEREWOLF = new SoundEvent(new ResourceLocation(ModNanotechHungerGames.MODID, "werewolf")).setRegistryName("werewolf");
    

    Ensuite, il faut :

    @SubscribeEvent
    public static void registerSound(RegistryEvent.Register<SoundEvent> event)
    {
        event.getRegistry().registerAll(WEREWOLF);
    }
    

    Le code fonctionne parfaitement en 1.12.2, j'imagine qu'il doit également fonctionner en 1.11.x.



  • Merci pour la réponse mais l'entité ne fait toujours pas de son.
    Voici ma classe ModSounds :

            public static final SoundEvent TEST_AMBIENT = new SoundEvent(new ResourceLocation(References.MODID, "test_ambient")).setRegistryName("test_ambient");
    	public static final SoundEvent TEST_DEATH = new SoundEvent(new ResourceLocation(References.MODID, "test_death")).setRegistryName("test_death");
    	public static final SoundEvent TEST_HURT = new SoundEvent(new ResourceLocation(References.MODID, "test_hurt")).setRegistryName("test_hurt");
    	
    	@SubscribeEvent
    	public static void registerSound(RegistryEvent.Register<SoundEvent> event) {
    	    event.getRegistry().registerAll(TEST_AMBIENT);
    	    event.getRegistry().registerAll(TEST_DEATH);
    	    event.getRegistry().registerAll(TEST_HURT);
    	}
    

    et le bout de code de mon entité :

        protected SoundEvent getAmbientSound() {
            return ModSounds.TEST_AMBIENT;
        }
    
        protected SoundEvent getHurtSound() {
            return ModSounds.TEST_HURT;
        }
    
        protected SoundEvent getDeathSound() {
            return ModSounds.TEST_DEATH;
        }
    

    J'ai mis dans le preInit de ma classe CommonProxy cette ligne (je pense que le fait qu'il n'y ai aucun son vient de là) :

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

    J'espère que vous pourrez m'aider.


  • Moddeurs confirmés Rédacteurs Modérateurs Administrateurs

    Désolé, c'est ma faute, j'ai oublié de préciser que j'utilisais cet event dans une classe annotée avec @EventBusSubscriber, le fait que j'ai mis static dans la signature de la méthode auraient dû te mettre sur la voie.
    Du coup, tu as le choix entre mettre @EventBusSubscriber au dessus de ta classe ou utiliser MinecraftForge.EVENT_BUS.register(ModSounds.class);

    Au passage, comme tu l'as sans doute remarqué, j'utilise event.getRegistry().registerAll();, cette méthode a l'avantage de prendre une liste "infinie" de SoundEvent ou de n'importe quel autre type que tu enregistres dans la méthode où elle est appelée.
    Donc, tu n'as pas besoin de faire :

    	@SubscribeEvent
    	public static void registerSound(RegistryEvent.Register<SoundEvent> event) {
    	    event.getRegistry().registerAll(TEST_AMBIENT);
    	    event.getRegistry().registerAll(TEST_DEATH);
    	    event.getRegistry().registerAll(TEST_HURT);
    	}
    

    tu peux directement faire :

    	@SubscribeEvent
    	public static void registerSound(RegistryEvent.Register<SoundEvent> event) {
    	    event.getRegistry().registerAll(TEST_AMBIENT, TEST_DEATH, TEST_HURT);
    	}
    

  • Moddeurs confirmés Rédacteurs Administrateurs

    Il faut aussi un fichier nommé sounds.json dans le dossier assets/tonmodid indiquant où les sons se trouve.

    {
        "nom_du_son": {
            "sounds": [
                {
                    "name": "modid:son1"
    	    },
                {
                    "name": "modid:son2"
    	    }
            ]
        }
    }
    

    Avec cette exemple, son1 sera le fichier assets/modid/sounds/son1.ogg
    Il est possible de préciser un seul son ou plusieurs, un random entre les différents déclarés sera fait s'il y en a plusieurs.



  • Merci à vous maintenant ça marche.


Log in to reply