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 0002abb6a..1f8b49ec1 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -44,13 +44,20 @@ fun modLocation(string: String) = ResourceLocation(DataGen.MOD_ID, string) object DataGen { const val MOD_ID = OverdriveThatMatters.MOD_ID - private lateinit var blockModelProvider: MatteryBlockModelProvider - private lateinit var itemModelProvider: MatteryItemModelProvider - private lateinit var blockStateProvider: MatteryBlockStateProvider - private lateinit var lootTableProvider: LootTables - private lateinit var recipeProvider: MatteryRecipeProvider - private lateinit var lootModifier: LootModifiers - private lateinit var languageProvider: MatteryLanguageProvider + var blockModelProvider: MatteryBlockModelProvider by WriteOnce() + private set + var itemModelProvider: MatteryItemModelProvider by WriteOnce() + private set + var blockStateProvider: MatteryBlockStateProvider by WriteOnce() + private set + var lootTableProvider: LootTables by WriteOnce() + private set + var recipeProvider: MatteryRecipeProvider by WriteOnce() + private set + var lootModifier: LootModifiers by WriteOnce() + private set + var languageProvider: MatteryLanguageProvider by WriteOnce() + private set fun decorativeCubeAll(vararg blocks: Block) { blockModelProvider.decorativeCubeAll(*blocks) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/SoundDataProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/SoundDataProvider.kt index 15dfba907..afe5d6f31 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/SoundDataProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/SoundDataProvider.kt @@ -1,11 +1,16 @@ 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 ru.dbotthepony.mc.otm.registry.MSoundEvents +fun SoundDefinition.subtitle(value: SoundEvent): SoundDefinition { + return subtitle("otm.sound." + value.location.path) +} + class SoundDataProvider(event: GatherDataEvent) : SoundDefinitionsProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) { override fun registerSounds() { add(MSoundEvents.PLASMA_WEAPON_OVERHEAT, @@ -19,5 +24,21 @@ class SoundDataProvider(event: GatherDataEvent) : SoundDefinitionsProvider(event add(MSoundEvents.RIFLE_SHOT, definition().subtitle("otm.sound.rifle_shot") .with(SoundDefinition.Sound.sound(modLocation("item/rifle_shot"), SoundDefinition.SoundType.SOUND))) + + simple(MSoundEvents.CARGO_CRATE_OPEN) + } + + private inline fun add(value: SoundEvent, block: SoundDefinition.() -> Unit) { + add(value, definition().subtitle(value).also(block)) + } + + private fun add(value: SoundEvent, path: String) { + add(value) { + with(SoundDefinition.Sound.sound(modLocation(path), SoundDefinition.SoundType.SOUND)) + } + } + + private fun simple(value: SoundEvent) { + add(value, value.location.path) } } 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 5fbeaf3c2..fae7acd02 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 @@ -44,6 +44,8 @@ private fun sounds(provider: MatteryLanguageProvider) { sound("rifle_shot", "Plasma rifle fires") sound("plasma_weapon_overheat", "Plasma weapon overheats") sound("player_become_android", "Player became android") + + sound(MSoundEvents.CARGO_CRATE_OPEN, "Cargo crate opened") } } 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 7ee15bcb0..49a5bf39c 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 @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap import net.minecraft.data.DataGenerator import net.minecraft.network.chat.MutableComponent import net.minecraft.network.chat.contents.TranslatableContents +import net.minecraft.sounds.SoundEvent import net.minecraft.world.effect.MobEffect import net.minecraft.world.entity.EntityType import net.minecraft.world.item.DyeColor @@ -71,6 +72,7 @@ class MatteryLanguageProvider(private val gen: DataGenerator) { fun misc(key: String, value: String) = slave.add("otm.$key", value) fun gui(key: String, value: String) = slave.add("otm.gui.$key", value) fun sound(key: String, value: String) = slave.add("otm.sound.$key", value) + fun sound(key: SoundEvent, value: String) = slave.add("otm.sound.${key.location.path}", value) } inner class Colors( diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt index f19004f0d..b44c001d3 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/tags/Tags.kt @@ -5,6 +5,7 @@ import net.minecraft.world.item.Tiers import ru.dbotthepony.mc.otm.registry.MBlocks import ru.dbotthepony.mc.otm.registry.MItems import ru.dbotthepony.mc.otm.registry.MRegistry +import ru.dbotthepony.mc.otm.registry.MSoundEvents fun addTags(tagsProvider: TagsProvider) { tagsProvider.items.forge("pistons").add(Items.PISTON) 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 a9c30bacd..bbf0e3876 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 @@ -4,11 +4,13 @@ import it.unimi.dsi.fastutil.objects.ObjectArraySet import net.minecraft.core.Registry import net.minecraft.resources.ResourceLocation import net.minecraft.tags.BlockTags +import net.minecraft.tags.GameEventTags import net.minecraft.tags.TagKey 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.minecraft.world.level.gameevent.GameEvent import net.minecraftforge.data.event.GatherDataEvent import ru.dbotthepony.mc.otm.datagen.DataGen import net.minecraft.data.tags.TagsProvider as MinecraftTagsProvider @@ -211,6 +213,9 @@ class TagsProvider( val rawOres = items.forge("raw_ores") val wires = items.forge("wires") + val gameEvents = Delegate(Registry.GAME_EVENT) + val vibrations = gameEvents.appender(GameEventTags.VIBRATIONS) + init { event.generator.addProvider(true, blocks) event.generator.addProvider(true, items) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/CargoCrateBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/CargoCrateBlockEntity.kt index 2e5f503e1..c7c661762 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/CargoCrateBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/CargoCrateBlockEntity.kt @@ -4,6 +4,7 @@ import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.nbt.CompoundTag import net.minecraft.network.chat.Component +import net.minecraft.sounds.SoundSource import net.minecraft.world.Container import net.minecraft.world.entity.player.Inventory import net.minecraft.world.entity.player.Player @@ -21,6 +22,7 @@ import ru.dbotthepony.mc.otm.menu.CargoCrateMenu import ru.dbotthepony.mc.otm.registry.MBlockEntities import ru.dbotthepony.mc.otm.container.set import ru.dbotthepony.mc.otm.core.set +import ru.dbotthepony.mc.otm.registry.MSoundEvents class CargoCrateBlockEntity( p_155229_: BlockPos, @@ -36,6 +38,7 @@ class CargoCrateBlockEntity( fun onPlayerOpen() { if (interactingPlayers++ == 0) { level?.setBlock(blockPos, blockState.setValue(CargoCrateBlock.IS_OPEN, true), Block.UPDATE_CLIENTS) + level?.playSound(null, blockPos, MSoundEvents.CARGO_CRATE_OPEN, SoundSource.BLOCKS, 1f, 0.8f + (level?.random?.nextFloat() ?: 1f) * 0.2f) } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MSoundEvents.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MSoundEvents.kt index d7e3a0c21..011baf9d0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MSoundEvents.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MSoundEvents.kt @@ -18,6 +18,7 @@ object MSoundEvents { val RIFLE_SHOT: SoundEvent by make("item.rifle_shot") val PLASMA_WEAPON_OVERHEAT: SoundEvent by make("item.plasma_weapon_overheat") val PLAYER_BECOME_ANDROID: SoundEvent by make("player_become_android") + val CARGO_CRATE_OPEN: SoundEvent by make("cargo_crate_open") internal fun register(bus: IEventBus) { registry.register(bus) diff --git a/src/main/resources/assets/overdrive_that_matters/sounds/cargo_crate_open.ogg b/src/main/resources/assets/overdrive_that_matters/sounds/cargo_crate_open.ogg new file mode 100644 index 000000000..ec76a6cba Binary files /dev/null and b/src/main/resources/assets/overdrive_that_matters/sounds/cargo_crate_open.ogg differ