変身用アイテムの製作方法

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

変身用アイテムの製作方法

投稿記事by ゲスト » 2017年12月20日(水) 10:21

mod初心者です。
無機能アイテムで、onItemRightClickでプレイヤーに装備を着せることは出来ないのでしょうか?
イメージとしては、杖を右クリックすることによって指定された防具をプレイヤーに着せる感じです。

[code]public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
//アイテムで右クリックした
{
entityplayer.heal(20);
return itemstack;
}[/code]

これは別のアイテムで設定したもので、この機能はしっかり実装できたので、処理の中身さえできればよいのではないかと考えています。
それとも、onItemRightClickでは防具を着せることは出来ないのでしょうか?
色々分かっていないので、ぜひご教授頂ければと思います。
ゲスト
ID:bc29d5b6
 

  • (PostNo.311589)

Re: 変身用アイテムの製作方法

投稿記事by ceu3994t09fj » 2017年12月20日(水) 10:24

上ではログインできてなかったけどトピ主です。
環境を言い忘れていました。
minecraftのversionは1.7.10です。
forge-1.7.10-10.13.4.1558を使っています。
OSはmacで、Eclipceです。
ceu3994t09fj
ID:bc29d5b6
水から上がったとこ
 
記事: 3
登録日時: 2017年12月20日(水) 09:50

  • (PostNo.311759)

Re: 変身用アイテムの製作方法

投稿記事by ShuperDark » 2017年12月23日(土) 23:37

そのフックの引数のEntityPlayerの防具を装備する関数を使って、そのアイテムを入れるだけです。
但し、もし既に別の防具を装備していた場合は上書きされるはずなので、if文でItemArmorを既に装備していた場合、インベントリにそのアイテムを移すか、EntityItemとして保存して床に捨てるなど注意が必要です。
アバター
ShuperDark
ID:85d166a0
大工さん
 
記事: 46
登録日時: 2017年4月15日(土) 20:35

  • (PostNo.311847)

Re: 変身用アイテムの製作方法

投稿記事by ceu3994t09fj » 2017年12月26日(火) 10:07

ShuperDark さんが書きました:そのフックの引数のEntityPlayerの防具を装備する関数を使って、そのアイテムを入れるだけです。
但し、もし既に別の防具を装備していた場合は上書きされるはずなので、if文でItemArmorを既に装備していた場合、インベントリにそのアイテムを移すか、EntityItemとして保存して床に捨てるなど注意が必要です。


返信ありがとうございます!
とりあえず、「equipment」や「armor」を引数の中で検索してみました。
そうしたら、
getArmorVisibility=プレーヤーが透明な時
getCurrentArmor=現在の防具を取得
getTotalArmorValue-現在の防御値を取得
setCurrentItemOrArmor←これですか?
destroyCurrentEquippedItem=防具を外す
getCurrentEquippedItem=現在の防具を取得
getEquipmentInSlot=現在の防具を取得
というものが発見できました。
右側に推測で意味を書いてみたのですが、正直良くわからないので、もう少し教えて頂ければ幸いです。
おそらく「setCurrentItemOrArmor」←これのことをおっしゃられたのだと考えましたが、丸括弧の中に何を書けばよいのかがイマイチわかりませんでした…
あとEquipmentとArmorって何が違うんでしょうか?装備しているか、アイテムとして持っているかということでしょうか(blockとitemblockみたいな)?

色々書いてしまいましたが、よろしくお願いします!
ceu3994t09fj
ID:67b3a085
水から上がったとこ
 
記事: 3
登録日時: 2017年12月20日(水) 09:50

  • (PostNo.311904)

Re: 変身用アイテムの製作方法

投稿記事by ShuperDark » 2017年12月27日(水) 18:34

setCurrentItemOrArmorの第一引数の整数が0だと手持ち、3がヘルメット、1がチェストプレート、2がレギンス、4がブーツです。
それで第二引数ですが、そこはItemStack、すなわちアイテム、ブロックを指定します。
それと新しくItemStackを追加するわけですからnewをつける必要があります。
そしてItemStackの括弧の中の第一引数がBlockかItemを継承してるものを指定します(バニラのアイテム、ブロックだとItemsかBlocks、そのModのアイテム、ブロックならメインのクラス変数です)
第二引数がスタック数、第3引数がダメージ値(メタ)です。
第二、第三引数を特に指定しない場合は第一引数だけでOKです。

例として

//プレイヤーの手持ちに鉄剣を渡す
player.setCurrentItemOrArmor(0, new ItemStack(Items.iron_sword));

こんな感じに。

getCurrentEquippedItemは持っているアイテムを取得します。
アバター
ShuperDark
ID:85d166a0
大工さん
 
記事: 46
登録日時: 2017年4月15日(土) 20:35

  • (PostNo.311923)

Re: 変身用アイテムの製作方法

投稿記事by ceu3994t09fj » 2017年12月28日(木) 06:20

ShuperDark さんが書きました:setCurrentItemOrArmorの第一引数の整数が0だと手持ち、3がヘルメット、1がチェストプレート、2がレギンス、4がブーツです。
それで第二引数ですが、そこはItemStack、すなわちアイテム、ブロックを指定します。
それと新しくItemStackを追加するわけですからnewをつける必要があります。
そしてItemStackの括弧の中の第一引数がBlockかItemを継承してるものを指定します(バニラのアイテム、ブロックだとItemsかBlocks、そのModのアイテム、ブロックならメインのクラス変数です)
第二引数がスタック数、第3引数がダメージ値(メタ)です。
第二、第三引数を特に指定しない場合は第一引数だけでOKです。

例として

//プレイヤーの手持ちに鉄剣を渡す
player.setCurrentItemOrArmor(0, new ItemStack(Items.iron_sword));

こんな感じに。

getCurrentEquippedItemは持っているアイテムを取得します。


なるほど!とても分かりやすかったです!ありがとうございます!
第一引数はいままでは全て0だったので意味がわかっていませんでした。やっとわかりました。
ceu3994t09fj
ID:a9752d6c
水から上がったとこ
 
記事: 3
登録日時: 2017年12月20日(水) 09:50


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

x