パーティクルの表示
((CraftWorld) ワールド).getHandle().a("パーティクル名",X,Y,Z,パーティクルの個数,DX,DY,DZ,0);
X,Y,Zにはパーティクルを表示させる座標を、DX,DY,DZはパーティクルをどの範囲に分散させるかです。
実際の使い方を見ていきましょう。
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
if(sender instanceof Player){//コマンドの発行元はプレイヤーか?
if(cmd.getName().equalsIgnoreCase("playheart")){
playheart((Player)sender,Integer.valueOf(args[0]));
return true;
}
}
return false;
}
public void playheart(Player player,int num){
Location loc=player.getLocation();
((CraftWorld) player.getWorld()).getHandle().a("heart", loc.getX(), loc.getY()+2, loc.getZ(), num, 0.32D, 0.32D, 0.32D, 0);
}このプログラムでは/playheart <個数>を打ったプレイヤーの頭の辺りにハートマークを出します。
分散の値は0.32Dがちょうどよいようです。

パーティクル一覧
| パーティクル | コード名 |
|---|---|
| 煙 | "smoke" |
| ブロック破壊アニメーション | "iconcrack_" |
| 雪玉/卵の破壊/アイアンゴーレム召喚時 | "snowballpoof" |
| ツール破壊時 | "tilecrack_" |
| ネザーポータル/エンダーアイ/ドラゴンの卵/エンダーマン/エンダーチェスト | "portal" |
| 水しぶき | "splash" |
| 水泡 | "bubble" |
| 菌糸の胞子 | "townaura" |
| 爆発 | "hugeexplosion" |
| 炎 | "flame" |
| ハートマーク | "heart" |
| クリティカルヒットの閃光 | "crit" |
| エンチャント武器のクリティカルの閃光 | "magicCrit" |
| 音符ブロック | "note" |
| 文字 | "enchantmenttable" |
| 溶岩の火の粉 | "lava" |
| 足跡 | "footstep" |
| レッドストーンの煙 | "reddust" |
| 水の滴 | "dripWater" |
| 溶岩の滴 | "dripLava" |
| スライムのしぶき | "slime" |
※wikiより引用。
ビーム
public static void hatudou(Player player,String s,Entity e){
Location loc2=player.getLocation();
Location l=player.getLocation();
Location loc=e.getLocation();
loc2.add(0,1.2,0);
loc.add(0,0.5,0);
l.add(0,1.2,0);
int _distance=(int) loc.distance(loc2)*20;
loc.subtract(loc2.getX(), loc2.getY(), loc2.getZ());
double d=1D/_distance;
double x=loc.getX()*d;
double y=loc.getY()*d;
double z=loc.getZ()*d;
for(int i=0;i<_distance;i++){
((CraftWorld) player.getWorld()).getHandle().a(s, l.getX()+x*i, l.getY()+y*i,l.getZ()+z*i, 10, 0,0,0,0);
}
}

円
public void playboy(Player player,String s){
Location loc=player.getLocation();
for(float i=0;i<360;i=(float) (i+0.5)){
((CraftWorld) player.getWorld()).getHandle().a(s, loc.getX()+Math.sin(Math.toRadians(i))*3, loc.getY()+0.3, loc.getZ()+Math.cos(Math.toRadians(i))*3, 1, 0, 0, 0, 0);
}
}

魔方陣