Densyakunのブログ

Qiitaもやってます: https://qiita.com/Densyakun

【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ブロック上に瞬間移動します。

f:id:Densyakun:20180212202115g:plain

瞬間移動なので、木に埋まったりしてしまいます。 

 

 

 

ベクトルを操作して、移動させる

 

最後に、ベクトルを操作して、移動させます。

ベクトルは、数学では「大きさと向きを持った量」とされています。

 

 

平面で例えると、

原点から点[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だと果てしなくトンでいきます)

f:id:Densyakun:20180213011025p:plain

f:id:Densyakun:20180213011030p:plain

 

他にも出来ることは山ほどあるので、色々試してみて下さい。

 

 

 

記事一覧に戻る