Restructure and simplify some stuff #1

Merged
kode merged 2 commits from TheKodeToad/restructure into main 2024-05-12 07:57:11 -04:00
7 changed files with 36 additions and 48 deletions

View file

@ -1,7 +1,7 @@
package io.github.moehreag.mojmap_patcher; package io.github.moehreag.mojmap_patcher;
import io.github.moehreag.mojmap_patcher.load.MojmapLoader; import io.github.moehreag.mojmap_patcher.provider.MojmapProvider;
import io.github.moehreag.mojmap_patcher.parser.MojmapParser; import io.github.moehreag.mojmap_patcher.parser.ProguardParser;
public class MojMapPatcher { public class MojMapPatcher {
@ -12,9 +12,9 @@ public class MojMapPatcher {
} else { } else {
version = args[0]; version = args[0];
} }
MojmapLoader.get(version).map(MojmapParser::read).ifPresent(s -> { MojmapProvider.get(version).map(ProguardParser::read).ifPresent(s -> {
//s.getClassFields().keySet().forEach(System.out::println); //s.getClassFields().keySet().forEach(System.out::println);
s.getClassFields().get("net.minecraft.client.Minecraft").forEach((s1, s2) -> System.out.println(s1 + " -> " + s2)); s.classFields().get("net.minecraft.client.Minecraft").forEach((s1, s2) -> System.out.println(s1 + " -> " + s2));
}); });
} }
} }

View file

