ArrowEffects.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package me.km.effects.passive;
  2. import me.km.KajetansMod;
  3. import me.km.api.Location;
  4. import me.km.api.Module;
  5. import me.km.api.ModuleListener;
  6. import me.km.api.Utils;
  7. import me.km.effects.Effect;
  8. import me.km.effects.EffectBlockChanger;
  9. import me.km.effects.EffectUtils;
  10. import me.km.events.ArrowHitGroundEvent;
  11. import me.km.events.ArrowLaunchEvent;
  12. import net.minecraft.entity.Entity;
  13. import net.minecraft.entity.player.EntityPlayer;
  14. import net.minecraft.entity.player.EntityPlayerMP;
  15. import net.minecraft.entity.projectile.EntityArrow;
  16. import net.minecraft.entity.projectile.EntitySnowball;
  17. import net.minecraft.entity.projectile.EntityThrowable;
  18. import net.minecraft.init.Blocks;
  19. import net.minecraft.init.MobEffects;
  20. import net.minecraft.util.DamageSource;
  21. import net.minecraft.util.EnumParticleTypes;
  22. import net.minecraft.util.math.BlockPos;
  23. import net.minecraft.util.math.Vec3d;
  24. import net.minecraft.world.WorldServer;
  25. import net.minecraftforge.event.entity.ThrowableImpactEvent;
  26. import net.minecraftforge.event.entity.living.LivingHurtEvent;
  27. import net.minecraftforge.event.entity.player.ArrowLooseEvent;
  28. import net.minecraftforge.fml.common.eventhandler.EventPriority;
  29. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  30. public class ArrowEffects extends ModuleListener
  31. {
  32. public ArrowEffects(Module m)
  33. {
  34. super(m);
  35. }
  36. @SubscribeEvent
  37. public void saveArrows(ArrowLooseEvent e)
  38. {
  39. if(KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills &&
  40. EffectUtils.getEffectLevel(e.getEntityPlayer(), Effect.ARROW_SAVER) >= Utils.randomInt(1, 5))
  41. {
  42. e.setCanceled(true);
  43. }
  44. }
  45. @SubscribeEvent
  46. public void onArrowLaunch(ArrowLaunchEvent e)
  47. {
  48. if(KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills)
  49. {
  50. int fast = EffectUtils.getEffectLevel(e.getEntityPlayer(), Effect.FASTER_ARROWS);
  51. if(fast >= 1)
  52. {
  53. Utils.scaleVelocity(e.getEntityArrow(), (fast / 5f) + 1);
  54. }
  55. }
  56. }
  57. @SubscribeEvent(receiveCanceled = false, priority = EventPriority.LOW)
  58. public void handleHurtShots(LivingHurtEvent e)
  59. {
  60. Entity ent = e.getEntity();
  61. if(!KajetansMod.worldManager.getWorldPreferences(ent.world).skills)
  62. {
  63. return;
  64. }
  65. EntityPlayer p = Utils.getDamager(e.getSource());
  66. if(p != null)
  67. {
  68. if(KajetansMod.effects.getEntityData(ent, "arcaneshot") != null)
  69. {
  70. Utils.teleportEntity(ent, p);
  71. }
  72. else if(KajetansMod.effects.getEntityData(ent, "rapidfire") != null)
  73. {
  74. p.heal(2);
  75. }
  76. }
  77. }
  78. private void runArrowEffects(EntityArrow arrow)
  79. {
  80. EntityPlayer player = Utils.getPlayerFromProjectile(arrow);
  81. if(player == null || !(player instanceof EntityPlayerMP))
  82. {
  83. return;
  84. }
  85. EntityPlayerMP p = (EntityPlayerMP) player;
  86. WorldServer w = p.getServerWorld();
  87. Integer fromList = (Integer) KajetansMod.effects.getEntityData(p, "clusterbomb");
  88. if(fromList != null)
  89. {
  90. int power = fromList * 600;
  91. int damage = fromList * 3;
  92. Vec3d v = arrow.getPositionVector();
  93. EffectUtils.spawnParticle(w, EnumParticleTypes.EXPLOSION_LARGE, v, 1);
  94. EffectUtils.playEffectCircle(w, v, EnumParticleTypes.EXPLOSION_LARGE, 3, 9);
  95. DamageSource ds = DamageSource.causeMobDamage(p);
  96. EffectUtils.getEntsOfNotGuild(p, w, v, 4).forEach(e ->
  97. {
  98. e.attackEntityFrom(ds, damage);
  99. EffectUtils.addPotionTo(e, MobEffects.BLINDNESS, power, 0);
  100. });
  101. arrow.setDead();
  102. }
  103. else if(KajetansMod.effects.getEntityData(p, "grapplinghook") != null)
  104. {
  105. EffectBlockChanger list = new EffectBlockChanger(w);
  106. BlockPos pos = arrow.getPosition();
  107. for(int x = -1; x <= 1; x++)
  108. {
  109. for(int y = -1; y <= 1; y++)
  110. {
  111. list.addBlock(pos, Blocks.GLASS);
  112. }
  113. }
  114. list.run(600);
  115. Utils.teleportEntity(p, new Location(p.world, pos.add(0, 1, 0)));
  116. }
  117. }
  118. @SubscribeEvent
  119. public void handleHitShots(ArrowHitGroundEvent e)
  120. {
  121. if(KajetansMod.worldManager.getWorldPreferences(e.getEntityArrow().world).skills)
  122. {
  123. runArrowEffects(e.getEntityArrow());
  124. }
  125. }
  126. @SubscribeEvent
  127. public void handleHitShots(LivingHurtEvent e)
  128. {
  129. Entity ent = e.getSource().getImmediateSource();
  130. if(ent != null && ent instanceof EntityArrow && KajetansMod.worldManager.getWorldPreferences(ent.world).skills)
  131. {
  132. runArrowEffects((EntityArrow) ent);
  133. }
  134. }
  135. @SubscribeEvent
  136. public void handleSmokeBomb(ThrowableImpactEvent e)
  137. {
  138. EntityThrowable pro = e.getEntityThrowable();
  139. if(pro instanceof EntitySnowball || !(pro.getThrower() instanceof EntityPlayerMP) ||
  140. KajetansMod.effects.getEntityData(pro, "smokebomb") == null ||
  141. !KajetansMod.worldManager.getWorldPreferences(pro.world).skills)
  142. {
  143. return;
  144. }
  145. EntityPlayerMP p = (EntityPlayerMP) pro.getThrower();
  146. if(p == null)
  147. {
  148. return;
  149. }
  150. DamageSource ds = DamageSource.causeMobDamage(p);
  151. EffectUtils.spawnParticle(p.getServerWorld(), EnumParticleTypes.EXPLOSION_LARGE, pro.getPositionVector(), 1);
  152. EffectUtils.getEntsOfNotGuild(p, p.getServerWorld(), pro.getPositionVector(), 3).forEach(ent ->
  153. {
  154. ent.attackEntityFrom(ds, 4);
  155. EffectUtils.addPotionTo(ent, MobEffects.BLINDNESS, 200, 0);
  156. });
  157. }
  158. }