有些玩家不会被传送出来

时间:2017-04-01 15:44:02

标签: bukkit

我遇到这个问题,当一个玩家加入游戏时,他们有时不会被传送到生成点,但如果他们重新开始它将会工作,玩家将被传送。为什么会这样?

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");
    }

    }
}
   }

1 个答案:

答案 0 :(得分:0)

另一个插件很可能与你的插件冲突。

争取玩家首次登录的位置是一个非常普遍的冲突。

一种流行的替代方案是在玩家登录后稍微安排你的传送。

您还需要记住,由于Bukkit / Spigot / Forge / Sponge是基于逆向工程代码构建的,因此事件会在更新时偶尔发生。因此,您可能遇到了使用的服务器软件的错误。

如果你真的想调试它,你可以调试服务器,看看哪些插件正在监听onJoin事件,以及他们在做什么。

阻止主线程也是一个坏主意。您应该在后台加载内容,或者第一次启动服务器时。这可能是造成时间问题的阻塞/延迟的可能性,但这是可疑的。

  他们有时候不会被传送到生成点,但是如果他们的话   重新设置它将起作用,玩家将被传送。

这是一个很大的提示,无论哪个插件执行此操作,都可能只在第一次加入时执行。

自服务器自上次重启以来服务器上线以来,服务器完全停止(创建player.dat时)的首次加入或首次加入。

<强>疑难解答

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

更新您的插件,查看问题是否仍然存在。

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

如果您想提高效率,请以二进制搜索顺序慢慢推出您的插件。当问题出现时,您已找到导致它的插件。

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