проблема с проверкой в LivingAttackEvent

Версия Minecraft
1.7.10

Eifel

Модератор
1,623
78
608
Код:
Код:
@SubscribeEvent
 public void EventShield(LivingAttackEvent event) {


 if (event.entityLiving instanceof EntityPlayer && !FMLCommonHandler.instance().getEffectiveSide().isClient())
 {
 EntityPlayer player = (EntityPlayer) event.entityLiving;
 
 ItemStack equipped = player.getCurrentEquippedItem();
 ItemStack thisitem = new ItemStack(ItemList.EnergyShield1);
 
 chat = new ChatComponentText("Im active1");
 player.addChatComponentMessage(chat);
 
 if(equipped == thisitem){//эту проверку уже не проходит
 
 chat = new ChatComponentText("Im active2");
 player.addChatComponentMessage(chat);
 
 NBTTagCompound nbtData = getOrCreateNbtData(equipped);
 
 if(nbtData.getBoolean("active")){
 
 chat = new ChatComponentText("Im active3");
 player.addChatComponentMessage(chat);
 
 event.setCanceled(true);
 drainShield(equipped, Config.ShLvl1ChargeToUse, player);
 
 }
 
 }
 }

 
}

В чем проблема: когда игрок играет и ему наноситься урон - доходит только до сообщения "im active1", т.е. дальше проверки equipped == thisitem не проходит.
Суть в том что если предмет в руке игрока и он активен - должен защищать от урона и разряжаться при этом.

Ивент зареган в классе самого предмета:
Код:
MinecraftForge.EVENT_BUS.register(this);
 
7,099
324
1,510
В ItemStack, вроде, реализован метод для сравнения, но у тебя еще и метадата отличается(теряется прочность при защите). Поэтому делай так:
if(equipped.getItem()==thisitem.getItem()){

getItem можешь сразу сохранить в переменную
 

Eifel

Модератор
1,623
78
608
Код:
 @SubscribeEvent
 public void EventShield(LivingAttackEvent event) {


 if (event.entityLiving instanceof EntityPlayer && !FMLCommonHandler.instance().getEffectiveSide().isClient())
 {
 EntityPlayer player = (EntityPlayer) event.entityLiving;
 
 ItemStack equipped = player.getHeldItem();
 ItemStack thisitem = new ItemStack(ItemList.EnergyShield1);
 
 chat = new ChatComponentText("Im active1");
 player.addChatComponentMessage(chat);
 
 if(equipped.getItem() != null && equipped.getItem() == thisitem.getItem()){
 
 chat = new ChatComponentText("Im active2");
 player.addChatComponentMessage(chat);
 
 NBTTagCompound nbtData = getOrCreateNbtData(equipped);
 
 if(nbtData.getBoolean("active")){
 
 chat = new ChatComponentText("Im active3");
 player.addChatComponentMessage(chat);
 
 event.setCanceled(true);
 drainShield(equipped, Config.ShLvl1ChargeToUse, player);
 
 }
 
 }
 }

 
}

Теперь все работает. Спасибо всем за помощь
 
Сверху