123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- 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.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.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.util.math.Vec3d;
- import net.minecraft.world.WorldServer;
- import net.minecraftforge.event.entity.ThrowableImpactEvent;
- 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)
- {
- Entity ent = e.getEntity();
- if(!KajetansMod.worldManager.getWorldPreferences(ent.world).skills)
- {
- return;
- }
- EntityPlayer p = Utils.getDamager(e.getSource());
- if(p != null)
- {
- if(KajetansMod.effects.getEntityData(ent, "arcaneshot") != null)
- {
- Utils.teleportEntity(ent, p);
- }
- else if(KajetansMod.effects.getEntityData(ent, "rapidfire") != null)
- {
- p.heal(2);
- }
- }
- }
-
- 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();
- Integer fromList = (Integer) KajetansMod.effects.getEntityData(p, "clusterbomb");
- if(fromList != null)
- {
- int power = fromList * 600;
- int damage = fromList * 3;
- Vec3d v = arrow.getPositionVector();
- EffectUtils.spawnParticle(w, EnumParticleTypes.EXPLOSION_LARGE, v, 1);
- EffectUtils.playEffectCircle(w, v, EnumParticleTypes.EXPLOSION_LARGE, 3, 9);
- DamageSource ds = DamageSource.causeMobDamage(p);
- EffectUtils.getEntsOfNotGuild(p, w, v, 4).forEach(e ->
- {
- e.attackEntityFrom(ds, damage);
- EffectUtils.addPotionTo(e, MobEffects.BLINDNESS, power, 0);
- });
- arrow.setDead();
- }
- else if(KajetansMod.effects.getEntityData(p, "grapplinghook") != null)
- {
- 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.effects.getEntityData(pro, "smokebomb") == null ||
- !KajetansMod.worldManager.getWorldPreferences(pro.world).skills)
- {
- return;
- }
- EntityPlayerMP p = (EntityPlayerMP) pro.getThrower();
- if(p == null)
- {
- return;
- }
- DamageSource ds = DamageSource.causeMobDamage(p);
- EffectUtils.spawnParticle(p.getServerWorld(), EnumParticleTypes.EXPLOSION_LARGE, pro.getPositionVector(), 1);
- EffectUtils.getEntsOfNotGuild(p, p.getServerWorld(), pro.getPositionVector(), 3).forEach(ent ->
- {
- ent.attackEntityFrom(ds, 4);
- EffectUtils.addPotionTo(ent, MobEffects.BLINDNESS, 200, 0);
- });
- }
- }
|