use of net.minecraft.entity.projectile.ThrowableEntity in project endergetic by team-abnormals.
the class EntityEvents method onThrowableImpact.
@SubscribeEvent
public static void onThrowableImpact(final ProjectileImpactEvent.Throwable event) {
ThrowableEntity projectileEntity = event.getThrowable();
if (projectileEntity instanceof PotionEntity) {
PotionEntity potionEntity = ((PotionEntity) projectileEntity);
ItemStack itemstack = potionEntity.getItem();
Potion potion = PotionUtils.getPotion(itemstack);
List<EffectInstance> list = PotionUtils.getMobEffects(itemstack);
if (potion == Potions.WATER && list.isEmpty() && event.getRayTraceResult() instanceof BlockRayTraceResult) {
World world = potionEntity.level;
BlockRayTraceResult blockraytraceresult = (BlockRayTraceResult) event.getRayTraceResult();
Direction direction = blockraytraceresult.getDirection();
BlockPos blockpos = blockraytraceresult.getBlockPos().relative(Direction.DOWN).relative(direction);
tryToConvertCorrockBlock(world, blockpos);
tryToConvertCorrockBlock(world, blockpos.relative(direction.getOpposite()));
for (Direction horizontals : Direction.Plane.HORIZONTAL) {
tryToConvertCorrockBlock(world, blockpos.relative(horizontals));
}
}
}
}
use of net.minecraft.entity.projectile.ThrowableEntity in project ChocolateQuestRepoured by TeamChocoQuest.
the class EntityCQRWalkerKing method hurt.
@Override
public boolean hurt(DamageSource source, float amount, boolean sentFromPart) {
if (source == DamageSource.WITHER) {
this.heal(amount / 2);
return true;
}
if (source == DamageSource.FALL) {
return true;
}
if (source == DamageSource.IN_WALL && this.hasAttackTarget() && this.isServerWorld()) {
EntityWalkerKingIllusion illusion = new EntityWalkerKingIllusion(1200, this, this.getWorld());
illusion.setPos(this.getX(), this.getY(), this.getZ());
this.level.addFreshEntity(illusion);
this.teleportBehindEntity(this.getTarget(), true);
this.canAttack(this.getTarget());
return false;
}
/*
* boolean spectralFlag = false;
* if (source.getTrueSource() instanceof EntityLivingBase) {
* if (EnchantmentHelper.getEnchantmentLevel(CQREnchantments.SPECTRAL, ((EntityLivingBase)
* source.getTrueSource()).getHeldItemMainhand()) > 0 ||
* EnchantmentHelper.getEnchantmentLevel(CQREnchantments.SPECTRAL, ((EntityLivingBase)
* source.getTrueSource()).getHeldItemOffhand()) > 0) {
* amount *= 2;
* spectralFlag = true;
* }
* }
*/
if (/* !spectralFlag && */
((source.getDirectEntity() == null) || !(source.getDirectEntity() instanceof SpectralArrowEntity)) && !CQRConfig.bosses.armorForTheWalkerKing) {
amount *= 0.5F;
}
if (source.getDirectEntity() != null) {
if (source.getDirectEntity() instanceof SpectralArrowEntity) {
amount *= 2;
super.hurt(source, amount, sentFromPart);
return true;
}
if ((source.getDirectEntity() instanceof ThrowableEntity || source.getDirectEntity() instanceof AbstractArrowEntity) && !this.level.isClientSide) {
// STAB HIM IN THE BACK!!
this.backStabAttacker(source);
return false;
}
}
this.handleActivation();
if (source.getEntity() != null && !this.level.isClientSide) {
ResourceLocation resLoc = EntityList.getKey(source.getEntity());
if (resLoc != null) {
// Start IceAndFire compatibility
boolean flag = resLoc.getNamespace().equalsIgnoreCase("iceandfire") && CQRConfig.advanced.enableSpecialFeatures;
if (flag) {
amount /= 2;
}
// End IceAndFire compatibility
Faction fac = FactionRegistry.instance(this).getFactionOf(source.getEntity());
boolean dragonFactionFlag = fac != null && (fac.getName().equalsIgnoreCase("DRAGON") || fac.getName().equalsIgnoreCase("DRAGONS"));
// If we are attacked by a dragon: KILL IT
if (this.dragonAttackCooldown <= 0 && (dragonFactionFlag || resLoc.getPath().contains("dragon") || resLoc.getPath().contains("wyrm") || resLoc.getPath().contains("wyvern") || flag)) {
this.dragonAttackCooldown = 80;
this.handleAttackedByDragon(source.getEntity());
}
}
}
if (!this.level.isClientSide && source.getEntity() instanceof LivingEntity) {
// How about killing the one who tries with the axe?
// Maybe move this whole ability to the king shield itself??
ItemStack shieldStack = this.getItemBySlot(EquipmentSlotType.OFFHAND);
if (amount > 0F && this.canBlockDamageSource(source) && shieldStack != null && !shieldStack.isEmpty() && shieldStack.getItem() instanceof ShieldItem) {
this.playSound(CQRSounds.WALKER_KING_LAUGH, 10.0F, 1.0F);
if (source.getDirectEntity() instanceof LivingEntity && /* && (source.getImmediateSource() instanceof EntityPlayer) */
((LivingEntity) source.getDirectEntity()).getMainHandItem().getItem() instanceof AxeItem) {
if (DungeonGenUtils.percentageRandom(0.75, this.getRandom())) {
Vector3d v = source.getDirectEntity().position().subtract(this.position()).normalize().scale(1.25);
v = v.add(0, 0.75, 0);
LivingEntity attacker = (LivingEntity) source.getDirectEntity();
/*attacker.motionX = v.x;
attacker.motionY = v.y;
attacker.motionZ = v.z;
attacker.velocityChanged = true;*/
attacker.setDeltaMovement(v);
attacker.hasImpulse = true;
this.swing(Hand.OFF_HAND);
return false;
}
}
}
if (this.getRandom().nextDouble() < 0.2 && source.getEntity() != null) {
// Revenge Attack
if (this.getRandom().nextDouble() < 0.7) {
this.canAttack((LivingEntity) source.getEntity());
this.playSound(CQRSounds.WALKER_KING_LAUGH, 10.0F, 1.0F);
this.teleportBehindEntity(source.getEntity());
}
}
}
return super.hurt(source, amount, sentFromPart);
}
Aggregations