Bukkit 有些选手赢了';不要被传送到产卵地

Bukkit 有些选手赢了';不要被传送到产卵地,bukkit,Bukkit,我有一个问题,当一个玩家加入游戏时,他们有时不会被传送到繁殖点,但如果他们重新记录,它会工作,玩家会被传送。为什么会发生这种情况 JoinEvent: public class JoinEvent implements Listener{ private Main main; public JoinEvent(Main main) { this.main = main; } @EventHandler public void onJoin(PlayerJoinEvent e) {

我有一个问题,当一个玩家加入游戏时,他们有时不会被传送到繁殖点,但如果他们重新记录,它会工作,玩家会被传送。为什么会发生这种情况

JoinEvent:

public class JoinEvent implements Listener{

private Main main;

public JoinEvent(Main main) {
    this.main = main;

}

@EventHandler
public void onJoin(PlayerJoinEvent e) {
    Player p = e.getPlayer();

    main.players.add(p);



    Location loc = (Location) main.locationConfig.get("main.spawns.Lobby");
    main.saveFile();

    e.getPlayer().teleport(loc);



    p.sendMessage(Main.prefix + "§6Welcome to Trouble in Mineville!");

    e.setJoinMessage(p.getDisplayName() + " §6has joined the server.");

    p.setHealth(20D);
    p.setFoodLevel(20);
    p.setFireTicks(0);
    p.setGameMode(GameMode.ADVENTURE);




    if(Roles.innocent.size() > Roles.traitor.size()) {
        Roles.traitor.add(p);
    } else {
        Roles.innocent.add(p);

    }




        }

        //if(Bukkit.getOnlinePlayers().size() >= 2 || Waiting.timeUntilStart > 60) {
        //Bukkit.broadcastMessage(Main.prefix + "§6There are now 2 players online!");
        //Bukkit.broadcastMessage(Main.prefix + "§6Timer has been shortened to 60 seconds.");
        //Waiting.timeUntilStart = 60;

        //}

@EventHandler
  public void chatEvent(AsyncPlayerChatEvent event) {
  Player p = event.getPlayer();
  {
    if(GameState.getCurrentGamestate() == GameState.WAITING) {
    event.setFormat("§e0 §8§l┃ §5Scout §9" + "%s §8» §f%s");
    }

    if(GameState.getCurrentGamestate() == GameState.STARTING || GameState.getCurrentGamestate() == GameState.INGAME || GameState.getCurrentGamestate() == GameState.RESTARTING) {
        event.setFormat("§8§l┃ §5Scout §9" + "%s §8» §f%s");
        }

    if(main.spectators.contains(p)) {
        event.setFormat("§8§l┃ §4DEAD §8┃ §5Scout §9" + "%s §8» §f%s");
    }

    }
}
   }

另一个插件可能与您的冲突

争夺玩家首次登录的位置是一种非常常见的冲突

一个流行的替代方法是在玩家登录后稍微安排你的远程传送

您还需要记住,由于Bukkit/spiget/Forge/海绵是基于反向工程代码构建的,因此事件在更新时偶尔会在不通知的情况下中断。因此,您使用的服务器软件可能会出现错误

如果您真的想调试它,您可以调试服务器,并查看哪些插件正在侦听onJoin事件,以及它们在做什么

在主线程上阻塞也是个坏主意。您应该在后台或服务器第一次启动时加载内容。很有可能是这种阻塞/延迟导致了您的计时问题,但值得怀疑

它们有时不会被传送到产卵点,但如果它们 重新记录会起作用,玩家会被远程传送

这是一个很大的提示,无论哪个插件做这件事,都可能只是在第一次加入时做的

第一次加入服务器完全停止(创建player.dat时)或自上次重新启动后服务器联机后的第一次加入

故障排除

更新服务器软件,查看问题是否仍然存在

更新插件,看看问题是否仍然存在

删除所有其他插件,查看您是否仍然遇到此问题,如果是,请联系您使用的服务器软件的论坛/issuetracker/chatroom,或者自行调试

如果你想提高效率,就慢慢地把你的插件以二进制搜索的顺序介绍回来。当问题再次出现时,您已经找到了导致它的插件


如果在所有这些之后,它仍然发生,这可能是您自己的插件或服务器软件中的错误。

另一个插件可能与您的插件冲突

争夺玩家首次登录的位置是一种非常常见的冲突

一个流行的替代方法是在玩家登录后稍微安排你的远程传送

您还需要记住,由于Bukkit/spiget/Forge/海绵是基于反向工程代码构建的,因此事件在更新时偶尔会在不通知的情况下中断。因此,您使用的服务器软件可能会出现错误

如果您真的想调试它,您可以调试服务器,并查看哪些插件正在侦听onJoin事件,以及它们在做什么

在主线程上阻塞也是个坏主意。您应该在后台或服务器第一次启动时加载内容。很有可能是这种阻塞/延迟导致了您的计时问题,但值得怀疑

它们有时不会被传送到产卵点,但如果它们 重新记录会起作用,玩家会被远程传送

这是一个很大的提示,无论哪个插件做这件事,都可能只是在第一次加入时做的

第一次加入服务器完全停止(创建player.dat时)或自上次重新启动后服务器联机后的第一次加入

故障排除

更新服务器软件,查看问题是否仍然存在

更新插件,看看问题是否仍然存在

删除所有其他插件,查看您是否仍然遇到此问题,如果是,请联系您使用的服务器软件的论坛/issuetracker/chatroom,或者自行调试

如果你想提高效率,就慢慢地把你的插件以二进制搜索的顺序介绍回来。当问题再次出现时,您已经找到了导致它的插件


如果在所有这些之后,它仍然发生,这可能是您自己的插件或服务器软件中的错误。

稍微延迟一点传送,否则另一个插件可能正在与它交互。延迟5个滴答声,例如(1s=20个滴答声)除了@Kerooker所说的之外,您还可以更改事件的优先级,例如@EventHandler(priority=EventPriority.lower)稍微延迟一点传送,否则另一个插件可能正在与它交互。延迟5次,例如(1s=20次)除了@Kerooker所说的之外,您还可以更改事件的优先级,例如@EventHandler(priority=EventPriority.lower)