diff --git a/disunity-core/src/main/java/info/ata4/unity/assetbundle/AssetBundleUtils.java b/disunity-core/src/main/java/info/ata4/unity/assetbundle/AssetBundleUtils.java index eb41bb22..3b1d4c65 100644 --- a/disunity-core/src/main/java/info/ata4/unity/assetbundle/AssetBundleUtils.java +++ b/disunity-core/src/main/java/info/ata4/unity/assetbundle/AssetBundleUtils.java @@ -88,7 +88,7 @@ public static void extract(Path file, Path outDir, Progress progress) throws IOE } String bundleName = outDir.getFileName().toString(); - Path propsFile = outDir.getParent().resolve(bundleName + ".json"); + Path propsFile = outDir.resolveSibling(bundleName + ".json"); writePropertiesFile(propsFile, assetBundle); } diff --git a/disunity-core/src/main/java/info/ata4/unity/util/TypeTreeDatabase.java b/disunity-core/src/main/java/info/ata4/unity/util/TypeTreeDatabase.java index 0f078c4f..e7267045 100644 --- a/disunity-core/src/main/java/info/ata4/unity/util/TypeTreeDatabase.java +++ b/disunity-core/src/main/java/info/ata4/unity/util/TypeTreeDatabase.java @@ -54,6 +54,7 @@ public class TypeTreeDatabase { private final List entries = new ArrayList<>(); private final Map, TypeTreeDatabaseEntry> entryMap = new HashMap<>(); + private final Set> warnedMatches = new HashSet<>(); private Path dbFile; public TypeTreeDatabase() { @@ -233,7 +234,8 @@ public Set getNodeSet() { public TypeTreeDatabaseEntry getEntry(UnityClass unityClass, UnityVersion unityVersion, boolean exact) { // search for exact matches - TypeTreeDatabaseEntry entryA = entryMap.get(new ImmutablePair<>(unityClass, unityVersion)); + Pair classAndVersion = new ImmutablePair<>(unityClass, unityVersion); + TypeTreeDatabaseEntry entryA = entryMap.get(classAndVersion); if (entryA != null) { return entryA; } @@ -273,17 +275,27 @@ public TypeTreeDatabaseEntry getEntry(UnityClass unityClass, UnityVersion unityV // return less perfect match if (entryB != null) { - L.log(Level.WARNING, "Unprecise match for class {0} (required: {1}, available: {2})", new Object[]{unityClass, unityVersion, versionB}); + if (!warnedMatches.contains(classAndVersion)) { + L.log(Level.WARNING, "Unprecise match for class {0} (required: {1}, available: {2})", new Object[]{unityClass, unityVersion, versionB}); + warnedMatches.add(classAndVersion); + } return entryB; } // return field node from any revision as the very last resort if (entryC != null) { - L.log(Level.WARNING, "Bad match for class {0} (required: {1}, available: {2})", new Object[]{unityClass, unityVersion, versionC}); + if (!warnedMatches.contains(classAndVersion)) { + L.log(Level.WARNING, "Bad match for class {0} (required: {1}, available: {2})", new Object[]{unityClass, unityVersion, versionC}); + warnedMatches.add(classAndVersion); + } return entryC; } // no matches at all + if (!warnedMatches.contains(classAndVersion)) { + L.log(Level.WARNING, "No match for class {0} (required: {1})", new Object[]{unityClass, unityVersion}); + warnedMatches.add(classAndVersion); + } return null; }