SOLVED Des Radius et adaptations spécifiques ?


  • Bien le bonsoir !

    Je me suis poser la question aujourd’hui au sujet de quelque chose de plûtot fou mais je ne sais pas si c’est faisable car je ne sais pas du tout comment faire cela. Je voudrais en fait faire en sorte que quand un joueur pose un bloc, tous les autres joueurs dans un rayon de 15 blocks soient empoisonné ! Comment on pourrait faire ça ?

    Aussi, je pense pour autre chose que c’est plus faisable, un bloc qui ne se pose que sur une fenêtre par exemple !!

    Comment puis-je procéder pour ces deux choses ? Merci !

    Solution : http://www.minecraftforgefrance.fr/showthread.php?tid=2032&pid=23187#pid23187

  • Administrateurs Rédacteurs Moddeurs confirmés

    Salut,
    1 - il y a une fonction pour quand le joueur pose un bloc, et dans dans la classe world il y a une fonction pour avoir une liste de toutes les entités autours.

    List entity = world.selectEntitiesWithinAABB(EntityPlayer.class, player.boundingBox.expand(15.0D, 15.0D, 15.0D), new IEntitySelector(){
    @Override
    public boolean isEntityApplicable(Entity entity)
    {
        return entity instanceof EntityPlayer;
    }
    });
    
    

    (il me semble que c’est comme ça, flemme de lancer eclipse car je vais aller me coucher après ce message)
    Après tu utilise un boucle for pour par courir la liste, tu cast EntityPlayer et tu ajoutes l’effet au joueur si le joueur n’est pas celui qui a posé le bloc.

    2 - fenêtre = GlassPane ?


  • @‘SquizzCraft’:

    Bien le bonsoir !

    Je me suis poser la question aujourd’hui au sujet de quelque chose de plûtot fou mais je ne sais pas si c’est faisable car je ne sais pas du tout comment faire cela. Je voudrais en fait faire en sorte que quand un joueur pose un bloc, tous les autres joueurs dans un rayon de 15 blocks soient empoisonné ! Comment on pourrait faire ça ?

    Aussi, je pense pour autre chose que c’est plus faisable, un bloc qui ne se pose que sur une fenêtre par exemple !!

    Comment puis-je procéder pour ces deux choses ? Merci !

    Regarde la classe du cactus : il y a des fonctions pour savoir si le bloc peut rester là où il est.


  • Bon, je vais aller voir tout ça ! Et oui, c’est pour le GlassPane !

    EDIT : J’ai pas réussi à faire la boucle for pour donner l’effet de poison 1 pendant 1 minute à tous les joueurs aux alentours du blocs sauf celui qui l’a poser ! 😕


  • Alors, j’ai essayer ton code Robin, mais j’ai trop d’erreurs, il m’indique que world n’existe pas, alors pour résoudre à ça, j’ai mis une majuscule à “W”, et pour player, rien ne résout le soucis, ensuite, pour List, j’ai beaucoup d’éléments d’importation !

    Que dois-je faire ?


  • @‘SquizzCraft’:

    Alors, j’ai essayer ton code Robin, mais j’ai trop d’erreurs, il m’indique que world n’existe pas, alors pour résoudre à ça, j’ai mis une majuscule à “W”, et pour player, rien ne résout le soucis, ensuite, pour List, j’ai beaucoup d’éléments d’importation !

    Que dois-je faire ?

    world correspond au paramètre world de ta fonction, peut importe comment il s’appelle, même chose pour le joueur. Pour la liste c’est java.util.List.

    PS : c’est mieux de savoir ce que le code fait et ce à quoi correspondent les variables avant de copier le code.


  • D’accord, mais au final, comment je dois construire le code pour arriver à effectuer une couche de poison sur une zone ?


  • @‘SquizzCraft’:

    D’accord, mais au final, comment je dois construire le code pour arriver à effectuer une couche de poison sur une zone ?

    Robin t’as donné le code, j’aurai fait le même code que lui, après tu peux regarder dans la classe world : y’a plusieurs méthodes pour avoir des entités.

  • Administrateurs Rédacteurs Moddeurs confirmés

    Envoies le code que tu as fait actuellement.


  • List entity = world.selectEntitiesWithinAABB(EntityPlayer.class, player.boundingBox.expand(15.0D, 15.0D, 15.0D), new IEntitySelector(){
    @Override
    public boolean isEntityApplicable(Entity entity)
    {
       return entity instanceof EntityPlayer;
    
       ((entity)par3Entity).addPotionEffect(new PotionEffect(Potion.poison.id, 1200, 0));
    }
    }
    });
    

    J’ai essayer de le faire comme ça, mais sans succès avec pleins d’erreurs 😕

  • Administrateurs Rédacteurs Moddeurs confirmés

    Ah oui …
    Tu as mit où ce code ?
    Envoie la classe entière.


  • Essaie avec çà plutôt :

    
    List entity = world.selectEntitiesWithinAABB(EntityPlayer.class, player.boundingBox.expand(15.0D, 15.0D, 15.0D), new IEntitySelector(){
    @Override
    public boolean isEntityApplicable(Entity entity)
    {
    return entity instanceof EntityPlayer;
    }
    }
    });
    

    Et ensuite tu récupère la liste que tu peux lire avec un iterator ou autre chose dans le genre, mais comme je l’ai dis : quand on ne sait pas ce qu’on fait, vaut mieux ne rein faire.


  • package fr.squizzcraft.modmikavanille;
    
    import java.util.List;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.command.IEntitySelector;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.potion.Potion;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class RadiocatifBlock extends Block {
    
    protected RadiocatifBlock(Material material) {
    super(material);
    }
    
    List entity = world.selectEntitiesWithinAABB(EntityPlayer.class, player.boundingBox.expand(15.0D, 15.0D, 15.0D), new IEntitySelector(){ //Erreur sur world et player
    @Override
    public boolean isEntityApplicable(Entity entity)
    {
       return entity instanceof EntityPlayer;
    
       ((EntityPlayer)entity).addPotionEffect(new PotionEffect(Potion.poison.id, 1200, 0));
    }
    });
    }
    

    Ensuite, je pense qu’avec ça, le joueur qui a posé le bloc va être empoisonné aussi !

  • Administrateurs Rédacteurs Moddeurs confirmés

    Si tu mets du code comme ça n’importe où c’est normal que ça ne fonctionne pas …

    ​    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    
        {
            List entities = world.selectEntitiesWithinAABB(EntityPlayer.class, living.boundingBox.expand(15.0D, 15.0D, 15.0D), new IEntitySelector()
            {
                @Override
                public boolean isEntityApplicable(Entity entity)
                {
                    return entity instanceof EntityPlayer;
                }
            });
            for(Object o : entities)
            {
                if(o instanceof EntityPlayer)
                {
                    ((EntityPlayer)o).addPotionEffect(new PotionEffect(Potion.poison.id, 1200, 0));
                }
            }
        }
    

  • Merci bien Robin ! Pour le radioactif ! Ca marche !

    Alors, j’ai fais des recherches pour le GlassPane, j’ai trouver ça dans la classe BlockCactus :

    public boolean canPlaceBlockAt(World world, int x, int y, int z)
    {
    return !super.canPlaceBlockAt(world, x, y, z) ? false : this.canBlockStay(world, x, y, z);
    }
    

    Mais, je ne sais pas comment je peux mettre le GlassPane, car on a pas d’énonciation de blocks !


  • Personne pour le Block GlassPane ?


  • @‘SquizzCraft’:

    Personne pour le Block GlassPane ?

    Il faut réécrire la fonction canBlockStay.


  • Comment ça ?

  • Administrateurs Rédacteurs Moddeurs confirmés

    this.canBlockStay(world, x, y, z)
    ctrl + clic dessus. ça va te ramener à la fonction, c’est elle qu’il faut reprendre et adapter.


  • @‘SquizzCraft’:

    Comment ça ?

    Apprend le java et le code sous MinecraftForge en regardant des tutoriels parce que là tu ne sais pas faire de simples choses : regarde les tutoriels de Robin (il y a aussi la chaîne youtube MinecraftForgeFrance)