package com.hypixel.hytale.component.dependency; import com.hypixel.hytale.component.ComponentRegistry; import com.hypixel.hytale.component.system.ISystem; import javax.annotation.Nonnull; public class SystemDependency> extends Dependency { @Nonnull private final Class systemClass; public SystemDependency(@Nonnull Order order, @Nonnull Class systemClass) { this(order, systemClass, OrderPriority.NORMAL); } public SystemDependency(@Nonnull Order order, @Nonnull Class systemClass, int priority) { super(order, priority); this.systemClass = systemClass; } public SystemDependency(@Nonnull Order order, @Nonnull Class systemClass, @Nonnull OrderPriority priority) { super(order, priority); this.systemClass = systemClass; } @Nonnull public Class getSystemClass() { return this.systemClass; } @Override public void validate(@Nonnull ComponentRegistry registry) { if (!registry.hasSystemClass(this.systemClass)) { throw new IllegalArgumentException("SystemType dependency isn't registered: " + this.systemClass); } } @Override public void resolveGraphEdge(@Nonnull ComponentRegistry registry, @Nonnull ISystem thisSystem, @Nonnull DependencyGraph graph) { switch (this.order) { case BEFORE: for (ISystem systemx : graph.getSystems()) { if (this.systemClass.equals(systemx.getClass())) { graph.addEdge(thisSystem, systemx, -this.priority); } } break; case AFTER: for (ISystem system : graph.getSystems()) { if (this.systemClass.equals(system.getClass())) { graph.addEdge(system, thisSystem, this.priority); } } } } @Nonnull @Override public String toString() { return "SystemDependency{systemClass=" + this.systemClass + "} " + super.toString(); } }