1.12.2 Modifier le loot d'un mob existant



  • J'ai réussi a ajouter un loot à la chauve souris petit soucis quand je tue la chauve souris l'item drop en double et un des drop est comme un faux item...
    Impossible de le ramasser, ou le mettre dans un hopper... Il disparaît quand je relance la map.
    Voici mon code:

    	@SubscribeEvent
    	public void onEntityKilled1(LivingDeathEvent event)
    	{
    		if(event.getEntityLiving() instanceof EntityBat)
    		{
    			event.getEntityLiving().dropItem(ItemsMod.findium, 1);
    		}
    	}
    

    Merci d'avoir pris le temps de lire en espérant que vous ayez une solution.


  • Moddeurs confirmés Rédacteurs Administrateurs

    @Twiguinou a dit dans Modifier le loot d'un mob existant :

    Certaines méthodes doivent être appelées sur le bon tick pour éviter des problèmes comme celui que tu rencontres, ajoute cette condition avant l'exécution de tes instructions:

    if(!event.getEntity.world.isRemote) {
        // Et là tu peux drop ton item
    }
    

    Le code est le bon mais pas l'explication.
    L'event est appelé deux fois, une fois sur le world client (qui gère le rendu) et une fois sur le world serveur (qui gère la logique).

    Le spawn ne doit être que fait sur le world serveur, qui va déjà notifier le client de l'apparition de l'item afin que le world client l'affiche.
    Si le spawn de l'entité est fait sur les deux world, il sera en réalité fait 2 fois sur le monde client, une entité item qui sera bien lié à la logique et une fantome.



  • Certaines méthodes doivent être appelées sur le bon tick pour éviter des problèmes comme celui que tu rencontres, ajoute cette condition avant l'exécution de tes instructions:

    if(!event.getEntity.world.isRemote) {
        // Et là tu peux drop ton item
    }
    


  • @Arca30 a dit dans Modifier le loot d'un mob existant :

    @SubscribeEvent

    @Twiguinou Plus rapide que moi xD


  • Moddeurs confirmés Rédacteurs Administrateurs

    @Twiguinou a dit dans Modifier le loot d'un mob existant :

    Certaines méthodes doivent être appelées sur le bon tick pour éviter des problèmes comme celui que tu rencontres, ajoute cette condition avant l'exécution de tes instructions:

    if(!event.getEntity.world.isRemote) {
        // Et là tu peux drop ton item
    }
    

    Le code est le bon mais pas l'explication.
    L'event est appelé deux fois, une fois sur le world client (qui gère le rendu) et une fois sur le world serveur (qui gère la logique).

    Le spawn ne doit être que fait sur le world serveur, qui va déjà notifier le client de l'apparition de l'item afin que le world client l'affiche.
    Si le spawn de l'entité est fait sur les deux world, il sera en réalité fait 2 fois sur le monde client, une entité item qui sera bien lié à la logique et une fantome.



  • Ben j'ai rajouté ça

    if(!event.getEntity().world.isRemote) 
    

    et ça fonctionne donc merci


Log in to reply