package me.km.events; import java.util.ArrayList; import me.km.utils.ReflectionUtils; 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.EntityThrowable; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; public class CustomEventCaller { private static final ArrayList ARROWS = new ArrayList<>(); @SubscribeEvent public void onPlayerMove(TickEvent.PlayerTickEvent e) { if(e.phase == TickEvent.Phase.END) { EntityPlayer p = e.player; if(p.prevPosX != p.posX || p.prevPosY != p.posY || p.prevPosZ != p.posZ) { MinecraftForge.EVENT_BUS.post(new PlayerMoveEvent(p)); } } } @SubscribeEvent public void onArrowLaunch(EntityJoinWorldEvent e) { Entity ent = e.getEntity(); if(ent instanceof EntityArrow) { EntityArrow arrow = (EntityArrow) ent; if(arrow.shootingEntity instanceof EntityPlayer) { ARROWS.add(arrow); MinecraftForge.EVENT_BUS.post(new ArrowLaunchEvent((EntityPlayer) arrow.shootingEntity, arrow, e.getWorld())); } } else if(ent instanceof EntityThrowable) { EntityThrowable thrown = (EntityThrowable) ent; if(thrown.getThrower() instanceof EntityPlayer) { MinecraftForge.EVENT_BUS.post(new ThrowableLaunchEvent((EntityPlayer) thrown.getThrower(), thrown, e.getWorld())); } } } @SubscribeEvent public void tickServer(TickEvent.ServerTickEvent e) { if(e.phase == TickEvent.Phase.END) { ARROWS.removeIf(arrow -> { if(ReflectionUtils.getArrowTimeInGround(arrow) >= 1) { MinecraftForge.EVENT_BUS.post(new ArrowHitGroundEvent(arrow)); return true; } return false; }); } } @SubscribeEvent public void onPlayerHurt(LivingHurtEvent e) { if(e.getEntityLiving() instanceof EntityPlayerMP && !(e instanceof PlayerHurtEvent)) { PlayerHurtEvent hurt = new PlayerHurtEvent((EntityPlayerMP) e.getEntityLiving(), e.getSource(), e.getAmount()); MinecraftForge.EVENT_BUS.post(hurt); e.setAmount(hurt.getAmount()); e.setCanceled(hurt.isCanceled()); } } }