Sort matter json namespaces according to mod order

This commit is contained in:
DBotThePony 2023-04-14 14:58:05 +07:00
parent a51398e220
commit addd088cc4
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -15,6 +15,7 @@ import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream
import it.unimi.dsi.fastutil.objects.Object2BooleanFunction
import it.unimi.dsi.fastutil.objects.Object2BooleanOpenHashMap
import it.unimi.dsi.fastutil.objects.Object2IntArrayMap
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap
import it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet
import it.unimi.dsi.fastutil.objects.Reference2BooleanFunction
import it.unimi.dsi.fastutil.objects.Reference2BooleanOpenHashMap
@ -339,8 +340,21 @@ object MatterManager {
val addOrReplace = ArrayList<Pair<InsertAction, ResourceLocation>>()
val update = ArrayList<Pair<UpdateAction, ResourceLocation>>()
val delete = ArrayList<Pair<DeleteAction, ResourceLocation>>()
val sortedKeys = ArrayList<ResourceLocation>(map.keys)
val inverse = Object2IntOpenHashMap<String>()
inverse.defaultReturnValue(Int.MAX_VALUE) // выталкиваем неизвестные имена в самый конец
for ((i, info) in ModList.get().mods.withIndex()) {
inverse[info.namespace] = i
}
inverse[OverdriveThatMatters.MOD_ID] = -1 // загружаем файлы самого мода всегда раньше, чем всё остальное
sortedKeys.sortWith { a, b -> inverse.getInt(a.namespace).compareTo(inverse.getInt(b.namespace)) }
for (key in sortedKeys) {
val json = map[key]!!
for ((key, json) in map) {
if (json !is JsonObject) {
throw JsonParseException("Matter value $key has invalid type: ${json::class.qualifiedName} ($json)")
}