CustomEventCaller.java 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package me.km.events;
  2. import java.util.HashMap;
  3. import java.util.LinkedList;
  4. import me.hammerle.snuviscript.code.Script;
  5. import me.km.scheduler.SnuviScheduler;
  6. import net.minecraft.server.MinecraftServer;
  7. import net.minecraftforge.eventbus.api.SubscribeEvent;
  8. import net.minecraftforge.event.TickEvent;
  9. public class CustomEventCaller {
  10. private final HashMap<Integer, PlayerMoveData> moveData = new HashMap<>();
  11. private final LinkedList<Integer> removeQueue = new LinkedList<>();
  12. private final LinkedList<PlayerMoveData> addQueue = new LinkedList<>();
  13. private final MinecraftServer server;
  14. private final SnuviScheduler scheduler;
  15. public CustomEventCaller(MinecraftServer server, SnuviScheduler scheduler) {
  16. this.server = server;
  17. this.scheduler = scheduler;
  18. }
  19. public int registerMoveData(PlayerMoveData data) {
  20. addQueue.add(data);
  21. return data.getId();
  22. }
  23. public void removeScriptData(Script sc) {
  24. moveData.entrySet().forEach(e -> {
  25. if(e.getValue().isSameScript(sc)) {
  26. removeQueue.add(e.getValue().getId());
  27. }
  28. });
  29. }
  30. public void removeMoveData(int id) {
  31. removeQueue.add(id);
  32. }
  33. @SubscribeEvent
  34. public void onServerTick(TickEvent.ServerTickEvent e) {
  35. if(e.phase == TickEvent.Phase.END) {
  36. scheduler.tick();
  37. if(!addQueue.isEmpty()) {
  38. addQueue.forEach(data -> moveData.put(data.getId(), data));
  39. addQueue.clear();
  40. }
  41. moveData.values().removeIf(data -> {
  42. if(data.tickLiving()) {
  43. return true;
  44. }
  45. if(data.tick()) {
  46. return false;
  47. }
  48. return server.getPlayerList().getPlayers().stream().anyMatch(p -> data.check(p));
  49. });
  50. if(!removeQueue.isEmpty()) {
  51. removeQueue.forEach(i -> moveData.remove(i));
  52. removeQueue.clear();
  53. }
  54. }
  55. }
  56. }