123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package me.km.events;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.LinkedList;
- import me.km.KajetansMod;
- 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<EntityArrow> ARROWS = new ArrayList<>();
-
- private static final HashMap<Integer, PlayerMoveData> MOVE_DATA = new HashMap<>();
- private static int idCounter = 0;
- private static final LinkedList<Integer> REMOVE_QUEUE = new LinkedList<>();
-
- public static int registerMoveData(PlayerMoveData data)
- {
- idCounter++;
- MOVE_DATA.put(idCounter, data);
- return idCounter;
- }
-
- public static void removeMoveData(int id)
- {
- REMOVE_QUEUE.add(id);
- }
-
- @SubscribeEvent
- public void onPlayerMove(TickEvent.ServerTickEvent e)
- {
- if(e.phase == TickEvent.Phase.END)
- {
- MOVE_DATA.values().removeIf(data ->
- {
- if(data.tickLiving())
- {
- return true;
- }
- if(data.tick())
- {
- return false;
- }
- return KajetansMod.server.getPlayerList().getPlayers().stream().anyMatch(p -> data.check(p));
- });
- if(!REMOVE_QUEUE.isEmpty())
- {
- REMOVE_QUEUE.forEach(i -> MOVE_DATA.remove(i));
- REMOVE_QUEUE.clear();
- }
- }
- }
-
- @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());
- }
- }
- }
|