diff --git a/event-loop/src/main/java/mc/core/events/EventPipelineTask.java b/event-loop/src/main/java/mc/core/events/EventPipelineTask.java index a071f58..53eafe4 100644 --- a/event-loop/src/main/java/mc/core/events/EventPipelineTask.java +++ b/event-loop/src/main/java/mc/core/events/EventPipelineTask.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import mc.core.events.api.EventQueueOwner; +import mc.core.events.api.LockableResource; import mc.core.events.lock.LockObserveList; import mc.core.events.runner.EventExecutorService; import mc.core.events.runner.ResourceRunnable; @@ -75,6 +76,9 @@ public class EventPipelineTask { if (handler.isPluginSynchronize()) locks.add(manager.getResourceManager().getPluginLock(handler.getPlugin())); + for (LockableResource resource : handler.getLock()) { + locks.addAll(manager.getResourceManager().getAnnotationLocks(resource, event)); + } return locks; } diff --git a/event-loop/src/main/java/mc/core/events/SharedResourceManager.java b/event-loop/src/main/java/mc/core/events/SharedResourceManager.java index 45f6e1a..8fb486f 100644 --- a/event-loop/src/main/java/mc/core/events/SharedResourceManager.java +++ b/event-loop/src/main/java/mc/core/events/SharedResourceManager.java @@ -1,8 +1,11 @@ package mc.core.events; +import mc.core.events.api.LockableResource; import mc.core.events.api.Plugin; import mc.core.events.lock.PoorMansLock; +import java.util.Collection; +import java.util.Collections; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -13,4 +16,9 @@ public class SharedResourceManager { return pluginLocks.computeIfAbsent(plugin, s -> new PoorMansLock()); } + public Collection getAnnotationLocks(LockableResource resource, Event event) { + // TODO: Implement + return Collections.emptyList(); + } + } diff --git a/event-loop/src/main/java/mc/core/events/api/LockableResource.java b/event-loop/src/main/java/mc/core/events/api/LockableResource.java index f6408c7..5b86b0a 100644 --- a/event-loop/src/main/java/mc/core/events/api/LockableResource.java +++ b/event-loop/src/main/java/mc/core/events/api/LockableResource.java @@ -2,5 +2,9 @@ package mc.core.events.api; public enum LockableResource { PLAYER, - WORLD; + PLAYER_WORLD, + EVENT_LOCATION_WORLD, + EVENT_WORLD + + // TODO: Add entity-related constants } diff --git a/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java b/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java index cf3ba5d..6fe8efa 100644 --- a/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java +++ b/event-loop/src/main/java/mc/core/events/lock/LockObserveList.java @@ -18,6 +18,11 @@ public class LockObserveList implements Consumer { lock.addCallback(this); } + public void addAll(Iterable locks) { + for (PoorMansLock lock : locks) + add(lock); + } + public void release() { for (PoorMansLock lock : locks) { lock.removeCallback(this);