From 4aca29d6c2f9d4adb98234d5fa40e084548198b7 Mon Sep 17 00:00:00 2001 From: Carlos Fernandez Date: Tue, 2 Dec 2025 05:16:56 -0500 Subject: [PATCH] Check item validity when creating on an actor --- module/data/actor/adversary.mjs | 4 ++++ module/data/actor/companion.mjs | 4 ++++ module/data/actor/environment.mjs | 4 ++++ module/data/actor/party.mjs | 4 ++++ module/documents/item.mjs | 7 +++++++ 5 files changed, 23 insertions(+) diff --git a/module/data/actor/adversary.mjs b/module/data/actor/adversary.mjs index 7d9ac951..bb8df3ee 100644 --- a/module/data/actor/adversary.mjs +++ b/module/data/actor/adversary.mjs @@ -141,6 +141,10 @@ export default class DhpAdversary extends BaseDataActor { return this.parent.items.filter(x => x.type === 'feature'); } + isItemValid(source) { + return source.type === "feature"; + } + async _preUpdate(changes, options, user) { const allowed = await super._preUpdate(changes, options, user); if (allowed === false) return false; diff --git a/module/data/actor/companion.mjs b/module/data/actor/companion.mjs index a66cd028..a0ae9523 100644 --- a/module/data/actor/companion.mjs +++ b/module/data/actor/companion.mjs @@ -108,6 +108,10 @@ export default class DhCompanion extends BaseDataActor { get proficiency() { return this.partner?.system?.proficiency ?? 1; } + + isItemValid() { + return false; + } prepareBaseData() { this.attack.roll.bonus = this.partner?.system?.spellcastModifier ?? 0; diff --git a/module/data/actor/environment.mjs b/module/data/actor/environment.mjs index ce1df7cd..4ed3819e 100644 --- a/module/data/actor/environment.mjs +++ b/module/data/actor/environment.mjs @@ -51,4 +51,8 @@ export default class DhEnvironment extends BaseDataActor { get features() { return this.parent.items.filter(x => x.type === 'feature'); } + + isItemValid(source) { + return source.type === "feature"; + } } diff --git a/module/data/actor/party.mjs b/module/data/actor/party.mjs index 18fe9959..b306c486 100644 --- a/module/data/actor/party.mjs +++ b/module/data/actor/party.mjs @@ -25,6 +25,10 @@ export default class DhParty extends BaseDataActor { /* -------------------------------------------- */ + isItemValid(source) { + return ["weapon", "armor", "consumable", "loot"].includes(source.type); + } + prepareBaseData() { super.prepareBaseData(); diff --git a/module/documents/item.mjs b/module/documents/item.mjs index 33daf52a..2c6d68b5 100644 --- a/module/documents/item.mjs +++ b/module/documents/item.mjs @@ -28,6 +28,13 @@ export default class DHItem extends foundry.documents.Item { return doc; } + static async createDocuments(sources, operation) { + // Ensure that items being created are valid to the actor its being added to + const actor = operation.parent; + sources = actor?.system?.isItemValid ? sources.filter((s) => actor.system.isItemValid(s)) : sources; + return super.createDocuments(sources, operation); + } + /* -------------------------------------------- */ /** @inheritDoc */