Search in sources :

Example 1 with LivingDropsEvent

use of net.minecraftforge.event.entity.living.LivingDropsEvent in project SpongeForge by SpongePowered.

the class SpongeForgeEventFactory method createLivingDropItemEvent.

private static LivingDropsEvent createLivingDropItemEvent(Event event) {
    DropItemEvent.Destruct spongeEvent = (DropItemEvent.Destruct) event;
    Optional<EntityLivingBase> spawnCause = spongeEvent.getCause().first(EntityLivingBase.class);
    if (!spawnCause.isPresent()) {
        return null;
    }
    Optional<DamageSource> source = spongeEvent.getCause().first(DamageSource.class);
    if (!source.isPresent()) {
        return null;
    }
    List<EntityItem> items = new ArrayList<>();
    for (org.spongepowered.api.entity.Entity entity : spongeEvent.getEntities()) {
        if (entity instanceof EntityItem) {
            items.add((EntityItem) entity);
        }
    }
    LivingDropsEvent forgeEvent = new LivingDropsEvent(spawnCause.get(), (net.minecraft.util.DamageSource) source.get(), items, 0, false);
    return forgeEvent;
}
Also used : DropItemEvent(org.spongepowered.api.event.item.inventory.DropItemEvent) DamageSource(org.spongepowered.api.event.cause.entity.damage.source.DamageSource) ArrayList(java.util.ArrayList) LivingDropsEvent(net.minecraftforge.event.entity.living.LivingDropsEvent) IMixinEntityLivingBase(org.spongepowered.common.interfaces.entity.IMixinEntityLivingBase) EntityLivingBase(net.minecraft.entity.EntityLivingBase) EntityItem(net.minecraft.entity.item.EntityItem)

Example 2 with LivingDropsEvent

use of net.minecraftforge.event.entity.living.LivingDropsEvent in project SpongeForge by SpongePowered.

the class SpongeForgeEventFactory method callLivingDropsEvent.

@SuppressWarnings("unchecked")
public static DropItemEvent.Destruct callLivingDropsEvent(Event event) {
    DropItemEvent.Destruct spongeEvent = (DropItemEvent.Destruct) event;
    final Cause cause = spongeEvent.getCause();
    Object source = cause.root();
    Optional<DamageSource> damageSource = cause.first(DamageSource.class);
    final Optional<Entity> spawnEntity = cause.first(Entity.class);
    final Optional<SpawnType> spawnType = cause.getContext().get(EventContextKeys.SPAWN_TYPE);
    if (!spawnType.isPresent() || !damageSource.isPresent() || !spawnEntity.isPresent()) {
        // Mods expect EntityJoinWorldEvent to trigger
        callEntityJoinWorldEvent(spongeEvent);
        return spongeEvent;
    }
    Entity entity = spawnEntity.get();
    if (entity == null || !(entity instanceof EntityLivingBase)) {
        return spongeEvent;
    }
    LivingDropsEvent forgeEvent = null;
    if (entity instanceof EntityPlayer) {
        EntityPlayer player = (EntityPlayer) entity;
        forgeEvent = new PlayerDropsEvent(player, (net.minecraft.util.DamageSource) damageSource.get(), (List<EntityItem>) (List<?>) spongeEvent.getEntities(), ((IMixinEntityLivingBase) entity).getRecentlyHit() > 0);
    } else {
        forgeEvent = new LivingDropsEvent((EntityLivingBase) entity, (net.minecraft.util.DamageSource) damageSource.get(), (List<EntityItem>) (List<?>) spongeEvent.getEntities(), 0, ((IMixinEntityLivingBase) entity).getRecentlyHit() > 0);
    }
    ((IMixinEventBus) MinecraftForge.EVENT_BUS).post(forgeEvent, true);
    if (forgeEvent.isCanceled()) {
        spongeEvent.setCancelled(true);
    } else {
        callEntityJoinWorldEvent(spongeEvent);
    }
    return spongeEvent;
}
Also used : DropItemEvent(org.spongepowered.api.event.item.inventory.DropItemEvent) TileEntity(org.spongepowered.api.block.tileentity.TileEntity) Entity(net.minecraft.entity.Entity) SpawnType(org.spongepowered.api.event.cause.entity.spawn.SpawnType) DamageSource(org.spongepowered.api.event.cause.entity.damage.source.DamageSource) LivingDropsEvent(net.minecraftforge.event.entity.living.LivingDropsEvent) IMixinEventBus(org.spongepowered.mod.interfaces.IMixinEventBus) PlayerDropsEvent(net.minecraftforge.event.entity.player.PlayerDropsEvent) IMixinInitCause(org.spongepowered.common.interfaces.IMixinInitCause) Cause(org.spongepowered.api.event.cause.Cause) IMixinEntityLivingBase(org.spongepowered.common.interfaces.entity.IMixinEntityLivingBase) EntityLivingBase(net.minecraft.entity.EntityLivingBase) EntityPlayer(net.minecraft.entity.player.EntityPlayer) ArrayList(java.util.ArrayList) List(java.util.List) ImmutableList(com.google.common.collect.ImmutableList)

Aggregations

ArrayList (java.util.ArrayList)2 EntityLivingBase (net.minecraft.entity.EntityLivingBase)2 LivingDropsEvent (net.minecraftforge.event.entity.living.LivingDropsEvent)2 DamageSource (org.spongepowered.api.event.cause.entity.damage.source.DamageSource)2 DropItemEvent (org.spongepowered.api.event.item.inventory.DropItemEvent)2 IMixinEntityLivingBase (org.spongepowered.common.interfaces.entity.IMixinEntityLivingBase)2 ImmutableList (com.google.common.collect.ImmutableList)1 List (java.util.List)1 Entity (net.minecraft.entity.Entity)1 EntityItem (net.minecraft.entity.item.EntityItem)1 EntityPlayer (net.minecraft.entity.player.EntityPlayer)1 PlayerDropsEvent (net.minecraftforge.event.entity.player.PlayerDropsEvent)1 TileEntity (org.spongepowered.api.block.tileentity.TileEntity)1 Cause (org.spongepowered.api.event.cause.Cause)1 SpawnType (org.spongepowered.api.event.cause.entity.spawn.SpawnType)1 IMixinInitCause (org.spongepowered.common.interfaces.IMixinInitCause)1 IMixinEventBus (org.spongepowered.mod.interfaces.IMixinEventBus)1