Вот что бы я сделал. Вы можете узнать, какой слот оборудования был изменен, а затем - предмет, который был изменен. Это не проверено, но что-то похожее на это должно работать.
Это проверяет, является ли сущность игроком и что смена оборудования происходит в слоте для брони (вам, вероятно, понадобится помощь только с этой частью).
@SubscribeEvent
public static void enchantSaturationFunction(LivingEquipmentChangeEvent event)
{
if (event.getEntityLiving() instanceof EntityPlayer) // Remove this if you want other mobs to get the benefits
{
EntityEquipmentSlot slotChanged = event.getSlot();
if (slotChanged.getSlotIndex() > 0 && slotChanged.getSlotIndex() < 5) // Check out the class EntityEquipmentSlot
{
А затем, чтобы завершить sh его, он получает ItemStack
новой брони и проверяет чары. Я украл код из ItemStack::getTooltip
.
ItemStack previousArmorPiece = event.getFrom();
ItemStack newArmorPiece = event.getTo();
NBTTagList nbtTagList = newArmorPiece.getEnchantmentTagList();
for (int k1 = 0; k1 < nbtTagList.tagCount(); ++k1)
{
NBTTagCompound nbttagcompound = nbtTagList.getCompoundTagAt(k1);
int enchantmentID = nbttagcompound.getShort("id");
int enchantmentLevel = nbttagcompound.getShort("lvl");
Enchantment enchantment = Enchantment.getEnchantmentByID(enchantmentID);
if (enchantment instanceof MY_ENCHANTMENT)
{
// They equipped armor with the necessary enchantment, so do what you want.
}
}
}
}
}