我正在制作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;
我加载了所有的块,它可以工作,当播放器被传送时,我看到在控制台中加载了块({{1} })。但它是ChunkLoadEvent
,x=40
的一大块。这根本不符合逻辑。我该怎么做才能解决这个问题?
答案 0 :(得分:0)
大块不是位置。
该块是位置的1/16,因此您的示例x = 6600,z = 7520将是x = 412 z = 470的块位置
相似地,x = 40,z = 150的块坐标
等于x = 640-656 z = 2400-2416世界中x / z的范围