From 6f5fc34c59b8936f777840bc5be9370014e7b74b Mon Sep 17 00:00:00 2001 From: Cube14yt Date: Mon, 19 Jan 2026 21:17:35 +0800 Subject: [PATCH] Add files via upload --- mods/background_music.js | 86 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 mods/background_music.js diff --git a/mods/background_music.js b/mods/background_music.js new file mode 100644 index 00000000..9808e9e8 --- /dev/null +++ b/mods/background_music.js @@ -0,0 +1,86 @@ +// Huge WIP +// Will be making an actual UI for this soon +let currentMusic; +/** + * + * @param {string} userURL + */ +function setBackgroundMisic(userURL) { + if (!isValidAudioUrl(userURL)) promptText("Invalid audio url") + else { + const url = new URL(userURL) + if (currentMusic && currentMusic.src === url.href) return; + if (currentMusic) { + currentMusic.pause(); + currentMusic.remove(); + } + const audio = document.createElement('audio'); + audio.src = url.href; + audio.loop = true; + audio.volume = 0.5; + audio.id = "bgm"; + document.body.appendChild(audio); + + currentMusic = audio; + + settings.bgMusic = url.href; + saveSettings(); + logMessage(`Now playing: ${settings.bgMusic}`) + return audio + } +} + +function isValidAudioUrl(inpurl) { + try { + const url = new URL(inpurl); + if (!['http:', 'https:'].includes(url.protocol)) return false; + return /\.(mp3|wav|ogg)$/i.test(url.pathname); + } catch { + return false; + } +} + + +let music_setting; +let play; +dependOn("betterSettings.js", () => { + const settings_tab = new SettingsTab("background_music.js") + music_setting = new Setting("Background Music", "bgm", settingType.TEXT, false) + play = new Setting("Play", "bgm", settingType.BOOLEAN, false) + settings_tab.registerSettings(undefined, music_setting) + settings_tab.registerSettings(undefined, play) + settingsManager.registerTab(settings_tab) +}) + +keybinds["KeyK"] = () => { + if (play) { + play.value = !play.value + clearLog() + !play.value ? logMessage("Pause: ▶") : logMessage("Play: ⏸") + } +} + + +runEveryTick(() => { + if (!play.value) { + currentMusic?.pause(); + return; + } + + const url = music_setting.value; + if (!isValidAudioUrl(url)) return; + + // Only set new music if its different + if (!currentMusic || currentMusic.src !== new URL(url).href) { + setBackgroundMisic(url); + } + + currentMusic?.play()?.catch(() => { + promptConfirm("User input needed to play music", (val) => { + if (!val) { + play.set(false) + play.update() + } + }) + }); +})