diff --git a/common/src/main/kotlin/quaedam/Quaedam.kt b/common/src/main/kotlin/quaedam/Quaedam.kt index 5d60431..14b6355 100644 --- a/common/src/main/kotlin/quaedam/Quaedam.kt +++ b/common/src/main/kotlin/quaedam/Quaedam.kt @@ -5,6 +5,7 @@ import dev.architectury.registry.registries.DeferredRegister import dev.architectury.registry.registries.RegistrySupplier import net.minecraft.core.registries.Registries import net.minecraft.network.chat.Component +import net.minecraft.resources.ResourceLocation import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items @@ -27,6 +28,7 @@ object Quaedam { val schedules = DeferredRegister.create(ID, Registries.SCHEDULE)!! val memoryTypes = DeferredRegister.create(ID, Registries.MEMORY_MODULE_TYPE)!! val sensors = DeferredRegister.create(ID, Registries.SENSOR_TYPE)!! + val soundEvents = DeferredRegister.create(ID, Registries.SOUND_EVENT)!! val projectionEffects = DeferredRegister.create(ID, ProjectionEffectType.registryKey)!! val creativeModeTab: RegistrySupplier = creativeModeTabs.register("quaedam") { @@ -52,7 +54,10 @@ object Quaedam { schedules.register() memoryTypes.register() sensors.register() + soundEvents.register() projectionEffects.register() } + fun resource(path: String) = ResourceLocation(ID, path) + } \ No newline at end of file diff --git a/common/src/main/kotlin/quaedam/projection/swarm/ProjectedPersonEntity.kt b/common/src/main/kotlin/quaedam/projection/swarm/ProjectedPersonEntity.kt index 6cb6832..75bb6c9 100644 --- a/common/src/main/kotlin/quaedam/projection/swarm/ProjectedPersonEntity.kt +++ b/common/src/main/kotlin/quaedam/projection/swarm/ProjectedPersonEntity.kt @@ -12,6 +12,7 @@ import net.minecraft.network.syncher.EntityDataAccessor import net.minecraft.network.syncher.EntityDataSerializers import net.minecraft.network.syncher.SynchedEntityData import net.minecraft.server.level.ServerLevel +import net.minecraft.sounds.SoundEvent import net.minecraft.world.DifficultyInstance import net.minecraft.world.SimpleContainer import net.minecraft.world.entity.* @@ -52,6 +53,11 @@ class ProjectedPersonEntity(entityType: EntityType, level: Le val dataShape = SynchedEntityData.defineId(ProjectedPersonEntity::class.java, EntityDataSerializers.COMPOUND_TAG) + const val SOUND_NOISE_ID = "entity.projected_person.noise" + val soundNoise = Quaedam.soundEvents.register(SOUND_NOISE_ID) { + SoundEvent.createVariableRangeEvent(Quaedam.resource(SOUND_NOISE_ID)) + }!! + init { EntityAttributeRegistry.register(entity, ::createAttributes) if (Platform.getEnv() == EnvType.CLIENT) ProjectedPersonRenderer @@ -233,4 +239,18 @@ class ProjectedPersonEntity(entityType: EntityType, level: Le super.isSilent() && Projector.findNearbyProjections(level(), blockPosition(), SoundProjection.effect.get()).isNotEmpty() + override fun getAmbientSound(): SoundEvent? { + if (Projector.findNearbyProjections(level(), blockPosition(), SoundProjection.effect.get()).isNotEmpty()) { + // sound projection available + return soundNoise.get() + } + return null + } + + override fun getSoundVolume() = super.getSoundVolume() * (random.nextFloat() * 0.5f + 0.6f) + + override fun getVoicePitch() = super.getVoicePitch() * (random.nextFloat() * 0.4f + 0.8f) + + override fun getAmbientSoundInterval() = -(160 + random.nextInt(1000 - 160)) + } \ No newline at end of file diff --git a/common/src/main/resources/assets/quaedam/sounds.json b/common/src/main/resources/assets/quaedam/sounds.json index e69de29..d5a239a 100644 --- a/common/src/main/resources/assets/quaedam/sounds.json +++ b/common/src/main/resources/assets/quaedam/sounds.json @@ -0,0 +1,61 @@ +{ + "entity.projected_person.noise": { + "sounds": [ + { + "name": "entity.villager.ambient", + "weight": 4, + "type": "event" + }, + { + "name": "entity.villager.yes", + "weight": 2, + "type": "event" + }, + { + "name": "entity.villager.no", + "weight": 1, + "type": "event" + }, + { + "name": "entity.villager.trade", + "weight": 3, + "type": "event" + }, + { + "name": "entity.villager.work_librarian", + "weight": 2, + "type": "event" + }, + { + "name": "entity.villager.work_cleric", + "weight": 2, + "type": "event" + }, + { + "name": "entity.villager.work_mason", + "weight": 2, + "type": "event" + }, + { + "name": "entity.villager.work_shepherd", + "weight": 2, + "type": "event" + }, + { + "name": "entity.wandering_trader.drink_milk", + "weight": 1, + "type": "event" + }, + { + "name": "entity.wandering_trader.no", + "weight": 2, + "type": "event" + }, + { + "name": "entity.wandering_trader.yes", + "weight": 3, + "type": "event" + } + ] + } +} \ No newline at end of file