右クリ動作のある剣や溜め動作の出来る銃を作りたいです

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.314868)

右クリ動作のある剣や溜め動作の出来る銃を作りたいです

投稿記事by eiten » 2018年3月19日(月) 20:10

Modding初心者ですがよろしくお願いします。
現状のスキルは無機能アイテムの追加と、バニラ相当の剣の追加、単純なレシピの追加のみ自分で出来る状態です。

開発環境
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.2 Release (4.7.2)
Build id: 20171218-0600

Minecraft 1.12.2
forge 14.23.2.2624


タイトルにも書きましたが、もう少し詳しく書き直しますと
「左クリックで振った時に独自のSEを出し、右クリックで弓のような溜め動作を取った後に前方近距離へ範囲攻撃を出せる剣」
「弓のように溜めることで威力の変わる銃」

を作りたいのですが
行き詰まってしまい助言を求めに来た次第です。

最初に書いた通り、今は普通の剣(バニラの剣と各種数値とテクスチャしか差異のない剣)しか実装できていません。
ソース抜粋
コード: 全て選択
      //ゼットセイバー -ゼロ-
      Zsabre_Zero = new AddZsabreZero(EnumHelper.addToolMaterial("Z-Saber", 1, 1000, 5, 10, 2))
            .setCreativeTab(MEGAMANZERO)
            .setUnlocalizedName("zsabre_zero")
            .setRegistryName("zsabre_zero");


AddZsabreZero
コード: 全て選択
import net.minecraft.item.ItemSword;

public class AddZsabreZero extends ItemSword{
   public AddZsabreZero(ToolMaterial Material) {
      super(Material);
   }
}

2018-03-19_20.02.44.png


初めての質問、初めてのMod製作で至らない点が多々あるかもしれませんがどうかよろしくおねがいします。


言い訳というか特に見なくても良い雑記
Mod製作のおおまかな仕組みは、バニラにある各要素がforgeによってグループ分けされており
それらを適時呼び出して制作したい要素を実現している。という程度に理解しているのですが
「剣はこのクラス」「修理に使う素材の指定はこのクラス」「爆発のような範囲ダメージはこのクラス」
↑のような解説している場所を見つけられず(昔からモノ探しが壊滅的に下手なので実は有るのかもしれないが)
どうにも出来ずに動けなくなってしまいました。

そんな奴がModingなんかするなと言われそうですが
私が作ろうとしている「ロックマンゼロMOD」はたぶん他に作ろうとしてる人がいません。
自分が作るしか選択肢がないのです。


製作を継続するかぎり新たな問題や障害に対する質問が出ると思うのですが、その場合は新たにトピ建てるより、ここに追記or返信する方が良いのだろうか
むしろ単発質問の定義がいまいちわからずここに投稿すると決断するのに二週間かかった
もうダイヤすら信じられない。
アバター
eiten
ID:9a65af61
水から上がったとこ
 
記事: 2
登録日時: 2016年7月07日(木) 18:15

  • (PostNo.314883)

Re: 右クリ動作のある剣や溜め動作の出来る銃を作りたいです

投稿記事by defeatedcrow » 2018年3月20日(火) 12:33

eiten さんが書きました:Modding初心者ですがよろしくお願いします。
現状のスキルは無機能アイテムの追加と、バニラ相当の剣の追加、単純なレシピの追加のみ自分で出来る状態です。

開発環境
Eclipse Java EE IDE for Web Developers.
Version: Oxygen.2 Release (4.7.2)
Build id: 20171218-0600

Minecraft 1.12.2
forge 14.23.2.2624


タイトルにも書きましたが、もう少し詳しく書き直しますと
「左クリックで振った時に独自のSEを出し、右クリックで弓のような溜め動作を取った後に前方近距離へ範囲攻撃を出せる剣」
「弓のように溜めることで威力の変わる銃」

を作りたいのですが
行き詰まってしまい助言を求めに来た次第です。

最初に書いた通り、今は普通の剣(バニラの剣と各種数値とテクスチャしか差異のない剣)しか実装できていません。
ソース抜粋
コード: 全て選択
      //ゼットセイバー -ゼロ-
      Zsabre_Zero = new AddZsabreZero(EnumHelper.addToolMaterial("Z-Saber", 1, 1000, 5, 10, 2))
            .setCreativeTab(MEGAMANZERO)
            .setUnlocalizedName("zsabre_zero")
            .setRegistryName("zsabre_zero");


AddZsabreZero
コード: 全て選択
import net.minecraft.item.ItemSword;

public class AddZsabreZero extends ItemSword{
   public AddZsabreZero(ToolMaterial Material) {
      super(Material);
   }
}

2018-03-19_20.02.44.png


初めての質問、初めてのMod製作で至らない点が多々あるかもしれませんがどうかよろしくおねがいします。


