// SPDX-FileCopyrightText: 2021 Johannes Loher // // SPDX-License-Identifier: MIT import { isCheck } from "../actor/actor-data-properties-base"; import { getGame } from "../helpers"; import { DS4Item } from "../item/item"; import { createRollCheckMacro } from "../macros/roll-check"; import { createRollItemMacro } from "../macros/roll-item"; import notifications from "../ui/notifications"; export default function registerForHotbarDropHook(): void { Hooks.on("hotbarDrop", async (hotbar: Hotbar, data: HotbarDropData, slot: string) => { switch (data.type) { case "Item": { if (!isItemDropData(data) || !("data" in data)) { return notifications.warn( getGame().i18n.localize("DS4.WarningMacrosCanOnlyBeCreatedForOwnedItems"), ); } const itemData = data.data; if (!DS4Item.rollableItemTypes.includes(itemData.type)) { return notifications.warn( getGame().i18n.format("DS4.WarningItemIsNotRollable", { name: itemData.name, id: itemData._id, type: itemData.type, }), ); } return createRollItemMacro(itemData, slot); } case "Check": { if (!("data" in data) || typeof data.data !== "string" || !isCheck(data.data)) { return notifications.warn(getGame().i18n.localize("DS4.WarningInvalidCheckDropped")); } return createRollCheckMacro(data.data, slot); } } }); } type HotbarDropData = ActorSheet.DropData.Item | ({ type: string } & Partial>); function isItemDropData(dropData: HotbarDropData): dropData is ActorSheet.DropData.Item { return dropData.type === "Item"; }