refactor: prevent creating items in actors that cannot own them
Some checks failed
ci/woodpecker/pr/checks Pipeline failed

This commit is contained in:
Johannes Loher 2023-07-27 01:06:24 +02:00
parent 8a5fa072ce
commit 43ae0164a8
Signed by: saluu
GPG key ID: 7CB0A9FB553DA045
3 changed files with 26 additions and 21 deletions

View file

@ -457,27 +457,6 @@ export class DS4ActorSheet extends ActorSheet {
this.actor.updateEmbeddedDocuments("Item", updates);
}
/**
* @param {DragEvent} event
* @param {object} data
* @override
*/
async _onDropItem(event, data) {
const item = await Item.implementation.fromDropData(data);
if (item && !this.actor.canOwnItemType(item.type)) {
notifications.warn(
getGame().i18n.format("DS4.WarningActorCannotOwnItem", {
actorName: this.actor.name,
actorType: this.actor.type,
itemName: item.name,
itemType: item.type,
}),
);
return false;
}
return super._onDropItem(event, data);
}
}
/**

View file

@ -4,12 +4,14 @@
import { registerForHotbarDropHook } from "./hotbar-drop";
import { registerForInitHook } from "./init";
import { registerForPreCreateItemHook } from "./pre-create-item";
import { registerForReadyHook } from "./ready";
import { registerForRenderHooks } from "./render";
import { registerForSetupHook } from "./setup";
export function registerForHooks(): void {
registerForHotbarDropHook();
registerForPreCreateItemHook();
registerForInitHook();
registerForReadyHook();
registerForRenderHooks();

View file

@ -0,0 +1,24 @@
import { notifications } from "../ui/notifications.js";
import { getGame } from "../utils/utils.js";
export function registerForPreCreateItemHook() {
Hooks.on("preCreateItem", preCreateItem);
}
/**
* @param {import('../documents/item/item.js').DS4Item} item
* @returns {void | false}
*/
function preCreateItem(item) {
if (item.parent instanceof Actor && !item.parent.canOwnItemType(item.type)) {
notifications.warn(
getGame().i18n.format("DS4.WarningActorCannotOwnItem", {
actorName: item.actor.name,
actorType: item.actor.type,
itemName: item.name,
itemType: item.type,
}),
);
return false;
}
}