@ -1,6 +1,6 @@
package io.github.moehreag.mojmap_patcher.api; package io.github.moehreag.mojmap_patcher.api;
import io.github.moehreag.mojmap_patcher.api.data.Data; import io.github.moehreag.mojmap_patcher.api.data.MappingData;
import io.github.moehreag.mojmap_patcher.api.data.Field; import io.github.moehreag.mojmap_patcher.api.data.Field;
import io.github.moehreag.mojmap_patcher.api.data.Method; import io.github.moehreag.mojmap_patcher.api.data.Method;
import org.objectweb.asm.commons.Remapper; import org.objectweb.asm.commons.Remapper;
@ -11,18 +11,18 @@ import java.util.Optional;
public class Mapper extends Remapper { public class Mapper extends Remapper {
private Data data; private MappingData data;
public static Mapper load() { public static Mapper load() {
throw new UnsupportedOperationException("TODO");
} }
public String mapClass(String name) { public String mapClass(String name) {
return data.getClasses().getOrDefault(name, name); return data.classes().getOrDefault(name, name);
} }
private Optional<Method> mapMethodInternal(String owner, String name, String descriptor) { private Optional<Method> mapMethodInternal(String owner, String name, String descriptor) {
for (Map.Entry<Method, Method> entry : data.getClassMethods().getOrDefault(owner, Collections.emptyMap()).entrySet()) { for (Map.Entry<Method, Method> entry : data.classMethods().getOrDefault(owner, Collections.emptyMap()).entrySet()) {
Method from = entry.getKey(); Method from = entry.getKey();
Method to = entry.getValue(); Method to = entry.getValue();
@ -38,7 +38,7 @@ public class Mapper extends Remapper {
} }
private Optional<Field> mapFieldInternal(String owner, String name, String descriptor) { private Optional<Field> mapFieldInternal(String owner, String name, String descriptor) {
for (Map.Entry<Field, Field> entry : data.getClassFields().getOrDefault(owner, Collections.emptyMap()).entrySet()) { for (Map.Entry<Field, Field> entry : data.classFields().getOrDefault(owner, Collections.emptyMap()).entrySet()) {
Field from = entry.getKey(); Field from = entry.getKey();
Field to = entry.getValue(); Field to = entry.getValue();

View file

@ -1,12 +0,0 @@
package io.github.moehreag.mojmap_patcher.api.data;
import java.util.Map;
public interface Data {
Map<String, String> getClasses();
Map<String, Map<Method, Method>> getClassMethods();
Map<String, Map<Field, Field>> getClassFields();
}

View file

@ -0,0 +1,17 @@
package io.github.moehreag.mojmap_patcher.api.data;
import java.util.HashMap;
import java.util.Map;
public record MappingData(
// IntelliJank, stop putting 8 spaces >:(
Map<String, String> classes,
Map<String, Map<Method, Method>> classMethods,
Map<String, Map<Field, Field>> classFields
) {
public MappingData() {
this(new HashMap<>(), new HashMap<>(), new HashMap<>());
}
}

View file

@ -1,17 +0,0 @@
package io.github.moehreag.mojmap_patcher.data;
import io.github.moehreag.mojmap_patcher.api.data.Field;
import io.github.moehreag.mojmap_patcher.api.data.Method;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class MojmapData implements io.github.moehreag.mojmap_patcher.api.data.Data {
private final Map<String, String> classes = new HashMap<>();
private final Map<String, Map<Method, Method>> classMethods = new HashMap<>();
private final Map<String, Map<Field, Field>> classFields = new HashMap<>();
}

View file

@ -2,17 +2,17 @@ package io.github.moehreag.mojmap_patcher.parser;
import io.github.moehreag.mojmap_patcher.Constants; import io.github.moehreag.mojmap_patcher.Constants;
import io.github.moehreag.mojmap_patcher.api.data.Field; import io.github.moehreag.mojmap_patcher.api.data.Field;
import io.github.moehreag.mojmap_patcher.api.data.MappingData;
import io.github.moehreag.mojmap_patcher.api.data.Method; import io.github.moehreag.mojmap_patcher.api.data.Method;
import io.github.moehreag.mojmap_patcher.data.MojmapData;
import java.util.HashMap; import java.util.HashMap;
public class MojmapParser { public class ProguardParser {
public static MojmapData read(String mappings) { public static MappingData read(String mappings) {
String[] lines = mappings.split("\n"); String[] lines = mappings.split("\n");
MojmapData data = new MojmapData(); MappingData data = new MappingData();
String currentClass = null; String currentClass = null;
for (String line : lines) { for (String line : lines) {
if (line.startsWith("#")) { // Filter out comments if (line.startsWith("#")) { // Filter out comments
@ -30,15 +30,15 @@ public class MojmapParser {
String[] method = deobf.split(":"); String[] method = deobf.split(":");
String[] descriptor = method[2].split(" "); String[] descriptor = method[2].split(" ");
int bracket = descriptor[1].indexOf("("); int bracket = descriptor[1].indexOf("(");
data.getClassMethods().computeIfAbsent(currentClass, s -> new HashMap<>()).put(new Method(Integer.parseInt(method[0]), Integer.parseInt(method[1]), obf, descriptor[1].substring(0, bracket), descriptor[1].substring(bracket + 1)), data.classMethods().computeIfAbsent(currentClass, s -> new HashMap<>()).put(new Method(Integer.parseInt(method[0]), Integer.parseInt(method[1]), obf, descriptor[1].substring(0, bracket), descriptor[1].substring(bracket + 1)),
new Method(Integer.parseInt(method[0]), Integer.parseInt(method[1]), descriptor[0], descriptor[1].substring(0, bracket), descriptor[1].substring(bracket + 1))); new Method(Integer.parseInt(method[0]), Integer.parseInt(method[1]), descriptor[0], descriptor[1].substring(0, bracket), descriptor[1].substring(bracket + 1)));
} else { } else {
String[] field = deobf.split(" "); String[] field = deobf.split(" ");
data.getClassFields().computeIfAbsent(currentClass, s -> new HashMap<>()).put(new Field(field[1], obf), new Field(field[1], field[0])); data.classFields().computeIfAbsent(currentClass, s -> new HashMap<>()).put(new Field(field[1], obf), new Field(field[1], field[0]));
} }
} else { // It's a class mapping } else { // It's a class mapping
currentClass = deobf; currentClass = deobf;
data.getClasses().put(obf, deobf); data.classes().put(obf, deobf);
} }
} }
return data; return data;

View file

@ -1,4 +1,4 @@
package io.github.moehreag.mojmap_patcher.load; package io.github.moehreag.mojmap_patcher.provider;
import com.google.gson.*; import com.google.gson.*;
import io.github.moehreag.mojmap_patcher.Constants; import io.github.moehreag.mojmap_patcher.Constants;
@ -6,7 +6,7 @@ import io.github.moehreag.mojmap_patcher.HttpHelper;
import java.util.Optional; import java.util.Optional;
public class MojmapLoader { public class MojmapProvider {
public static Optional<String> get(String gameVersion) { public static Optional<String> get(String gameVersion) {
return HttpHelper.getJson(Constants.VERSION_MANIFEST).map(manifest -> { return HttpHelper.getJson(Constants.VERSION_MANIFEST).map(manifest -> {