タイトル通りです。
NBTに登録してもいいですし、イベントハンドラの使用を行っても問題ないので、この条件に沿ったソースコードを書いてくれませんか?
・特定のディメンションで、「isChaosAgeLosting」のNBT/変数がfalseのもの、もしくはそのNBT/変数が存在しないすべてのアイテム(他Mod追加含む)をインベントリから削除してから除外する
【特定のディメンションについて】
主にネザー。ただダイヤモンド装備やクアンタムなどで固めて入っていき、無双することができる状態を防ぎたいからです。
【特定のディメンションでロストしないバニラアイテム】
ありません。
【特定のディメンションでロストしない他Mod装備】
ありません。状況次第では(GregTech 5 Unofficial導入時)クアンタムをロストすることになります。
[解決済み]【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい
-
- ID: 35D5I4WA9G
- 記事: 4
- 登録日時: 2019年11月26日(火) 14:57
- Minecraft ID: ho9tocraft
[解決済み]【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい
0
最後に編集したユーザー Ho9tocraft [ 2023年3月12日(日) 11:47 ], 累計 1 回
Tags:
- おがさくら
- ID: 2B6LCHA53W
- 記事: 17
- 登録日時: 2021年10月06日(水) 20:18
- お住まい: あいち
- Minecraft ID: ogasakura
- いいねされた回数: 3回
- 連絡する:
Re: 【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい
コード: 全て選択
@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();
}
}
}
}
テストにてネザーで死亡した際、指定NBTタグが付いており値がtrueのものだけドロップしていることを確認済み
他Modのアイテムは試してないけどEntityItemとしてドロップすればちゃんとロストするかと
0
桜と月をこよなく愛する自称プログラマ&イラストレータ
1.2.5&1.7.10マイクラModder・クラフター
Modを使うときはこれを読んでください↓
https://docs.google.com/document/d/18oV ... sp=sharing
現在更新しておりません
1.2.5&1.7.10マイクラModder・クラフター
Modを使うときはこれを読んでください↓
https://docs.google.com/document/d/18oV ... sp=sharing
現在更新しておりません
-
- ID: 35D5I4WA9G
- 記事: 4
- 登録日時: 2019年11月26日(火) 14:57
- Minecraft ID: ho9tocraft
Re: [解決済み]【Minecraft 1.7.10 Forge】特定のアイテム属性を持っていないアイテムを死亡時にドロップさせずに削除したい
!?
まさかソースコード書いてくれる人がいたとは…!
ありがとうございます!ですけど…申し訳ありません!この記事を投稿した数週~数ヶ月後に、当該コードに類似したソースコードを書き上げることに成功していました…。
以下、当該部分になります。
まさかソースコード書いてくれる人がいたとは…!
ありがとうございます!ですけど…申し訳ありません!この記事を投稿した数週~数ヶ月後に、当該コードに類似したソースコードを書き上げることに成功していました…。
以下、当該部分になります。
コード: 全て選択
@SubscribeEvent
public void onPlayerDeathAndDrops(LivingDropsEvent event) {
if (event.entityLiving instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer)event.entityLiving;
if (player.worldObj.provider.dimensionId == -1 || player.worldObj.provider.dimensionId == 1) {
for (EntityItem itemEntity : event.drops) {
if (itemEntity.getEntityItem().getItem() instanceof IItemRejectLost) {
if (((IItemRejectLost)itemEntity.getEntityItem().getItem()).isCAAttributes()) {
continue;
}
}
NBTTagList enchList = ItemNBTHelper.getList(itemEntity.getEntityItem(), "ench", 10, true);
boolean hasEnchCA = false;
if (enchList != null) {
for (int i = 0; i < enchList.tagCount(); i++) {
NBTTagCompound enchSingle = enchList.getCompoundTagAt(i);
if (enchSingle.getInteger("id") == ConfigHandler.EnchantmentCA && ConfigHandler.EnchantmentCA >= 0) {
hasEnchCA = true;
break;
}
}
if (hasEnchCA) continue;
}
itemEntity.setDead();
}
} else {
for (EntityItem itemEntity : event.drops) {
if (itemEntity.getEntityItem().getItem() instanceof IItemRejectLost) {
if (!((IItemRejectLost)itemEntity.getEntityItem().getItem()).isDyingInOverworldTypes()) {
continue;
}
}
NBTTagList enchList = ItemNBTHelper.getList(itemEntity.getEntityItem(), "ench", 10, true);
boolean hasEnchCA = false;
if (enchList != null) {
for (int i = 0; i < enchList.tagCount(); i++) {
NBTTagCompound enchSingle = enchList.getCompoundTagAt(i);
if (enchSingle.getInteger("id") == ConfigHandler.EnchantmentCA && ConfigHandler.EnchantmentCA >= 0) {
hasEnchCA = true;
break;
}
}
if (!hasEnchCA) continue;
}
itemEntity.setDead();
}
}
}
}
0