CustomEventCaller.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package me.km.events;
  2. import java.util.ArrayList;
  3. import me.km.utils.ReflectionUtils;
  4. import net.minecraft.entity.Entity;
  5. import net.minecraft.entity.player.EntityPlayer;
  6. import net.minecraft.entity.player.EntityPlayerMP;
  7. import net.minecraft.entity.projectile.EntityArrow;
  8. import net.minecraft.entity.projectile.EntityThrowable;
  9. import net.minecraftforge.common.MinecraftForge;
  10. import net.minecraftforge.event.entity.EntityJoinWorldEvent;
  11. import net.minecraftforge.event.entity.living.LivingHurtEvent;
  12. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  13. import net.minecraftforge.fml.common.gameevent.TickEvent;
  14. public class CustomEventCaller
  15. {
  16. private static final ArrayList<EntityArrow> ARROWS = new ArrayList<>();
  17. @SubscribeEvent
  18. public void onPlayerMove(TickEvent.PlayerTickEvent e)
  19. {
  20. if(e.phase == TickEvent.Phase.END)
  21. {
  22. EntityPlayer p = e.player;
  23. if(p.prevPosX != p.posX || p.prevPosY != p.posY || p.prevPosZ != p.posZ)
  24. {
  25. MinecraftForge.EVENT_BUS.post(new PlayerMoveEvent(p));
  26. }
  27. }
  28. }
  29. @SubscribeEvent
  30. public void onArrowLaunch(EntityJoinWorldEvent e)
  31. {
  32. Entity ent = e.getEntity();
  33. if(ent instanceof EntityArrow)
  34. {
  35. EntityArrow arrow = (EntityArrow) ent;
  36. if(arrow.shootingEntity instanceof EntityPlayer)
  37. {
  38. ARROWS.add(arrow);
  39. MinecraftForge.EVENT_BUS.post(new ArrowLaunchEvent((EntityPlayer) arrow.shootingEntity, arrow, e.getWorld()));
  40. }
  41. }
  42. else if(ent instanceof EntityThrowable)
  43. {
  44. EntityThrowable thrown = (EntityThrowable) ent;
  45. if(thrown.getThrower() instanceof EntityPlayer)
  46. {
  47. MinecraftForge.EVENT_BUS.post(new ThrowableLaunchEvent((EntityPlayer) thrown.getThrower(), thrown, e.getWorld()));
  48. }
  49. }
  50. }
  51. @SubscribeEvent
  52. public void tickServer(TickEvent.ServerTickEvent e)
  53. {
  54. if(e.phase == TickEvent.Phase.END)
  55. {
  56. ARROWS.removeIf(arrow ->
  57. {
  58. if(ReflectionUtils.getArrowTimeInGround(arrow) >= 1)
  59. {
  60. MinecraftForge.EVENT_BUS.post(new ArrowHitGroundEvent(arrow));
  61. return true;
  62. }
  63. return false;
  64. });
  65. }
  66. }
  67. @SubscribeEvent
  68. public void onPlayerHurt(LivingHurtEvent e)
  69. {
  70. if(e.getEntityLiving() instanceof EntityPlayerMP && !(e instanceof PlayerHurtEvent))
  71. {
  72. PlayerHurtEvent hurt = new PlayerHurtEvent((EntityPlayerMP) e.getEntityLiving(), e.getSource(), e.getAmount());
  73. MinecraftForge.EVENT_BUS.post(hurt);
  74. e.setAmount(hurt.getAmount());
  75. e.setCanceled(hurt.isCanceled());
  76. }
  77. }
  78. }