From 196ae226b32df5c954e9d538e8c153a7369ed73e Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 24 May 2022 21:49:25 +0200 Subject: [PATCH] sound groups --- .../bixilon/pixlyzer/generator/Generators.kt | 1 + .../generator/generators/BlockGenerator.kt | 9 +--- .../generators/SoundGroupGenerator.kt | 47 +++++++++++++++++++ 3 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 src/main/kotlin/de/bixilon/pixlyzer/generator/generators/SoundGroupGenerator.kt diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/Generators.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/Generators.kt index 845c44b..9f0a8da 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/Generators.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/Generators.kt @@ -11,6 +11,7 @@ import de.bixilon.pixlyzer.generator.generators.variants.FrogVariantGenerator object Generators { val GENERATORS: List = mutableListOf( ArgumentTypeGenerator, + SoundGroupGenerator, CatVariantGenerator, FrogVariantGenerator, diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt index 94b102d..e84a6dd 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/BlockGenerator.kt @@ -71,6 +71,7 @@ object BlockGenerator : Generator( } blockData["class"] = block::class.java.realName + blockData["sound_group"] = SoundGroupGenerator.getId(block.soundGroup) if (block is FluidBlock) { (FLUID_BLOCK_FLUID_FIELD.get(block) as Fluid).let { @@ -144,14 +145,6 @@ object BlockGenerator : Generator( if (state.hasSidedTransparency()) { stateData["has_side_transparency"] = state.hasSidedTransparency() } - stateData["sound_type_volume"] = state.soundGroup.volume - stateData["sound_type_pitch"] = state.soundGroup.pitch - stateData["break_sound_type"] = Registry.SOUND_EVENT.getRawId(state.soundGroup.breakSound) - stateData["step_sound_type"] = Registry.SOUND_EVENT.getRawId(state.soundGroup.stepSound) - stateData["place_sound_type"] = Registry.SOUND_EVENT.getRawId(state.soundGroup.placeSound) - stateData["hit_sound_type"] = Registry.SOUND_EVENT.getRawId(state.soundGroup.hitSound) - stateData["fall_sound_type"] = Registry.SOUND_EVENT.getRawId(state.soundGroup.fallSound) - REQUIRES_CORRECT_TOOL_FOR_DROP_FIELDS?.let { stateData["requires_tool"] = it.getBoolean(state) diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/SoundGroupGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/SoundGroupGenerator.kt new file mode 100644 index 0000000..988c3f3 --- /dev/null +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/SoundGroupGenerator.kt @@ -0,0 +1,47 @@ +package de.bixilon.pixlyzer.generator.generators + +import de.bixilon.pixlyzer.generator.Generator +import de.bixilon.pixlyzer.util.ReflectionUtil.getClass +import de.bixilon.pixlyzer.util.Util.compound +import net.minecraft.sound.BlockSoundGroup +import net.minecraft.util.registry.Registry +import java.lang.reflect.Modifier + +object SoundGroupGenerator : Generator( + "sound_groups", +) { + private val SOUND_GROUP_CLASS = getClass("net.minecraft.sound.BlockSoundGroup") + private var ids: MutableMap = mutableMapOf() + + override fun generate() { + val fields = SOUND_GROUP_CLASS?.fields ?: return + for (field in fields) { + if (!Modifier.isStatic(field.modifiers)) { + continue + } + val data = compound() + val group = field.get(null) as BlockSoundGroup + val id = ids.size + ids[group] = id + + if (group.volume != 1.0f) { + data["sound_type_volume"] = group.volume + } + if (group.volume != 1.0f) { + data["sound_type_pitch"] = group.pitch + } + data["break_sound_type"] = Registry.SOUND_EVENT.getRawId(group.breakSound) + data["step_sound_type"] = Registry.SOUND_EVENT.getRawId(group.stepSound) + data["place_sound_type"] = Registry.SOUND_EVENT.getRawId(group.placeSound) + data["hit_sound_type"] = Registry.SOUND_EVENT.getRawId(group.hitSound) + data["fall_sound_type"] = Registry.SOUND_EVENT.getRawId(group.fallSound) + + this.data[id] = data + } + } + + + fun getId(sound: BlockSoundGroup): Int { + return ids[sound]!! + } +}