daggerheart-voidborne/scripts/voidborne.js

95 lines
3 KiB
JavaScript
Executable file

// Import generic features from the library file
import * as VoidFeatures from './features.js';
const MODULE_ID = 'daggerheart-voidborne';
console.log(`${MODULE_ID} | Module JS Loaded`);
Hooks.once('init', () => {
console.log(`${MODULE_ID} | Initializing The Void (Unofficial)`);
// Expose the Void features globally
// This allows Void.ComboStrikes(), Void.NewFunction(), etc.
window.Void = window.Void || {};
// Assign all exported functions from features.js to window.Void
Object.assign(window.Void, VoidFeatures);
console.log(`${MODULE_ID} | Void features registered:`, Object.keys(VoidFeatures));
});
Hooks.on('ready', async () => {
// Only run if the system is Daggerheart
if (game.system.id !== 'daggerheart') return;
// Register Blood and Dread domains in system settings
await registerVoidDomains();
});
async function registerVoidDomains() {
// Access Daggerheart Homebrew Settings
// The system stores homebrew config in a setting named 'Homebrew' (case sensitive check needed)
// Check if the setting exists
let homebrewSettings;
try {
homebrewSettings = game.settings.get('daggerheart', 'Homebrew');
} catch (e) {
try {
homebrewSettings = game.settings.get('daggerheart', 'homebrew');
} catch (e2) {
console.warn(`${MODULE_ID} | Could not find Daggerheart 'Homebrew' or 'homebrew' setting.`);
return;
}
}
if (!homebrewSettings) return;
const domainData = {
'blood': {
id: 'blood',
label: 'Blood',
src: `modules/${MODULE_ID}/icons/blood.png`,
description: 'The Blood domain.'
},
'dread': {
id: 'dread',
label: 'Dread',
src: `modules/${MODULE_ID}/icons/dread.png`,
description: 'The Dread domain.'
}
};
let updates = false;
// user domains are in homebrewSettings.domains
const currentDomains = { ...(homebrewSettings.domains || {}) };
for (const [key, data] of Object.entries(domainData)) {
if (!currentDomains[key]) {
console.log(`${MODULE_ID} | Registering missing domain: ${data.label}`);
currentDomains[key] = data;
updates = true;
}
}
if (updates) {
// Update the setting
try {
// We need to keep the structure of homebrewSettings intact
const newSettings = {
...homebrewSettings,
domains: currentDomains
};
// We need to know the Key used to set it.
let key = 'Homebrew';
if (game.settings.settings.has('daggerheart.homebrew')) key = 'homebrew';
await game.settings.set('daggerheart', key, newSettings);
ui.notifications.info(`${MODULE_ID} | Registered missing domains (Blood/Dread) in Homebrew Settings.`);
} catch (err) {
console.error(`${MODULE_ID} | Failed to update settings:`, err);
}
}
}