95 lines
3 KiB
JavaScript
Executable file
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/svg/blood.svg`,
|
|
description: 'The Blood domain.'
|
|
},
|
|
'dread': {
|
|
id: 'dread',
|
|
label: 'Dread',
|
|
src: `modules/${MODULE_ID}/icons/svg/dread.svg`,
|
|
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);
|
|
}
|
|
}
|
|
}
|