diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt index e2a37e01d..df5927d60 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterDataProvider.kt @@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.matter import net.minecraft.data.CachedOutput import net.minecraft.data.DataGenerator import net.minecraft.data.DataProvider +import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.item.Item @@ -11,13 +12,13 @@ import net.minecraftforge.data.event.GatherDataEvent import ru.dbotthepony.mc.otm.core.Decimal import ru.dbotthepony.mc.otm.core.registryName import java.util.Collections +import java.util.concurrent.CompletableFuture import java.util.function.Consumer @Suppress("FunctionName", "unused") -open class MatterDataProvider(protected val dataGenerator: DataGenerator, val namespace: String?) : DataProvider { +open class MatterDataProvider(protected val dataGenerator: DataGenerator, val modid: String) : DataProvider { constructor(event: GatherDataEvent) : this(event.generator, event.modContainer.namespace) - protected val pathProvider: DataGenerator.PathProvider = dataGenerator.createPathProvider(DataGenerator.Target.DATA_PACK, MatterManager.MATTER_DIRECTORY) protected val actions = LinkedHashMap() sealed class Configuration(val name: ResourceLocation) { @@ -911,14 +912,10 @@ open class MatterDataProvider(protected val dataGenerator: DataGenerator, val na } protected fun updateLocation(input: ResourceLocation, prefix: String): ResourceLocation { - if (namespace != null) { - if (input.namespace == namespace) { - return ResourceLocation(input.namespace, prefix + input.path) - } else { - return ResourceLocation(namespace, prefix + input.namespace + "/" + input.path) - } - } else { + if (input.namespace == modid) { return ResourceLocation(input.namespace, prefix + input.path) + } else { + return ResourceLocation(modid, prefix + input.namespace + "/" + input.path) } } @@ -1204,13 +1201,18 @@ open class MatterDataProvider(protected val dataGenerator: DataGenerator, val na protected val added = ArrayList() val addedView: List = Collections.unmodifiableList(added) - final override fun run(output: CachedOutput) { + final override fun run(output: CachedOutput): CompletableFuture<*> { addActions() + val promises = ArrayList>() + val path = dataGenerator.packOutput.getOutputFolder(PackOutput.Target.DATA_PACK).resolve(modid).resolve(MatterManager.MATTER_DIRECTORY) + for ((key, value) in actions) { - DataProvider.saveStable(output, value.toJson(), pathProvider.json(key)) + promises.add(DataProvider.saveStable(output, value.toJson(), path.resolve("$key.json"))) added.add(value) } + + return CompletableFuture.allOf(*promises.toTypedArray()) } override fun getName(): String {