-
Notifications
You must be signed in to change notification settings - Fork 68
/
magicItemsExtender.js
110 lines (84 loc) · 2.95 KB
/
magicItemsExtender.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import { ActionListExtender } from "./actionListExtender.js";
import * as settings from "../settings.js";
export class MagicItemActionListExtender extends ActionListExtender {
constructor() {
super();
}
/** @override */
extendActionList(actionList, multipleTokens) {
if (multipleTokens) return;
let tokenId = actionList.tokenId;
let actorId = actionList.actorId;
if (!actorId) return;
let itemCategories = actionList.categories.find(
(c) => c.id === "inventory"
);
let actor = MagicItems.actor(actorId);
if (!(actor && itemCategories)) return;
let magicItems = actor.items ?? [];
if (magicItems.length === 0) return;
let magicItemsCategory = this.initializeEmptyCategory("magicItemsModule");
magicItemsCategory.name = this.i18n("tokenActionHud.magicItems");
let magicItemsIds = magicItems.map((item) => item.id);
itemCategories.subcategories.forEach((s) => {
s.actions.forEach((action) => {
if (!magicItemsIds.includes(action.id)) return;
let magicItem = magicItems.find((item) => item.id === action.id);
if (magicItem.attuned && !this._isItemAttuned(magicItem)) return;
if (magicItem.equipped && !this._isItemEquipped(magicItem)) return;
let subcategory = this.initializeEmptySubcategory();
subcategory.info1 = `${magicItem.uses}/${magicItem.charges}`;
magicItem.ownedEntries.forEach((entry) => {
let effect = entry.item;
let encodedValue = [
"magicItem",
tokenId,
`${action.id}>${effect.id}`,
].join("|");
let img = this._getImage(effect);
let magicItemAction = {
name: effect.name,
id: effect.id,
encodedValue: encodedValue,
img: img,
};
magicItemAction.info1 = effect.consumption;
if (effect.baseLevel)
magicItemAction.info2 = `${this.i18n(
"tokenActionHud.levelAbbreviation"
)} ${effect.baseLevel}`;
subcategory.actions.push(magicItemAction);
});
subcategory.actions.unshift(action);
this._combineSubcategoryWithCategory(
magicItemsCategory,
action.name,
subcategory
);
});
});
this._combineCategoryWithList(
actionList,
magicItemsCategory.name,
magicItemsCategory,
false
);
}
_getImage(item) {
let result = "";
if (settings.get("showIcons")) result = item.img ?? "";
return !result?.includes("icons/svg/mystery-man.svg") ? result : "";
}
_isItemEquipped(magicItem) {
return magicItem.item.system.equipped;
}
_isItemAttuned(magicItem) {
var itemData = magicItem.item.system;
if (!!itemData.attunement) {
const attuned = CONFIG.DND5E.attunementTypes?.ATTUNED ?? 2;
return itemData.attunement === attuned;
}
if (!!itemData.attuned) return itemData.attuned;
return false;
}
}