Search in sources :

Example 6 with ISoldier

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);
    }
}
Also used : AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) Entity(net.minecraft.entity.Entity) SoundEvents(net.minecraft.init.SoundEvents) Items(net.minecraft.init.Items) Predicate(java.util.function.Predicate) AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) EnumUpgFunctions(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.EnumUpgFunctions) UpgradeFunctions(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.UpgradeFunctions) DamageSource(net.minecraft.util.DamageSource) MiscUtils(de.sanandrew.mods.sanlib.lib.util.MiscUtils) ItemStack(net.minecraft.item.ItemStack) ISoldier(de.sanandrew.mods.claysoldiers.api.soldier.ISoldier) ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) EnumUpgradeType(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.EnumUpgradeType) CsmConstants(de.sanandrew.mods.claysoldiers.api.CsmConstants) ClaySoldiersMod(de.sanandrew.mods.claysoldiers.util.ClaySoldiersMod) ISoldierUpgrade(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade) EntityCreature(net.minecraft.entity.EntityCreature) NonNullList(net.minecraft.util.NonNullList) EnumParticle(de.sanandrew.mods.claysoldiers.util.EnumParticle) Nonnull(javax.annotation.Nonnull) ISoldier(de.sanandrew.mods.claysoldiers.api.soldier.ISoldier) EntityCreature(net.minecraft.entity.EntityCreature)

Example 7 with ISoldier

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);
}
Also used : ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) ISoldier(de.sanandrew.mods.claysoldiers.api.soldier.ISoldier) EnumDyeColor(net.minecraft.item.EnumDyeColor)

Example 8 with ISoldier

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());
        }
    }
}
Also used : ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) ISoldier(de.sanandrew.mods.claysoldiers.api.soldier.ISoldier) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent)

Example 9 with ISoldier

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);
        }
    }
}
Also used : ISoldier(de.sanandrew.mods.claysoldiers.api.soldier.ISoldier)

Example 10 with ISoldier

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);
}
Also used : ISoldierUpgradeInst(de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst) ISoldier(de.sanandrew.mods.claysoldiers.api.soldier.ISoldier) EnumDyeColor(net.minecraft.item.EnumDyeColor)

Aggregations

ISoldier (de.sanandrew.mods.claysoldiers.api.soldier.ISoldier)19 ISoldierUpgradeInst (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgradeInst)7 EnumDyeColor (net.minecraft.item.EnumDyeColor)3 ItemStack (net.minecraft.item.ItemStack)3 EnumUpgradeType (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.EnumUpgradeType)2 EntityCreature (net.minecraft.entity.EntityCreature)2 SubscribeEvent (net.minecraftforge.fml.common.eventhandler.SubscribeEvent)2 GameProfile (com.mojang.authlib.GameProfile)1 CsmConstants (de.sanandrew.mods.claysoldiers.api.CsmConstants)1 ISoldierRender (de.sanandrew.mods.claysoldiers.api.client.soldier.ISoldierRender)1 EnumUpgFunctions (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.EnumUpgFunctions)1 ISoldierUpgrade (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.ISoldierUpgrade)1 UpgradeFunctions (de.sanandrew.mods.claysoldiers.api.soldier.upgrade.UpgradeFunctions)1 ModelGoggleBand (de.sanandrew.mods.claysoldiers.client.model.accessory.ModelGoggleBand)1 Upgrades (de.sanandrew.mods.claysoldiers.registry.upgrade.Upgrades)1 ClaySoldiersMod (de.sanandrew.mods.claysoldiers.util.ClaySoldiersMod)1 EnumParticle (de.sanandrew.mods.claysoldiers.util.EnumParticle)1 ColorObj (de.sanandrew.mods.sanlib.lib.ColorObj)1 RenderUtils (de.sanandrew.mods.sanlib.lib.client.util.RenderUtils)1 MiscUtils (de.sanandrew.mods.sanlib.lib.util.MiscUtils)1