diff --git a/langs/en-ca.json b/langs/en-ca.json index 580d9db..d103b27 100644 --- a/langs/en-ca.json +++ b/langs/en-ca.json @@ -227,7 +227,8 @@ "error": { "invalid-integer": "You must enter a valid whole number", "item-not-found": "Failed to find an item to delete", - "spell-create-failed": "Failed to create a custom spell" + "spell-create-failed": "Failed to create a custom spell", + "aspect-limit-reached": "You cannot have more than {limit} aspects" } }, "dialogs": { diff --git a/module/documents/Item/Aspect.mjs b/module/documents/Item/Aspect.mjs new file mode 100644 index 0000000..2bd2e31 --- /dev/null +++ b/module/documents/Item/Aspect.mjs @@ -0,0 +1,17 @@ +/** @this {Item} */ +async function _preCreate(data, options, user) { + if (this.parent.itemTypes.aspect.length > 0) { + ui.notifications.error( + game.i18n.format( + `dotdungeon.notification.error.aspect-limit-reached`, + { limit: 1 } + ), + { console: false } + ); + return false; + }; +}; + +export default { + _preCreate, +}; \ No newline at end of file diff --git a/module/documents/Item/Handler.mjs b/module/documents/Item/Handler.mjs new file mode 100644 index 0000000..7b8cd51 --- /dev/null +++ b/module/documents/Item/Handler.mjs @@ -0,0 +1,21 @@ +import AspectItem from "./Aspect.mjs"; + +export class ItemHandler extends Item { + itemTypes = { + aspect: AspectItem, + }; + + constructor(data, ctx) { + super(data, ctx); + }; + + /** @type {class|undefined} */ + get fn() { + return this.itemTypes[this.type]; + }; + + async _preCreate(...args) { + if (!this.fn?._preCreate) return; + return this.fn?._preCreate.bind(this)(...args); + }; +}; diff --git a/module/dotdungeon.mjs b/module/dotdungeon.mjs index b4917a7..1b037dd 100644 --- a/module/dotdungeon.mjs +++ b/module/dotdungeon.mjs @@ -6,6 +6,7 @@ import { SyncData } from "./models/SyncData.mjs"; // Main Documents import { ActorHandler } from "./documents/Actor/Handler.mjs"; +import { ItemHandler } from "./documents/Item/Handler.mjs"; // Character Sheets import { SpellSheet } from "./sheets/SpellSheet.mjs"; @@ -34,6 +35,7 @@ Hooks.once(`init`, () => { CONFIG.Item.dataModels.aspect = AspectItemData; CONFIG.Item.dataModels.spell = SpellItemData; CONFIG.Actor.documentClass = ActorHandler; + CONFIG.Item.documentClass = ItemHandler; CONFIG.DOTDUNGEON = DOTDUNGEON; diff --git a/module/sheets/AspectSheet.mjs b/module/sheets/AspectSheet.mjs index f14d57b..976fa4d 100644 --- a/module/sheets/AspectSheet.mjs +++ b/module/sheets/AspectSheet.mjs @@ -1,4 +1,6 @@ -export class AspectSheet extends ItemSheet { +import { GenericItemSheet } from "./GenericItemSheet.mjs"; + +export class AspectSheet extends GenericItemSheet { static get defaultOptions() { let opts = mergeObject( super.defaultOptions, @@ -21,13 +23,13 @@ export class AspectSheet extends ItemSheet { async getData() { const ctx = {}; - const item = this.item.toObject(false); + const item = this.item; - ctx.name = super.name; ctx.item = item; ctx.system = item.system; ctx.flags = item.flags; + console.log(item.uuid, `context:`, ctx); return ctx; }; }; \ No newline at end of file diff --git a/module/sheets/PlayerSheet.mjs b/module/sheets/PlayerSheet.mjs index 3cfa060..31aed66 100644 --- a/module/sheets/PlayerSheet.mjs +++ b/module/sheets/PlayerSheet.mjs @@ -33,7 +33,7 @@ export class PlayerSheet extends GenericActorSheet { canAddAspect: ctx.items.aspect.length == 0, }; - console.log(ctx) + console.log(actor.uuid, `context:`, ctx) return ctx; }; }; \ No newline at end of file diff --git a/module/sheets/SpellSheet.mjs b/module/sheets/SpellSheet.mjs index e8d63c4..488f159 100644 --- a/module/sheets/SpellSheet.mjs +++ b/module/sheets/SpellSheet.mjs @@ -18,7 +18,7 @@ export class SpellSheet extends GenericItemSheet { super.activateListeners(html); if (!this.isEditable) return; - console.debug(`.dungeon | Adding event listeners for Generic Item: ${this.id}`); + console.debug(`.dungeon | Adding event listeners for Spell Item: ${this.id}`); }; async getData() {