Recherche Tp le Joueur au spawn quand il meurt

TheGabDooSan

Aventurier
5 Juin 2019
17
1
4
Bonjour, je me suis récemment mis au développement Java et j'ai créé un /setspawn | /spawn mais le problème est que quand le joueur meurt, il est téléporté au spawn du monde, et non au spawn que j'ai défini. J'aurais besoin de votre aide pour faire en sorte que le joueur soit tp au /spawn.

Que ce soit un code Java / Skript ou un plugin ça me convient ^^ .

Cordialement,

TheGabDooSan
 
Bonsoir,

Pourquoi ne pas passer par les évènements ?

Code:
@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent e) {
   e.setSpawnLocation(kindOfMagicLocation);
}

Cordialement,
ShE3py.
 
Bonsoir,

Pourquoi ne pas passer par les évènements ?

Code:
@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent e) {
   e.setSpawnLocation(kindOfMagicLocation);
}

Cordialement,
ShE3py.
J'ai essayé sauf que l'evenement s'active quand le joueur appuyes sur le bouton "Respawn" avant que le joueur ai "vraiment" respawn physiquement. Si jamais il y avais un moyen d'attendre par exemple 1 seconde avant que le joueur soit tp je suis preneur
 
Code:
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> e.getEntity().teleport(kindOfMagicLocation), 20L);

Il attendra 20 ticks (soit une seconde) avant de téléporter le joueur. N'hésite pas si tu souhaites plus d'informations sur un truc ^c^
 
  • J'aime
Reactions: TheGabDooSan
Merci beaucoup pour ta réponse mais je voulais juste savoir quoi remplacer par quoi (dsl je suis debutant)

Par exemple "plugin" je dois le remplacer par le nom de la classe / nom du plugin en jeu ?
 
Code:
public class MyPlugin {
   public static MyPlugin instance;
   
   public MyPlugin() {
       instance = this;
   }
   
   @Override
   public void onEnable() {
       // On enregistre nos évènements, détectés par l'annotation @EventHandler
       this.getServer().getPluginManager().registerEvents(this, this);
   }
   
   @EventHandler // On marque cette méthode afin d'indiquer à Bukkit que c'est le point d'entrée d'un évènement
   public void onPlayerRespawn(PlayerRespawnEvent e) {
       // On récupère le plugin
       MyPlugin plugin = MyPlugin.instance;
       
       // On récupère le serveur sur lequel le plugin se situe (hello bungeecord)
       Server server = plugin.getServer();
       
       // On récupère le planificateur du serveur
       BukkitScheduler scheduler = server.getScheduler();
       
       // On planifie une nouvelle tâche
       // Synchrone car si on modifie une entité hors de son thread et que celui-ci la tick crash
       scheduler.scheduleSyncDelayedTask(/* le plugin qui planifie la tâche */ MyPlugin.instance, /* la tâche à exécuter */ new Runnable() {
           @Override
           public void run() {
               // On téléporte le joueur de l'évènement - celui qui a ressuscité - à notre lieu magique
               e.getEntity().teleport(kindOfMagicLocation);
           }
       }, /* le délai, en ticks (1/20s), on suffixe L car c'est rigolo */ 20L);
   }
}
 
Code:
public class MyPlugin {
   public static MyPlugin instance;
  
   public MyPlugin() {
       instance = this;
   }
  
   @Override
   public void onEnable() {
       // On enregistre nos évènements, détectés par l'annotation @EventHandler
       this.getServer().getPluginManager().registerEvents(this, this);
   }
  
   @EventHandler // On marque cette méthode afin d'indiquer à Bukkit que c'est le point d'entrée d'un évènement
   public void onPlayerRespawn(PlayerRespawnEvent e) {
       // On récupère le plugin
       MyPlugin plugin = MyPlugin.instance;
      
       // On récupère le serveur sur lequel le plugin se situe (hello bungeecord)
       Server server = plugin.getServer();
      
       // On récupère le planificateur du serveur
       BukkitScheduler scheduler = server.getScheduler();
      
       // On planifie une nouvelle tâche
       // Synchrone car si on modifie une entité hors de son thread et que celui-ci la tick crash
       scheduler.scheduleSyncDelayedTask(/* le plugin qui planifie la tâche */ MyPlugin.instance, /* la tâche à exécuter */ new Runnable() {
           @Override
           public void run() {
               // On téléporte le joueur de l'évènement - celui qui a ressuscité - à notre lieu magique
               e.getEntity().teleport(kindOfMagicLocation);
           }
       }, /* le délai, en ticks (1/20s), on suffixe L car c'est rigolo */ 20L);
   }
}

C'est bon ca fonctionne merci je t'aime ca aide beaucoup !
 
Salut,

Juste en passant, si j'ai bien compris, le joueur se fait téléporté au spawn (potentiellement parce qu'un plugin l'y TP). Et ensuite ton plugin attend une seconde pour le TP à nouveau...
C'est pas très optimisé tout ça...

Enfin, je vois pas l’intérêt du coup d'attendre une seconde...

on suffixe L car c'est rigolo
<3 Ce n'est évidemment pas la bonne raison mais j'aime bien cette justification :P (surtout qu'un débutant n'a pas besoin de comprendre l’intérêt du L, donc c'est pas gênant).


Cordialement,
Detobel36