1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package me.km.events;
- import java.util.HashMap;
- import java.util.LinkedList;
- import me.hammerle.snuviscript.code.Script;
- import me.km.scheduler.SnuviScheduler;
- import net.minecraft.server.MinecraftServer;
- import net.minecraftforge.eventbus.api.SubscribeEvent;
- import net.minecraftforge.event.TickEvent;
- public class CustomEventCaller {
- private final HashMap<Integer, PlayerMoveData> moveData = new HashMap<>();
- private final LinkedList<Integer> removeQueue = new LinkedList<>();
- private final LinkedList<PlayerMoveData> addQueue = new LinkedList<>();
- private final MinecraftServer server;
- private final SnuviScheduler scheduler;
- public CustomEventCaller(MinecraftServer server, SnuviScheduler scheduler) {
- this.server = server;
- this.scheduler = scheduler;
- }
- public int registerMoveData(PlayerMoveData data) {
- addQueue.add(data);
- return data.getId();
- }
- public void removeScriptData(Script sc) {
- moveData.entrySet().forEach(e -> {
- if(e.getValue().isSameScript(sc)) {
- removeQueue.add(e.getValue().getId());
- }
- });
- }
- public void removeMoveData(int id) {
- removeQueue.add(id);
- }
- @SubscribeEvent
- public void onServerTick(TickEvent.ServerTickEvent e) {
- if(e.phase == TickEvent.Phase.END) {
- scheduler.tick();
- if(!addQueue.isEmpty()) {
- addQueue.forEach(data -> moveData.put(data.getId(), data));
- addQueue.clear();
- }
- moveData.values().removeIf(data -> {
- if(data.tickLiving()) {
- return true;
- }
- if(data.tick()) {
- return false;
- }
- return server.getPlayerList().getPlayers().stream().anyMatch(p -> data.check(p));
- });
- if(!removeQueue.isEmpty()) {
- removeQueue.forEach(i -> moveData.remove(i));
- removeQueue.clear();
- }
- }
- }
- }
|