use of org.spongepowered.api.event.cause.entity.spawn.SpawnType 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;
}
use of org.spongepowered.api.event.cause.entity.spawn.SpawnType in project SpongeForge by SpongePowered.
the class SpongeForgeEventFactory method callItemTossEvent.
public static DropItemEvent.Dispense callItemTossEvent(Event event) {
DropItemEvent.Dispense spongeEvent = (DropItemEvent.Dispense) event;
if (spongeEvent.getEntities().size() <= 0) {
return spongeEvent;
}
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();
EntityItem item = (EntityItem) spongeEvent.getEntities().get(0);
if (entity == null || item == null || item.getItem() == null || !(entity instanceof Player)) {
return spongeEvent;
}
ItemTossEvent forgeEvent = new ItemTossEvent(item, (EntityPlayerMP) entity);
((IMixinEventBus) MinecraftForge.EVENT_BUS).post(forgeEvent, true);
if (forgeEvent.isCanceled()) {
if (item.isDead) {
// Mods such as Flux-Networks kills the entity item to spawn a custom one
return spongeEvent;
}
spongeEvent.setCancelled(true);
} else {
// Forge treats EntityJoinWorldEvent separately from Toss so we need to call it here
callEntityJoinWorldEvent(spongeEvent);
}
return spongeEvent;
}
Aggregations