将世界的产卵设置为一个区块的中心

时间:2016-11-16 17:30:03

标签: java bukkit

我最近发现,当我执行命令/ set spawn然后运行/ spawn时,我被传送到块的右下角,这不是我想要的行为。我尝试改变它但无法找到解决方案。

我非常确定可以将生成点设置为块的中心。我该怎么办?

p.getWorld().setSpawnLocation(p.getLocation().getBlockX(), p.getLocation().getBlockY() , p.getLocation().getBlockZ());

3 个答案:

答案 0 :(得分:2)

我记得,不可能将产卵位置设置到块的中心。但是你可以很容易地传送到一个街区的中心。

player.teleport(new Location(Bukkit.getWorld("worldName"), 100.5, 50, 100.5));

如果你希望玩家在死亡时在这些坐标上产卵,请听取PlayerRespawnEvent

@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent event) {
    event.getPlayer().teleport(new Location(Bukkit.getWorld("worldName"), 100.5, 50, 100.5));
}

如果您希望他们在登录时传送到那里,请听onPlayerJoin事件。

答案 1 :(得分:2)

好的,没有用诡计做过Java,所以这里需要你的传送线,p.teleport(p.getWorld().getSpawnLocation());并用它替换它。

Location centerblock = new Location(p.getWorld(), p.getWorld().getSpawnLocation().getX() + 0.5, p.getWorld().getSpawnLocation().gety(), p.getWorld().getSpawnLocation().getZ() + 0.5);
p.teleport(centerblock);

基本上只需要生成产卵位置,并在X和Z坐标上添加0.5个区块,即“#34;应该"把你放在中心。

如果这不起作用,请告诉我,我会再试一次并进行编辑。

答案 2 :(得分:1)

不幸的是,不可能将块的中心设置为世界的生成点。

原因是方法setSpawnPoint的签名。

World.setSpawnPoint(int x, int y, int z)

由于是整数,唯一可能的点不是中心,因为块的中心是它的一半协调,所以如果一个块位于x = 100的位置,y = 100并且z = 100,其中心为x = 100.5,y = 100,z = 100.5。

由于setSpawnPoint只接受整数,因此该方法是不可能的。

但是,有一种解决方法

如果没有床位重生位置,你可以定义你世界的产卵点和传送球员的位置。

Location l = new Location(World w, x + 0.5, y, z + 0.5)

分别为w,x,y和z表示位置的世界,x坐标,y坐标和z坐标。

并处理你的PlayerRespawnEvent:

@EventHandler
public void onPlayerRespawn(PlayerRespawnEvent e) {
   Player player = e.getPlayer();
   Location bedSpawn = player.getBedSpawnLocation();    //Null if there is no spawn

    if (bedSpawn == null) {
        player.teleport(l);
    }
}