石橋を叩いて壊すページ

簡単なボスモンスターをクライアントMOD不要で追加するプラグインを書いてみた

プラグイン作りのサンプル用として簡単なソースにとどめつつ、
マルチワールドでみんなで楽しめるコンテンツとして、
ボスモンスターを追加するBukkitプラグインを書いてみた。
クライアントMODは不要。


こちらが追加されるボス。スケルトンに鉄の装備を着せている。
ヘルメットをかぶっているため太陽光でも燃えない。名前が誰かに似てるのは気のせい。

このボスは4つの必殺技を持っており、攻撃を受けるとたまに必殺技で反撃してくる。


トルネードショット。
360度全方向に発射される矢に逃げ場はない。


シャワーショット。
頭上に向けて放たれた矢は豪雨のように襲い掛かる。


マシンガンショット。
間断なく打ち込まれる矢がターゲットを針のむしろにする。


ヒールポーション。
打ち上げられたスプラッシュダメージポーションはスケルトンを回復しつつ周囲を襲う。

エンチャント付きダイヤ装備でないと倒せない程度に難しくしてあるが、
あくまでプラグイン作りの学習用なので、あまり精密な難易度調整はしていない。
また、MineCraftのバージョンが上がっても修正などはしないかもしれない。

導入

導入方法は簡単。BossMonster.jarファイルをダウンロードして、Bukkitのpluginsフォルダに入れるだけ。
Bukkitの1.6.2-R1.0 Recommended Build(ビルド番号2879)で動作確認済み。

BossMonster.jar - 10KB

使用

導入後、OP権限付きプレイヤーがゲーム内でコマンド「/boss」を実行すると、コマンド実行者のいる場所にボスが現れる。

「/boss 10」のように、コマンドの後ろに数字をつけると難易度調整ができる。指定しない場合のデフォルトは1。
基本的にはボスの討伐に参加する人数(10人なら10)を指定して、あとは好みで増減。

ソースコード

このプラグインは、6つのjavaソースファイルと、1つの設定ファイルからなっている。

  • BossMonster.java - このプラグインの本体。ボスの生成・HP表示・死亡時処理などを行う。
  • Skill.java - ボスが使う必殺技のベースとなるクラス。一定時間おきに必殺技のための処理を呼び出したりする。
  • MachinegunShot.java - 必殺技のひとつ、マシンガンショットの処理をする。
  • ShowerShot.java - 必殺技のひとつ、シャワーショットの処理をする。
  • ThrowPotion.java - 必殺技のひとつ、ヒールポーションの処理をする。
  • TornadoShot.java - 必殺技のひとつ、トルネードショットの処理をする。
  • plugin.yml - プラグインに必要な設定ファイル。

もしEclipseをつかっているなら、BossMonsterというパッケージを作り、
そのなかに以下の構成になるよう7つのファイルを設定してビルドすれば動くはず。
ソースコードはわかりやすいよう多めに日本語でコメントを打ってあるので参考になれば幸い。
改造しての配布はご自由にどうぞ。


パッケージの構成

後日このプラグイン作りながら思ったことを徒然と書くと思う。


倒すとランダムな個数のダイヤモンドとエンダードラゴンと同等の経験値オーブを出す。

2013/09/25追記:
1箇所バグがあったので、添付ファイルを修正した。

誤:
286:			e.getEntity()
287:					.getWorld()
288:					.dropItem(e.getEntity().getLocation(),
289:							new ItemStack(Material.DIAMOND, rand.nextInt(65)));
正:
286:			e.getEntity()
287:					.getWorld()
288:					.dropItem(e.getEntity().getLocation(),
289:							new ItemStack(Material.DIAMOND, 1+rand.nextInt(64)));

rand.nextInt(65)は0以上65未満のランダムな整数を返すが、誤の状態だとゼロが返された場合
ゼロ個のダイヤモンドという無意味なアイテムスタックが生まれてしまうので、最低でも1個はダイヤモンドが出るようにした。

2014/08/03追記:
本プラグインの次バージョンを作成しました。

この記事を評価

この記事にコメント

  1. ...

【この記事にコメント】
お名前:
コメント:

Menu