custom items now use new builder DSL syntax, implementing first new set begins tmr
build / build (push) Failing after 3m16s
build / build (push) Failing after 3m16s
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package dev.zxq5.items.core
|
||||
|
||||
import dev.zxq5.util.resourceKey
|
||||
import net.minecraft.advancements.criterion.InventoryChangeTrigger
|
||||
import net.minecraft.advancements.criterion.ItemPredicate
|
||||
import net.minecraft.core.HolderGetter
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.data.recipes.RecipeCategory
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.data.recipes.RecipeProvider
|
||||
import net.minecraft.data.recipes.ShapedRecipeBuilder
|
||||
import net.minecraft.data.recipes.SmithingTransformRecipeBuilder
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.world.entity.EquipmentSlot
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.item.equipment.ArmorMaterial
|
||||
import net.minecraft.world.item.equipment.EquipmentAsset
|
||||
|
||||
abstract class GenericGearSet: GenericItemSet() {
|
||||
abstract val materialName: String
|
||||
|
||||
abstract val armorSet: ArmorSet
|
||||
|
||||
open val materialKey: ResourceKey<EquipmentAsset>
|
||||
get() = materialName.resourceKey()
|
||||
|
||||
open val materialDefinition: GearMaterialDef
|
||||
get() = GearMaterialDef.NETHERITE
|
||||
|
||||
val armorMaterial: ArmorMaterial by lazy {
|
||||
materialDefinition.toArmorMaterial()
|
||||
}
|
||||
|
||||
private val itemRecipes = mutableMapOf<Item, List<RecipeSpec>>()
|
||||
|
||||
private val itemTags = mutableMapOf<Item, List<TagKey<Item>>>()
|
||||
|
||||
private val itemModels = mutableMapOf<Item, ModelSpec>()
|
||||
|
||||
internal fun registerDatagen(item: Item, recipes: List<RecipeSpec>, tags: List<TagKey<Item>>, model: ModelSpec) {
|
||||
itemRecipes[item] = recipes
|
||||
itemTags[item] = tags
|
||||
itemModels[item] = model
|
||||
}
|
||||
|
||||
|
||||
val modelSpecs: Map<Item, ModelSpec> get() = itemModels
|
||||
|
||||
override fun generateRecipes(registries: HolderLookup.Provider, exporter: RecipeOutput) {
|
||||
val itemLookup: HolderGetter<Item> = registries.lookupOrThrow(Registries.ITEM)
|
||||
|
||||
itemRecipes.forEach { (item, specs) ->
|
||||
specs.forEach { spec ->
|
||||
when (spec) {
|
||||
is RecipeSpec.Smithing -> SmithingTransformRecipeBuilder.smithing(
|
||||
Ingredient.of(spec.template), Ingredient.of(spec.base), Ingredient.of(spec.addition),
|
||||
RecipeCategory.COMBAT, item
|
||||
).unlocks("has_addition", InventoryChangeTrigger.TriggerInstance.hasItems(spec.addition))
|
||||
.save(exporter, BuiltInRegistries.ITEM.getKey(item).path)
|
||||
|
||||
is RecipeSpec.Shaped -> {
|
||||
val builder = ShapedRecipeBuilder.shaped(itemLookup, RecipeCategory.MISC, item)
|
||||
spec.pattern.forEach { builder.pattern(it) }
|
||||
spec.key.forEach { (char, ingredientItem) ->
|
||||
builder.define(char, ingredientItem)
|
||||
|
||||
}
|
||||
builder
|
||||
.unlockedBy("has_ingredient", RecipeProvider.inventoryTrigger(
|
||||
ItemPredicate.Builder().of(itemLookup, *spec.key.values.toTypedArray() )
|
||||
))
|
||||
.save(exporter)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun generateItemTags(tags: ItemTagAdder) {
|
||||
itemTags.forEach { (item, tagList) -> tagList.forEach { tags.add(it, item) } }
|
||||
}
|
||||
|
||||
fun fullSetEquippedBy(p: Player) =
|
||||
p.getItemBySlot(EquipmentSlot.HEAD).item == armorSet.helmet &&
|
||||
p.getItemBySlot(EquipmentSlot.CHEST).item == armorSet.chestplate &&
|
||||
p.getItemBySlot(EquipmentSlot.LEGS).item == armorSet.leggings &&
|
||||
p.getItemBySlot(EquipmentSlot.FEET).item == armorSet.boots
|
||||
}
|
||||
Reference in New Issue
Block a user