diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt index 37cd0efe8..da93af5c8 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -52,6 +52,7 @@ import ru.dbotthepony.mc.otm.datagen.tags.addDyeTags import ru.dbotthepony.mc.otm.datagen.tags.addEquipmentTags import ru.dbotthepony.mc.otm.datagen.tags.addMineableTags import ru.dbotthepony.mc.otm.datagen.tags.addResourceTags +import ru.dbotthepony.mc.otm.datagen.tags.addStructureTags import ru.dbotthepony.mc.otm.datagen.tags.addSuspiciousTags import ru.dbotthepony.mc.otm.datagen.tags.addTags import ru.dbotthepony.mc.otm.matter.MatterDataProvider @@ -533,6 +534,7 @@ object DataGen { addEquipmentTags(tagsProvider) addMineableTags(tagsProvider) addDyeTags(tagsProvider) + addStructureTags(tagsProvider) event.generator.addProvider(event.includeClient(), blockModelProvider) event.generator.addProvider(event.includeServer(), blockStateProvider) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 801a266c1..47a522393 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -1183,6 +1183,13 @@ private fun jade(provider: MatteryLanguageProvider) { } } +private fun maps(provider: MatteryLanguageProvider) { + with(provider.english) { + map("laboratory", "Laboratory Map") + map("wreckage", "Wreckage Map") + } +} + fun AddEnglishLanguage(provider: MatteryLanguageProvider) { decoratives(provider) sounds(provider) @@ -1199,6 +1206,8 @@ fun AddEnglishLanguage(provider: MatteryLanguageProvider) { jade(provider) + maps(provider) + with(provider.english) { add("itemGroup.otm", "Overdrive That Matters") add("itemGroup.otm_decorative", "Overdrive That Matters Decorative") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt index 87faba8da..a92f5f2bf 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/MatteryLanguageProvider.kt @@ -107,6 +107,8 @@ class MatteryLanguageProvider(private val gen: DataGenerator) { fun jade(key: String, value: String) = slave.add("otm.jade.$key", value) fun jadeloc(key: String, value: String) = slave.add("config.jade.plugin_${DataGen.MOD_ID}.$key", value) + fun map(key: String, value: String) = slave.add("filled_map.otm_$key", value) + inner class Prepended(path: String) { val path = "$path." constructor(vararg path: String) : this(path.joinToString(".")) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 8c2b8ba63..fd30292c9 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -1169,6 +1169,13 @@ private fun jade(provider: MatteryLanguageProvider) { } } +private fun maps(provider: MatteryLanguageProvider) { + with(provider.russian) { + map("laboratory", "Карта лаборатории") + map("wreckage", "Карта кораблекрушения") + } +} + fun AddRussianLanguage(provider: MatteryLanguageProvider) { decoratives(provider) blocks(provider) @@ -1181,4 +1188,5 @@ fun AddRussianLanguage(provider: MatteryLanguageProvider) { death(provider) androidFeatures(provider) jade(provider) + maps(provider) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/StructureTags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/StructureTags.kt new file mode 100644 index 000000000..3e964f0eb --- /dev/null +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/StructureTags.kt @@ -0,0 +1,14 @@ +package ru.dbotthepony.mc.otm.datagen.tags + +import ru.dbotthepony.mc.otm.registry.MStructureTags +import ru.dbotthepony.mc.otm.registry.game.MStructures + +fun addStructureTags(tagsProvider: TagsProvider) { + tagsProvider.structures.Appender(MStructureTags.LABORATORIES).add(MStructures.LABORATORY) + + tagsProvider.structures.Appender(MStructureTags.FIELD_RESEARCH_PODS) + .add(MStructures.FIELD_RESEARCH_POD) + .add(MStructures.FIELD_RESEARCH_POD_RUIN) + + tagsProvider.structures.Appender(MStructureTags.WRECKAGES).add(MStructures.WRECKAGE) +} diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt index 6b5050bc0..e84eeee6d 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/TagsProvider.kt @@ -185,6 +185,7 @@ class TagsProvider(private val event: GatherDataEvent) { val mobEffects = Delegate(BuiltInRegistries.MOB_EFFECT) val entityTypes = Delegate(BuiltInRegistries.ENTITY_TYPE) val damageTypes = Delegate(Registries.DAMAGE_TYPE) + val structures = Delegate(Registries.STRUCTURE) private val coloredItems = EnumMap.Appender>(DyeColor::class.java) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt index c9d4377f1..b020f9548 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/OverdriveThatMatters.kt @@ -241,6 +241,8 @@ object OverdriveThatMatters { FORGE_BUS.addListener(EventPriority.NORMAL, NotNormalFood::onInteract) + FORGE_BUS.addListener(EventPriority.NORMAL, MStructureTags::registerVillagerTrades) + if (isCuriosLoaded) { FORGE_BUS.addListener(EventPriority.NORMAL, ::onCuriosSlotModifiersUpdated) } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MStructureTags.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MStructureTags.kt new file mode 100644 index 000000000..734dcd587 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MStructureTags.kt @@ -0,0 +1,33 @@ +package ru.dbotthepony.mc.otm.registry + +import net.minecraft.core.registries.Registries +import net.minecraft.tags.TagKey +import net.minecraft.world.entity.npc.VillagerProfession +import net.minecraft.world.entity.npc.VillagerTrades +import net.minecraft.world.level.levelgen.structure.Structure +import net.minecraft.world.level.saveddata.maps.MapDecorationTypes +import net.neoforged.neoforge.event.village.VillagerTradesEvent +import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc + +object MStructureTags { + val LABORATORIES = create("laboratories") + val FIELD_RESEARCH_PODS = create("field_research_pods") + val WRECKAGES = create("wreckages") + + fun create(location: String): TagKey { + return TagKey.create(Registries.STRUCTURE, loc(location)) + } + + fun registerVillagerTrades(event: VillagerTradesEvent) { + if (event.type == VillagerProfession.CARTOGRAPHER) { + with (event.trades.get(2)) { + add(VillagerTrades.TreasureMapForEmeralds(10, WRECKAGES, "filled_map.otm_wreckage", + MapDecorationTypes.RED_X, 12, 5)) + } + with (event.trades.get(3)) { + add(VillagerTrades.TreasureMapForEmeralds(25, LABORATORIES, "filled_map.otm_laboratory", + MapDecorationTypes.LIGHT_BLUE_BANNER, 12, 10)) + } + } + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MStructures.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MStructures.kt new file mode 100644 index 000000000..647db47d1 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/game/MStructures.kt @@ -0,0 +1,21 @@ +package ru.dbotthepony.mc.otm.registry.game + +import net.minecraft.core.registries.Registries +import net.minecraft.resources.ResourceKey +import net.minecraft.world.level.levelgen.structure.Structure +import ru.dbotthepony.mc.otm.OverdriveThatMatters.loc + +object MStructures { + val CARGO_CONTAINER = create("cargo_container") + val FIELD_RESEARCH_POD = create("field_research_pod") + val FIELD_RESEARCH_POD_RUIN = create("field_research_pod_ruin") + val FRIGATE = create("frigate") + val FUEL_BASE = create("fuel_base") + val LABORATORY = create("laboratory") + val OCEAN_CONTAINER = create("ocean_container") + val WRECKAGE = create("wreckage") + + fun create(location: String): ResourceKey { + return ResourceKey.create(Registries.STRUCTURE, loc(location)) + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 125b536e7..981907976 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -174,3 +174,5 @@ public net.minecraft.advancements.critereon.InventoryChangeTrigger$TriggerInstan #public-f net.minecraft.advancements.critereon.SimpleCriterionTrigger addPlayerListener(Lnet/minecraft/server/PlayerAdvancements;Lnet/minecraft/advancements/CriterionTrigger$Listener;)V #public-f net.minecraft.advancements.critereon.SimpleCriterionTrigger removePlayerListener(Lnet/minecraft/server/PlayerAdvancements;Lnet/minecraft/advancements/CriterionTrigger$Listener;)V #public-f net.minecraft.advancements.critereon.SimpleCriterionTrigger removePlayerListeners(Lnet/minecraft/server/PlayerAdvancements;)V + +public net.minecraft.world.entity.npc.VillagerTrades$TreasureMapForEmeralds