re-re-re-redo datagen providers
This commit is contained in:
parent
afcbaf75ae
commit
a8a01702ca
@ -4,14 +4,29 @@ import it.unimi.dsi.fastutil.objects.ObjectArraySet
|
|||||||
import net.minecraft.data.CachedOutput
|
import net.minecraft.data.CachedOutput
|
||||||
import net.minecraft.data.DataGenerator
|
import net.minecraft.data.DataGenerator
|
||||||
import net.minecraft.data.DataProvider
|
import net.minecraft.data.DataProvider
|
||||||
|
import net.minecraft.data.PackOutput
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
|
import net.minecraftforge.data.event.GatherDataEvent
|
||||||
|
import ru.dbotthepony.mc.otm.core.WriteOnce
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import java.util.LinkedList
|
import java.util.LinkedList
|
||||||
|
import java.util.concurrent.CompletableFuture
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
open class AndroidResearchDataProvider(protected val dataGenerator: DataGenerator) : DataProvider {
|
open class AndroidResearchDataProvider() : DataProvider {
|
||||||
protected val pathProvider: DataGenerator.PathProvider = dataGenerator.createPathProvider(DataGenerator.Target.DATA_PACK, AndroidResearchManager.DIRECTORY)
|
var pathProvider: PackOutput.PathProvider by WriteOnce("You need to call bindPackOutput before registering this data provider")
|
||||||
|
private set
|
||||||
|
|
||||||
|
constructor(output: PackOutput) : this() {
|
||||||
|
bindPackOutput(output)
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(event: GatherDataEvent) : this(event.generator.packOutput)
|
||||||
|
|
||||||
|
fun bindPackOutput(output: PackOutput) {
|
||||||
|
pathProvider = output.createPathProvider(PackOutput.Target.DATA_PACK, AndroidResearchManager.DIRECTORY)
|
||||||
|
}
|
||||||
|
|
||||||
protected val callbacks = LinkedList<(Consumer<AndroidResearchType>) -> Unit>()
|
protected val callbacks = LinkedList<(Consumer<AndroidResearchType>) -> Unit>()
|
||||||
|
|
||||||
@ -35,15 +50,16 @@ open class AndroidResearchDataProvider(protected val dataGenerator: DataGenerato
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
final override fun run(output: CachedOutput) {
|
final override fun run(output: CachedOutput): CompletableFuture<*> {
|
||||||
AndroidResearchManager.fireRegistrationEvent()
|
AndroidResearchManager.fireRegistrationEvent()
|
||||||
|
|
||||||
val set = ObjectArraySet<ResourceLocation>()
|
val set = ObjectArraySet<ResourceLocation>()
|
||||||
val added = LinkedList<AndroidResearchType>()
|
val added = LinkedList<AndroidResearchType>()
|
||||||
|
val futures = ArrayList<CompletableFuture<*>>()
|
||||||
|
|
||||||
addEverything {
|
addEverything {
|
||||||
if (set.add(it.id)) {
|
if (set.add(it.id)) {
|
||||||
DataProvider.saveStable(output, it.toJson(), pathProvider.json(it.id))
|
futures.add(DataProvider.saveStable(output, it.toJson(), pathProvider.json(it.id)))
|
||||||
AndroidResearchManager.put(it)
|
AndroidResearchManager.put(it)
|
||||||
added.add(it)
|
added.add(it)
|
||||||
} else {
|
} else {
|
||||||
@ -55,6 +71,8 @@ open class AndroidResearchDataProvider(protected val dataGenerator: DataGenerato
|
|||||||
value.validate()
|
value.validate()
|
||||||
generated.add(value)
|
generated.add(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return CompletableFuture.allOf(*futures.toTypedArray())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getName(): String {
|
override fun getName(): String {
|
||||||
|
@ -3,11 +3,11 @@ package ru.dbotthepony.mc.otm.core
|
|||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class WriteOnce<V> : ReadWriteProperty<Any?, V> {
|
class WriteOnce<V>(private val customMessage: String? = null) : ReadWriteProperty<Any?, V> {
|
||||||
private var value: V? = null
|
private var value: V? = null
|
||||||
|
|
||||||
override fun getValue(thisRef: Any?, property: KProperty<*>): V {
|
override fun getValue(thisRef: Any?, property: KProperty<*>): V {
|
||||||
return checkNotNull(value) { "Property ${property.name} is not initialized" }
|
return checkNotNull(value) { customMessage ?: "Property ${property.name} is not initialized" }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {
|
override fun setValue(thisRef: Any?, property: KProperty<*>, value: V) {
|
||||||
|
@ -3,21 +3,35 @@ package ru.dbotthepony.mc.otm.matter
|
|||||||
import net.minecraft.data.CachedOutput
|
import net.minecraft.data.CachedOutput
|
||||||
import net.minecraft.data.DataGenerator
|
import net.minecraft.data.DataGenerator
|
||||||
import net.minecraft.data.DataProvider
|
import net.minecraft.data.DataProvider
|
||||||
|
import net.minecraft.data.PackOutput
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
import net.minecraft.tags.TagKey
|
import net.minecraft.tags.TagKey
|
||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.level.ItemLike
|
import net.minecraft.world.level.ItemLike
|
||||||
import net.minecraftforge.data.event.GatherDataEvent
|
import net.minecraftforge.data.event.GatherDataEvent
|
||||||
|
import ru.dbotthepony.mc.otm.android.AndroidResearchManager
|
||||||
import ru.dbotthepony.mc.otm.core.Decimal
|
import ru.dbotthepony.mc.otm.core.Decimal
|
||||||
|
import ru.dbotthepony.mc.otm.core.WriteOnce
|
||||||
import ru.dbotthepony.mc.otm.core.registryName
|
import ru.dbotthepony.mc.otm.core.registryName
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
|
import java.util.concurrent.CompletableFuture
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
||||||
@Suppress("FunctionName", "unused")
|
@Suppress("FunctionName", "unused")
|
||||||
open class MatterDataProvider(protected val dataGenerator: DataGenerator, val namespace: String?) : DataProvider {
|
open class MatterDataProvider(val modid: String? = null) : DataProvider {
|
||||||
constructor(event: GatherDataEvent) : this(event.generator, event.modContainer.namespace)
|
var pathProvider: PackOutput.PathProvider by WriteOnce("You need to call bindPackOutput before registering this data provider")
|
||||||
|
private set
|
||||||
|
|
||||||
|
constructor(output: PackOutput, modid: String? = null) : this(modid) {
|
||||||
|
bindPackOutput(output)
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(event: GatherDataEvent) : this(event.generator.packOutput, event.modContainer.namespace)
|
||||||
|
|
||||||
|
fun bindPackOutput(output: PackOutput) {
|
||||||
|
pathProvider = output.createPathProvider(PackOutput.Target.DATA_PACK, AndroidResearchManager.DIRECTORY)
|
||||||
|
}
|
||||||
|
|
||||||
protected val pathProvider: DataGenerator.PathProvider = dataGenerator.createPathProvider(DataGenerator.Target.DATA_PACK, MatterManager.MATTER_DIRECTORY)
|
|
||||||
protected val actions = LinkedHashMap<ResourceLocation, AbstractRegistryAction>()
|
protected val actions = LinkedHashMap<ResourceLocation, AbstractRegistryAction>()
|
||||||
|
|
||||||
sealed class Configuration(val name: ResourceLocation) {
|
sealed class Configuration(val name: ResourceLocation) {
|
||||||
@ -911,11 +925,11 @@ open class MatterDataProvider(protected val dataGenerator: DataGenerator, val na
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected fun updateLocation(input: ResourceLocation, prefix: String): ResourceLocation {
|
protected fun updateLocation(input: ResourceLocation, prefix: String): ResourceLocation {
|
||||||
if (namespace != null) {
|
if (modid != null) {
|
||||||
if (input.namespace == namespace) {
|
if (input.namespace == modid) {
|
||||||
return ResourceLocation(input.namespace, prefix + input.path)
|
return ResourceLocation(input.namespace, prefix + input.path)
|
||||||
} else {
|
} else {
|
||||||
return ResourceLocation(namespace, prefix + input.namespace + "/" + input.path)
|
return ResourceLocation(modid, prefix + input.namespace + "/" + input.path)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return ResourceLocation(input.namespace, prefix + input.path)
|
return ResourceLocation(input.namespace, prefix + input.path)
|
||||||
@ -1204,13 +1218,17 @@ open class MatterDataProvider(protected val dataGenerator: DataGenerator, val na
|
|||||||
protected val added = ArrayList<AbstractRegistryAction>()
|
protected val added = ArrayList<AbstractRegistryAction>()
|
||||||
val addedView: List<AbstractRegistryAction> = Collections.unmodifiableList(added)
|
val addedView: List<AbstractRegistryAction> = Collections.unmodifiableList(added)
|
||||||
|
|
||||||
final override fun run(output: CachedOutput) {
|
final override fun run(output: CachedOutput): CompletableFuture<*> {
|
||||||
addActions()
|
addActions()
|
||||||
|
|
||||||
|
val promises = ArrayList<CompletableFuture<*>>()
|
||||||
|
|
||||||
for ((key, value) in actions) {
|
for ((key, value) in actions) {
|
||||||
DataProvider.saveStable(output, value.toJson(), pathProvider.json(key))
|
promises.add(DataProvider.saveStable(output, value.toJson(), pathProvider.json(key)))
|
||||||
added.add(value)
|
added.add(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return CompletableFuture.allOf(*promises.toTypedArray())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getName(): String {
|
override fun getName(): String {
|
||||||
|
Loading…
Reference in New Issue
Block a user