Make mod compile against 1.21
This commit is contained in:
parent
21f285ca0f
commit
657707409d
@ -1,17 +1,13 @@
|
||||
package ru.dbotthepony.mc.otm.datagen
|
||||
|
||||
import net.minecraft.core.RegistrySetBuilder
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.data.worldgen.BootstapContext
|
||||
import net.minecraft.data.worldgen.BootstrapContext
|
||||
import net.minecraft.tags.DamageTypeTags
|
||||
import net.minecraft.world.damagesource.DamageScaling
|
||||
import net.minecraft.world.damagesource.DamageType
|
||||
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.datagen.tags.TagsProvider
|
||||
import ru.dbotthepony.mc.otm.registry.MDamageTypes
|
||||
|
||||
fun registerDamageTypes(context: BootstapContext<DamageType>) {
|
||||
fun registerDamageTypes(context: BootstrapContext<DamageType>) {
|
||||
context.register(MDamageTypes.EXOPACK_PROBE, DamageType("otm_exopack_probe", DamageScaling.NEVER, 4.0f))
|
||||
context.register(MDamageTypes.BECOME_ANDROID, DamageType("otm_become_android", DamageScaling.NEVER, 0f))
|
||||
context.register(MDamageTypes.BECOME_HUMANE, DamageType("otm_become_humane", DamageScaling.NEVER, 0f))
|
||||
|
@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.datagen
|
||||
|
||||
import net.minecraft.core.RegistrySetBuilder
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.item.DyeColor
|
||||
import net.minecraft.world.level.block.Block
|
||||
@ -14,18 +15,17 @@ import net.minecraft.world.level.block.TrapDoorBlock
|
||||
import net.minecraft.world.level.block.state.properties.DoorHingeSide
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraft.world.level.block.state.properties.Half
|
||||
import net.minecraftforge.client.model.generators.ModelFile
|
||||
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider
|
||||
import net.minecraftforge.common.data.ForgeAdvancementProvider
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent
|
||||
import net.minecraftforge.fml.common.Mod
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.minecraftforge.registries.ForgeRegistries
|
||||
import net.neoforged.bus.api.SubscribeEvent
|
||||
import net.neoforged.fml.common.EventBusSubscriber
|
||||
import net.neoforged.fml.common.Mod
|
||||
import net.neoforged.neoforge.client.model.generators.ModelFile
|
||||
import net.neoforged.neoforge.common.data.AdvancementProvider
|
||||
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider
|
||||
import net.neoforged.neoforge.common.data.internal.NeoForgeAdvancementProvider
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.registries.NeoForgeRegistries
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.android.AndroidResearchDataProvider
|
||||
import ru.dbotthepony.mc.otm.block.*
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
|
||||
import ru.dbotthepony.mc.otm.core.util.WriteOnce
|
||||
import ru.dbotthepony.mc.otm.datagen.blocks.BatteryBankProvider
|
||||
@ -38,7 +38,6 @@ import ru.dbotthepony.mc.otm.registry.*
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.addAdvancements
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.addAndroidAdvancements
|
||||
import ru.dbotthepony.mc.otm.datagen.advancements.addMachineAdvancements
|
||||
import ru.dbotthepony.mc.otm.datagen.blocks.addBlockModels
|
||||
import ru.dbotthepony.mc.otm.datagen.blocks.addBlockStates
|
||||
import ru.dbotthepony.mc.otm.datagen.blocks.addComplexBlockStates
|
||||
@ -56,6 +55,7 @@ import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
internal fun modLocation(string: String) = ResourceLocation(DataGen.MOD_ID, string)
|
||||
internal fun modLootTable(string: String) = ResourceKey.create(Registries.LOOT_TABLE, ResourceLocation(DataGen.MOD_ID, string))
|
||||
|
||||
@EventBusSubscriber(modid = DataGen.MOD_ID, bus = EventBusSubscriber.Bus.MOD)
|
||||
object DataGen {
|
||||
@ -488,9 +488,9 @@ object DataGen {
|
||||
val blockModelProvider = MatteryBlockModelProvider(event)
|
||||
val blockStateProvider = MatteryBlockStateProvider(event)
|
||||
val itemModelProvider = MatteryItemModelProvider(event)
|
||||
val lootTableProvider = LootTables(event.generator)
|
||||
val recipeProvider = MatteryRecipeProvider(event.generator)
|
||||
val lootModifier = LootModifiers(event.generator)
|
||||
val lootTableProvider = LootTables(event)
|
||||
val recipeProvider = MatteryRecipeProvider(event)
|
||||
val lootModifier = LootModifiers(event)
|
||||
val languageProvider = MatteryLanguageProvider(event.generator)
|
||||
val matterData = MatterDataProvider(event)
|
||||
val researchProvider = AndroidResearchDataProvider(event).also { it.exec { addResearchData(it, languageProvider) } }
|
||||
@ -506,7 +506,7 @@ object DataGen {
|
||||
this.matterData = matterData
|
||||
|
||||
val tagsProvider = TagsProvider(event)
|
||||
val advancementProvider = object : ForgeAdvancementProvider(event.generator.packOutput, event.lookupProvider, event.existingFileHelper, listOf(
|
||||
val advancementProvider = object : AdvancementProvider(event.generator.packOutput, event.lookupProvider, event.existingFileHelper, listOf(
|
||||
AdvancementGenerator { registries, saver, existingFileHelper ->
|
||||
addAdvancements(saver, languageProvider)
|
||||
addAndroidAdvancements(saver, languageProvider)
|
||||
@ -534,7 +534,7 @@ object DataGen {
|
||||
.add(Registries.DAMAGE_TYPE, ::registerDamageTypes)
|
||||
.add(Registries.CONFIGURED_FEATURE, ::registerConfiguredFeatures)
|
||||
.add(Registries.PLACED_FEATURE, ::registerPlacedFeatures)
|
||||
.add(ForgeRegistries.Keys.BIOME_MODIFIERS, ::registerBiomeModifiers)
|
||||
.add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ::registerBiomeModifiers)
|
||||
|
||||
event.generator.addProvider(event.includeServer(), DatapackBuiltinEntriesProvider(event.generator.packOutput, event.lookupProvider, registrySetBuilder, setOf(MOD_ID)))
|
||||
|
||||
|
@ -5,9 +5,9 @@ import net.minecraft.world.level.block.SlabBlock
|
||||
import net.minecraft.world.level.block.StairBlock
|
||||
import net.minecraft.world.level.block.WallBlock
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraftforge.client.model.generators.BlockModelBuilder
|
||||
import net.minecraftforge.client.model.generators.ConfiguredModel
|
||||
import net.minecraftforge.client.model.generators.ModelFile
|
||||
import net.neoforged.neoforge.client.model.generators.BlockModelBuilder
|
||||
import net.neoforged.neoforge.client.model.generators.ConfiguredModel
|
||||
import net.neoforged.neoforge.client.model.generators.ModelFile
|
||||
import ru.dbotthepony.mc.otm.core.get
|
||||
import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
|
||||
import ru.dbotthepony.mc.otm.core.math.xRotationBlockstateNorth
|
||||
|
@ -3,9 +3,8 @@ package ru.dbotthepony.mc.otm.datagen
|
||||
import net.minecraft.tags.ItemTags
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||
import ru.dbotthepony.mc.otm.matter.ComputeAction
|
||||
import ru.dbotthepony.mc.otm.matter.MatterDataProvider
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
@ -152,12 +151,12 @@ fun addMatterData(provider: MatterDataProvider) {
|
||||
relative(Items.PACKED_ICE, 1.5, 1)
|
||||
|
||||
// rocks
|
||||
scope(Tags.Items.STONE, 1.1, 1.1) {
|
||||
equal(Tags.Items.COBBLESTONE)
|
||||
equal(Tags.Items.GRAVEL)
|
||||
scope(Tags.Items.STONES, 1.1, 1.1) {
|
||||
equal(Tags.Items.COBBLESTONES)
|
||||
equal(Tags.Items.GRAVELS)
|
||||
equal(Items.FLINT)
|
||||
equal(Tags.Items.SAND)
|
||||
equal(Tags.Items.NETHERRACK)
|
||||
equal(Tags.Items.SANDS)
|
||||
equal(Tags.Items.NETHERRACKS)
|
||||
|
||||
scope(1.4, 1.5) {
|
||||
equal(Items.BASALT)
|
||||
@ -185,7 +184,7 @@ fun addMatterData(provider: MatterDataProvider) {
|
||||
relative(Items.REINFORCED_DEEPSLATE, 3, 1.4)
|
||||
}
|
||||
|
||||
relative(Tags.Items.OBSIDIAN, 10, 1.5)
|
||||
relative(Tags.Items.OBSIDIANS, 10, 1.5)
|
||||
relative(Items.CRYING_OBSIDIAN, 14, 3)
|
||||
}
|
||||
|
||||
@ -221,7 +220,7 @@ fun addMatterData(provider: MatterDataProvider) {
|
||||
// drops from mobs
|
||||
scope(Items.ROTTEN_FLESH, 8, 1.5) {
|
||||
equal(Items.INK_SAC)
|
||||
equal(Tags.Items.LEATHER)
|
||||
equal(Tags.Items.LEATHERS)
|
||||
equal(Items.LEATHER)
|
||||
|
||||
relative(Items.RABBIT_FOOT, 1.1, 1.5)
|
||||
@ -231,14 +230,15 @@ fun addMatterData(provider: MatterDataProvider) {
|
||||
|
||||
relative(Tags.Items.BONES, 1, 1.25)
|
||||
|
||||
relative(Tags.Items.STRING, 0.8, 0.75)
|
||||
relative(Tags.Items.STRINGS, 0.8, 0.75)
|
||||
relative(Items.COBWEB, 0.8, 0.75)
|
||||
relative(Items.SPIDER_EYE, 0.8, 1.8)
|
||||
|
||||
relative(Tags.Items.SLIMEBALLS, 1, 1.4)
|
||||
relative(Tags.Items.GUNPOWDER, 0.85, 1.15)
|
||||
relative(Tags.Items.SLIME_BALLS, 1, 1.4)
|
||||
relative(Tags.Items.GUNPOWDERS, 0.85, 1.15)
|
||||
|
||||
relative(Items.SCUTE, 1, 1.5)
|
||||
relative(Items.TURTLE_SCUTE, 1, 1.5)
|
||||
relative(Items.ARMADILLO_SCUTE, 1, 1.8)
|
||||
relative(Items.FEATHER, 0.7, 1.25)
|
||||
relative(Items.EGG, 1.25, 4)
|
||||
|
||||
@ -261,7 +261,7 @@ fun addMatterData(provider: MatterDataProvider) {
|
||||
relative(Items.SCULK_VEIN, 2.5, 24)
|
||||
|
||||
// planty
|
||||
scope(Items.GRASS, 1.5, 2.5) {
|
||||
scope(Items.SHORT_GRASS, 1.5, 2.5) {
|
||||
equal(Items.SUNFLOWER)
|
||||
equal(Items.LILAC)
|
||||
equal(Items.ROSE_BUSH)
|
||||
|
@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.datagen
|
||||
import net.minecraft.core.HolderSet
|
||||
import net.minecraft.core.RegistrySetBuilder
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.data.worldgen.BootstapContext
|
||||
import net.minecraft.data.worldgen.BootstrapContext
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.tags.BiomeTags
|
||||
import net.minecraft.tags.BlockTags
|
||||
@ -17,11 +17,8 @@ import net.minecraft.world.level.levelgen.placement.HeightRangePlacement
|
||||
import net.minecraft.world.level.levelgen.placement.InSquarePlacement
|
||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest
|
||||
import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider
|
||||
import net.minecraftforge.common.world.BiomeModifier
|
||||
import net.minecraftforge.common.world.ForgeBiomeModifiers
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.minecraftforge.registries.ForgeRegistries
|
||||
import net.neoforged.neoforge.common.world.BiomeModifier
|
||||
import net.neoforged.neoforge.registries.NeoForgeRegistries
|
||||
import ru.dbotthepony.mc.otm.registry.MBlocks
|
||||
|
||||
private object ConfiguredFeatures {
|
||||
@ -32,7 +29,7 @@ private object ConfiguredFeatures {
|
||||
}
|
||||
}
|
||||
|
||||
fun registerConfiguredFeatures(context: BootstapContext<ConfiguredFeature<*, *>>) {
|
||||
fun registerConfiguredFeatures(context: BootstrapContext<ConfiguredFeature<*, *>>) {
|
||||
val stone = TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES)
|
||||
val deepslate = TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES)
|
||||
|
||||
@ -53,7 +50,7 @@ private object PlacedFeatures {
|
||||
}
|
||||
}
|
||||
|
||||
fun registerPlacedFeatures(context: BootstapContext<PlacedFeature>) {
|
||||
fun registerPlacedFeatures(context: BootstrapContext<PlacedFeature>) {
|
||||
val configured = context.lookup(Registries.CONFIGURED_FEATURE)
|
||||
val ore = configured.getOrThrow(ConfiguredFeatures.TRITANIUM_ORE)
|
||||
|
||||
@ -80,17 +77,17 @@ private object BiomeModifiers {
|
||||
val TRITANIUM_ORE = key("tritanium_ore")
|
||||
|
||||
private fun key(name: String): ResourceKey<BiomeModifier> {
|
||||
return ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, modLocation(name))
|
||||
return ResourceKey.create(NeoForgeRegistries.Keys.BIOME_MODIFIERS, modLocation(name))
|
||||
}
|
||||
}
|
||||
|
||||
fun registerBiomeModifiers(context: BootstapContext<BiomeModifier>) {
|
||||
fun registerBiomeModifiers(context: BootstrapContext<BiomeModifier>) {
|
||||
val placed = context.lookup(Registries.PLACED_FEATURE)
|
||||
val biomes = context.lookup(Registries.BIOME)
|
||||
|
||||
context.register(
|
||||
BiomeModifiers.TRITANIUM_ORE,
|
||||
ForgeBiomeModifiers.AddFeaturesBiomeModifier(
|
||||
net.neoforged.neoforge.common.world.BiomeModifiers.AddFeaturesBiomeModifier(
|
||||
biomes.getOrThrow(BiomeTags.IS_OVERWORLD),
|
||||
HolderSet.direct(
|
||||
placed.getOrThrow(PlacedFeatures.NORMAL_TRITANIUM),
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.mc.otm.datagen
|
||||
|
||||
import net.minecraft.tags.ItemTags
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.android.AndroidResearchDescriptions
|
||||
import ru.dbotthepony.mc.otm.android.AndroidResearchResults
|
||||
|
@ -1,10 +1,9 @@
|
||||
package ru.dbotthepony.mc.otm.datagen
|
||||
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.sounds.SoundEvent
|
||||
import net.minecraftforge.common.data.SoundDefinition
|
||||
import net.minecraftforge.common.data.SoundDefinitionsProvider
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.common.data.SoundDefinition
|
||||
import net.neoforged.neoforge.common.data.SoundDefinitionsProvider
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.registry.MSoundEvents
|
||||
|
||||
fun SoundDefinition.subtitle(value: SoundEvent): SoundDefinition {
|
||||
|
@ -2,8 +2,8 @@ package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.AdvancementRewards
|
||||
import net.minecraft.advancements.FrameType
|
||||
import net.minecraft.advancements.AdvancementRequirements.Strategy
|
||||
import net.minecraft.advancements.AdvancementType
|
||||
import net.minecraft.advancements.critereon.InventoryChangeTrigger
|
||||
import net.minecraft.world.item.DyeColor
|
||||
import net.minecraft.world.item.ItemStack
|
||||
@ -105,7 +105,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("energy_sword.desc", "Wield a High-Frequency Blade, a melee weapon intended to slice Creepers into creep-cakes") {
|
||||
russian("Получите высокочастотный клинок, оружие ближнего боя предназначенное для нарезания Криперов на крипо-тортики")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("has_item", criterion(MItems.ENERGY_SWORD))
|
||||
.save(serializer, modLocation("regular/energy_sword"))
|
||||
@ -120,7 +120,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("quantum_battery.desc", "Put together a Quantum Battery, powered by Ender technologies") {
|
||||
russian("Создайте квантовый аккумулятор, пропитанную технологиями Края")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.rewards(AdvancementRewards.Builder.experience(50))
|
||||
.requirements(Strategy.OR)
|
||||
@ -138,7 +138,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("zpm_battery.desc", "Find Zero Point Module, something from different multiverse of ours, created using technologies lost in time in all possible multiverses") {
|
||||
russian("Найдите модуль нулевой точки, вещь из другой мультивселенной, созданная с использованием технологий, потерянных во времени во всех возможных мультивслеленных")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE,
|
||||
frameType = AdvancementType.CHALLENGE,
|
||||
hidden = true
|
||||
)
|
||||
.rewards(AdvancementRewards.Builder.experience(800))
|
||||
@ -346,7 +346,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("industrial_glass2.desc", "Paint Industrial Glass all possible colors") {
|
||||
russian("Покрасьте промышленное стекло во все возможные цвета")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.requirements(Strategy.AND)
|
||||
.also { advancement ->
|
||||
@ -398,7 +398,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("cargo_crate_minecart2.desc", "Have all color variants of Minecarts with Cargo Crates") {
|
||||
russian("Создайте все варианты покрасок вагонеток с грузовыми Ящиками")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.requirements(Strategy.AND)
|
||||
.also { advancement ->
|
||||
@ -416,7 +416,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("cargo_crate2.desc", "Craft all color variants of Cargo Crates") {
|
||||
russian("Покрасьте грузовые ящики во все возможные цвета")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.requirements(Strategy.AND)
|
||||
.also { advancement ->
|
||||
@ -496,9 +496,9 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("tritanium_block3.desc", "Craft all color variants of Tritanium Blocks") {
|
||||
russian("Создайте все варианты покрасок тритановых Блоков")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.rewards(AdvancementRewards.Builder.loot(modLocation("tritanium_block3")).addExperience(100))
|
||||
.rewards(advancementLoot("tritanium_block3").addExperience(100))
|
||||
.requirements(Strategy.AND)
|
||||
.also { advancement ->
|
||||
MRegistry.TRITANIUM_BLOCK.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
|
||||
@ -515,9 +515,9 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("tritanium_block4.desc", "Craft ALL color variants of Tritanium Blocks including striped ones") {
|
||||
russian("Создайте АБСОЛЮТНО ВСЕ варианты покрасок тритановых блоков, включая с полосками")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.rewards(AdvancementRewards.Builder.loot(modLocation("tritanium_block4")).addExperience(400))
|
||||
.rewards(advancementLoot("tritanium_block4").addExperience(400))
|
||||
.requirements(Strategy.AND)
|
||||
.also { advancement ->
|
||||
MRegistry.TRITANIUM_BLOCK.items.values.forEach { advancement.addCriterion(it.registryName!!.path, criterion(it)) }
|
||||
@ -554,7 +554,7 @@ fun addAdvancements(serializer: Consumer<AdvancementHolder>, lang: MatteryLangua
|
||||
description = translation.add("all_pills.desc", "Find all possible pill types") {
|
||||
russian("Найдите всевозможные варианты пилюль")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE,
|
||||
frameType = AdvancementType.CHALLENGE,
|
||||
hidden = true
|
||||
)
|
||||
.rewards(AdvancementRewards.Builder.experience(200))
|
||||
|
@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.AdvancementRequirements.Strategy
|
||||
import net.minecraft.advancements.AdvancementRewards
|
||||
import net.minecraft.advancements.FrameType
|
||||
import net.minecraft.advancements.AdvancementType
|
||||
import net.minecraft.advancements.critereon.EntityPredicate
|
||||
import net.minecraft.advancements.critereon.ItemPredicate
|
||||
import net.minecraft.advancements.critereon.MinMaxBounds.Doubles
|
||||
@ -62,7 +62,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
russian("Используйте модуль нулевой точки как внутренний источник питания. Теперь только вечность будет вашим злейшим врагом")
|
||||
},
|
||||
hidden = true,
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.addCriterion("item", AndroidBatteryTrigger.Instance(ItemPredicate.Builder.item().of(MItems.ZPM_BATTERY).build()).criterion())
|
||||
.save(serializer, modLocation("android/zpm"))
|
||||
@ -78,7 +78,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
russian("Используйте Квантовый Аккумулятор как внутренний источник питания, можно даже подключить другой конец к Реактору Распада")
|
||||
},
|
||||
hidden = true,
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.requirements(Strategy.OR)
|
||||
.addCriterion("item0", AndroidBatteryTrigger.Instance(ItemPredicate.Builder.item().of(MItems.QUANTUM_BATTERY).build()).criterion())
|
||||
@ -126,7 +126,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
russian("Вновь обретите плоть после своей жизни как набор гаек и болтов, но вот чего-то всё равно не хватает, что было при вас с самого начала...")
|
||||
},
|
||||
hidden = true,
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("become_humane", BecomeHumaneTrigger.criterion)
|
||||
.save(serializer, modLocation("android/become_humane"))
|
||||
@ -213,7 +213,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
russian("Дайте наноботам поглотить 5 сердец урона, не отключившись насовсем")
|
||||
},
|
||||
hidden = true,
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("damage", NanobotsArmorTrigger.Instance(Doubles.atLeast(10.0)).criterion())
|
||||
.save(serializer, modLocation("android/nanobots_armor_deflect"))
|
||||
@ -229,7 +229,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
russian("Дайте наноботам поглотить 10 сердец урона, не отключившись насовсем")
|
||||
},
|
||||
hidden = true,
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.addCriterion("damage", NanobotsArmorTrigger.Instance(Doubles.atLeast(20.0)).criterion())
|
||||
.save(serializer, modLocation("android/nanobots_armor_deflect2"))
|
||||
@ -244,7 +244,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("fall_dampeners_save.desc", "Survive fall that would have otherwise be fatal without Fall Dampeners") {
|
||||
russian("Выживите после падения, которое было бы фатальным без поглотителей инерции")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("saved", FallDampenersSaveTrigger.criterion)
|
||||
.save(serializer, modLocation("android/fall_dampeners_save"))
|
||||
@ -259,7 +259,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("ender_teleport_fall_death.desc", "Fall to your demise moments after Teleporting as Android") {
|
||||
russian("Разбейтесь насмерть через мгновения после телепортации за андроида")
|
||||
},
|
||||
frameType = FrameType.GOAL,
|
||||
frameType = AdvancementType.GOAL,
|
||||
hidden = true
|
||||
)
|
||||
.addCriterion("death", EnderTeleporterFallDeathTrigger.criterion)
|
||||
@ -289,7 +289,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("regen_all.desc", "Max out Nanobots Regeneration research") {
|
||||
russian("Полностью исследуйте регенерацию наноботов за андроида")
|
||||
},
|
||||
frameType = FrameType.GOAL,
|
||||
frameType = AdvancementType.GOAL,
|
||||
)
|
||||
.addCriterion("regen0", AndroidResearchTrigger.Instance(modLocation(MNames.NANOBOTS_REGENERATION_1)).criterion())
|
||||
.addCriterion("regen1", AndroidResearchTrigger.Instance(modLocation(MNames.NANOBOTS_REGENERATION_2)).criterion())
|
||||
@ -307,7 +307,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("research_all.desc", "Research everything as Android (that don't block or get blocked by any other research)") {
|
||||
russian("Исследуйте все технологии за андроида (которые не блокируют и не блокируются другими технологиями)")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.rewards(AdvancementRewards.Builder.experience(400).addLootTable(modLocation("research_all_android")))
|
||||
.also { advancement ->
|
||||
@ -343,7 +343,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("shockwave_warden.desc", "Hurt Warden using Shockwave ability") {
|
||||
russian("Нанесите хранителю урон используя ударную волну")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("shockwave_warden", ShockwaveDamageMobTrigger.Instance(Optional.of(EntityPredicate.Builder.entity().of(EntityType.WARDEN).build().wrap())).criterion())
|
||||
.save(serializer, modLocation("android/shockwave_warden"))
|
||||
@ -358,7 +358,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("wither.desc", "Defeat The Wither as Android. The Wither was surely confused over kind of thing you are") {
|
||||
russian("Победите Иссушителя будучи андроидом. Наверняка Иссушитель был ошеломлён таким раскладом дел")
|
||||
},
|
||||
frameType = FrameType.GOAL,
|
||||
frameType = AdvancementType.GOAL,
|
||||
hidden = true
|
||||
)
|
||||
.addCriterion("kill_wither", KillAsAndroidTrigger.Instance(
|
||||
@ -376,7 +376,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("travel_underwater.desc", "Travel at least 200 meters underwater as Android without Air Bags research. This reminds us of someone...") {
|
||||
russian("Преодолейте как минимум 200 метров под водой будучи андроидом без исследования воздушных мешков. Кого-то это нам напоминает...")
|
||||
},
|
||||
frameType = FrameType.GOAL,
|
||||
frameType = AdvancementType.GOAL,
|
||||
hidden = true
|
||||
)
|
||||
.addCriterion("travel", AndroidTravelUnderwater.Instance(200.0).criterion())
|
||||
@ -392,7 +392,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("travel_underwater2.desc", "Travel at least 1046 meters underwater as Android without Air Bags research, like someone else did so") {
|
||||
russian("Преодолейте как минимум 1046 метров под водой будучи андроидом без исследования воздушных мешков, прям как тот, кто так однажды так и сделал")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE,
|
||||
frameType = AdvancementType.CHALLENGE,
|
||||
hidden = true
|
||||
)
|
||||
.addCriterion("travel", AndroidTravelUnderwater.Instance(1046.0).criterion())
|
||||
@ -408,7 +408,7 @@ fun addAndroidAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("elder_guardian.desc", "Slay Elder Guardian as Android without Air Bags researched") {
|
||||
russian("Победите Древнего стража будучи андроидом без исследования воздушных мешков")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE,
|
||||
frameType = AdvancementType.CHALLENGE,
|
||||
hidden = true
|
||||
)
|
||||
.addCriterion("kill_elder_guardian", KillAsAndroidTrigger.Instance(
|
||||
|
@ -1,12 +1,10 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.FrameType
|
||||
import net.minecraft.advancements.AdvancementType
|
||||
import net.minecraft.advancements.critereon.ItemPredicate
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraftforge.common.data.ExistingFileHelper
|
||||
import ru.dbotthepony.mc.otm.datagen.lang.MatteryLanguageProvider
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
@ -32,7 +30,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("zpm_battery.desc", "Use Zero Point Module as power source in Exopack") {
|
||||
russian("Используйте модуль нулевой точки как источник питания в Экзопаке")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("zpm_battery", ExopackBatterySlotTrigger.Instance(ItemPredicate.Builder.item().of(MItems.ZPM_BATTERY).build()).criterion())
|
||||
.save(serializer, modLocation("exopack/zpm_battery"))
|
||||
@ -47,7 +45,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("obtained.desc", "Obtain an Exopack, a mysterious, semi-present, light as a feather, stuff storage on your back") {
|
||||
russian("Получите Экзопак, загадочное, полу-присутствующее, лёгкое как пёрышко, хранилище штуковин на вашей спине")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("obtained", ExopackObtainedTrigger.criterion)
|
||||
.save(serializer, modLocation("exopack/obtained"))
|
||||
@ -150,7 +148,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("size3.desc", "Reach 108 slots in your Exopack storage") {
|
||||
russian("Достигните 108 слотов хранилища Экзопака")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("size3", ExopackSlotsExpandedTrigger.Instance(minTotal = 108).criterion())
|
||||
.save(serializer, modLocation("exopack/size3"))
|
||||
@ -166,7 +164,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("size4.desc", "Reach 432 slots in your Exopack storage. You could fit a house in there") {
|
||||
russian("Достигните 432 слотов хранилища Экзопака. Туда можно уже впихнуть целый дом")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.addCriterion("size4", ExopackSlotsExpandedTrigger.Instance(minTotal = 432).criterion())
|
||||
.save(serializer, modLocation("exopack/size4"))
|
||||
@ -182,7 +180,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("size5.desc", "Reach 1728 slots in your Exopack storage. Why would you need to go any bigger?!") {
|
||||
russian("Достигните 1728 слотов хранилища Экзопака. Куда вам столько?!")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.addCriterion("size5", ExopackSlotsExpandedTrigger.Instance(minTotal = 1728).criterion())
|
||||
.save(serializer, modLocation("exopack/size5"))
|
||||
@ -226,7 +224,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("once2.desc", "Upgrade your Exopack storage with 54 slots using one module") {
|
||||
russian("Улучшите хранилище Экзопака модулем на 54 слотов")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("once2", ExopackSlotsExpandedTrigger.Instance(minGained = 54).criterion())
|
||||
.save(serializer, modLocation("exopack/once2"))
|
||||
@ -242,7 +240,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("once3.desc", "Upgrade your Exopack storage with 90 slots using one module") {
|
||||
russian("Улучшите хранилище Экзопака модулем на 90 слотов")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("once3", ExopackSlotsExpandedTrigger.Instance(minGained = 90).criterion())
|
||||
.save(serializer, modLocation("exopack/once3"))
|
||||
@ -258,7 +256,7 @@ fun addExopackAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("once4.desc", "Upgrade your Exopack storage with 150 slots using one module. After you open one, tens meters long racks roll out of it!") {
|
||||
russian("Улучшите хранилище Экзопака модулем на 150 слотов. Открой один - и покатились стеллажи на десятки метров!")
|
||||
},
|
||||
frameType = FrameType.CHALLENGE
|
||||
frameType = AdvancementType.CHALLENGE
|
||||
)
|
||||
.addCriterion("once4", ExopackSlotsExpandedTrigger.Instance(minGained = 150).criterion())
|
||||
.save(serializer, modLocation("exopack/once4"))
|
||||
|
@ -1,30 +1,53 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.AdvancementRewards
|
||||
import net.minecraft.advancements.AdvancementType
|
||||
import net.minecraft.advancements.Criterion
|
||||
import net.minecraft.advancements.CriterionTriggerInstance
|
||||
import net.minecraft.advancements.DisplayInfo
|
||||
import net.minecraft.advancements.FrameType
|
||||
import net.minecraft.advancements.critereon.ContextAwarePredicate
|
||||
import net.minecraft.advancements.critereon.EntityPredicate
|
||||
import net.minecraft.advancements.critereon.InventoryChangeTrigger
|
||||
import net.minecraft.advancements.critereon.ItemPredicate
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import ru.dbotthepony.mc.otm.core.TextComponent
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import java.util.function.Consumer
|
||||
|
||||
fun AdvancementBuilder(): Advancement.Builder = Advancement.Builder.advancement()
|
||||
|
||||
fun Advancement.Builder.save(serializer: Consumer<AdvancementHolder>, name: ResourceLocation): AdvancementHolder {
|
||||
val built = build(name)
|
||||
serializer.accept(built)
|
||||
return built
|
||||
}
|
||||
|
||||
fun advancementLoot(location: ResourceLocation): AdvancementRewards.Builder {
|
||||
return AdvancementRewards.Builder.loot(ResourceKey.create(Registries.LOOT_TABLE, location))
|
||||
}
|
||||
|
||||
fun advancementLoot(location: String): AdvancementRewards.Builder {
|
||||
return advancementLoot(modLocation(location))
|
||||
}
|
||||
|
||||
fun AdvancementRewards.Builder.addLootTable(location: ResourceLocation): AdvancementRewards.Builder {
|
||||
return addLootTable(ResourceKey.create(Registries.LOOT_TABLE, location))
|
||||
}
|
||||
|
||||
fun DisplayInfo(
|
||||
itemStack: ItemStack,
|
||||
title: Component = TextComponent("undefined"),
|
||||
description: Component = TextComponent("undefined"),
|
||||
background: ResourceLocation? = null,
|
||||
frameType: FrameType = FrameType.TASK,
|
||||
frameType: AdvancementType = AdvancementType.TASK,
|
||||
showToast: Boolean = true,
|
||||
announceChat: Boolean = true,
|
||||
hidden: Boolean = false,
|
||||
@ -48,7 +71,7 @@ fun Advancement.Builder.display(
|
||||
title: Component = TextComponent("undefined"),
|
||||
description: Component = TextComponent("undefined"),
|
||||
background: ResourceLocation? = null,
|
||||
frameType: FrameType = FrameType.TASK,
|
||||
frameType: AdvancementType = AdvancementType.TASK,
|
||||
showToast: Boolean = true,
|
||||
announceChat: Boolean = true,
|
||||
hidden: Boolean = false,
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.mc.otm.datagen.advancements
|
||||
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.AdvancementRequirements
|
||||
import net.minecraft.advancements.FrameType
|
||||
import net.minecraft.advancements.AdvancementType
|
||||
import net.minecraft.advancements.critereon.ItemPredicate
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
@ -148,7 +148,7 @@ fun addMachineAdvancements(serializer: Consumer<AdvancementHolder>, lang: Matter
|
||||
description = translation.add("replicate_something.desc", "Replicate something using Matter Replicator. If you replicated some food, be first to taste it among your company") {
|
||||
russian("Среплицируйте что либо используя репликатор материи. Если это еда, то не стесняйтесь быть первым, кто попробует её на вкус среди вашей компании")
|
||||
},
|
||||
frameType = FrameType.GOAL
|
||||
frameType = AdvancementType.GOAL
|
||||
)
|
||||
.addCriterion("replicate_something", TakeItemOutOfReplicatorTrigger.Instance(ItemPredicate.Builder.item().of(MItems.MATTER_DUST).build(), true).criterion())
|
||||
.save(serializer, modLocation("machines/replicate_something"))
|
||||
|
@ -2,9 +2,9 @@ package ru.dbotthepony.mc.otm.datagen.blocks
|
||||
|
||||
import net.minecraft.world.item.DyeColor
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraftforge.client.model.generators.BlockStateProvider
|
||||
import net.minecraftforge.client.model.generators.ConfiguredModel
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.client.model.generators.BlockStateProvider
|
||||
import net.neoforged.neoforge.client.model.generators.ConfiguredModel
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.core.get
|
||||
import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
|
||||
import ru.dbotthepony.mc.otm.core.math.yRotationBlockstateNorth
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.mc.otm.datagen.blocks
|
||||
|
||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
|
||||
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf
|
||||
import net.minecraftforge.client.model.generators.ConfiguredModel
|
||||
import net.neoforged.neoforge.client.model.generators.ConfiguredModel
|
||||
import ru.dbotthepony.mc.otm.block.CableBlock
|
||||
import ru.dbotthepony.mc.otm.block.decorative.CargoCrateBlock
|
||||
import ru.dbotthepony.mc.otm.block.entity.WorkerState
|
||||
|
@ -5,9 +5,9 @@ import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.RotatedPillarBlock
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import net.minecraftforge.client.model.generators.BlockStateProvider
|
||||
import net.minecraftforge.client.model.generators.ConfiguredModel
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.client.model.generators.BlockStateProvider
|
||||
import net.neoforged.neoforge.client.model.generators.ConfiguredModel
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.block.entity.WorkerState
|
||||
import ru.dbotthepony.mc.otm.core.getValueNullable
|
||||
import ru.dbotthepony.mc.otm.core.math.BlockRotationFreedom
|
||||
|
@ -6,9 +6,10 @@ import net.minecraft.server.packs.PackType
|
||||
import net.minecraft.world.item.ArmorItem
|
||||
import net.minecraft.world.item.DyeColor
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraftforge.client.model.generators.ItemModelProvider
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.client.model.generators.ItemModelProvider
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import org.apache.logging.log4j.LogManager
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
@ -104,7 +105,7 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event
|
||||
|
||||
if (item is ArmorItem) {
|
||||
for ((i, material) in ARMOR_TRIM_MATERIALS.withIndex()) {
|
||||
val trimLocation = ResourceLocation("trims/items/${item.type.getName()}_trim_${material}")
|
||||
val trimLocation = ResourceLocation.withDefaultNamespace("trims/items/${item.type.getName()}_trim_${material}")
|
||||
existingFileHelper.trackGenerated(trimLocation, PackType.CLIENT_RESOURCES, ".png", "textures")
|
||||
|
||||
val overrideModel = withExistingParent("${item.registryName!!.path}_${material}_trim", GENERATED)
|
||||
|
@ -722,7 +722,6 @@ private fun items(provider: MatteryLanguageProvider) {
|
||||
|
||||
add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive")
|
||||
add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive")
|
||||
add(MItems.PLASMA_RIFLE, "Plasma Repeater")
|
||||
add(MItems.TRITANIUM_ORE_CLUMP, "Raw Tritanium")
|
||||
add(MItems.PATTERN_DRIVE_NORMAL, "Pattern Drive")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE, "Creative Pattern Drive")
|
||||
|
@ -15,10 +15,9 @@ import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.enchantment.Enchantment
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraftforge.common.data.LanguageProvider
|
||||
import net.neoforged.neoforge.common.data.LanguageProvider
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.android.AndroidFeatureType
|
||||
import ru.dbotthepony.mc.otm.android.AndroidResearch
|
||||
import ru.dbotthepony.mc.otm.android.AndroidResearchType
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
@ -88,7 +87,6 @@ class MatteryLanguageProvider(private val gen: DataGenerator) {
|
||||
fun addItem(key: Collection<Item>, value: String) = key.forEach { add(it, value) }
|
||||
fun add(key: Item, suffix: String, value: String) = slave.add("${key.descriptionId}.${suffix}", value)
|
||||
fun add(key: ItemStack, value: String) = slave.add(key, value)
|
||||
fun add(key: Enchantment, value: String) = slave.add(key, value)
|
||||
fun add(key: MobEffect, value: String) = slave.add(key, value)
|
||||
fun add(key: EntityType<*>, value: String) = slave.add(key, value)
|
||||
|
||||
|
@ -727,7 +727,6 @@ private fun items(provider: MatteryLanguageProvider) {
|
||||
|
||||
add(MItems.PORTABLE_CONDENSATION_DRIVE, "Portable Condensation Drive")
|
||||
add(MItems.PORTABLE_DENSE_CONDENSATION_DRIVE, "Portable Dense Condensation Drive")
|
||||
add(MItems.PLASMA_RIFLE, "Плазменная винтовка")
|
||||
add(MItems.TRITANIUM_ORE_CLUMP, "Рудный тритан")
|
||||
add(MItems.PATTERN_DRIVE_NORMAL, "Диск шаблонов")
|
||||
add(MItems.PATTERN_DRIVE_CREATIVE, "Творческий диск шаблонов")
|
||||
|
@ -1,9 +1,9 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.loot
|
||||
|
||||
import net.minecraft.data.DataGenerator
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||
import net.minecraftforge.common.data.GlobalLootModifierProvider
|
||||
import net.neoforged.neoforge.common.data.GlobalLootModifierProvider
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.data.loot.LootPoolAppender
|
||||
import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
import java.util.Arrays
|
||||
@ -51,7 +51,7 @@ fun PlainLootAppender(
|
||||
vararg items: Pair<ItemStack, Double>
|
||||
) = PlainLootAppender(conditions, Arrays.stream(items))
|
||||
|
||||
class LootModifiers(generator: DataGenerator) : GlobalLootModifierProvider(generator.packOutput, DataGen.MOD_ID) {
|
||||
class LootModifiers(generator: GatherDataEvent) : GlobalLootModifierProvider(generator.generator.packOutput, generator.lookupProvider, DataGen.MOD_ID) {
|
||||
private val lambdas = ArrayList<(LootModifiers) -> Unit>()
|
||||
|
||||
fun lambda(lambda: (LootModifiers) -> Unit) {
|
||||
|
@ -1,12 +1,15 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.loot
|
||||
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.valueproviders.UniformInt
|
||||
import net.minecraft.world.entity.EntityType
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.storage.loot.BuiltInLootTables
|
||||
import net.minecraft.world.level.storage.loot.LootTable
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition
|
||||
import net.minecraftforge.common.loot.LootTableIdCondition
|
||||
import net.neoforged.neoforge.common.loot.LootTableIdCondition
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||
import ru.dbotthepony.mc.otm.data.UniformDecimal
|
||||
import ru.dbotthepony.mc.otm.data.condition.ChanceWithPlaytimeCondition
|
||||
@ -28,6 +31,11 @@ fun LootTableIdCondition(location: ResourceLocation): LootItemCondition {
|
||||
return LootTableIdCondition.Builder(location).build()
|
||||
}
|
||||
|
||||
@Suppress("FunctionName")
|
||||
fun LootTableIdCondition(location: ResourceKey<LootTable>): LootItemCondition {
|
||||
return LootTableIdCondition.Builder(location.location()).build()
|
||||
}
|
||||
|
||||
fun addLootModifiers(it: LootModifiers) {
|
||||
it.add("dungeon_exopack", LootPoolAppender(
|
||||
arrayOf(LootTableIdCondition(BuiltInLootTables.SIMPLE_DUNGEON)),
|
||||
|
@ -6,10 +6,12 @@ package ru.dbotthepony.mc.otm.datagen.loot
|
||||
import it.unimi.dsi.fastutil.objects.Reference2ObjectArrayMap
|
||||
import it.unimi.dsi.fastutil.objects.Reference2ObjectFunction
|
||||
import net.minecraft.advancements.critereon.StatePropertiesPredicate
|
||||
import net.minecraft.core.WritableRegistry
|
||||
import net.minecraft.data.DataGenerator
|
||||
import net.minecraft.data.loot.LootTableProvider
|
||||
import net.minecraft.data.loot.LootTableSubProvider
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.util.ProblemReporter
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.SlabBlock
|
||||
@ -19,33 +21,25 @@ import net.minecraft.world.level.storage.loot.LootTable
|
||||
import net.minecraft.world.level.storage.loot.ValidationContext
|
||||
import net.minecraft.world.level.storage.loot.entries.LootItem
|
||||
import net.minecraft.world.level.storage.loot.entries.LootPoolSingletonContainer
|
||||
import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction
|
||||
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction
|
||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet
|
||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
|
||||
import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition
|
||||
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue
|
||||
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
|
||||
import ru.dbotthepony.mc.otm.block.entity.MatteryWorkerBlockEntity
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.core.stream
|
||||
import ru.dbotthepony.mc.otm.data.loot.CopyTileNbtFunction
|
||||
|
||||
data class NbtCopy(val source: String, val destination: String, val strategy: CopyNbtFunction.MergeStrategy = CopyNbtFunction.MergeStrategy.REPLACE)
|
||||
class LootTables(generator: GatherDataEvent) : LootTableProvider(generator.generator.packOutput, setOf() /* because we don't fucking validate you fuck */, listOf() /* because we attach everything after class is constructed duh */, generator.lookupProvider) {
|
||||
private val providersTable = Reference2ObjectArrayMap<LootContextParamSet, HashMap<ResourceKey<LootTable>, () -> LootTable.Builder>>()
|
||||
|
||||
fun TileNbtCopy(source: String, strategy: CopyNbtFunction.MergeStrategy = CopyNbtFunction.MergeStrategy.REPLACE): NbtCopy {
|
||||
return NbtCopy(source, "BlockEntityTag.$source", strategy)
|
||||
}
|
||||
|
||||
class LootTables(generator: DataGenerator) : LootTableProvider(generator.packOutput, setOf() /* because we don't fucking validate you fuck */, listOf() /* because we attach everything after class is constructed duh */) {
|
||||
private val providersTable = Reference2ObjectArrayMap<LootContextParamSet, HashMap<ResourceLocation, () -> LootTable.Builder>>()
|
||||
|
||||
fun builder(context: LootContextParamSet, id: ResourceLocation, provider: LootTable.Builder.() -> Unit) {
|
||||
fun builder(context: LootContextParamSet, id: ResourceKey<LootTable>, provider: LootTable.Builder.() -> Unit) {
|
||||
provider(context, id) {
|
||||
LootTable.lootTable().also(provider)
|
||||
}
|
||||
}
|
||||
|
||||
fun provider(context: LootContextParamSet, id: ResourceLocation, provider: () -> LootTable.Builder) {
|
||||
fun provider(context: LootContextParamSet, id: ResourceKey<LootTable>, provider: () -> LootTable.Builder) {
|
||||
check(providersTable
|
||||
.computeIfAbsent(context, Reference2ObjectFunction { HashMap() })
|
||||
.put(id, provider) == null) { "Duplicate loot pool entry for $id" }
|
||||
@ -63,7 +57,11 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator.packOut
|
||||
}.toList()
|
||||
}
|
||||
|
||||
override fun validate(map: MutableMap<ResourceLocation, LootTable>, validationtracker: ValidationContext) {}
|
||||
override fun validate(
|
||||
writableregistry: WritableRegistry<LootTable>,
|
||||
validationtracker: ValidationContext,
|
||||
`problemreporter$collector`: ProblemReporter.Collector
|
||||
) {}
|
||||
|
||||
fun createSlabItemTable(block: Block, configurator: LootPoolSingletonContainer.Builder<*>.() -> Unit = {}) {
|
||||
builder(LootContextParamSets.BLOCK, block.lootTable) {
|
||||
@ -100,7 +98,7 @@ class LootTables(generator: DataGenerator) : LootTableProvider(generator.packOut
|
||||
}
|
||||
}
|
||||
|
||||
fun singleLootPool(context: LootContextParamSet, id: ResourceLocation, block: LootPool.Builder.() -> Unit) {
|
||||
fun singleLootPool(context: LootContextParamSet, id: ResourceKey<LootTable>, block: LootPool.Builder.() -> Unit) {
|
||||
builder(context, id) {
|
||||
withPool(LootPool.lootPool().also(block))
|
||||
}
|
||||
|
@ -1,14 +1,12 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.loot
|
||||
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.level.storage.loot.entries.LootItem
|
||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
|
||||
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.datagen.modLootTable
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
fun addChestLootTables(loot: LootTables) {
|
||||
loot.builder(LootContextParamSets.CHEST, modLocation("food_box")) {
|
||||
loot.builder(LootContextParamSets.CHEST, modLootTable("food_box")) {
|
||||
lootPool {
|
||||
item(Items.PACKED_ICE) { setCount(minimal = 1, maximal = 3) }
|
||||
item(MItems.NUTRIENT_PASTE) { setCount(minimal = 1, maximal = 2) }
|
||||
|
@ -7,6 +7,7 @@ import net.minecraft.world.level.storage.loot.entries.LootItem
|
||||
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets
|
||||
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.datagen.modLootTable
|
||||
import ru.dbotthepony.mc.otm.registry.MBlocks
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
import ru.dbotthepony.mc.otm.registry.MRegistry
|
||||
@ -87,13 +88,13 @@ fun addLootTables(lootTables: LootTables) {
|
||||
}
|
||||
}
|
||||
|
||||
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("research_all_android")) {
|
||||
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLootTable("research_all_android")) {
|
||||
lootPool {
|
||||
add(LootItem.lootTableItem(MItems.ExopackUpgrades.INVENTORY_UPGRADE_HUGE))
|
||||
}
|
||||
}
|
||||
|
||||
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("tritanium_block3")) {
|
||||
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLootTable("tritanium_block3")) {
|
||||
lootPool { item(Items.WHITE_DYE) { setCount(8) } }
|
||||
lootPool { item(Items.ORANGE_DYE) { setCount(8) } }
|
||||
lootPool { item(Items.MAGENTA_DYE) { setCount(8) } }
|
||||
@ -112,7 +113,7 @@ fun addLootTables(lootTables: LootTables) {
|
||||
lootPool { item(Items.BLACK_DYE) { setCount(8) } }
|
||||
}
|
||||
|
||||
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLocation("tritanium_block4")) {
|
||||
lootTables.builder(LootContextParamSets.ADVANCEMENT_ENTITY, modLootTable("tritanium_block4")) {
|
||||
lootPool { item(Items.WHITE_DYE) { setCount(64) } }
|
||||
lootPool { item(Items.ORANGE_DYE) { setCount(64) } }
|
||||
lootPool { item(Items.MAGENTA_DYE) { setCount(64) } }
|
||||
|
@ -2,8 +2,8 @@ package ru.dbotthepony.mc.otm.datagen.models
|
||||
|
||||
import net.minecraft.world.item.DyeColor
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraftforge.client.model.generators.BlockModelProvider
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.client.model.generators.BlockModelProvider
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
|
@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
import net.minecraft.data.recipes.RecipeCategory
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.tags.ItemTags
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import net.minecraft.data.recipes.FinishedRecipe
|
||||
import net.minecraft.core.component.DataComponents
|
||||
import net.minecraft.data.recipes.RecipeCategory
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.data.recipes.ShapelessRecipeBuilder
|
||||
@ -8,7 +8,7 @@ import net.minecraft.tags.ItemTags
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
|
||||
import ru.dbotthepony.mc.otm.registry.MBlocks
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
@ -17,7 +17,6 @@ import ru.dbotthepony.mc.otm.registry.MRegistry
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
|
||||
import java.util.function.Consumer
|
||||
|
||||
fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
val machinesCategory = RecipeCategory.DECORATIONS
|
||||
@ -75,7 +74,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
for ((color, item) in MItems.PLATE_PRESS) {
|
||||
MatteryRecipe(MBlocks.TWIN_PLATE_PRESS[color]!!, category = machinesCategory)
|
||||
.setUpgradeSource(item)
|
||||
.addUpgradeOps(UpgradeRecipe.All)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
|
||||
.rowA(item)
|
||||
.build(consumer, "plate_press_migration/${color?.name?.lowercase() ?: "default"}")
|
||||
}
|
||||
@ -105,14 +104,14 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
|
||||
// Блоки
|
||||
MatteryRecipe(MItems.MATTER_CAPACITOR_BANK[null]!!, category = machinesCategory)
|
||||
.row(Tags.Items.GLASS, MItemTags.IRON_PLATES, Tags.Items.GLASS)
|
||||
.row(Tags.Items.GLASS_BLOCKS, MItemTags.IRON_PLATES, Tags.Items.GLASS_BLOCKS)
|
||||
.row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES)
|
||||
.row(MItems.MATTER_CABLE, MItems.MATTER_IO_PORT, MItems.MATTER_CABLE)
|
||||
.unlockedBy(MItems.MATTER_CABLE)
|
||||
.build(consumer)
|
||||
|
||||
MatteryRecipe(MItems.BATTERY_BANK[null]!!, category = machinesCategory)
|
||||
.row(Tags.Items.GLASS, MItemTags.IRON_PLATES, Tags.Items.GLASS)
|
||||
.row(Tags.Items.GLASS_BLOCKS, MItemTags.IRON_PLATES, Tags.Items.GLASS_BLOCKS)
|
||||
.row(MItemTags.IRON_PLATES, MItems.MACHINE_FRAME, MItemTags.IRON_PLATES)
|
||||
.row(MItems.ELECTRIC_PARTS, MItems.ENERGY_BUS, MItems.ELECTRIC_PARTS)
|
||||
.unlockedBy(MItems.ENERGY_BUS)
|
||||
@ -156,7 +155,7 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
.build(consumer)
|
||||
|
||||
MatteryRecipe(MItems.PHANTOM_ATTRACTOR, category = machinesCategory)
|
||||
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.GLASS_COLORLESS, Tags.Items.DUSTS_REDSTONE)
|
||||
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.GLASS_BLOCKS_COLORLESS, Tags.Items.DUSTS_REDSTONE)
|
||||
.row(MItemTags.TRITANIUM_PLATES, MItems.QUANTUM_TRANSCEIVER, MItemTags.TRITANIUM_PLATES)
|
||||
.row(MItemTags.TRITANIUM_PLATES, ItemTags.BEDS, MItemTags.TRITANIUM_PLATES)
|
||||
.unlockedBy(MItems.QUANTUM_TRANSCEIVER)
|
||||
@ -216,10 +215,8 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
// броня
|
||||
MatteryRecipe(MItems.TRITANIUM_HELMET, category = RecipeCategory.COMBAT)
|
||||
.setUpgradeSource(Items.LEATHER_HELMET)
|
||||
.addUpgradeOps(
|
||||
UpgradeRecipe.Direct("display"),
|
||||
UpgradeRecipe.Direct("Enchantments"),
|
||||
)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyEnchantments)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME))
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_HELMET, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
@ -227,10 +224,8 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.TRITANIUM_PANTS, category = RecipeCategory.COMBAT)
|
||||
.setUpgradeSource(Items.LEATHER_LEGGINGS)
|
||||
.addUpgradeOps(
|
||||
UpgradeRecipe.Direct("display"),
|
||||
UpgradeRecipe.Direct("Enchantments"),
|
||||
)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyEnchantments)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME))
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_LEGGINGS, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.rowAC(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
@ -239,10 +234,8 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.TRITANIUM_CHESTPLATE, category = RecipeCategory.COMBAT)
|
||||
.setUpgradeSource(Items.LEATHER_CHESTPLATE)
|
||||
.addUpgradeOps(
|
||||
UpgradeRecipe.Direct("display"),
|
||||
UpgradeRecipe.Direct("Enchantments"),
|
||||
)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyEnchantments)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME))
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_CHESTPLATE, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
@ -251,10 +244,8 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.TRITANIUM_BOOTS, category = RecipeCategory.COMBAT)
|
||||
.setUpgradeSource(Items.LEATHER_BOOTS)
|
||||
.addUpgradeOps(
|
||||
UpgradeRecipe.Direct("display"),
|
||||
UpgradeRecipe.Direct("Enchantments"),
|
||||
)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyEnchantments)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyComponent(DataComponents.CUSTOM_NAME))
|
||||
.row(MItemTags.REINFORCED_TRITANIUM_PLATES, Items.LEATHER_BOOTS, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.rowAC(MItemTags.REINFORCED_TRITANIUM_PLATES, MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
.unlockedBy(MItemTags.REINFORCED_TRITANIUM_PLATES)
|
||||
@ -368,8 +359,8 @@ fun addCraftingTableRecipes(consumer: RecipeOutput) {
|
||||
MatteryRecipe(MItems.MATTER_RECONSTRUCTOR[dye]!!, category = machinesCategory)
|
||||
.setUpgradeSource(item)
|
||||
.addUpgradeOps(
|
||||
UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.ENERGY_KEY}", "BlockEntityTag.energy"),
|
||||
UpgradeRecipe.Indirect("BlockEntityTag.${MatteryBlockEntity.MATTER_STORAGE_KEY}", "BlockEntityTag.matter"),
|
||||
UpgradeRecipe.CopyTileComponent(MatteryBlockEntity.ENERGY_KEY, "energy"),
|
||||
UpgradeRecipe.CopyTileComponent(MatteryBlockEntity.MATTER_STORAGE_KEY, "matter"),
|
||||
)
|
||||
.row(MItemTags.ADVANCED_CIRCUIT, Tags.Items.GEMS_EMERALD, MItemTags.ADVANCED_CIRCUIT)
|
||||
.row(MItems.ELECTRIC_PARTS, item, MItems.ELECTRIC_PARTS)
|
||||
|
@ -6,14 +6,13 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.registry.MBlocks
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
import ru.dbotthepony.mc.otm.registry.MRegistry
|
||||
import java.util.function.Consumer
|
||||
|
||||
private fun stairs(base: ItemLike, result: ItemLike, consumer: RecipeOutput) {
|
||||
MatteryRecipe(result, 4, category = RecipeCategory.BUILDING_BLOCKS)
|
||||
@ -134,7 +133,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
|
||||
MatteryRecipe(MItems.DANGER_STRIPE_BLOCK, 24, category = RecipeCategory.BUILDING_BLOCKS)
|
||||
.rowAB(Tags.Items.DYES_YELLOW, Tags.Items.INGOTS_IRON)
|
||||
.row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONE, Tags.Items.INGOTS_IRON)
|
||||
.row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONES, Tags.Items.INGOTS_IRON)
|
||||
.rowBC(Tags.Items.INGOTS_IRON, Tags.Items.DYES_BLACK)
|
||||
.unlockedBy(Tags.Items.INGOTS_IRON)
|
||||
.unlockedBy(Tags.Items.DYES_BLACK)
|
||||
@ -142,7 +141,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
|
||||
MatteryRecipe(MItems.METAL_BEAM, 24, category = RecipeCategory.BUILDING_BLOCKS)
|
||||
.rowB(Tags.Items.INGOTS_IRON)
|
||||
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONE, MItemTags.TRITANIUM_INGOTS)
|
||||
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONES, MItemTags.TRITANIUM_INGOTS)
|
||||
.rowB(Tags.Items.INGOTS_IRON)
|
||||
.build(consumer, modLocation("decorative/metal_beam"))
|
||||
|
||||
@ -177,7 +176,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
|
||||
MatteryRecipe(MRegistry.DECORATIVE_CRATE.item, 24, category = RecipeCategory.BUILDING_BLOCKS)
|
||||
.rowB(Tags.Items.INGOTS_IRON)
|
||||
.row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONE, Tags.Items.INGOTS_IRON)
|
||||
.row(Tags.Items.INGOTS_IRON, Tags.Items.COBBLESTONES, Tags.Items.INGOTS_IRON)
|
||||
.rowB(Tags.Items.INGOTS_IRON)
|
||||
.unlockedBy(Tags.Items.INGOTS_IRON)
|
||||
.build(consumer, modLocation("decorative/crate/rusty"))
|
||||
@ -278,7 +277,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
|
||||
MatteryRecipe(MBlocks.TRITANIUM_STRIPED_BLOCK, 24, category = RecipeCategory.BUILDING_BLOCKS)
|
||||
.rowB(MItemTags.TRITANIUM_INGOTS)
|
||||
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONE, MItemTags.TRITANIUM_INGOTS)
|
||||
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONES, MItemTags.TRITANIUM_INGOTS)
|
||||
.rowAB(Tags.Items.DYES_YELLOW, MItemTags.TRITANIUM_INGOTS)
|
||||
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
|
||||
.unlockedBy(Tags.Items.DYES_YELLOW)
|
||||
@ -286,7 +285,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
|
||||
MatteryRecipe(MRegistry.TRITANIUM_BLOCK.item, 24, category = RecipeCategory.BUILDING_BLOCKS)
|
||||
.rowB(MItemTags.TRITANIUM_INGOTS)
|
||||
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONE, MItemTags.TRITANIUM_INGOTS)
|
||||
.row(MItemTags.TRITANIUM_INGOTS, Tags.Items.COBBLESTONES, MItemTags.TRITANIUM_INGOTS)
|
||||
.rowB(MItemTags.TRITANIUM_INGOTS)
|
||||
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
|
||||
.build(consumer, modLocation("decorative/blocks/default"))
|
||||
@ -298,7 +297,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
|
||||
.build(consumer, modLocation("decorative/doors/default"))
|
||||
|
||||
for (color in DyeColor.values()) {
|
||||
for (color in DyeColor.entries) {
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, MItems.TRITANIUM_DOOR[color]!!, 1)
|
||||
.requires(Ingredient.of(MItems.TRITANIUM_DOOR.entries.stream().filter { it.key != color }.map { ItemStack(it.value) }))
|
||||
.requires(color.tag)
|
||||
@ -312,7 +311,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
.unlockedBy(MItemTags.TRITANIUM_INGOTS)
|
||||
.build(consumer, modLocation("decorative/trapdoors/default"))
|
||||
|
||||
for (color in DyeColor.values()) {
|
||||
for (color in DyeColor.entries) {
|
||||
ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, MItems.TRITANIUM_TRAPDOOR[color]!!, 1)
|
||||
.requires(Ingredient.of(MItems.TRITANIUM_TRAPDOOR.entries.stream().filter { it.key != color }.map { ItemStack(it.value) }))
|
||||
.requires(color.tag)
|
||||
@ -325,7 +324,7 @@ fun addDecorativesRecipes(provider: MatteryRecipeProvider, consumer: RecipeOutpu
|
||||
.unlockedBy(MItemTags.TRITANIUM_PLATES)
|
||||
.build(consumer, modLocation("pressure_plates/default"))
|
||||
|
||||
for (dye in DyeColor.values()) {
|
||||
for (dye in DyeColor.entries) {
|
||||
ShapelessRecipeBuilder(RecipeCategory.REDSTONE, MRegistry.TRITANIUM_PRESSURE_PLATE.getItem(dye), 1)
|
||||
.requires(Ingredient.of(MRegistry.TRITANIUM_PRESSURE_PLATE.allItems.entries.stream().filter { it.key != dye }.map { ItemStack(it.value) }))
|
||||
.requires(dye.tag)
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
@ -65,8 +65,8 @@ fun addMachineUpgradeRecipes(consumer: RecipeOutput) {
|
||||
.build(consumer)
|
||||
|
||||
MatteryRecipe(tier.MATTER_STORAGE, 1)
|
||||
.rowB(Tags.Items.GLASS)
|
||||
.row(Tags.Items.GLASS, MItems.MATTER_CAPACITOR_PARTS, Tags.Items.GLASS)
|
||||
.rowB(Tags.Items.GLASS_BLOCKS)
|
||||
.row(Tags.Items.GLASS_BLOCKS, MItems.MATTER_CAPACITOR_PARTS, Tags.Items.GLASS_BLOCKS)
|
||||
.rowB(tier.BLANK)
|
||||
.unlockedBy(tier.BLANK)
|
||||
.unlockedBy(MItems.MATTER_CAPACITOR_PARTS)
|
||||
|
@ -1,42 +1,70 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import net.minecraft.core.NonNullList
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.minecraft.world.item.crafting.ShapedRecipePattern
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.recipe.IngredientMatrix
|
||||
import ru.dbotthepony.mc.otm.recipe.MatterEntanglerRecipe
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
import java.util.*
|
||||
|
||||
private fun pattern(
|
||||
c00: Ingredient, c10: Ingredient, c20: Ingredient,
|
||||
c01: Ingredient, c11: Ingredient, c21: Ingredient,
|
||||
c02: Ingredient, c12: Ingredient, c22: Ingredient,
|
||||
): ShapedRecipePattern {
|
||||
val patternMap = linkedMapOf(
|
||||
'A' to c00, 'B' to c10, 'C' to c20,
|
||||
'D' to c01, 'E' to c11, 'F' to c21,
|
||||
'G' to c02, 'K' to c12, 'M' to c22,
|
||||
)
|
||||
|
||||
val pattern = listOf(
|
||||
"ABC",
|
||||
"DEF",
|
||||
"GKM",
|
||||
)
|
||||
|
||||
return ShapedRecipePattern(
|
||||
3, 3,
|
||||
NonNullList.copyOf(patternMap.values),
|
||||
Optional.of(ShapedRecipePattern.Data(patternMap, pattern))
|
||||
)
|
||||
}
|
||||
|
||||
fun addMatterEntanglerRecipes(consumer: RecipeOutput) {
|
||||
consumer.accept(
|
||||
modLocation("quantum_capacitor"),
|
||||
MatterEntanglerRecipe(
|
||||
IngredientMatrix.of(
|
||||
listOf(Ingredient.of(MItems.ELECTRIC_PARTS), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(MItems.ELECTRIC_PARTS)),
|
||||
listOf(Ingredient.of(MItems.BATTERY_CAPACITOR), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_CAPACITOR)),
|
||||
listOf(Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES)),
|
||||
pattern(
|
||||
Ingredient.of(MItems.ELECTRIC_PARTS), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(MItems.ELECTRIC_PARTS),
|
||||
Ingredient.of(MItems.BATTERY_CAPACITOR), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_CAPACITOR),
|
||||
Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES),
|
||||
),
|
||||
Decimal(40),
|
||||
400.0,
|
||||
ItemStack(MItems.QUANTUM_CAPACITOR, 2),
|
||||
experience = 15f
|
||||
).energetic().toFinished(modLocation("quantum_capacitor"))
|
||||
).energetic()
|
||||
)
|
||||
|
||||
consumer.accept(
|
||||
modLocation("quantum_battery"),
|
||||
MatterEntanglerRecipe(
|
||||
IngredientMatrix.of(
|
||||
listOf(Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE)),
|
||||
listOf(Ingredient.of(MItems.BATTERY_DENSE), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_DENSE)),
|
||||
listOf(Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES)),
|
||||
pattern(
|
||||
Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE), Ingredient.of(MItemTags.GOLD_WIRES), Ingredient.of(Tags.Items.STORAGE_BLOCKS_REDSTONE),
|
||||
Ingredient.of(MItems.BATTERY_DENSE), Ingredient.of(MItems.QUANTUM_TRANSCEIVER), Ingredient.of(MItems.BATTERY_DENSE),
|
||||
Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES), Ingredient.of(MItemTags.TRITANIUM_PLATES),
|
||||
),
|
||||
Decimal(120),
|
||||
600.0,
|
||||
ItemStack(MItems.QUANTUM_BATTERY, 2),
|
||||
experience = 20f
|
||||
).energetic().toFinished(modLocation("quantum_battery"))
|
||||
).energetic()
|
||||
)
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
|
||||
package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import com.google.gson.JsonObject
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.Criterion
|
||||
import net.minecraft.data.recipes.FinishedRecipe
|
||||
import net.minecraft.data.recipes.RecipeCategory
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.data.recipes.ShapedRecipeBuilder
|
||||
@ -12,12 +11,13 @@ import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.item.crafting.Recipe
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer
|
||||
import net.minecraft.world.item.crafting.ShapedRecipe
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import net.neoforged.neoforge.common.conditions.ICondition
|
||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.core.set
|
||||
import ru.dbotthepony.mc.otm.core.toJsonStrict
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
|
||||
|
||||
@ -54,18 +54,6 @@ private data class RecipeRow(
|
||||
val c: RecipeCell?,
|
||||
)
|
||||
|
||||
private fun RecipeOutput.map(mapper: (FinishedRecipe) -> FinishedRecipe): RecipeOutput {
|
||||
return object : RecipeOutput {
|
||||
override fun accept(recipe: FinishedRecipe) {
|
||||
this@map.accept(mapper(recipe))
|
||||
}
|
||||
|
||||
override fun advancement(): Advancement.Builder {
|
||||
return this@map.advancement()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* [ShapedRecipeBuilder] that doesn't suck
|
||||
*/
|
||||
@ -180,22 +168,12 @@ class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: Reci
|
||||
return this
|
||||
}
|
||||
|
||||
private fun filter(): (FinishedRecipe) -> FinishedRecipe {
|
||||
private fun filter(): (ShapedRecipe) -> ShapedRecipe {
|
||||
if (upgradeSource != null) {
|
||||
check(copyPaths.isNotEmpty()) { "Defined upgrade recipe without nbt migration operations" }
|
||||
|
||||
return {
|
||||
object : FinishedRecipe by it {
|
||||
override fun serializeRecipeData(pJson: JsonObject) {
|
||||
pJson["parent"] = it.serializeRecipe()
|
||||
pJson["copyPaths"] = UpgradeRecipe.OPERATION_CODEC.toJsonStrict(copyPaths)
|
||||
pJson["source"] = upgradeSource!!.toString()
|
||||
}
|
||||
|
||||
override fun type(): RecipeSerializer<*> {
|
||||
return UpgradeRecipe.CODEC
|
||||
}
|
||||
}
|
||||
UpgradeRecipe(it, copyPaths.map { upgradeSource!! to it })
|
||||
}
|
||||
}
|
||||
|
||||
@ -222,13 +200,8 @@ class MatteryRecipe(val result: ItemLike, val count: Int = 1, val category: Reci
|
||||
}
|
||||
|
||||
fun buildEnergetic(consumer: RecipeOutput, name: String? = null) {
|
||||
build(consumer.map {
|
||||
object : FinishedRecipe by it {
|
||||
override fun type(): RecipeSerializer<*> {
|
||||
return EnergyContainerRecipe.Companion
|
||||
}
|
||||
}
|
||||
}, name)
|
||||
addUpgradeOps(UpgradeRecipe.CopyEnergyCharge)
|
||||
build(consumer, name)
|
||||
}
|
||||
|
||||
fun row(): MatteryRecipe {
|
||||
|
@ -1,15 +1,13 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import com.google.common.collect.ImmutableList
|
||||
import net.minecraft.advancements.Advancement
|
||||
import net.minecraft.advancements.AdvancementHolder
|
||||
import net.minecraft.advancements.CriteriaTriggers
|
||||
import net.minecraft.advancements.Criterion
|
||||
import net.minecraft.advancements.critereon.ContextAwarePredicate
|
||||
import net.minecraft.advancements.critereon.EntityPredicate
|
||||
import net.minecraft.advancements.critereon.InventoryChangeTrigger
|
||||
import net.minecraft.advancements.critereon.ItemPredicate
|
||||
import net.minecraft.advancements.critereon.MinMaxBounds
|
||||
import net.minecraft.data.DataGenerator
|
||||
import net.minecraft.data.recipes.FinishedRecipe
|
||||
import net.minecraft.data.recipes.RecipeBuilder
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.data.recipes.RecipeProvider
|
||||
@ -21,13 +19,17 @@ import net.minecraft.util.valueproviders.FloatProvider
|
||||
import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.item.crafting.Recipe
|
||||
import net.minecraft.world.item.crafting.ShapedRecipePattern
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import net.neoforged.neoforge.common.conditions.ICondition
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.recipe.MicrowaveRecipe
|
||||
import ru.dbotthepony.mc.otm.recipe.PlatePressRecipe
|
||||
import java.util.*
|
||||
import java.util.function.Consumer
|
||||
import java.util.stream.Stream
|
||||
|
||||
private typealias RecipeBuilderCallback = (MatteryRecipeProvider, consumer: RecipeOutput) -> Unit
|
||||
@ -47,9 +49,7 @@ fun has(p_125976_: TagKey<Item>): Criterion<InventoryChangeTrigger.TriggerInstan
|
||||
fun inventoryTrigger(vararg p_126012_: ItemPredicate): Criterion<InventoryChangeTrigger.TriggerInstance> {
|
||||
return CriteriaTriggers.INVENTORY_CHANGED.createCriterion(InventoryChangeTrigger.TriggerInstance(
|
||||
Optional.empty(),
|
||||
MinMaxBounds.Ints.ANY,
|
||||
MinMaxBounds.Ints.ANY,
|
||||
MinMaxBounds.Ints.ANY,
|
||||
InventoryChangeTrigger.TriggerInstance.Slots.ANY,
|
||||
ImmutableList.copyOf(p_126012_)
|
||||
))
|
||||
}
|
||||
@ -87,7 +87,28 @@ fun <T : RecipeBuilder> T.unlockedBy(item: TagKey<Item>): T {
|
||||
return this
|
||||
}
|
||||
|
||||
class MatteryRecipeProvider(generatorIn: DataGenerator) : RecipeProvider(generatorIn.packOutput) {
|
||||
fun <IN : Recipe<*>> RecipeOutput.map(mapper: (IN) -> Recipe<*>): RecipeOutput {
|
||||
return object : RecipeOutput {
|
||||
override fun advancement(): Advancement.Builder {
|
||||
return this@map.advancement()
|
||||
}
|
||||
|
||||
override fun accept(
|
||||
id: ResourceLocation,
|
||||
recipe: Recipe<*>,
|
||||
advancement: AdvancementHolder?,
|
||||
vararg conditions: ICondition?
|
||||
) {
|
||||
this@map.accept(id, mapper(recipe as IN), advancement, *conditions)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun RecipeOutput.accept(id: ResourceLocation, recipe: Recipe<*>) {
|
||||
accept(id, recipe, null)
|
||||
}
|
||||
|
||||
class MatteryRecipeProvider(generatorIn: GatherDataEvent) : RecipeProvider(generatorIn.generator.packOutput, generatorIn.lookupProvider) {
|
||||
private val callbacks = LinkedList<RecipeBuilderCallback>()
|
||||
|
||||
fun exec(callback: RecipeBuilderCallback): MatteryRecipeProvider {
|
||||
@ -103,25 +124,25 @@ class MatteryRecipeProvider(generatorIn: DataGenerator) : RecipeProvider(generat
|
||||
|
||||
fun plate(id: String, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) {
|
||||
exec { _, consumer ->
|
||||
consumer.accept(PlatePressRecipe(
|
||||
Ingredient.of(ItemTags.create(ResourceLocation("forge", "ingots/$id"))),
|
||||
Ingredient.of(ItemTags.create(ResourceLocation("forge", "plates/$id"))),
|
||||
consumer.accept(modLocation("plates/$id"), PlatePressRecipe(
|
||||
Ingredient.of(ItemTags.create(ResourceLocation("c", "ingots/$id"))),
|
||||
Ingredient.of(ItemTags.create(ResourceLocation("c", "plates/$id"))),
|
||||
count,
|
||||
workTicks,
|
||||
experience = experience
|
||||
).toFinished(modLocation("plates/$id")))
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
fun plate(id: String, ingredient: Ingredient, result: Ingredient, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) {
|
||||
exec { it, callback ->
|
||||
callback.accept(PlatePressRecipe(ingredient, result, count, workTicks, experience = experience).toFinished(modLocation("plate_$id")))
|
||||
callback.accept(modLocation("plate_$id"), PlatePressRecipe(ingredient, result, count, workTicks, experience = experience))
|
||||
}
|
||||
}
|
||||
|
||||
fun microwave(id: String, ingredient: Ingredient, result: Ingredient, count: Int = 1, workTicks: Int = 200, experience: FloatProvider = ConstantFloat.ZERO) {
|
||||
exec { it, callback ->
|
||||
callback.accept(MicrowaveRecipe(ingredient, result, count, workTicks, experience = experience).toFinished(modLocation("microwave/$id")))
|
||||
callback.accept(modLocation("microwave/$id"), MicrowaveRecipe(ingredient, result, count, workTicks, experience = experience))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import net.minecraft.data.recipes.FinishedRecipe
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraft.world.item.DyeColor
|
||||
import net.minecraft.world.item.Item
|
||||
@ -8,13 +7,11 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.core.stream
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.recipe.PainterArmorDyeRecipe
|
||||
import ru.dbotthepony.mc.otm.recipe.PainterRecipe
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
import ru.dbotthepony.mc.otm.registry.MRegistry
|
||||
import java.util.function.Consumer
|
||||
|
||||
private val Item.recipeName get() = registryName!!.namespace + "/" + registryName!!.path
|
||||
|
||||
@ -22,11 +19,11 @@ private fun generate(consumer: RecipeOutput, items: Map<out DyeColor?, Item>, am
|
||||
for ((targetColor, targetItem) in items) {
|
||||
if (targetColor == null) continue
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/" + targetItem.recipeName), PainterRecipe(
|
||||
Ingredient.of(items.entries.stream().filter { it.key != null && it.key != targetColor }.map { ItemStack(it.value) }),
|
||||
ItemStack(targetItem),
|
||||
mapOf(targetColor to amount)
|
||||
).toFinished(modLocation("painter/" + targetItem.recipeName)))
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,31 +36,31 @@ private fun generate(consumer: RecipeOutput, default: Item, items: Map<out DyeCo
|
||||
for ((k1, v1) in items) {
|
||||
if (k1 == null) continue
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/" + default.recipeName + "/" + v1.recipeName), PainterRecipe(
|
||||
Ingredient.of(default),
|
||||
ItemStack(v1),
|
||||
mapOf(k1 to amount)
|
||||
).toFinished(modLocation("painter/" + default.recipeName + "/" + v1.recipeName)))
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
private fun cleaning(consumer: RecipeOutput, to: Item, from: Map<out DyeColor?, Item>) {
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/cleaning/" + to.recipeName), PainterRecipe(
|
||||
Ingredient.of(from.entries.stream().filter { it.key != null }.map { ItemStack(it.value) }),
|
||||
ItemStack(to),
|
||||
mapOf(null to 15)
|
||||
).toFinished(modLocation("painter/cleaning/" + to.recipeName)))
|
||||
))
|
||||
}
|
||||
|
||||
private fun striped(consumer: RecipeOutput, name: String, items: List<Pair<Item, Pair<DyeColor, DyeColor>>>, base: Map<DyeColor, Item>) {
|
||||
for ((stripeItem, colors) in items) {
|
||||
val (baseColor, stripe) = colors
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/stripes_$name/${baseColor.getName()}/${stripe.getName()}"), PainterRecipe(
|
||||
Ingredient.of(base[baseColor]),
|
||||
ItemStack(stripeItem),
|
||||
setOf(stripe)
|
||||
).toFinished(modLocation("painter/stripes_$name/${baseColor.getName()}/${stripe.getName()}")))
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
@ -318,32 +315,32 @@ fun addPainterRecipes(consumer: RecipeOutput) {
|
||||
striped(consumer, "slabs", MRegistry.TRITANIUM_STRIPED_SLAB.itemsWithColor, MRegistry.TRITANIUM_SLAB.items)
|
||||
|
||||
for (color in DyeColor.entries) {
|
||||
consumer.accept(PainterArmorDyeRecipe(mapOf(color to 1)).toFinished(modLocation("painter/armor_dye_" + color.getName().lowercase())))
|
||||
consumer.accept(modLocation("painter/armor_dye_" + color.getName().lowercase()), PainterArmorDyeRecipe(mapOf(color to 1)))
|
||||
}
|
||||
|
||||
consumer.accept(PainterArmorDyeRecipe(mapOf(null to 15)).toFinished(modLocation("painter/armor_clear_dye")))
|
||||
consumer.accept(modLocation("painter/armor_clear_dye"), PainterArmorDyeRecipe(mapOf(null to 15)))
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/tritanium_yellow_stripe"), PainterRecipe(
|
||||
Ingredient.of(MRegistry.TRITANIUM_BLOCK.item),
|
||||
ItemStack(MItems.TRITANIUM_STRIPED_BLOCK),
|
||||
mapOf(DyeColor.YELLOW to 1)
|
||||
).toFinished(modLocation("painter/tritanium_yellow_stripe")))
|
||||
))
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/tritanium_yellow_stripe_stairs"), PainterRecipe(
|
||||
Ingredient.of(MRegistry.TRITANIUM_STAIRS.item),
|
||||
ItemStack(MItems.TRITANIUM_STRIPED_STAIRS),
|
||||
mapOf(DyeColor.YELLOW to 1)
|
||||
).toFinished(modLocation("painter/tritanium_yellow_stripe_stairs")))
|
||||
))
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/tritanium_yellow_stripe_slab"), PainterRecipe(
|
||||
Ingredient.of(MRegistry.TRITANIUM_SLAB.item),
|
||||
ItemStack(MItems.TRITANIUM_STRIPED_SLAB),
|
||||
mapOf(DyeColor.YELLOW to 1)
|
||||
).toFinished(modLocation("painter/tritanium_yellow_stripe_slab")))
|
||||
))
|
||||
|
||||
consumer.accept(PainterRecipe(
|
||||
consumer.accept(modLocation("painter/tritanium_yellow_stripe_wall"), PainterRecipe(
|
||||
Ingredient.of(MRegistry.TRITANIUM_WALL.item),
|
||||
ItemStack(MItems.TRITANIUM_STRIPED_WALL),
|
||||
mapOf(DyeColor.YELLOW to 1)
|
||||
).toFinished(modLocation("painter/tritanium_yellow_stripe_wall")))
|
||||
))
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
import net.minecraft.util.valueproviders.ConstantFloat
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
@ -25,5 +25,5 @@ fun addPlatePressRecipes(provider: MatteryRecipeProvider) {
|
||||
}
|
||||
|
||||
provider.plate("carbon", result = Ingredient.of(MItemTags.CARBON_PLATES), ingredient = Ingredient.of(Items.COAL), workTicks = 140, experience = ConstantFloat.of(0.3f))
|
||||
provider.plate("circuit_plating", result = Ingredient.of(MItems.CIRCUIT_PLATING), ingredient = Ingredient.of(Tags.Items.SAND), workTicks = 120, experience = ConstantFloat.of(0.2f))
|
||||
provider.plate("circuit_plating", result = Ingredient.of(MItems.CIRCUIT_PLATING), ingredient = Ingredient.of(Tags.Items.SANDS), workTicks = 120, experience = ConstantFloat.of(0.2f))
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
import net.minecraft.world.level.ItemLike
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import ru.dbotthepony.mc.otm.datagen.modLocation
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import net.minecraft.data.recipes.RecipeCategory
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.recipe.UpgradeRecipe
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
@ -26,7 +26,7 @@ fun addStorageItemRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.BATTERY_NORMAL, category = RecipeCategory.MISC)
|
||||
.setUpgradeSource(MItems.BATTERY_BASIC)
|
||||
.addUpgradeOps(UpgradeRecipe.All)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
|
||||
.rowB(MItems.ELECTRIC_PARTS)
|
||||
.row(MItemTags.COPPER_WIRES, MItems.BATTERY_BASIC, MItemTags.COPPER_WIRES)
|
||||
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE)
|
||||
@ -34,7 +34,7 @@ fun addStorageItemRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.BATTERY_DENSE, category = RecipeCategory.MISC)
|
||||
.setUpgradeSource(MItems.BATTERY_NORMAL)
|
||||
.addUpgradeOps(UpgradeRecipe.All)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
|
||||
.row(Tags.Items.DUSTS_REDSTONE, MItems.ENERGY_BUS, Tags.Items.DUSTS_REDSTONE)
|
||||
.row(MItemTags.GOLD_WIRES, MItems.BATTERY_NORMAL, MItemTags.GOLD_WIRES)
|
||||
.row(Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE, Tags.Items.DUSTS_REDSTONE)
|
||||
@ -42,7 +42,7 @@ fun addStorageItemRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.BATTERY_CAPACITOR, category = RecipeCategory.MISC)
|
||||
.setUpgradeSource(MItems.BATTERY_NORMAL)
|
||||
.addUpgradeOps(UpgradeRecipe.All)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
|
||||
.row(Tags.Items.DUSTS_REDSTONE, MItems.ENERGY_BUS, Tags.Items.DUSTS_REDSTONE)
|
||||
.row(MItemTags.GOLD_WIRES, MItems.BATTERY_NORMAL, MItemTags.GOLD_WIRES)
|
||||
.row(MItemTags.GOLD_WIRES, Tags.Items.DUSTS_REDSTONE, MItemTags.GOLD_WIRES)
|
||||
@ -56,7 +56,7 @@ fun addStorageItemRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.MATTER_CAPACITOR_NORMAL, category = RecipeCategory.MISC)
|
||||
.setUpgradeSource(MItems.MATTER_CAPACITOR_BASIC)
|
||||
.addUpgradeOps(UpgradeRecipe.All)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
|
||||
.rowB(MItems.MATTER_CAPACITOR_PARTS)
|
||||
.row(MItemTags.TRITANIUM_PLATES, MItems.MATTER_CAPACITOR_BASIC, MItemTags.TRITANIUM_PLATES)
|
||||
.rowB(Tags.Items.GEMS_DIAMOND)
|
||||
@ -65,7 +65,7 @@ fun addStorageItemRecipes(consumer: RecipeOutput) {
|
||||
|
||||
MatteryRecipe(MItems.MATTER_CAPACITOR_DENSE, category = RecipeCategory.MISC)
|
||||
.setUpgradeSource(MItems.MATTER_CAPACITOR_NORMAL)
|
||||
.addUpgradeOps(UpgradeRecipe.All)
|
||||
.addUpgradeOps(UpgradeRecipe.CopyAllComponents)
|
||||
.row(MItems.MATTER_CAPACITOR_PARTS, MItemTags.HARDENED_GLASS, MItems.MATTER_CAPACITOR_PARTS)
|
||||
.row(MItemTags.TRITANIUM_PLATES, MItems.MATTER_CAPACITOR_NORMAL, MItemTags.TRITANIUM_PLATES)
|
||||
.rowAC(Tags.Items.ENDER_PEARLS, Tags.Items.ENDER_PEARLS)
|
||||
|
@ -2,7 +2,7 @@ package ru.dbotthepony.mc.otm.datagen.recipes
|
||||
|
||||
import net.minecraft.data.recipes.RecipeCategory
|
||||
import net.minecraft.data.recipes.RecipeOutput
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.registry.MItemTags
|
||||
import ru.dbotthepony.mc.otm.registry.MItems
|
||||
|
||||
|
@ -8,7 +8,8 @@ import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.Tiers
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraft.world.level.block.Blocks
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.registry.MBlockTags
|
||||
import ru.dbotthepony.mc.otm.registry.MBlocks
|
||||
import ru.dbotthepony.mc.otm.registry.MFluids
|
||||
@ -118,13 +119,11 @@ fun addTags(tagsProvider: TagsProvider) {
|
||||
tagsProvider.items.Appender(MItemTags.TRITANIUM_NUGGETS).add(MItems.TRITANIUM_NUGGET)
|
||||
tagsProvider.items.Appender(MItemTags.NUGGETS).add(MItems.TRITANIUM_NUGGET)
|
||||
|
||||
tagsProvider.items.Appender(Tags.Items.ARMORS_HELMETS)
|
||||
// TODO: is new tag appropriate for modded armors?
|
||||
tagsProvider.items.Appender(Tags.Items.ARMORS)
|
||||
.add(MItems.TRITANIUM_HELMET, MItems.SIMPLE_TRITANIUM_HELMET)
|
||||
tagsProvider.items.Appender(Tags.Items.ARMORS_CHESTPLATES)
|
||||
.add(MItems.TRITANIUM_CHESTPLATE, MItems.SIMPLE_TRITANIUM_CHESTPLATE, MItems.PORTABLE_GRAVITATION_STABILIZER)
|
||||
tagsProvider.items.Appender(Tags.Items.ARMORS_LEGGINGS)
|
||||
.add(MItems.TRITANIUM_PANTS, MItems.SIMPLE_TRITANIUM_PANTS)
|
||||
tagsProvider.items.Appender(Tags.Items.ARMORS_BOOTS)
|
||||
.add(MItems.TRITANIUM_BOOTS, MItems.SIMPLE_TRITANIUM_BOOTS)
|
||||
|
||||
tagsProvider.items.Appender(ItemTags.TRIMMABLE_ARMOR).add(MItems.SIMPLE_TRITANIUM_ARMOR)
|
||||
@ -135,8 +134,8 @@ fun addTags(tagsProvider: TagsProvider) {
|
||||
tagsProvider.items.Appender(ItemTags.PICKAXES).add(MItems.TRITANIUM_PICKAXE)
|
||||
tagsProvider.items.Appender(ItemTags.SHOVELS).add(MItems.TRITANIUM_SHOVEL)
|
||||
tagsProvider.items.Appender(ItemTags.SHOVELS).add(MItems.TRITANIUM_HOE)
|
||||
tagsProvider.items.Appender(Tags.Items.SHEARS).add(MItems.TRITANIUM_SHEARS)
|
||||
tagsProvider.items.Appender(Tags.Items.TOOLS_SHIELDS).add(MItems.TRITANIUM_SHIELD)
|
||||
tagsProvider.items.Appender(Tags.Items.TOOLS_SHEAR).add(MItems.TRITANIUM_SHEARS)
|
||||
tagsProvider.items.Appender(Tags.Items.TOOLS_SHIELD).add(MItems.TRITANIUM_SHIELD)
|
||||
|
||||
tagsProvider.items.Appender(MItemTags.TOOLS_HAMMERS).add(MItems.EXPLOSIVE_HAMMER)
|
||||
tagsProvider.items.forge("tools").add(MItemTags.TOOLS_HAMMERS)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package ru.dbotthepony.mc.otm.datagen.tags
|
||||
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArraySet
|
||||
import net.minecraft.core.Holder
|
||||
import net.minecraft.core.HolderLookup
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
@ -14,11 +15,11 @@ import net.minecraft.world.item.Item
|
||||
import net.minecraft.world.item.Tier
|
||||
import net.minecraft.world.item.Tiers
|
||||
import net.minecraft.world.level.block.Block
|
||||
import net.minecraftforge.common.Tags
|
||||
import net.minecraftforge.data.event.GatherDataEvent
|
||||
import net.minecraftforge.registries.ForgeRegistries
|
||||
import net.minecraftforge.registries.IForgeRegistry
|
||||
import net.neoforged.neoforge.common.Tags
|
||||
import net.neoforged.neoforge.data.event.GatherDataEvent
|
||||
import net.neoforged.neoforge.registries.NeoForgeRegistries
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryPlayer
|
||||
import ru.dbotthepony.mc.otm.core.ResourceLocation
|
||||
import ru.dbotthepony.mc.otm.datagen.DataGen
|
||||
import java.util.stream.Stream
|
||||
import net.minecraft.data.tags.TagsProvider as MinecraftTagsProvider
|
||||
@ -30,7 +31,7 @@ private fun <T : Any> vanillaLookup(key: ResourceKey<Registry<T>>): (T) -> Resou
|
||||
|
||||
class TagsProvider(private val event: GatherDataEvent) {
|
||||
inner class Delegate<T : Any> private constructor(key: ResourceKey<Registry<T>>, val lookup: (T) -> ResourceLocation) : MinecraftTagsProvider<T>(event.generator.packOutput, key, event.lookupProvider, DataGen.MOD_ID, event.existingFileHelper) {
|
||||
constructor(registry: IForgeRegistry<T>) : this(registry.registryKey, { registry.getKey(it) ?: throw NoSuchElementException("Registry $registry does not contain $it") })
|
||||
constructor(registry: Registry<T>) : this(registry.key() as ResourceKey<Registry<T>>, { registry.getKey(it) ?: throw NoSuchElementException("$it is not registered in $registry") })
|
||||
constructor(key: ResourceKey<Registry<T>>) : this(key, vanillaLookup(key))
|
||||
|
||||
init {
|
||||
@ -92,6 +93,11 @@ class TagsProvider(private val event: GatherDataEvent) {
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(vararg values: Holder<T>): Appender {
|
||||
for (value in values) add(value.key ?: throw IllegalArgumentException("Intrusive holder"))
|
||||
return this
|
||||
}
|
||||
|
||||
fun add(vararg values: TagKey<T>): Appender {
|
||||
for (value in values) add(value)
|
||||
return this
|
||||
@ -165,11 +171,11 @@ class TagsProvider(private val event: GatherDataEvent) {
|
||||
}
|
||||
}
|
||||
|
||||
val blocks = Delegate(ForgeRegistries.BLOCKS)
|
||||
val items = Delegate(ForgeRegistries.ITEMS)
|
||||
val fluids = Delegate(ForgeRegistries.FLUIDS)
|
||||
val fluidTypes = Delegate(ForgeRegistries.Keys.FLUID_TYPES)
|
||||
val mobEffects = Delegate(ForgeRegistries.MOB_EFFECTS)
|
||||
val blocks = Delegate(BuiltInRegistries.BLOCK)
|
||||
val items = Delegate(BuiltInRegistries.ITEM)
|
||||
val fluids = Delegate(BuiltInRegistries.FLUID)
|
||||
val fluidTypes = Delegate(NeoForgeRegistries.Keys.FLUID_TYPES)
|
||||
val mobEffects = Delegate(BuiltInRegistries.MOB_EFFECT)
|
||||
val damageTypes = Delegate(Registries.DAMAGE_TYPE)
|
||||
|
||||
val androidImmuneEffects = mobEffects.Appender(MatteryPlayer.ANDROID_IMMUNE_EFFECTS)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package ru.dbotthepony.mc.otm.recipe
|
||||
|
||||
import com.mojang.serialization.Codec
|
||||
import com.mojang.serialization.MapCodec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import net.minecraft.core.HolderLookup
|
||||
@ -11,6 +12,7 @@ import net.minecraft.network.codec.StreamCodec
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.StringRepresentable
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.component.CustomData
|
||||
import net.minecraft.world.item.crafting.CraftingBookCategory
|
||||
import net.minecraft.world.item.crafting.CraftingInput
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer
|
||||
@ -19,7 +21,9 @@ import net.minecraft.world.item.crafting.ShapedRecipePattern
|
||||
import net.minecraft.world.item.enchantment.ItemEnchantments
|
||||
import net.minecraft.world.level.Level
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||
import ru.dbotthepony.mc.otm.core.nbt.set
|
||||
import ru.dbotthepony.mc.otm.core.registryName
|
||||
import java.util.Optional
|
||||
|
||||
class UpgradeRecipe(
|
||||
group: String,
|
||||
@ -39,6 +43,14 @@ class UpgradeRecipe(
|
||||
).apply(it) { CopyComponent(it) }
|
||||
}
|
||||
},
|
||||
COPY_TILE_COMPONENT {
|
||||
override val codec: MapCodec<CopyTileComponent> = RecordCodecBuilder.mapCodec {
|
||||
it.group(
|
||||
Codec.STRING.fieldOf("source").forGetter(CopyTileComponent::source),
|
||||
Codec.STRING.optionalFieldOf("destination").forGetter { if (it.source == it.destination) Optional.empty() else Optional.of(it.destination) },
|
||||
).apply(it) { a, b -> CopyTileComponent(a, b.orElse(a)) }
|
||||
}
|
||||
},
|
||||
COPY_ALL_COMPONENTS {
|
||||
override val codec: MapCodec<CopyAllComponents> = MapCodec.unit(CopyAllComponents)
|
||||
},
|
||||
@ -81,6 +93,29 @@ class UpgradeRecipe(
|
||||
}
|
||||
}
|
||||
|
||||
data class CopyTileComponent(val source: String, val destination: String = source) : Op() {
|
||||
override val type: OpType
|
||||
get() = OpType.COPY_TILE_COMPONENT
|
||||
|
||||
override fun apply(
|
||||
source: ItemStack,
|
||||
container: CraftingInput,
|
||||
registry: HolderLookup.Provider,
|
||||
destination: ItemStack
|
||||
) {
|
||||
if (!source.has(DataComponents.BLOCK_ENTITY_DATA))
|
||||
return
|
||||
|
||||
val sourceTag = source[DataComponents.BLOCK_ENTITY_DATA]!!.unsafe[this.source]?.copy() ?: return
|
||||
|
||||
destination[DataComponents.BLOCK_ENTITY_DATA] = destination.getOrDefault(DataComponents.BLOCK_ENTITY_DATA, CustomData.EMPTY).let {
|
||||
val copy = it.copyTag()
|
||||
copy[this.destination] = sourceTag
|
||||
CustomData.of(copy)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
object CopyAllComponents : Op() {
|
||||
override val type: OpType
|
||||
get() = OpType.COPY_ALL_COMPONENTS
|
||||
|
Loading…
Reference in New Issue
Block a user