package us.myles.ViaVersion.api.platform.providers; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ViaProviders { private final Map, Provider> providers = new HashMap<>(); private final List> lonelyProviders = new ArrayList<>(); public void require(Class provider) { lonelyProviders.add(provider); } public void register(Class provider, T value) { providers.put(provider, value); } public void use(Class provider, T value) { lonelyProviders.remove(provider); providers.put(provider, value); } @Nullable public T get(Class provider) { Provider rawProvider = providers.get(provider); if (rawProvider != null) { return (T) rawProvider; } else { if (lonelyProviders.contains(provider)) { throw new IllegalStateException("There was no provider for " + provider + ", one is required!"); } return null; } } }