Skip to content

Commit 41708d7

Browse files
committed
feat: Add optional Identifier to modProxy, log selected proxy
1 parent c16f91c commit 41708d7

5 files changed

Lines changed: 46 additions & 6 deletions

File tree

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import net.blay09.mods.balm.platform.runtime.internal.BalmRuntime;
2222
import net.blay09.mods.balm.platform.runtime.BalmRuntimeLoadContext;
2323
import net.blay09.mods.balm.platform.runtime.internal.BalmRuntimeSpi;
24+
import net.minecraft.resources.Identifier;
2425

2526
import java.util.function.Consumer;
2627

@@ -107,6 +108,17 @@ public static <T> ModProxy<T> modProxy() {
107108
return runtime.modProxy();
108109
}
109110

111+
/**
112+
* Creates a mod proxy, which you can use to provide differing implementations depending on which mods are loaded under a common interface.
113+
*
114+
* @param identifier the identifier for this mod proxy.
115+
* @param <T> the type of the common interface.
116+
* @return a builder for a mod proxy.
117+
*/
118+
public static <T> ModProxy<T> modProxy(Identifier identifier) {
119+
return runtime.modProxy(identifier);
120+
}
121+
110122
/**
111123
* Creates a sided proxy, which you can use to provide differing implementations for whether the mod is running on the client or a dedicated server under a common interface.
112124
* When providing class names, do not use {@link Class#getName()} as that will cause the class to be loaded and cause crashes on dedicated servers!

common/src/main/java/net/blay09/mods/balm/platform/internal/ModProxyImpl.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.blay09.mods.balm.platform.ModProxy;
44
import net.blay09.mods.balm.platform.ModInfo;
5+
import net.minecraft.resources.Identifier;
56
import org.jspecify.annotations.Nullable;
67
import org.slf4j.Logger;
78
import org.slf4j.LoggerFactory;
@@ -19,12 +20,18 @@ public class ModProxyImpl<T> implements ModProxy<T> {
1920

2021
private final Function<String, Optional<ModInfo>> modInfoProvider;
2122
private final List<ModEntry<T>> proxies = new ArrayList<>();
23+
private final @Nullable Identifier identifier;
2224
@Nullable
2325
private Function<List<T>, T> multiplexer;
2426
private @Nullable T fallback;
2527

2628
public ModProxyImpl(Function<String, Optional<ModInfo>> modInfoProvider) {
29+
this(modInfoProvider, null);
30+
}
31+
32+
public ModProxyImpl(Function<String, Optional<ModInfo>> modInfoProvider, @Nullable Identifier identifier) {
2733
this.modInfoProvider = modInfoProvider;
34+
this.identifier = identifier;
2835
}
2936

3037
@Override
@@ -72,20 +79,31 @@ public T build() {
7279
logger.error("Failed to instantiate proxy", e);
7380
}
7481
}
75-
if(effectiveProxies.size() > 1) {
76-
return multiplexer.apply(effectiveProxies);
82+
if (effectiveProxies.size() > 1) {
83+
final var proxy = multiplexer.apply(effectiveProxies);
84+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", proxy);
85+
return proxy;
7786
}
78-
return effectiveProxies.getFirst();
87+
final var proxy = effectiveProxies.getFirst();
88+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", proxy);
89+
return proxy;
7990
}
8091

8192
for (final var applicableProxy : applicableProxies) {
8293
try {
83-
return applicableProxy.proxy.get();
94+
final var proxy = applicableProxy.proxy.get();
95+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", proxy);
96+
return proxy;
8497
} catch (Exception e) {
85-
logger.error("Failed to instantiate proxy", e);
98+
logger.error("Failed to instantiate proxy {}", identifier != null ? identifier : "<unnamed>", e);
8699
}
87100
}
88101

102+
if (fallback != null) {
103+
logger.info("Mod proxy {} resolved as {}", identifier != null ? identifier : "<unnamed>", fallback);
104+
} else {
105+
logger.warn("No applicable proxy found for {}", identifier != null ? identifier : "<unnamed>");
106+
}
89107
return fallback;
90108
}
91109

common/src/main/java/net/blay09/mods/balm/platform/runtime/internal/BalmRuntime.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import net.blay09.mods.balm.world.level.block.entity.BalmBlockEntityTypeRegistrar;
3838
import net.minecraft.core.Registry;
3939
import net.minecraft.core.registries.Registries;
40+
import net.minecraft.resources.Identifier;
4041
import net.minecraft.resources.ResourceKey;
4142

4243
import java.util.function.Consumer;
@@ -78,6 +79,8 @@ public interface BalmRuntime<TLoadContext extends BalmRuntimeLoadContext> {
7879

7980
<T> ModProxy<T> modProxy();
8081

82+
<T> ModProxy<T> modProxy(Identifier identifier);
83+
8184
default void initializeModule(BalmModule module) {
8285
final var modId = module.getId().getNamespace();
8386
module.registerConfig(getConfig());

common/src/main/java/net/blay09/mods/balm/platform/runtime/internal/CommonBalmRuntime.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.blay09.mods.balm.core.component.internal.BalmDataComponentTypeRegistrarImpl;
2525
import net.blay09.mods.balm.world.level.block.BalmBlockRegistrar;
2626
import net.blay09.mods.balm.world.level.block.internal.BalmBlockRegistrarImpl;
27+
import net.minecraft.resources.Identifier;
2728
import org.slf4j.Logger;
2829
import org.slf4j.LoggerFactory;
2930

@@ -84,6 +85,11 @@ public <T> ModProxy<T> modProxy() {
8485
return new ModProxyImpl<>((modId) -> platform().getModInfo(modId));
8586
}
8687

88+
@Override
89+
public <T> ModProxy<T> modProxy(Identifier identifier) {
90+
return new ModProxyImpl<>((modId) -> platform().getModInfo(modId), identifier);
91+
}
92+
8793
public void initializeRuntime() {
8894
ready = true;
8995
for (final var callback : initCallbacks) {

fabric/src/main/java/net/blay09/mods/balm/fabric/platform/runtime/internal/FabricBalmRuntime.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import net.blay09.mods.balm.platform.attachment.BalmDataAttachmentTypeRegistrar;
5454
import net.blay09.mods.balm.fabric.platform.attachment.internal.FabricBalmDataAttachmentTypeRegistrar;
5555
import net.blay09.mods.balm.world.entity.ai.village.poi.BalmPoiTypeRegistrar;
56+
import net.minecraft.resources.Identifier;
5657

5758
import java.util.function.Consumer;
5859
import java.util.function.Supplier;
@@ -68,7 +69,7 @@ public class FabricBalmRuntime extends CommonBalmRuntime<FabricLoadContext> {
6869
private final BalmLootTables lootTables = new CommonBalmLootTables();
6970
private final BalmModSupport modSupport = new FabricBalmModSupport(this);
7071
private final BalmPlatform platform = new FabricBalmPlatform();
71-
private final Supplier<BalmPermissions> permissions = this.<BalmPermissions>modProxy()
72+
private final Supplier<BalmPermissions> permissions = this.<BalmPermissions>modProxy(Identifier.fromNamespaceAndPath("balm", "permissions"))
7273
.with("fabric-permissions-api-v0", "[0.7,)", "net.blay09.mods.balm.fabric.platform.compatibility.permissions.internal.FabricPermissionsAPIIntegration")
7374
.withFallback(new CommonBalmPermissions())
7475
.buildLazily();

0 commit comments

Comments
 (0)