言い訳というか特に見なくても良い雑記
Mod製作のおおまかな仕組みは、バニラにある各要素がforgeによってグループ分けされており
それらを適時呼び出して制作したい要素を実現している。という程度に理解しているのですが
「剣はこのクラス」「修理に使う素材の指定はこのクラス」「爆発のような範囲ダメージはこのクラス」
↑のような解説している場所を見つけられず(昔からモノ探しが壊滅的に下手なので実は有るのかもしれないが)
どうにも出来ずに動けなくなってしまいました。

そんな奴がModingなんかするなと言われそうですが
私が作ろうとしている「ロックマンゼロMOD」はたぶん他に作ろうとしてる人がいません。
自分が作るしか選択肢がないのです。


製作を継続するかぎり新たな問題や障害に対する質問が出ると思うのですが、その場合は新たにトピ建てるより、ここに追記or返信する方が良いのだろうか
むしろ単発質問の定義がいまいちわからずここに投稿すると決断するのに二週間かかった


とりあえず雑記について先に書いておきますが
バニラのソースについて内容べた張りした上でこの部分は何?と解説してある場所はないです。
それはモヤンの著作物であるソースコード(バラされないように難読化してあります)をネット上に上げる行為に等しいですので、やってはいけない類の行為です。
(故に、例えば私の場合は解説する場合は自作ソースを使い、バニラに言及する場合はあまり中身貼り付けなどはせずにメソッド名などにとどめています。メソッド名はMCPがデコンパイル時に付与する名前で、多分モヤンのもちものではないので。)
Forgeの部分であれば、Forgeのリファレンスがどこかに英文であるんじゃないかと思います。

弓のような動作は、そのアイテム動作を剣ではなく弓にすると出来ます。
なんじゃそれ?と思われそうですが、下記に解説します。
このゲームのアイテム動作はいろんなところに分散しつつハードコードされているので、機能をもたせたい場合はバニラルールに沿うことです。
大事なのは、見た目が剣の形をしていれば、プレイヤーにはそれが剣に見えるということです。
内部のクラスがItemSwordと違っていても、例えばItemFoodあたりを継承させていても、必要な性能さえ乗せれば結構それっぽくなるものです。(そういうことは私自身よくやります)

アイテムに付与できる機能はいろいろありますが、今回関わりそうなのは以下のあたりでしょうか…

●右クリック使用時の動きの選択
Item#getItemUseActionで設定。ここで設定するEnumActionは動作の種類で、この中からしか選べません
”タメ”をしたいならBOW(弓のように脇で引き絞る)か、BLOCK(旧バージョンの剣のように、目の前に突き出してガードする)のどちらかでしょうかね。
ちなみにEATやDRINKは食べ物の動作ですが、動きがアレになるだけで”タメ”の役割は一応果たせます。(食べ終わるとなにか発動するようなギミックに見えます)
NONEはデフォルトの空振りです

●右クリック使用の継続時間
#getMaxItemUseDurationメソッドで設定。通常20tickで1秒です。
この時間がすぎると右クリック押しっぱなし動作が強制終了するので、タメ目的なら長めに設定して良いと思います。

●右クリック動作
・ブロックのターゲットをしているとonItemUse
・右クリック押下中にずっと呼ばれ続けるonItemRightClick
・離すと呼ばれるonPlayerStoppedUsing
の3段階です

onItemRightClickでタメ中の可能判定(弓なら矢があるかチェックし続けていて、タメ中に矢がなくなると中断させている)などに向いています
onPlayerStoppedUsingでタメが十分かの判定をしつつ、矢の消費処理や弾Entity発射などをします

●左クリックの殴り攻撃力
#getAttributeModifiersで武器攻撃力を設定します
別にItemSwordでなくても、ここで設定すればなんでも殴り武器になります

●継承クラス
ItemSwordでもItemBowでも、正直右クリック動作を作るのに関わらないです
これが関わるのはエンチャント適正です
剣のエンチャントをつけたいならSword、弓のエンチャントをつけたいならBowを選択、両方は厳しいです
剣エンチャは左殴り時にバニラ処理で適用してくれますが、弓エンチャの効果は上記onPlayerStoppedUsingメソッド内で自力実装が必要です
(自力で作る分、好みの効果に改変できるともいう)

Item側の処理はこんなところだと思います
ちなみに、AABBが扱えれば可能な範囲攻撃はともかく、弾Entityの作成はもう二段階くらい難しいので頑張ってください
アイテムの参考なら、うちのModのマスケット銃が使えるかもしれないのでどうぞ
https://github.com/defeatedcrow/HeatAndClimateMod/blob/1.12.1_master/java/defeatedcrow/hac/main/item/tool/ItemMusketDC.java
HaCのマスケットは一発ごとに弾込め動作が必要なのと、タメの段階ではなく弾アイテムの種類を判別して発射Entityを切り替えるギミックですがね
個別レクチャーは勘弁ですが、無言でソースを参考にするだけならAMTもHaCも特に制限はしていないです(ライセンスはMMPLです)

質問は、タイトルにある内容が終わったら切り上げたほうが良いんじゃないですかね、多分
タイトルと内容が食い違うと閲覧する人が困りそうですし
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:0790d4e9
ラピスラズリ収集家
 
記事: 1034
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東


Return to 質問:開発・制作関連

x