石橋を叩いて壊すブログ

ボスモンスタープラグインを更新した

1年ほど前に書いたボスモンスターを追加するプラグインを、いくつかバグを直して最新にしてみた。
さすがに前回のは、ダイヤ装備でも余裕で死ぬとんでもない難易度設定だったので、その辺も修正した。
今回も、クライアントMODは不要。


スティーブ、いまこそ我を倒してみせよ。

導入

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

BossMonster.jar - 17KB

使用

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

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

もし、ボスを出現させたあとにボスがどこにいるか分からなくなった場合は、もういちど「/boss」コマンドを実行するとコマンド実行者のいる場所にボスを強制移動できる。
ボスを消去したい場合は、OP権限付きプレイヤーが「/reload」コマンド(プラグインを再起動するBukkitのコマンド)を実行すると、プラグインが再起動され、ボスは消去される。

変更内容

上記したとおり、主な変更は難易度に関する調整。
鉄の剣と鉄の防具、そしていくつかの回復ポーションを用意し攻撃力増加ポーションを飲んだプレイヤーがLv1のボスをひとりで倒せる程度にしてみた。
ダイヤ装備の人には物足りないと思うので、その場合はボスのレベルを上げて挑戦してほしい。

ボスのエンチャントを下方修正。
ボスに予め付いている、攻撃力上昇Lv4・再生能力Lv4・耐性Lv3・火炎耐性Lv3の各エンチャントをすべてLv2に変更。
移動速度はLv3のまま変更なしなので、エンチャントなしのプレイヤーが走って逃げても障害物がない限り追いつかれるのは相変わらず。
さらに、レベル21以上では移動速度がLv4にアップ。


レベル50の強さは以前よりも凶悪に。ゾンビピッグマン384匹(スポーンエッグ6スタック分)とボスを閉鎖空間に入れて実験。
(ノーマルモードでボスの前に立ってボスの流れ弾でピッグマンが怒るのを待ち、戦闘開始後はクリエイティブモードに切り替えて観戦。)
結果、4分05秒でボスの圧倒的勝利。ていうかHPが半分も減ってない。

ボスのレベルに応じて、ボスが使うスキルが強力になるよう変更。
前回は、ボスのスキルは常に同じ動作だった。
今回は4つのスキルがすべてレベル依存の動作になるよう修正。
例えばマシンガンショットは、レベルが低いと0.1秒おきに矢を射ってくるが、レベル11以上では0.05秒おきと2倍の速度になる。
矢の本数もレベルに依存して増加するうえ、レベル20以上では一度に最大4本射出してくる。
ヒールポーションでは、レベル10以下では負傷のスプラッシュポーションLv1を、それ以上では同Lv2を使ってくる。
投げるポーションの数はレベルに依存して増加する。
なお、ヒールポーションはHPが半分以下の場合のみ使用するよう変更。





見よ、この圧倒的な矢の数を。(左がLv1スキル、右がLv50スキル。)

ボスのレベルに応じて報酬が変動するよう修正。
前回はボスを倒したとき、得られるアイテムや経験値はレベルに依存しなかった。
今回はレベルが高いほど高い報酬を得られるように変更。
ボスにエフェクトが付くよう変更。
ボスが矢を射ったりダメージを受けたときに、それらしい音が出るように変更。これにより臨場感がアップ。
また、ボスの周囲に炎のエフェクトが出て禍々しさもアップ。


再生速度50%のブレイズの吐息音と、スポーンブロックの炎を組み合わせ、クライアントMODなしでもこの禍々しさ。

/bossコマンドにボス呼び出し機能を追加。
上記のとおり、ボスが行方不明になった場合に、OP権限プレイヤーが/bossコマンドを実行すると、ボスがその場に移動するよう変更。
リスポーンするわけではなく、移動してくるので、残りHPやエフェクトは維持される。

改善内容

以前のバージョンで起こっていたいくつかの問題を修正した。

ボスがデスポーンしないよう修正。
前回のバージョンでは、出現したボスがいつの間にかいなくなっていることがあった。
どうやら、(主にプレイヤーが死んでリスポーンしたときなどに)ボスの周囲にプレイヤーがひとりもいない場合に、マインクラフトの仕様でモンスターがデスポーンしていたらしい。
ということで、デスポーンしないよう設定のうえ、ボスがいるチャンクもアンロードしないよう変更。
スキルで放たれた矢が、早めに消えるように修正。
前回は、ボスが射った矢が放置されていたので、矢が多くなるとグラフィックの描画に負荷が掛かっていた。
今回は発射後5~8秒ですべての矢が消去されるように変更したので、負荷が軽減されたはず。
(ちなみに、デフォルトでは射った矢が消えるのに60秒かかる。)
ボスの残りHPがHPバーの右側に表示していたのを左右反転。
前回はボスの残りHPを示す緑色のバーがHPバーの右側に出ていた (||||||||||形式)が、 FF14などで一般的な左側に出るように修正。 (||||||||||形式)
トルネードショット使用時、ボスが回転するよう変更。
前回は正面を向いたまま全方位に矢を射っていたので見た目が不自然だった。
今回は矢を射る方向を見てから射るようになった。(ただし、気休め程度。)
ソースコードを若干修正。
前回、文字に色をつけるのに装飾コードを直接指定していたが、プラグインのサンプル用としては不適切なのでChatColor定数指定へ変更。
アイテムIDを直接指定するItemStackのコンストラクタが非推奨になったので、Materialを使うコンストラクタに変更。

ソースコード

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

