Minecraft插件 - 大块一代落在随机传送上

时间:2017-12-26 09:54:54

标签: plugins minecraft bukkit

我正在制作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 = 6600z=7520;我加载了所有的块,它可以工作,当播放器被传送时,我看到在控制台中加载了块({{1} })。但它是ChunkLoadEventx=40的一大块。这根本不符合逻辑。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

大块不是位置。

该块是位置的1/16,因此您的示例x​​ = 6600,z = 7520将是x = 412 z = 470的块位置

相似地,x = 40,z = 150的块坐标
等于x = 640-656 z = 2400-2416世界中x / z的范围