1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-10-22 09:27:39 +00:00

Make the shader mod system a little more flexible

Mostly for multi-loader support, but also /technically/ makes it easier
to support multiple loaders in the future.
This commit is contained in:
Jonathan Coates
2022-11-09 21:05:27 +00:00
parent 8a7156785d
commit 0c4fd2b29e
6 changed files with 94 additions and 37 deletions

View File

@@ -8,8 +8,6 @@ package dan200.computercraft.impl;
import org.jetbrains.annotations.ApiStatus;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.ServiceLoader;
import java.util.stream.Collectors;
@@ -32,17 +30,15 @@ public final class Services {
* @throws IllegalStateException When the service cannot be loaded.
*/
public static <T> T load(Class<T> klass) {
List<T> services = new ArrayList<>(1);
for (var provider : ServiceLoader.load(klass)) services.add(provider);
switch (services.size()) {
case 1:
return services.get(0);
case 0:
throw new IllegalStateException("Cannot find service for " + klass.getName());
default:
var serviceTypes = services.stream().map(x -> x.getClass().getName()).collect(Collectors.joining(", "));
var services = ServiceLoader.load(klass).stream().toList();
return switch (services.size()) {
case 1 -> services.get(0).get();
case 0 -> throw new IllegalStateException("Cannot find service for " + klass.getName());
default -> {
var serviceTypes = services.stream().map(x -> x.type().getName()).collect(Collectors.joining(", "));
throw new IllegalStateException("Multiple services for " + klass.getName() + ": " + serviceTypes);
}
}
};
}
/**