Skip to content

Commit ae83919

Browse files
authored
Merge pull request #6 from cassiancc/break-legacy-fabric-dependency
Break legacy `fabric` dependency
2 parents 6d7a1c8 + 86e4cfe commit ae83919

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

src/main/java/one/devos/nautical/canary/Canary.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22

33
import net.fabricmc.api.ModInitializer;
44
import net.minecraft.resources.ResourceLocation;
5+
import one.devos.nautical.canary.feature.FabricApiCheck;
56

67
public class Canary implements ModInitializer {
78
public static final String ID = "canary";
89

910
@Override
1011
public void onInitialize() {
1112
CanaryPackets.register();
13+
FabricApiCheck.checkForDeprecatedApi();
1214
}
1315

1416
public static ResourceLocation id(String path) {

src/main/java/one/devos/nautical/canary/Config.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import net.fabricmc.loader.api.FabricLoader;
1818

1919
public record Config(boolean printBlockStateReport, int diagnosticsPermissionLevel,
20-
List<String> trackedDataWhitelist, List<String> stateBuilderWhitelist) {
20+
List<String> trackedDataWhitelist, List<String> stateBuilderWhitelist, boolean breakLegacyFabricDependency) {
2121

2222
public static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve("canary.json");
2323
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
@@ -26,8 +26,9 @@ public record Config(boolean printBlockStateReport, int diagnosticsPermissionLev
2626
Codec.BOOL.optionalFieldOf("print_blockstate_report", false).forGetter(Config::printBlockStateReport),
2727
Codec.INT.optionalFieldOf("desync_diagnostics_permission_level", 4).forGetter(Config::diagnosticsPermissionLevel),
2828
Codec.STRING.listOf().optionalFieldOf("tracked_data_whitelist", List.of()).forGetter(Config::trackedDataWhitelist),
29-
Codec.STRING.listOf().optionalFieldOf("state_builder_whitelist", List.of()).forGetter(Config::stateBuilderWhitelist)
30-
).apply(instance, Config::new));
29+
Codec.STRING.listOf().optionalFieldOf("state_builder_whitelist", List.of()).forGetter(Config::stateBuilderWhitelist),
30+
Codec.BOOL.optionalFieldOf("break_legacy_fabric_dependency", true).forGetter(Config::breakLegacyFabricDependency)
31+
).apply(instance, Config::new));
3132

3233
public static final Config INSTANCE = load();
3334

@@ -39,7 +40,8 @@ private static Config makeDefault() {
3940
return new Config(
4041
false, 4,
4142
List.of("com.example.mymod.Utilities"),
42-
List.of("net.example.examplemod.Utils")
43+
List.of("net.example.examplemod.Utils"),
44+
true
4345
);
4446
}
4547

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package one.devos.nautical.canary.feature;
2+
3+
import net.fabricmc.loader.api.FabricLoader;
4+
import net.fabricmc.loader.api.ModContainer;
5+
import net.fabricmc.loader.api.metadata.ModDependency;
6+
import one.devos.nautical.canary.CanaryException;
7+
import one.devos.nautical.canary.Config;
8+
9+
public class FabricApiCheck {
10+
public static void checkForDeprecatedApi() {
11+
if (Config.INSTANCE.breakLegacyFabricDependency()) {
12+
for (ModContainer modContainer : FabricLoader.getInstance().getAllMods()) {
13+
for (ModDependency dependency : modContainer.getMetadata().getDependencies()) {
14+
if (dependency.getModId().equals("fabric")) {
15+
throw new CanaryException("Mod "+modContainer.getMetadata().getName()+" depends on `fabric` and not `fabric-api`. This behaviour has been deprecated since 1.19.3.");
16+
}
17+
}
18+
}
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)