LibJF/libjf-config-core-v1/src/client/java/io/gitlab/jfronny/libjf/config/impl/ui/ConfigScreenFactoryDiscover...

56 lines
2.8 KiB
Java

package io.gitlab.jfronny.libjf.config.impl.ui;
import io.gitlab.jfronny.libjf.config.api.v1.ui.ConfigScreenFactory;
import net.fabricmc.loader.api.FabricLoader;
import java.util.Comparator;
import java.util.List;
public class ConfigScreenFactoryDiscovery {
private static ConfigScreenFactory<?> discovered1 = null;
private static io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory discovered2 = null;
@Deprecated
public static ConfigScreenFactory<?> getConfigured() {
if (discovered1 == null) {
List<Object> entrypoints = getEntrypoints();
discovered1 = entrypoints
.stream()
.filter(it -> it instanceof io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory<?,?>)
.map(it -> (io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory) it)
.max(Comparator.comparing(io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory::getPriority))
.<ConfigScreenFactory>map(ConfigScreenFactory2To1::new)
.orElseGet(() -> entrypoints
.stream()
.filter(it -> it instanceof ConfigScreenFactory<?>)
.map(it -> (ConfigScreenFactory) it)
.max(Comparator.comparing(ConfigScreenFactory::getPriority))
.orElseGet(() -> new ConfigScreenFactory2To1(new PlaceholderScreenFactory())));
}
return discovered1;
}
public static io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory<?, ?> getConfigured2() {
if (discovered2 == null) {
List<Object> entrypoints = getEntrypoints();
discovered2 = entrypoints
.stream()
.filter(it -> it instanceof io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory<?,?>)
.map(it -> (io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory) it)
.max(Comparator.comparing(io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory::getPriority))
.orElseGet(() -> entrypoints
.stream()
.filter(it -> it instanceof ConfigScreenFactory<?>)
.map(it -> (ConfigScreenFactory) it)
.<io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory>map(ConfigScreenFactory1To2::new)
.max(Comparator.comparing(io.gitlab.jfronny.libjf.config.api.v2.ui.ConfigScreenFactory::getPriority))
.orElseGet(PlaceholderScreenFactory::new));
}
return discovered2;
}
private static List<Object> getEntrypoints() {
return FabricLoader.getInstance().getEntrypoints("libjf:config_screen", Object.class);
}
}