[Java] Vérification du dégats au joueur avec épée.

Kenda

Architecte en herbe
16 Juillet 2016
316
1
2
125
32
www.youtube.com
Bonsoir :3 (Oui c'est encore moi),

Alors depuis hier soir je développe un petit mini-jeu, et donc actuellement je bloque sur un petit problème.

J'aimerai vérifier le Type de l'item lorsque le joueur frappe une autre personne, et dois infligé des dégats que avec l'épée.

Voici le code :


Java:
//Récupère la victime
Entity victim = e.getEntity();

        //Check si la victim est un Joueur
        if (victim instanceof Player) {
            Player player = (Player) victim;
            Entity damager = e.getDamager();
            Player killer = player;

            //Mettre la vie du joueur à 0.5 (ou une autre valeur, en gros pour dire qu'il est mort mais sans le
            //mettre à 0 pour éviter des bugs)
           player.setHealth(0.5);

            //Si le joueur à 0.5 de vie,
            if (player.getHealth() == 0.5) {
                
                //Si le damager est un Joueur, alors le killer sera le damager
                if (damager instanceof Player) killer = (Player) damager;

                //Verification que si le killer frappe avec une épée (et c'est la que sa merde)
                //La victime "meurt" (gamemode 3), mais le code s'éxecute quand même, alors que la
                //victime devrais rester en mode adventure (gm 2)
                if(killer.getItemInHand().getType() == Material.IRON_SWORD){
                    e.setCancelled(true);
                    player.setHealth(20);
                    killer.sendmessage(prefix + "Vous ne pouvez pas tuer le joueur à la main")
                    return;
                }
                
                 killer.sendMessage(prefix + "§cTu viens de tuer §6" + victim.getName());


Ducoup, j'aimerai savoir ou je pourrais mettre (ou modifier), la verification.

Merci de l'aide, car il me reste juste sa a régler :3
 
Bonsoir,

Peux-tu reformuler ce que tu veux faire exactement ? Parce que entre ce que tu dis faire est différent de ce que ton code fait.
De plus, tu initialises killer = victim, ce qui est un peu paradoxale. Dans ton cas si un joueur est attaqué par un monstre, ton plugin lui dira qu'il s'est tué lui-même.

Cordialement,
ShE3py
 
Bonsoir,

Peux-tu reformuler ce que tu veux faire exactement ? Parce que entre ce que tu dis faire est différent de ce que ton code fait.
De plus, tu initialises killer = victim, ce qui est un peu paradoxale. Dans ton cas si un joueur est attaqué par un monstre, ton plugin lui dira qu'il s'est tué lui-même.

Cordialement,
ShE3py

Bonjour,

J'aimerai que le joueur 1 (l'attaquant, donc le killer), tape le joueur 2 (la victime).
Si le joueur 1, tape avec une épée, le joueur 2 est tuer (mettre la vie à 0.5) , sinon on annule l'action et le joueur 2 ne subit aucun dégâts.


De plus, tu initialises killer = victim, ce qui est un peu paradoxale.

Et oui c'est vrai que j'avais pas vraiment pensé à sa :confused: Enfin après en logique, j'ai aucun mob si rien dans le monde, et j'avais vu sur un forum que sa aurais pu crée un NullPointerException, mais je vais vérifier quand même, on sais jamais. (Car même les dégâts de chute son désactivé)
 
Salut,

Java:
public void onEntityDamageByEntity(final EntityDamageByEntityEvent event) {

    //Récupère la victime et le damager
    final Entity victimeEntity = event.getEntity();
    final Entity damager = event.getDamager();

    //Check si la victime et le damager sont des joueurs
    if (victim instanceof Player && damager instanceof Player) {
        final Player killer = (Player) damager; // Joueur 1 dans ton explication
        final Player victime = (Player) victimeEntity; // Joueur 2 dans ton explication

        // On regarde si le killer à une épée en fer
        if(killer.getItemInHand().getType().equals(Material.IRON_SWORD)) {
            // Si c'est le cas, on lui met sa vie a 0.5 (tu peux normalement la mettre à zéro...)
            player.setHealth(0.5);
            killer.sendMessage(prefix + "§cTu viens de tuer §6" + victime.getName());
        } else { // Si ce n'est pas une épée
            // On cancel l'event
            event.setCancelled(true);
            killer.sendmessage(prefix + "Vous ne pouvez pas tuer le joueur à la main")

            // Lorsque l'event est cancel, l'autre joueur n'aura pas perdu de vie
            // Tu peux cependant lui remettre sa vie à 20
            player.setHealth(20);
            // A noter qu'il vaut mieux utiliser "player.getMaxHealth()" plutôt que 20
        }
    }
}
J'espère que ça t'aidera.


Cordialement,
Detobel36
 
Salut,

Java:
public void onEntityDamageByEntity(final EntityDamageByEntityEvent event) {

    //Récupère la victime et le damager
    final Entity victimeEntity = event.getEntity();
    final Entity damager = event.getDamager();

    //Check si la victime et le damager sont des joueurs
    if (victim instanceof Player && damager instanceof Player) {
        final Player killer = (Player) damager; // Joueur 1 dans ton explication
        final Player victime = (Player) victimeEntity; // Joueur 2 dans ton explication

        // On regarde si le killer à une épée en fer
        if(killer.getItemInHand().getType().equals(Material.IRON_SWORD)) {
            // Si c'est le cas, on lui met sa vie a 0.5 (tu peux normalement la mettre à zéro...)
            player.setHealth(0.5);
            killer.sendMessage(prefix + "§cTu viens de tuer §6" + victime.getName());
        } else { // Si ce n'est pas une épée
            // On cancel l'event
            event.setCancelled(true);
            killer.sendmessage(prefix + "Vous ne pouvez pas tuer le joueur à la main")

            // Lorsque l'event est cancel, l'autre joueur n'aura pas perdu de vie
            // Tu peux cependant lui remettre sa vie à 20
            player.setHealth(20);
            // A noter qu'il vaut mieux utiliser "player.getMaxHealth()" plutôt que 20
        }
    }
}
J'espère que ça t'aidera.


Cordialement,
Detobel36

Merci de la réponse, j'ai pu optimisé mon code, et surtout trouvé l'erreur. Enfaite, l'erreur venais d'une autre méthode qui affectais le même système lors d'un dégâts, ducoup, même si la vérification étais faites, et bien le joueur mourrais.


Merci de l'aide en tout cas :3