CustomEventCaller.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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.block.Block;
  7. import net.minecraft.block.BlockState;
  8. import net.minecraft.block.Blocks;
  9. import net.minecraft.block.PistonBlockStructureHelper;
  10. import net.minecraft.server.MinecraftServer;
  11. import net.minecraft.util.math.BlockPos;
  12. import net.minecraftforge.eventbus.api.SubscribeEvent;
  13. import net.minecraftforge.event.TickEvent;
  14. import net.minecraftforge.event.world.PistonEvent;
  15. import net.minecraftforge.event.world.PistonEvent.PistonMoveType;
  16. public class CustomEventCaller {
  17. private final HashMap<Integer, PlayerMoveData> moveData = new HashMap<>();
  18. private final LinkedList<Integer> removeQueue = new LinkedList<>();
  19. private final LinkedList<PlayerMoveData> addQueue = new LinkedList<>();
  20. private final MinecraftServer server;
  21. private final SnuviScheduler scheduler;
  22. public CustomEventCaller(MinecraftServer server, SnuviScheduler scheduler) {
  23. this.server = server;
  24. this.scheduler = scheduler;
  25. }
  26. public int registerMoveData(PlayerMoveData data) {
  27. addQueue.add(data);
  28. return data.getId();
  29. }
  30. public void removeScriptData(Script sc) {
  31. moveData.entrySet().forEach(e -> {
  32. if(e.getValue().isSameScript(sc)) {
  33. removeQueue.add(e.getValue().getId());
  34. }
  35. });
  36. }
  37. public void removeMoveData(int id) {
  38. removeQueue.add(id);
  39. }
  40. @SubscribeEvent
  41. public void onServerTick(TickEvent.ServerTickEvent e) {
  42. if(e.phase == TickEvent.Phase.END) {
  43. scheduler.tick();
  44. if(!addQueue.isEmpty()) {
  45. addQueue.forEach(data -> moveData.put(data.getId(), data));
  46. addQueue.clear();
  47. }
  48. moveData.values().removeIf(data -> {
  49. if(data.tickLiving()) {
  50. return true;
  51. }
  52. if(data.tick()) {
  53. return false;
  54. }
  55. return server.getPlayerList().getPlayers().stream().anyMatch(p -> data.check(p));
  56. });
  57. if(!removeQueue.isEmpty()) {
  58. removeQueue.forEach(i -> moveData.remove(i));
  59. removeQueue.clear();
  60. }
  61. }
  62. }
  63. }