こんにちは皆さん。
プラグイン開発するときは絶対と言っていいほど、パーティクルを表示させたいときが来ますよね!
例えば、杖を振ったら煙が出たり、人を殴ったら大げさに爆発エフェクトを表示してみたり!
今回はそんなパーティクルを表示する方法を記事にしました。
ぜひお役立てください!
コード
パーティクルは Player class か World class が持っている "spawnParticle" メソッドで表示することができます!
そのワールドにいる全員にパーティクルを見せたいときは World Class の物を、そのプレイヤーにしか表示したくないのなら Player Class から表示しましょう。
例えばすごく大げさなパーティクルを大量に出すなどで周りのプレイヤーにあまり干渉してほしくないときは Player Class から使えば様でしょう。
基本
具体的なコードはこちら
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (sender instanceof Player) {
Player p = (Player) sender;
if (args[0].equals("test")){
p.getWorld().spawnParticle(Particle.DRIP_LAVA, p.getLocation(), 0);
}
}
}
上記のコードでは player から spawnParticle で "DRIP_LAVA" を プレイヤーの座標に表示させています。
ちなみにプレイヤーの座標はスキンの真下になります。なので上記のコードでは足のすぐ下にドリップマグマが出ています。
座標を変更
足元に表示するだけなんて少し味気ないですよね。
プレイヤーの周りに円状にパーティクルを出します。
for (int i = 0; i < 24; i++){
double t = 3 * 3.14 / 24 * nowTime;
double x = Math.sin(t);
double y = Math.cos(t);
Location loc = p.getLocation().add(x, 1, y);
p.getWorld().spawnParticle(Particle.DRIP_LAVA, loc, 0);
}
上記の例では、プレイヤーの座標を中心に、24角形のそれぞれの頂点座標を順に計算し、そこにパーティクルを表示しています。
(実際にはこの処理を 1tick でするのでプレイヤーからは円状のパーティクルが同時に出現するように見えます。ていうか同時に表示されています。)
Location.add(x, y, z) でその場所からぞの位座標を足すのかを指定できるので便利ですね!
色付きのほこりを表示してみる
マイクラには DUST と呼ばれるパーティクルがあります。
それに色を指定するとカラフルできれいなのでよく使います。
そちらのコードがこちら
for (int i = 0; i < 24; i++){
double t = 3 * 3.14 / 24 * nowTime;
double x = Math.sin(t);
double y = Math.cos(t);
Location loc = p.getLocation().add(x, 1, y);
p.getWorld().spawnParticle(Particle.DUST_COLOR_TRANSITION, loc, 0, 0.001, 1, 0, 1, new Particle.DustTransition(Color.RED, Color.RED, 1));
}
上記のコードで赤色の DUST が表示されます。
Colorを両方 RED にしていますが、 "Color.RED, Color.BLUE" とすると赤と青に交互に切り替わって綺麗です。
色をたくさん切り替えることで虹色のようになりきれいになると思います。