【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい

Modやプラグインの制作/開発に関する質問はこちらへどうぞ。
Ho9tocraft
ID: 35D5I4WA9G
記事: 2
登録日時: 2019年11月26日(火) 14:57
Minecraft ID: ho9tocraft

【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい

投稿記事 by Ho9tocraft » 2022年7月31日(日) 20:26

タイトル通りです。
NBTに登録してもいいですし、イベントハンドラの使用を行っても問題ないので、この条件に沿ったソースコードを書いてくれませんか?
・特定のディメンションで、「isChaosAgeLosting」のNBT/変数がfalseのもの、もしくはそのNBT/変数が存在しないすべてのアイテム(他Mod追加含む)をインベントリから削除してから除外する
 【特定のディメンションについて】
  主にネザー。ただダイヤモンド装備やクアンタムなどで固めて入っていき、無双することができる状態を防ぎたいからです。
 【特定のディメンションでロストしないバニラアイテム】
 ありません。
 【特定のディメンションでロストしない他Mod装備】
 ありません。状況次第では(GregTech 5 Unofficial導入時)クアンタムをロストすることになります。
0



Tags:

アバター
おがさくら
ID: 2B6LCHA53W
記事: 15
登録日時: 2021年10月06日(水) 20:18
お住まい: あいち
Minecraft ID: ogasakura
いいねされた回数: 2回
連絡する:

Re: 【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい

投稿記事 by おがさくら » 2022年8月06日(土) 23:23

コード: 全て選択

@SubscribeEvent
public void LostItem(PlayerDropsEvent event) {
	//プレイヤーのバイオームIDが-1(ネザー)でなければ何もしない
	if(event.entityPlayer.worldObj.provider.dimensionId!=-1)
		return;
	//event.dropsで死亡時にドロップするEntityItemのリストを取得
	for(EntityItem entity:event.drops) {
		//EntityItemからItemStackを取得
		ItemStack stack=entity.getEntityItem();
		//スタックのnullチェックとNBTタグ所持チェック
		if(stack!=null){
			if(!stack.hasTagCompound()) { //NBTタグがなければロスト
				//ドロップアイテムを死亡判定にする(=消滅する)
				entity.setDead();
				//以降はカット
				continue;
			}
			
			//NBT取得
			NBTTagCompound nbt=stack.getTagCompound();
			//所望のNBTタグを調べ、条件に合うかを判定
			if(!nbt.hasKey("isChaosAgeLosting")||!nbt.getBoolean("isChaosAgeLosting")){	
				entity.setDead();
			}
		}
	}
}
これをMinecraftForge.EVENT_BUS.registerで登録すればできると思う

テストにてネザーで死亡した際、指定NBTタグが付いており値がtrueのものだけドロップしていることを確認済み
他Modのアイテムは試してないけどEntityItemとしてドロップすればちゃんとロストするかと
0
桜と月をこよなく愛する自称プログラマ&イラストレータ
1.2.5&1.7.10マイクラModder・クラフター
Twitterで進捗をたまにつぶやいてる

要望や感想、バグ報告はTwitterかDiscordのDMもしくはこのフォーラムのPMまで
Modを使うときはこれを読んでください↓
https://docs.google.com/document/d/18oV ... sp=sharing

返信する