【Spigot】Bukkitプラグインの作り方講座 - テレポート、ベクトル操作
今回は、エンティティを移動します。
エンティティをテレポートさせる
エンティティをテレポートさせるには、
entity.teleport(entity)
entity.teleport(location)
を使います。
引数にEntity型を入れる場合は、そのエンティティの場所に、
Location型(org.bukkit.Location)を入れる場合は、その場所に瞬間移動します。
エンティティの座標を取得するには、entity.getLocation()
を使います。
@EventHandler
public void onEntityDamage(EntityDamageEvent e) {
Entity entity = e.getEntity();
Location loc = entity.getLocation();
loc.setY(loc.getY() + 3);
entity.teleport(loc);
}
上の例では、getY()で取得したY座標に3を足して、loc.setY(y)
でY座標を設定しています。
つまり、エンティティがダメージを受けると、3ブロック上に瞬間移動します。
瞬間移動なので、木に埋まったりしてしまいます。
ベクトルを操作して、移動させる
最後に、ベクトルを操作して、移動させます。
ベクトルは、数学では「大きさと向きを持った量」とされています。
平面で例えると、
原点から点[vx,vy]まで矢印が伸びているとします。
この矢印をベクトルと言います。
この時、原点から点までのvx量とvy量がベクトルの持つ大きさです。
そしてこの量によって向きが決まるわけです。
ベクトルは3Dでも使われており、 x,y,z で構成されています。
xは横方向、yは縦方向、zは前後方向の量です。
ベクトルがよくわからない人はこちら: ベクトル解析 - [物理のかぎしっぽ]
@EventHandler
public void onEntityDamage(EntityDamageEvent e) {
Entity entity = e.getEntity();Entity entity = e.getEntity();
entity.setVelocity(new Vector(0f, 2f, 0f));
}
上の例ではダメージを受けたエンティティがトンでいきます。
ベクトル量の調整がちょっと難しかったりします。(1だとなかなか飛びません。10だと果てしなくトンでいきます)
他にも出来ることは山ほどあるので、色々試してみて下さい。