Advancements test
This commit is contained in:
parent
9c41d740b2
commit
aa23c66fc8
@ -28,6 +28,8 @@ import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
|
||||
import ru.dbotthepony.mc.otm.datagen.recipes.MatteryRecipeProvider
|
||||
import ru.dbotthepony.mc.otm.registry.*
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.AdvancementProvider
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.addAdvancements
|
||||
import ru.dbotthepony.mc.otm.datagen.blocks.addBlockStates
|
||||
import ru.dbotthepony.mc.otm.datagen.blocks.addComplexBlockStates
|
||||
import ru.dbotthepony.mc.otm.datagen.items.addItemModels
|
||||
@ -308,6 +310,7 @@ object DataGen {
|
||||
this.languageProvider = languageProvider
|
||||
|
||||
val tagsProvider = TagsProvider(event)
|
||||
val advancementProvider = AdvancementProvider(event)
|
||||
|
||||
addTags(tagsProvider)
|
||||
|
||||
@ -321,6 +324,7 @@ object DataGen {
|
||||
event.generator.addProvider(true, lootModifier)
|
||||
event.generator.addProvider(true, SoundDataProvider(event))
|
||||
event.generator.addProvider(true, AndroidResearchDataProvider(event.generator).also { it.exec { addResearchData(it, languageProvider) } })
|
||||
event.generator.addProvider(true, advancementProvider)
|
||||
|
||||
AddEnglishLanguage(languageProvider)
|
||||
|
||||
@ -342,6 +346,10 @@ object DataGen {
|
||||
addOreSmeltingRecipes(consumer)
|
||||
}
|
||||
|
||||
advancementProvider.exec { it, files ->
|
||||
addAdvancements(it, files, languageProvider)
|
||||
}
|
||||
|
||||
addPlatePressRecipes(recipeProvider)
|
||||
|
||||
lootModifier.lambda {
|
||||
|
@ -0,0 +1,32 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraft.advancements.RequirementsStrategy
|
||||
import net.minecraft.advancements.critereon.InventoryChangeTrigger
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraftforge.common.data.ExistingFileHelper
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
import java.util.function.Consumer
|
||||
|
||||
fun addAdvancements(serializer: Consumer<Advancement>, existingFileHelper: ExistingFileHelper, lang: MatteryLanguageProvider) {
|
||||
val translation = lang.english.Prepended("otm.advancements.regular")
|
||||
|
||||
val root = AdvancementBuilder()
|
||||
.requirements(RequirementsStrategy.OR)
|
||||
.display(
|
||||
itemStack = ItemStack(MItems.TRITANIUM_INGOT),
|
||||
title = TranslatableComponent(translation.add("root", "Overdrive That Matters")),
|
||||
description = TranslatableComponent(translation.add("root.desc", "Its all about things that matter")),
|
||||
showToast = false,
|
||||
announceChat = false,
|
||||
background = modLocation("textures/block/decorative/tritanium_block_gray.png")
|
||||
)
|
||||
.addCriterion("has_tritanium_ore", criterion(MItemTags.TRITANIUM_ORES))
|
||||
.addCriterion("has_tritanium_ore_clump", criterion(MItemTags.TRITANIUM_ORE_CLUMPS))
|
||||
.addCriterion("has_tritanium_ingot", InventoryChangeTrigger.TriggerInstance.hasItems(MItems.TRITANIUM_INGOT))
|
||||
.save(serializer, modLocation("regular/root"), existingFileHelper)
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraftforge.common.data.ExistingFileHelper
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import java.util.LinkedList
|
||||
import java.util.function.Consumer
|
||||
|
||||
class AdvancementProvider(event: GatherDataEvent) : net.minecraft.data.advancements.AdvancementProvider(event.generator, event.existingFileHelper) {
|
||||
private val callbacks = LinkedList<(Consumer<Advancement>, ExistingFileHelper) -> Unit>()
|
||||
|
||||
fun exec(callback: (Consumer<Advancement>, ExistingFileHelper) -> Unit) {
|
||||
callbacks.add(callback)
|
||||
}
|
||||
|
||||
fun exec(callback: (Consumer<Advancement>) -> Unit) {
|
||||
callbacks.add { it, _ ->
|
||||
callback.invoke(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun registerAdvancements(consumer: Consumer<Advancement>, fileHelper: ExistingFileHelper) {
|
||||
for (callback in callbacks) {
|
||||
callback.invoke(consumer, fileHelper)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraft.advancements.CriterionTriggerInstance
|
||||
import net.minecraft.advancements.DisplayInfo
|
||||
import net.minecraft.advancements.FrameType
|
||||
import net.minecraft.advancements.critereon.InventoryChangeTrigger
|
||||
import net.minecraft.advancements.critereon.ItemPredicate
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
|
||||
fun AdvancementBuilder(): Advancement.Builder = Advancement.Builder.advancement()
|
||||
|
||||
fun DisplayInfo(
|
||||
itemStack: ItemStack,
|
||||
title: Component = TextComponent("undefined"),
|
||||
description: Component = TextComponent("undefined"),
|
||||
background: ResourceLocation? = null,
|
||||
frameType: FrameType = FrameType.TASK,
|
||||
showToast: Boolean = true,
|
||||
announceChat: Boolean = true,
|
||||
hidden: Boolean = false,
|
||||
): DisplayInfo {
|
||||
return DisplayInfo(
|
||||
itemStack,
|
||||
title,
|
||||
description,
|
||||
background,
|
||||
frameType,
|
||||
showToast,
|
||||
announceChat,
|
||||
hidden
|
||||
)
|
||||
}
|
||||
|
||||
// compiler thinks it is shadowed - it is not
|
||||
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
|
||||
fun Advancement.Builder.display(
|
||||
itemStack: ItemStack,
|
||||
title: Component = TextComponent("undefined"),
|
||||
description: Component = TextComponent("undefined"),
|
||||
background: ResourceLocation? = null,
|
||||
frameType: FrameType = FrameType.TASK,
|
||||
showToast: Boolean = true,
|
||||
announceChat: Boolean = true,
|
||||
hidden: Boolean = false,
|
||||
) = display(itemStack, title, description, background, frameType, showToast, announceChat, hidden)
|
||||
|
||||
fun predicate(tag: TagKey<Item>): ItemPredicate {
|
||||
return ItemPredicate.Builder.item().of(tag).build()
|
||||
}
|
||||
|
||||
fun criterion(tag: TagKey<Item>): CriterionTriggerInstance {
|
||||
return InventoryChangeTrigger.TriggerInstance.hasItems(predicate(tag))
|
||||
}
|
@ -47,6 +47,7 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
inner class Builder(language: String) {
|
||||
val slave: LanguageProvider by lazy { slaves.computeIfAbsent(language, ::Slave) }
|
||||
|
||||
@ -75,6 +76,17 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
|
||||
fun gui(key: String, value: String) = slave.add("otm.gui.$key", value)
|
||||
fun sound(key: String, value: String) = slave.add("otm.sound.$key", value)
|
||||
fun sound(key: SoundEvent, value: String) = slave.add("otm.sound.${key.location.path}", value)
|
||||
|
||||
inner class Prepended(path: String) {
|
||||
val path = "$path."
|
||||
constructor(vararg path: String) : this(path.joinToString("."))
|
||||
constructor(path: Collection<String>) : this(path.joinToString("."))
|
||||
|
||||
fun add(key: String, value: String): String {
|
||||
slave.add(path + key, value)
|
||||
return path + key
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inner class Colors(
|
||||
|
Loading…
Reference in New Issue
Block a user