123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- package me.km.effects.passive;
- import me.km.KajetansMod;
- import me.km.api.Location;
- import me.km.api.Module;
- import me.km.api.ModuleListener;
- import me.km.api.Utils;
- import me.km.data.EntityData;
- import me.km.effects.Effect;
- import me.km.effects.EffectBlockChanger;
- import me.km.effects.EffectUtils;
- import me.km.events.ArrowHitGroundEvent;
- import me.km.events.ArrowLaunchEvent;
- import net.minecraft.entity.Entity;
- import net.minecraft.entity.EntityLivingBase;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.entity.player.EntityPlayerMP;
- import net.minecraft.entity.projectile.EntityArrow;
- import net.minecraft.entity.projectile.EntitySnowball;
- import net.minecraft.entity.projectile.EntityThrowable;
- import net.minecraft.init.Blocks;
- import net.minecraft.init.MobEffects;
- import net.minecraft.util.DamageSource;
- import net.minecraft.util.EnumParticleTypes;
- import net.minecraft.util.math.BlockPos;
- import net.minecraft.world.WorldServer;
- import net.minecraftforge.event.entity.ThrowableImpactEvent;
- import net.minecraftforge.event.entity.living.LivingAttackEvent;
- import net.minecraftforge.event.entity.living.LivingHurtEvent;
- import net.minecraftforge.event.entity.player.ArrowLooseEvent;
- import net.minecraftforge.fml.common.eventhandler.EventPriority;
- import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
- public class ArrowEffects extends ModuleListener
- {
- public ArrowEffects(Module m)
- {
- super(m);
- }
-
- @SubscribeEvent
- public void saveArrows(ArrowLooseEvent e)
- {
- if(KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills &&
- EffectUtils.getEffectLevel(e.getEntityPlayer(), Effect.ARROW_SAVER) >= Utils.randomInt(1, 5))
- {
- e.setCanceled(true);
- }
- }
-
- @SubscribeEvent
- public void onArrowLaunch(ArrowLaunchEvent e)
- {
- if(KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills)
- {
- int fast = EffectUtils.getEffectLevel(e.getEntityPlayer(), Effect.FASTER_ARROWS);
- if(fast >= 1)
- {
- Utils.scaleVelocity(e.getEntityArrow(), (fast / 5f) + 1);
- }
- }
- }
-
- @SubscribeEvent(receiveCanceled = false, priority = EventPriority.LOW)
- public void handleHurtShots(LivingHurtEvent e)
- {
- EntityLivingBase liv = e.getEntityLiving();
- if(!KajetansMod.worldManager.getWorldPreferences(liv.world).skills)
- {
- return;
- }
- EntityData data = KajetansMod.data.get(e.getSource().getImmediateSource());
- if(data != null)
- {
- if(data.hasTeleportEntity())
- {
- Utils.teleportEntity(liv, data.getTeleportEntity());
- }
- if(data.hasOnHitHealEntity())
- {
- data.getOnHitHealEntity().heal(2);
- }
- }
- }
-
- @SubscribeEvent(receiveCanceled = false)
- public void handleDragonSkin(LivingAttackEvent e)
- {
- EntityLivingBase liv = e.getEntityLiving();
- if(!KajetansMod.worldManager.getWorldPreferences(liv.world).skills || !(liv instanceof EntityPlayerMP))
- {
- return;
- }
- Entity ent = e.getSource().getImmediateSource();
- if(ent instanceof EntityArrow && KajetansMod.data.get(liv).hasArrowImmunity())
- {
- e.setCanceled(true);
- Utils.scaleVelocity(ent, -0.1);
- }
- }
-
- private void runArrowEffects(EntityArrow arrow)
- {
- EntityPlayer player = Utils.getPlayerFromProjectile(arrow);
- if(player == null || !(player instanceof EntityPlayerMP))
- {
- return;
- }
- EntityPlayerMP p = (EntityPlayerMP) player;
- WorldServer w = p.getServerWorld();
- int clusterPower = KajetansMod.data.get(arrow).getClusterPower();
- if(clusterPower > 0)
- {
- int power = clusterPower * 600;
- int damage = clusterPower * 3;
- EffectUtils.spawnParticle(w, EnumParticleTypes.EXPLOSION_LARGE, arrow, 1);
- EffectUtils.spawnParticleCircle(w, arrow, EnumParticleTypes.EXPLOSION_LARGE, 3, 9);
- DamageSource ds = DamageSource.causePlayerDamage(p);
- EffectUtils.getEntsOfNotGuild(p, w, arrow.posX, arrow.posY, arrow.posZ, 4).forEach(e ->
- {
- e.attackEntityFrom(ds, damage);
- EffectUtils.addPotionTo(e, MobEffects.BLINDNESS, power, 0);
- });
- arrow.setDead();
- }
- else if(KajetansMod.data.get(p).hasArrowHook())
- {
- EffectBlockChanger list = new EffectBlockChanger(w);
- BlockPos pos = arrow.getPosition();
- for(int x = -1; x <= 1; x++)
- {
- for(int y = -1; y <= 1; y++)
- {
- list.addBlock(pos, Blocks.GLASS);
- }
- }
- list.run(600);
- Utils.teleportEntity(p, new Location(p.world, pos.add(0, 1, 0)));
- }
- }
-
- @SubscribeEvent
- public void handleHitShots(ArrowHitGroundEvent e)
- {
- if(KajetansMod.worldManager.getWorldPreferences(e.getEntityArrow().world).skills)
- {
- runArrowEffects(e.getEntityArrow());
- }
- }
-
- @SubscribeEvent
- public void handleHitShots(LivingHurtEvent e)
- {
- Entity ent = e.getSource().getImmediateSource();
- if(ent != null && ent instanceof EntityArrow && KajetansMod.worldManager.getWorldPreferences(ent.world).skills)
- {
- runArrowEffects((EntityArrow) ent);
- }
-
- }
-
- @SubscribeEvent
- public void handleSmokeBomb(ThrowableImpactEvent e)
- {
- EntityThrowable pro = e.getEntityThrowable();
- if(!(pro instanceof EntitySnowball) || !(pro.getThrower() instanceof EntityPlayerMP) ||
- !KajetansMod.data.get(pro).isSmokeBomb() ||
- !KajetansMod.worldManager.getWorldPreferences(pro.world).skills)
- {
- return;
- }
- EntityPlayerMP p = (EntityPlayerMP) pro.getThrower();
- if(p == null)
- {
- return;
- }
- DamageSource ds = DamageSource.causePlayerDamage(p);
- EffectUtils.spawnParticle(p.getServerWorld(), EnumParticleTypes.EXPLOSION_LARGE, pro, 1);
- EffectUtils.getEntsOfNotGuild(p, p.getServerWorld(), pro.posX, pro.posY, pro.posZ, 3).forEach(ent ->
- {
- ent.attackEntityFrom(ds, 4);
- EffectUtils.addPotionTo(ent, MobEffects.BLINDNESS, 200, 0);
- });
- }
- }
|