*
* @param {Internal.SoundEvent_} sound
* @param {Internal.SoundSource_} source
* @param {number} volume
* @param {number} pitch
* @param {boolean} loop
* @param {number} delay
* @param {Internal.SoundInstance$Attenuation_} attenuation
* @param {BlockPos} pos
* @param {boolean} relative
* @returns {Internal.SoundInstance}
*/
const createSoundInstance = (sound, source, volume, pitch, loop, delay, attenuation, pos, relative) => {
const $SimpleSoundInstance = Java.loadClass("net.minecraft.client.resources.sounds.SimpleSoundInstance")
const soundInstance = new $SimpleSoundInstance(sound, source, volume, pitch, Client.level.random, loop, delay, attenuation, pos.x, pos.y, pos.z, relative)
return soundInstance
}
const soundsMap = {
//"gateways:basic/blaze": {
//opening: "kubejs:song_3_intro", ---Placeholder until i turn this into a custom gate
//looping: "kubejs:song_3_loop",
//openingDuration: 1807
//},
"gateways:basic/blaze": {
opening: "kubejs:song_1_intro",
looping: "kubejs:song_1_loop",
openingDuration: 128
},
"gateways:basic/enderman": {
opening: "kubejs:song_1_intro",
looping: "kubejs:song_1_loop",
openingDuration: 128
},
"gateways:basic/slime": {
opening: "kubejs:song_1_intro",
looping: "kubejs:song_1_loop",
openingDuration: 128
},
"gateways:emerald_grove": {
opening: "kubejs:song_1_intro",
looping: "kubejs:song_1_loop",
openingDuration: 128
},
"gateways:hellish_fortress": {
opening: "kubejs:song_1_intro",
looping: "kubejs:song_1_loop",
openingDuration: 128
},
"gateways:overworldian_nights": {
opening: "kubejs:song_1_intro",
looping: "kubejs:song_1_loop",
openingDuration: 128
},
"modpack:custom_gate_1": {
opening: "kubejs:song_2_intro",
looping: "kubejs:song_2_loop",
openingDuration: 4554
},
"gateways:endless/blaze": {
opening: "kubejs:song_2_intro",
looping: "kubejs:song_2_loop",
openingDuration: 4554
}
}
const soundInstances = {}
/** @param {Internal.EntitySpawnedEventJS} event */
const loopMusicForEntity = (event) => {
const {entity, entity:{block:{pos}}} = event
const gateType = entity.nbt.getString("gate")
const soundType = soundsMap[gateType]
if(!soundType) return;
const {opening, looping, openingDuration} = soundType
const soundManager = Client.soundManager
const/**@type {Internal.SoundInstance} */ openingSound = soundInstances["gateStarting"] || createSoundInstance(opening, "master", 2, 1, false, 0, "none", pos, false)
const/**@type {Internal.SoundInstance} */ loopingSound = soundInstances["gateLooping"] || createSoundInstance(looping, "master", 2, 1, true, 0, "none", pos, false)
if(!soundInstances["gateLooping"]) {
soundInstances["gateOpening"] = openingSound
soundInstances["gateLooping"] = loopingSound
soundManager.play(openingSound)
Client.setTimeout(function(){
if(entity.alive) soundManager.play(loopingSound)
}, openingDuration)
}
const checkArmorStandAlive =
Client.scheduleRepeatingInTicks(1, _ => {
if(!entity.alive){
if(soundManager.isActive(openingSound)) soundManager.stop(openingSound)
if(soundManager.isActive(loopingSound)) soundManager.stop(loopingSound)
checkArmorStandAlive.clear()
delete soundInstances["gateOpening"]
delete soundInstances["gateLooping"]
delete checkArmorStandAlive
}
})
}
EntityEvents.spawned("gateways:normal_gateway", event => {
Client.scheduleInTicks(1, _ => loopMusicForEntity(event))
})
EntityEvents.spawned("gateways:endless_gateway", event => {
Client.scheduleInTicks(1, _ => loopMusicForEntity(event))
})```