我遇到这个问题,当一个玩家加入游戏时,他们有时不会被传送到生成点,但如果他们重新开始它将会工作,玩家将被传送。为什么会这样?
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");
}
}
}
}
答案 0 :(得分:0)
另一个插件很可能与你的插件冲突。
争取玩家首次登录的位置是一个非常普遍的冲突。
一种流行的替代方案是在玩家登录后稍微安排你的传送。
您还需要记住,由于Bukkit / Spigot / Forge / Sponge是基于逆向工程代码构建的,因此事件会在更新时偶尔发生。因此,您可能遇到了使用的服务器软件的错误。
如果你真的想调试它,你可以调试服务器,看看哪些插件正在监听onJoin事件,以及他们在做什么。
阻止主线程也是一个坏主意。您应该在后台加载内容,或者第一次启动服务器时。这可能是造成时间问题的阻塞/延迟的可能性,但这是可疑的。
他们有时候不会被传送到生成点,但是如果他们的话 重新设置它将起作用,玩家将被传送。
这是一个很大的提示,无论哪个插件执行此操作,都可能只在第一次加入时执行。
自服务器自上次重启以来服务器上线以来,服务器完全停止(创建player.dat时)的首次加入或首次加入。
<强>疑难解答强>
更新您的服务器软件,查看问题是否仍然存在。
更新您的插件,查看问题是否仍然存在。
删除所有其他插件,看看您是否仍然遇到此问题,如果是,请联系您使用的服务器软件的forums / issuetracker / chatroom,或自行调试。
如果您想提高效率,请以二进制搜索顺序慢慢推出您的插件。当问题出现时,您已找到导致它的插件。
如果完成所有这些后仍然会发生,则可能是您自己的插件或服务器软件中的错误。