BukkitPlugin開発日記 パーティクルの表示 Minecraft【マインクラフト】 MIN-CRA

パーティクルの表示

((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);
		}
	}


魔方陣