mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-04-02 21:47:42 -05:00
Return a map of all class tweakers in FabricModJson
This commit is contained in:
@@ -36,7 +36,6 @@ import net.fabricmc.accesswidener.AccessWidenerWriter;
|
||||
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
|
||||
import net.fabricmc.loom.util.fmj.FabricModJson;
|
||||
import net.fabricmc.loom.util.fmj.FabricModJsonFactory;
|
||||
import net.fabricmc.loom.util.fmj.ModEnvironment;
|
||||
|
||||
public class AccessWidenerUtils {
|
||||
/**
|
||||
@@ -59,7 +58,7 @@ public class AccessWidenerUtils {
|
||||
|
||||
public static AccessWidenerData readAccessWidenerData(Path inputJar) throws IOException {
|
||||
final FabricModJson fabricModJson = FabricModJsonFactory.createFromZip(inputJar);
|
||||
final List<String> classTweakers = fabricModJson.getClassTweakers(ModEnvironment.UNIVERSAL);
|
||||
final List<String> classTweakers = List.copyOf(fabricModJson.getClassTweakers().keySet());
|
||||
|
||||
if (classTweakers.isEmpty()) {
|
||||
return null;
|
||||
|
||||
@@ -27,6 +27,7 @@ package net.fabricmc.loom.util.fmj;
|
||||
import static net.fabricmc.loom.util.fmj.FabricModJsonUtils.readString;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
@@ -53,7 +54,7 @@ public abstract sealed class FabricModJson permits FabricModJsonV0, FabricModJso
|
||||
|
||||
public abstract List<String> getMixinConfigurations();
|
||||
|
||||
public abstract List<String> getClassTweakers(ModEnvironment modEnvironment);
|
||||
public abstract Map<String, ModEnvironment> getClassTweakers();
|
||||
|
||||
public final FabricModJsonSource getSource() {
|
||||
return source;
|
||||
|
||||
@@ -27,6 +27,7 @@ package net.fabricmc.loom.util.fmj;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
@@ -83,7 +84,7 @@ public final class FabricModJsonV0 extends FabricModJson {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getClassTweakers(ModEnvironment modEnvironment) {
|
||||
return Collections.emptyList();
|
||||
public Map<String, ModEnvironment> getClassTweakers() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import static net.fabricmc.loom.util.fmj.FabricModJsonUtils.readString;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
@@ -91,11 +92,11 @@ public final class FabricModJsonV1 extends FabricModJson {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getClassTweakers(ModEnvironment modEnvironment) {
|
||||
public Map<String, ModEnvironment> getClassTweakers() {
|
||||
if (!jsonObject.has("accessWidener")) {
|
||||
return Collections.emptyList();
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
return List.of(readString(jsonObject, "accessWidener"));
|
||||
return Map.of(readString(jsonObject, "accessWidener"), ModEnvironment.UNIVERSAL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,9 +24,10 @@
|
||||
|
||||
package net.fabricmc.loom.util.fmj;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
@@ -35,6 +36,8 @@ import com.google.gson.JsonPrimitive;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.util.Pair;
|
||||
|
||||
@ApiStatus.Experimental
|
||||
public final class FabricModJsonV2 extends FabricModJson {
|
||||
FabricModJsonV2(JsonObject jsonObject, FabricModJsonSource source) {
|
||||
@@ -58,34 +61,34 @@ public final class FabricModJsonV2 extends FabricModJson {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return getConditionalConfigs(jsonObject.get("mixins"), ModEnvironment.UNIVERSAL);
|
||||
return List.copyOf(getConditionalConfigs(jsonObject.get("mixins")).keySet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getClassTweakers(ModEnvironment modEnvironment) {
|
||||
public Map<String, ModEnvironment> getClassTweakers() {
|
||||
if (!jsonObject.has("classTweakers")) {
|
||||
return Collections.emptyList();
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
return getConditionalConfigs(jsonObject.get("classTweakers"), modEnvironment);
|
||||
return getConditionalConfigs(jsonObject.get("classTweakers"));
|
||||
}
|
||||
|
||||
private List<String> getConditionalConfigs(JsonElement jsonElement, ModEnvironment modEnvironment) {
|
||||
final List<String> values = new ArrayList<>();
|
||||
private Map<String, ModEnvironment> getConditionalConfigs(JsonElement jsonElement) {
|
||||
final Map<String, ModEnvironment> values = new HashMap<>();
|
||||
|
||||
if (jsonElement instanceof JsonArray jsonArray) {
|
||||
for (JsonElement arrayElement : jsonArray) {
|
||||
final String value = readConditionalConfig(arrayElement, modEnvironment);
|
||||
final Pair<String, ModEnvironment> value = readConditionalConfig(arrayElement);
|
||||
|
||||
if (value != null) {
|
||||
values.add(value);
|
||||
values.put(value.left(), value.right());
|
||||
}
|
||||
}
|
||||
} else if (jsonElement instanceof JsonPrimitive jsonPrimitive && jsonPrimitive.isString()) {
|
||||
final String value = readConditionalConfig(jsonPrimitive, modEnvironment);
|
||||
final Pair<String, ModEnvironment> value = readConditionalConfig(jsonPrimitive);
|
||||
|
||||
if (value != null) {
|
||||
values.add(value);
|
||||
values.put(value.left(), value.right());
|
||||
}
|
||||
} else {
|
||||
throw new FabricModJsonUtils.ParseException("Must be a string or array of strings");
|
||||
@@ -95,26 +98,21 @@ public final class FabricModJsonV2 extends FabricModJson {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String readConditionalConfig(JsonElement jsonElement, ModEnvironment modEnvironment) {
|
||||
private Pair<String, ModEnvironment> readConditionalConfig(JsonElement jsonElement) {
|
||||
if (jsonElement instanceof JsonPrimitive jsonPrimitive && jsonPrimitive.isString()) {
|
||||
return jsonElement.getAsString();
|
||||
return new Pair<>(jsonElement.getAsString(), ModEnvironment.UNIVERSAL);
|
||||
} else if (jsonElement instanceof JsonObject jsonObject) {
|
||||
final String config = FabricModJsonUtils.readString(jsonObject, "config");
|
||||
|
||||
if (!validForEnvironment(jsonObject, modEnvironment)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return config;
|
||||
return new Pair<>(config, getEnvironment(jsonObject));
|
||||
} else {
|
||||
throw new FabricModJsonUtils.ParseException("Must be a string or an object");
|
||||
}
|
||||
}
|
||||
|
||||
private boolean validForEnvironment(JsonObject jsonObject, ModEnvironment modEnvironment) {
|
||||
private ModEnvironment getEnvironment(JsonObject jsonObject) {
|
||||
if (!jsonObject.has("environment")) {
|
||||
// Default enabled for all envs.
|
||||
return true;
|
||||
return ModEnvironment.UNIVERSAL;
|
||||
}
|
||||
|
||||
if (!(jsonObject.get("environment") instanceof JsonPrimitive jsonPrimitive) || !jsonPrimitive.isString()) {
|
||||
@@ -124,9 +122,9 @@ public final class FabricModJsonV2 extends FabricModJson {
|
||||
final String environment = jsonPrimitive.getAsString();
|
||||
|
||||
return switch (environment) {
|
||||
case "*" -> true;
|
||||
case "client" -> modEnvironment.isClient();
|
||||
case "server" -> modEnvironment.isServer();
|
||||
case "*" -> ModEnvironment.UNIVERSAL;
|
||||
case "client" -> ModEnvironment.CLIENT;
|
||||
case "server" -> ModEnvironment.SERVER;
|
||||
default -> throw new FabricModJsonUtils.ParseException("Invalid environment type: " + environment);
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user