Skip to content

Commit 1981c17

Browse files
committed
feat: Add optional Identifier to modProxy, log selected proxy
1 parent dee32d1 commit 1981c17

5 files changed

Lines changed: 54 additions & 6 deletions

File tree

common/src/main/java/net/blay09/mods/balm/api/Balm.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ public static <T> ModProxy<T> modProxy() {
9999
return runtime.modProxy();
100100
}
101101

102+
public static <T> ModProxy<T> modProxy(ResourceLocation identifier) {
103+
return runtime.modProxy(identifier);
104+
}
105+
102106
public static <T> SidedProxy<T> sidedProxy(String commonName, String clientName) {
103107
return runtime.sidedProxy(commonName, clientName);
104108
}

common/src/main/java/net/blay09/mods/balm/api/BalmRuntime.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ public interface BalmRuntime {
9797

9898
<T> ModProxy<T> modProxy();
9999

100+
<T> ModProxy<T> modProxy(ResourceLocation identifier);
101+
100102
String getPlatform();
101103

102104
default void initializeModule(BalmModule module) {

common/src/main/java/net/blay09/mods/balm/common/CommonBalmRuntime.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import net.blay09.mods.balm.common.config.ConfigSync;
1111
import net.blay09.mods.balm.common.proxy.ModProxyImpl;
1212
import net.blay09.mods.balm.common.proxy.PlatformProxyImpl;
13+
import net.minecraft.resources.ResourceLocation;
1314

1415
import java.lang.reflect.InvocationTargetException;
1516
import java.util.ArrayList;
@@ -65,6 +66,11 @@ public <T> ModProxy<T> modProxy() {
6566
return new ModProxyImpl<>(this::getModVersion);
6667
}
6768

69+
@Override
70+
public <T> ModProxy<T> modProxy(ResourceLocation identifier) {
71+
return new ModProxyImpl<>(this::getModVersion, identifier);
72+
}
73+
6874
protected abstract Optional<String> getModVersion(String modId);
6975

7076
public void initializeRuntime() {

common/src/main/java/net/blay09/mods/balm/common/proxy/ModProxyImpl.java

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,36 @@
11
package net.blay09.mods.balm.common.proxy;
22

33
import net.blay09.mods.balm.api.proxy.ModProxy;
4+
import net.minecraft.resources.ResourceLocation;
45
import org.jetbrains.annotations.Nullable;
6+
import org.slf4j.Logger;
7+
import org.slf4j.LoggerFactory;
58

69
import java.lang.reflect.InvocationTargetException;
710
import java.util.ArrayList;
811
import java.util.List;
912
import java.util.Optional;
1013
import java.util.function.Function;
1114
import java.util.function.Supplier;
12-
import java.util.stream.Collectors;
1315

1416
public class ModProxyImpl<T> implements ModProxy<T> {
1517

18+
private final Logger logger = LoggerFactory.getLogger(ModProxyImpl.class);
19+
1620
private final Function<String, Optional<String>> modVersionProvider;
1721
private final List<ModEntry<T>> proxies = new ArrayList<>();
22+
private final @Nullable ResourceLocation identifier;
1823
@Nullable
1924
private Function<List<T>, T> multiplexer;
2025
private @Nullable T fallback;
2126

2227
public ModProxyImpl(Function<String, Optional<String>> modVersionProvider) {
28+
this(modVersionProvider, null);
29+
}
30+
31+
public ModProxyImpl(Function<String, Optional<String>> modVersionProvider, @Nullable ResourceLocation identifier) {
2332
this.modVersionProvider = modVersionProvider;
33+
this.identifier = identifier;
2434
}
2535

2636
@Override
@@ -60,14 +70,40 @@ public ModProxy<T> withFallback(T fallback) {
6070
public T build() {
6171
final var applicableProxies = proxies.stream().filter(this::isApplicable).toList();
6272
if (multiplexer != null && applicableProxies.size() > 1) {
63-
return multiplexer.apply(applicableProxies.stream().map(ModEntry::proxy).map(Supplier::get).collect(Collectors.toList()));
73+
final var effectiveProxies = new ArrayList<T>();
74+
for (final var applicableProxy : applicableProxies) {
75+
try {
76+
effectiveProxies.add(applicableProxy.proxy.get());
77+
} catch (Exception e) {
78+
logger.error("Failed to instantiate proxy", e);
79+
}
80+
}
81+
if (effectiveProxies.size() > 1) {
82+
final var proxy = multiplexer.apply(effectiveProxies);
83+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", proxy);
84+
return proxy;
85+
}
86+
final var proxy = effectiveProxies.get(0);
87+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", proxy);
88+
return proxy;
6489
}
6590

66-
if (applicableProxies.isEmpty()) {
67-
return fallback;
91+
for (final var applicableProxy : applicableProxies) {
92+
try {
93+
final var proxy = applicableProxy.proxy.get();
94+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", proxy);
95+
return proxy;
96+
} catch (Exception e) {
97+
logger.error("Failed to instantiate proxy {}", identifier != null ? identifier : "<unnamed>", e);
98+
}
6899
}
69100

70-
return applicableProxies.get(0).proxy().get();
101+
if (fallback != null) {
102+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", fallback);
103+
} else {
104+
logger.warn("No applicable proxy found for {}", identifier != null ? identifier : "<unnamed>");
105+
}
106+
return fallback;
71107
}
72108

73109
private boolean isApplicable(ModEntry<T> proxy) {

fabric/src/main/java/net/blay09/mods/balm/fabric/FabricBalmRuntime.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public class FabricBalmRuntime extends CommonBalmRuntime {
8888
private final BalmRecipes recipes = new FabricBalmRecipes();
8989
private final BalmModSupport modSupport = new FabricBalmModSupport(this);
9090
private final BalmParticles particles = new FabricBalmParticles();
91-
private final Supplier<BalmPermissions> permissions = this.<BalmPermissions>modProxy()
91+
private final Supplier<BalmPermissions> permissions = this.<BalmPermissions>modProxy(new ResourceLocation("balm", "permissions"))
9292
.with("fabric-permissions-api-v0", "[0.3,0.4)", "net.blay09.mods.balm.fabric.compat.FabricPermissionsAPIIntegration")
9393
.withFallback(new CommonBalmPermissions())
9494
.buildLazily();

0 commit comments

Comments
 (0)