Hooks.once("init", function() { console.log("INIT"); CONFIG.Actor.dataModels.Player = DSA41_CharacterData; //DocumentSheetConfig.unregisterSheet(Actor, "core", ActorSheet); DocumentSheetConfig.registerSheet(Actor, "dsa41", DSA41_ActorSheet, { makeDefault: true, types: [ "Player", ] }); //DocumentSheetConfig.unregisterSheet(Item, "core", ItemSheet); DocumentSheetConfig.registerSheet(Item, "dsa41", DSA41_ItemSheet, { makeDefault: true, types: [ "Generic Item", "Melee Weapon", "Ranged Weapon", "Armor", "Shield", ] }); }); const { SchemaField, NumberField, StringField } = foundry.data.fields; class AttributeField extends foundry.data.fields.SchemaField { constructor() { return super({ initial: new NumberField({ integer: true, initial: 8, min: 8, max: 14, }), advancement: new NumberField({ integer: true, initial: 0, min: 0, max: 4, }), modifier: new NumberField({ integer: true, initial: 0, min: 0, }), }); } } class DSA41_CharacterData extends foundry.abstract.TypeDataModel { static defineSchema() { return { race: new StringField(), culture: new StringField(), profession: new StringField(), attributes: new SchemaField({ courage: new AttributeField(), cleverness: new AttributeField(), intuition: new AttributeField(), charisma: new AttributeField(), dexterity: new AttributeField(), agility: new AttributeField(), constitution: new AttributeField(), strength: new AttributeField(), }), } } prepareDerivedData() { super.prepareDerivedData(); this.computed = {}; for (const [attribute, values] of Object.entries(this.attributes)) { this.computed[attribute] = Object.values(values).reduce((a, b) => a + b, 0); } } } class DSA41_ActorSheet extends ActorSheet { get template() { return "systems/dsa-4th-edition/src/ActorSheet.html"; } } class DSA41_ItemSheet extends ItemSheet { get template() { return "systems/dsa-4th-edition/src/ItemSheets/" + this.item.type + ".html"; } }