use of de.sanandrew.mods.claysoldiers.api.soldier.ISoldier in project ClaySoldiersMod by SanAndreasP.
the class UpgradeQuartz method onDamagedSuccess.
@Override
public void onDamagedSuccess(ISoldier<?> soldier, ISoldierUpgradeInst upgradeInst, Entity attacker, DamageSource dmgSource, float damage) {
int hitsTaken = upgradeInst.getNbtData().getInteger("hitsTaken") + 1;
long lastCooldown = upgradeInst.getNbtData().getLong("cooldownTime");
upgradeInst.getNbtData().setLong("cooldownTime", System.currentTimeMillis());
if (System.currentTimeMillis() - lastCooldown < 2_000) {
if (hitsTaken >= 5) {
EntityCreature john = soldier.getEntity();
hitsTaken = 0;
short uses = (short) (upgradeInst.getNbtData().getShort("uses") - 1);
if (uses < 1) {
soldier.destroyUpgrade(upgradeInst.getUpgrade(), upgradeInst.getUpgradeType(), false);
john.playSound(SoundEvents.ENTITY_ITEM_BREAK, 0.8F, 0.8F + MiscUtils.RNG.randomFloat() * 0.4F);
} else {
upgradeInst.getNbtData().setShort("uses", uses);
}
AxisAlignedBB surroundingBB = john.getEntityBoundingBox().grow(1.0D);
Predicate<EntityCreature> entityChk = entity -> entity instanceof ISoldier && entity != john;
soldier.getEntity().world.getEntitiesWithinAABB(EntityCreature.class, surroundingBB, entityChk::test).forEach(entity -> entity.knockBack(john, 0.5F, john.posX - entity.posX, john.posZ - entity.posZ));
ClaySoldiersMod.proxy.spawnParticle(EnumParticle.SHOCKWAVE, john.world.provider.getDimension(), john.posX, john.posY, john.posZ);
}
upgradeInst.getNbtData().setInteger("hitsTaken", hitsTaken);
}
}
use of de.sanandrew.mods.claysoldiers.api.soldier.ISoldier in project ClaySoldiersMod by SanAndreasP.
the class EntityProjectileEmerald method onBlockHit.
@Override
protected void onBlockHit(BlockPos pos) {
EnumDyeColor color = null;
if (this.shooterCache instanceof ISoldier) {
ISoldierUpgradeInst inst = ((ISoldier) this.shooterCache).getUpgradeInstance(Upgrades.MC_CONCRETEPOWDER, EnumUpgradeType.MISC);
if (inst != null) {
color = EnumDyeColor.byMetadata(inst.getNbtData().getInteger("color"));
}
}
ClaySoldiersMod.proxy.setRenderLightningAt(pos.getX() + 0.5D, pos.getY() + 1.0D, pos.getZ() + 0.5D, color);
}
use of de.sanandrew.mods.claysoldiers.api.soldier.ISoldier in project ClaySoldiersMod by SanAndreasP.
the class SoldierDeathEventHandler method onLivingDeath.
@SubscribeEvent
public void onLivingDeath(LivingDeathEvent event) {
if (event.getEntity() instanceof ISoldier && event.getSource().getTrueSource() instanceof ISoldier) {
ISoldier dying = (ISoldier) event.getEntity();
ISoldier attacker = (ISoldier) event.getSource().getTrueSource();
if (attacker.hasUpgrade(Upgrades.MC_ENDERPEARL, EnumUpgradeType.MISC) && !dying.hasUpgrade(Upgrades.MC_ENDERPEARL, EnumUpgradeType.MISC) && !dying.hasUpgrade(Upgrades.MC_WHEATSEEDS, EnumUpgradeType.MISC)) {
event.setCanceled(true);
ISoldierUpgradeInst upgInst = attacker.getUpgradeInstance(Upgrades.MC_ENDERPEARL, EnumUpgradeType.MISC);
upgInst.getUpgrade().onAttackSuccess(attacker, upgInst, dying.getEntity());
}
}
}
use of de.sanandrew.mods.claysoldiers.api.soldier.ISoldier in project ClaySoldiersMod by SanAndreasP.
the class UpgradeEnderPearl method onAttackSuccess.
@Override
public void onAttackSuccess(ISoldier<?> soldier, ISoldierUpgradeInst upgradeInst, Entity target) {
upgradeInst.getNbtData().setInteger("tickAdded", soldier.getEntity().ticksExisted);
if (target instanceof ISoldier) {
ISoldier tgtSoldier = (ISoldier) target;
if (!tgtSoldier.getEntity().isEntityAlive() && !tgtSoldier.hasUpgrade(Upgrades.MC_WHEATSEEDS, EnumUpgradeType.MISC)) {
soldier.getEntity().heal(Float.MAX_VALUE);
tgtSoldier.getEntity().setHealth(Float.MAX_VALUE);
tgtSoldier.addUpgrade(this, this.getType(tgtSoldier), ItemStack.EMPTY);
soldier.getEntity().setAttackTarget(null);
tgtSoldier.getEntity().setAttackTarget(null);
}
}
}
use of de.sanandrew.mods.claysoldiers.api.soldier.ISoldier in project ClaySoldiersMod by SanAndreasP.
the class EntityProjectileEmerald method onPostHit.
@Override
public void onPostHit(Entity e, DamageSource dmgSource) {
EnumDyeColor color = null;
if (this.shooterCache instanceof ISoldier) {
ISoldierUpgradeInst inst = ((ISoldier) this.shooterCache).getUpgradeInstance(Upgrades.MC_CONCRETEPOWDER, EnumUpgradeType.MISC);
if (inst != null) {
color = EnumDyeColor.byMetadata(inst.getNbtData().getInteger("color"));
}
}
ClaySoldiersMod.proxy.setRenderLightningAt(e.posX, e.posY, e.posZ, color);
}
Aggregations