Configuration Résolu Java : Event fait crash le serveur

  • Auteur de la discussion Auteur de la discussion Alex Fatta
  • Date de début Date de début
Hey Discow ! :D

En vérité je cherche à récupérer le bloc qui est sous le joueur et non au niveau de ses pieds. Si le joueur tombe sur un bloc, il n'est pas au niveau du dessous du joueur donc ne peut être testé. De mémoire j'avais testé avec -1 ;)

AlexFatta
 
Re,

du coup pour prendre en compte toutes les situations, le plus simple est de faire une petite méthode :) L'idée est de chercher tous les blocs sous les pieds du joueur "en allant de plus en plus profond" (sachant que l'eau est normalement comptée comme un bloc), jusqu'à trouver le premier bloc qui n'est pas de l'air. Ensuite, en utilisant cette méthode tu n'aurais plus qu'à check que c'est bien de l'eau ! ;)
 
Salut,

Déjà évite les System.out... Tu fais du spigot, pas du java de base xD (bon, ok la c'est moi qui suis un peu chiant :p ).

Ensuite, il me semblait l'avoir déjà écrit, mais je ne sais plus où...
Ceci:
Code:
Block blockToTest = Bukkit.getServer().getWorld(playerLocation.getWorld().getName()).getBlockAt(playerLocation);
Sera quand même plus simple comme ceci:
Code:
Block blockToTest = playerLocation.getWorld().getBlockAt(playerLocation);

Bon, enfin si tu veux le block en dessous du joueur tu peux avoir une méthode comme ceci:
PHP:
private Block getPlayerGroundBlock(final Location loc) {
    while(loc.getY() > 0 && loc.getBlock().getType().equals(Material.AIR)) {
        loc.setY(loc.getY()-1);
    }
    // Peut être rajouter une condition si getY() est == à 0
    return loc.getBlock();
}

Donc dans ton code:
PHP:
   @EventHandler
   public void touchWaterCheck(PlayerMoveEvent event) {
       final Player player = event.getPlayer();

       if (playerList.contains(player)) {
           if (Main.getGameIsJoinable() && Main.getGameIsLaunched()) {

               final Block blockToTest = getPlayerGroundBlock(player.getLocation());

               if (blockToTest.getType().equals(Material.WATER)) {
                   System.out.println("eau");
                   player.teleport(Main.getGroundLocation());
                   blockToTest.setType(Material.WOOL);
                   teleportNextPlayer();

               } else if (blockToTest.getType().equals(Material.WOOL)) {
                   System.out.println("laine");
                   player.teleport(Main.getGroundLocation());
                   playerList.remove(player);
                   incremantator = playerList.size();
                   teleportNextPlayer();
               }
           }
       }
   }


Cordialement,
Detobel36
 
Bonjour !

Bon ! Ca avance ! Le code que vous avez donné fonctionne.

Toutefois 2 choses : le problème de la boucle while, c'est que la bloc est testé alors que le joueur vient à peine d'arriver dans le vide. Je pense modifier ça afin de vérifier seulement le bloc sous le joueur à 1 blocs au dessus. Et deuxième chose : le Material.WATER ne fonctionne pas. J'ai testé en remplacant WATER par GRASS et ca fonctionne bien sur l'herbe ! Mais avec WATER ca ne fonctionne pas :fou::confused:

Des propositions ? J'ai regardé dans la liste et c'est tout ce qu'il y a pour l'eau :/

AlexFatta

EDIT :

C'est bon problème résolu ! Je sais juste pas ouvrir mes yeux x) Voici le code :) :
Code:
    @EventHandler (priority = EventPriority.LOWEST)
    public void touchWaterCheck(PlayerMoveEvent event) {
        final Player player = event.getPlayer();

        if (playerList.contains(player)) {
            if (Main.getGameIsJoinable() && Main.getGameIsLaunched()) {

                final Location loc = player.getLocation();
                loc.setY(loc.getY());
                final Block blockToTest = player.getWorld().getBlockAt(loc);

                if (blockToTest.getType().equals(Material.STATIONARY_WATER)) {
                    System.out.println("eau");
                    player.teleport(Main.getGroundLocation());
                    blockToTest.setType(Material.WOOL);
                    teleportNextPlayer();

                } else if (blockToTest.getType().equals(Material.WOOL)) {
                    System.out.println("laine");
                    player.teleport(Main.getGroundLocation());
                    playerList.remove(player);
                    incremantator = playerList.size();
                    teleportNextPlayer();
                }
            }
        }
    }
 
Dernière édition:
  • J'aime
Reactions: DiscowZombie