use of crafttweaker.api.damage.IDamageSource in project CraftTweaker by CraftTweaker.
the class CommonEventHandler method mobDrop.
@SubscribeEvent
public void mobDrop(LivingDropsEvent ev) {
Entity entity = ev.getEntity();
IEntityDefinition entityDefinition = CraftTweakerAPI.game.getEntity(EntityList.getEntityString(ev.getEntity()));
if (entityDefinition != null) {
if (entityDefinition.shouldClearDrops()) {
ev.getDrops().clear();
} else if (!entityDefinition.getDropsToRemove().isEmpty()) {
List<EntityItem> removedDrops = new ArrayList<>();
entityDefinition.getDropsToRemove().forEach(drop -> ev.getDrops().forEach(drops -> {
if (drop.matches(new MCItemStack(drops.getItem()))) {
removedDrops.add(drops);
}
}));
ev.getDrops().removeAll(removedDrops);
}
if (!entityDefinition.getDrops().isEmpty()) {
Random rand = entity.world.rand;
entityDefinition.getDrops().forEach(drop -> {
if (drop.isPlayerOnly() && !(ev.getSource().getTrueSource() instanceof EntityPlayer))
return;
if (drop.getChance() > 0 && drop.getChance() < 1 && rand.nextFloat() > drop.getChance())
return;
EntityItem item;
if (drop.getMin() == 0 && drop.getMax() == 0) {
item = new EntityItem(entity.world, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5, ((ItemStack) drop.getItemStack().getInternal()).copy());
} else {
item = new EntityItem(entity.world, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5, ((ItemStack) drop.getItemStack().withAmount(drop.getRange().getRandom(rand)).getInternal()).copy());
}
if (item.getItem().getCount() != 0) {
ev.getDrops().add(item);
}
});
}
if (!entityDefinition.getDropFunctions().isEmpty()) {
IEntity ent = new MCEntity(ev.getEntity());
IDamageSource dmgSource = new MCDamageSource(ev.getSource());
entityDefinition.getDropFunctions().stream().map((fun) -> fun.handle(ent, dmgSource)).filter(Objects::nonNull).filter((item) -> item.getAmount() > 0).map(CraftTweakerMC::getItemStack).map((ItemStack item) -> new EntityItem(entity.world, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5, item)).forEach(ev.getDrops()::add);
}
}
}
Aggregations