Advancements test

This commit is contained in:
DBotThePony 2022-10-02 01:16:24 +07:00
parent 9c41d740b2
commit aa23c66fc8
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 138 additions and 0 deletions

View File

@ -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 {

View File

@ -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)
}

View File

@ -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)
}
}
}

View File

@ -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))
}

View File

@ -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(