もしEclipseをつかっているなら、BossMonsterというパッケージを作り、
そのなかに以下の構成になるよう上記すべてのファイルを配置してビルドすれば動くはず。
ソースコードはわかりやすいよう多めに日本語でコメントを打ってあるので参考になれば幸い。
組み込みや改造しての配布はご自由にどうぞ。
プラグイン自体の作成に関する知識はMinecraft Modding WikiのPlugin Tutorialのページで。


パッケージの構成

設定項目 設定値
グループID jp.jias.bukkit
アーティファクトID BossMonster
バージョン番号 1.7.9-R0.2
パッケージの名前 jp.jias.bukkit.bossmonster
メインクラスの名前 BossMonster

基本的な構成は前回から変えていないので、ソースコードに関する解説は以下のあたりをご参考にしていただきたい。
以下に書いていないこと(エフェクト関係)は後日書く。

2014/08/07追記:
V1.6.4 R2.0でも動くようになりました。
ソースは変えてませんがBossMonster.jarをビルドしなおしたので、新しいBossMonster.jarをダウンロードして試してみてください。

この記事を評価

88 47

コメント

  1. 【そこら辺のクラフター】 ボスモンスタープラグインと同じように
    Creature Squid = null;
    Squid = (Creature) player.getWorld().spawnEntity(player.getLocation(), EntityType.SQUID);
    というソースを書いたら、spigot1.8.8でエラーを吐かれました、spigot1.8ではエラーが出ていなかったので他に何か書き方があるのでしょうか・・・?ご教授お願いします [2015/8/16 13:42]
  2. 【石橋】 エラーについての質問なら発生したエラーを書いて欲しかった。
    こっちでもspigot1.8.8で同じことやってみたけど、ClassCastExceptionがおきた。これのことでいいかな?

    調べてみたけど、SquidがCreatureを実装しなくなってるね。
    https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Squid.htmlのAll SuperinterfacesのところにCreatureがない。親クラスに向かって辿っていくと
    Squid extends WaterMob → WaterMob extends LivingEntity → LivingEntity extends Entity,...
    となっているけど、手元にダウンロードしてあったBukkit 1.7.9-R0.2のソースで同じく親クラスを調べると
    Squid extends WaterMob → WaterMob extends Creature → Creature extends LivingEntity → LivingEntity extends Entity,...
    になってる。

    CreatureインターフェースにはsetTarget/getTargetメソッドがあるから、
    何か他の生物に興味を示すもの(モンスターとか村人とか)だけがCreatureを実装するように整理されたんじゃないかなあ…予想だけど。

    まあ、キャストできないってだけだし、型を変えればとりあえず動いたよ。

    LivingEntity squid = null;
    squid = (LivingEntity) player... [2015/8/17 21:51]
  3. 【そこら辺のクラフター】 おっしゃるとおりでClassCastExceptionが発生してました、ご教授ありがとうございます [2015/8/17 23:51]
  4. 【そこら辺のクラフター】 連投失礼します(;・∀・)

    前回のソースからLivingEntity Squidを配列型にしたいのですが、いざ実装してみたら
    ArrayStoreExceptionが発生し、再びエラーを吐かれました・・・

    ArrayStoreExceptionは配列に違う型を代入すると発生するものだとは知ってはいるのですが、最初にLivingEntityで定義しているし、キャストもしているのでなぜエラーが起こるのかが、調べてもわかりませんでした、どうか2度目ですが、ご教授お願いします

    ---ソース---
    public LivingEntity[] Squid = new Creature[50];
    Squid[x] = (LivingEntity) player.getWorld().spawnEntity(player.getLocation(), EntityType.SQUID);

    (Squid[x]のxはfor文で回しているため) [2015/8/18 01:51]
  5. 【石橋】 そりゃnew Creature[50];でCreatureの配列作ってるからCreatureを実装してないSquidは入れられんわな。
    new LivingEntity[50];でどうか。 [2015/8/18 19:42]
  6. 【そこら辺のクラフター】 あ、本当だ・・・
    public側だけしか気にして居なくて気が付いていませんでした、ありがとうございますm(__)m [2015/8/18 20:27]
  7. 【ゲスト】 ダイヤモンド多すぎてバランス崩壊しちゃうので、configファイルで買えられたら嬉しいのですが…
    できればダイヤモンド以外のアイテムに設定したいです。 [2015/12/13 02:33]
  8. 【石橋】 使ってくれてありがとうございます。都合で今すぐは無理ですがそのうちやってみます。 [2015/12/16 00:34]

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

295,349

記事カテゴリー

最近の記事

  1. FF14を翻訳したら国によって結構特色が違った[12/11]
  2. ゼロから始めるFactorioの回路構築(実践例編)[7/24]
  3. ゼロから始めるFactorioの回路構築(条件回路・論理演算編)[7/24]
  4. ゼロから始めるFactorioの回路構築(定数回路・算術回路編)[7/24]
  5. ゼロから始めるFactorioの回路構築(入力・出力・混合編)[7/24]

RSS1.0 RSS2.0

最近のコメント

  1. おー、お役に立てたようでなによりです。再起…[9/11]
  2. この記事が非常の役立ちました。おかげさまで…[9/9]
  3. 1.14.2のAPIで試しましたが、MapInitializeEv…[9/9]
  4. 天晴れ!押したらポーションのモヤモヤでまし…[5/26]
  5. 習うより慣れろって感じで。この記事は記事冒…[4/7]

記事を検索


管理人

石橋

自転車でどこへでも行く