我最近发现,当我执行命令/ set spawn然后运行/ spawn时,我被传送到块的右下角,这不是我想要的行为。我尝试改变它但无法找到解决方案。
我非常确定可以将生成点设置为块的中心。我该怎么办?
p.getWorld().setSpawnLocation(p.getLocation().getBlockX(), p.getLocation().getBlockY() , p.getLocation().getBlockZ());
答案 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);
}
}