Bukkit 有些选手赢了';不要被传送到产卵地
我有一个问题,当一个玩家加入游戏时,他们有时不会被传送到繁殖点,但如果他们重新记录,它会工作,玩家会被传送。为什么会发生这种情况 JoinEvent: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) {
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)