我正在制作一个UHC插件,当我想传送所有播放器时,我有问题。球员没有为球员装载。然后,他们滞后约7秒钟,落入空隙之前,然后才能移动。经过一番研究,我已经看到块的加载范围为10,可以在server.properties
中进行修改。
所以这是我的代码:
public class RTPCommand implements CommandExecutor {
Main main;
int i, j, x, z;
World world;
Player player;
public RTPCommand(Main main) {
this.main = main;
world = Bukkit.getWorld("world");
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(label.equalsIgnoreCase("rtp") && sender instanceof Player){
player = (Player) sender;
Random random = new Random();
x = random.nextInt(10000);
z = random.nextInt(10000);
Bukkit.broadcastMessage("X : " + x + " // Z: " + z);
i = x - 160;j = z - 160;
new TaskTimer().runTaskTimer(main, 0, 2);
}
return false;
}
class TaskTimer extends BukkitRunnable{
@Override
public void run() {
Chunk chunk = world.getChunkAt(i, j);
chunk.load(true);
j += 16;
if(j == (z + 160)){
if(i == (x + 160)){
cancel();
System.out.println("FINI.");
player.teleport(new Location(world, x, world.getHighestBlockYAt(x, z), z));
}else{
i += 16;
j = z - 160;
}
}
}
}
}
执行命令/RTP时,它会将块的块加载到播放器周围的10个范围。我还注册了Chunkloadevent,并在每个加载的块上制作了System.out.println(chunk);
。因此,例如x = 6600
,z=7520;
我加载了所有块,并且可以正常工作,并且当播放器被传送时,我看到块将块加载到控制台中(带有ChunkLoadEvent
)。但这是x=40
的块,z=150
。这根本不符合逻辑。我该怎么办来解决此问题?
块不是位置。
块是该位置的1/16,因此您的示例x = 6600,z = 7520将是X = 412 z = 470
类似地,x = 40的块坐标,z = 150
等于x = 640-656 z = 2400-2416