- 52
- 1
- 1
Мне надо было, чтобы происходило действие при убийстве моба мечом со специальным зачаром. Итак :
Обратим внимание вот на это:
Теперь на консоль:
Это Я (игрок) убил паука.
Давайте теперь посмотрим на вот эту строчку и поближе рассмотрим метод:
Казалось бы, все вполне очевидно, но я использовал этот метод в другом месте (вообще идею использовать этот метод я одолжил у Thaumic Tinkerer, там, где при наличии зачара "Наскок" увеличивался урон), но ближе к делу. Рассмотрим другой event, который я использовал в этом же классе:
Здесь все то же самое. Но почему-то event работает исправно. Но метод тот же самый, класс родитель у обоих ивентов один, ни в одном из ивентов этот метод не переопределялся. Так почему в одном из них он возвращает то, что нужно, а в другом нет? И как мне получить тот предмет, которым убили моба?
Прошу о помощи)
Java:
@SubscribeEvent
public void onLivingDeath(final LivingDeathEvent event) {
final EntityLivingBase attacker = (EntityLivingBase) event.source.getEntity();
if (attacker == null) {
System.out.println("Something`s wrong!");
return;
}
final ItemStack heldItem = attacker.getHeldItem();
if (heldItem == null) {
return;
}
int spectrlR = EnchantmentHelper.getEnchantmentLevel(EnchantmentList.enchSpectralRadiance.effectId,
heldItem);
if (heldItem.getItem() instanceof ItemSword && spectrlR > 0 && event.entity instanceof EntityLivingBase) {
EntityLivingBase ent = (EntityLivingBase) event.entity;
final EntitySoulOrb orb = new EntitySoulOrb(ent.worldObj, ent.posX, ent.posY, ent.posZ,
Soul.getEntitySoulType(ent), (int) (ent.getMaxHealth() / 25), 1.1);
}
}
Обратим внимание вот на это:
Java:
if (attacker == null) {
System.out.println("Something`s wrong!");
return;
}
Теперь на консоль:
[ensorcellcraft.common.lib.events.EventHandlerEnchantments:onLivingDeath:124]: Something`s wrong!
Это Я (игрок) убил паука.
Давайте теперь посмотрим на вот эту строчку и поближе рассмотрим метод:
final EntityLivingBase attacker = (EntityLivingBase) event.source.getEntity();
Java:
public Entity getEntity()
{
return null;
}
Казалось бы, все вполне очевидно, но я использовал этот метод в другом месте (вообще идею использовать этот метод я одолжил у Thaumic Tinkerer, там, где при наличии зачара "Наскок" увеличивался урон), но ближе к делу. Рассмотрим другой event, который я использовал в этом же классе:
Java:
@SubscribeEvent
public void onEntityDamaged(final LivingHurtEvent event) {
final EntityLivingBase attacker = (EntityLivingBase) event.source.getEntity();
final ItemStack heldItem = attacker.getHeldItem();
if (heldItem == null) {
return;
}
int spectrlR = EnchantmentHelper.getEnchantmentLevel(EnchantmentList.enchSpectralRadiance.effectId,
heldItem);
if (heldItem.getItem() instanceof ItemSword && spectrlR > 0) {
event.ammount += 2.5;
}
}
Здесь все то же самое. Но почему-то event работает исправно. Но метод тот же самый, класс родитель у обоих ивентов один, ни в одном из ивентов этот метод не переопределялся. Так почему в одном из них он возвращает то, что нужно, а в другом нет? И как мне получить тот предмет, которым убили моба?
Прошу о помощи)