Skip to content
This repository has been archived by the owner on Jun 5, 2024. It is now read-only.

Commit

Permalink
Add Missing Generics to Inventory Manager
Browse files Browse the repository at this point in the history
  • Loading branch information
Stuyk committed Apr 5, 2023
1 parent 8e03099 commit f69c9e6
Showing 1 changed file with 27 additions and 18 deletions.
45 changes: 27 additions & 18 deletions src/core/server/systems/inventory/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,16 @@ export type ComplexSwapReturn = { from: Array<StoredItem>; to: Array<StoredItem>
* @param {StoredItem} storedItem
* @returns {StoredItem}
*/
export function calculateItemWeight(baseItem: BaseItem, storedItem: StoredItem): StoredItem {
export function calculateItemWeight<CustomData = {}>(
baseItem: BaseItem,
storedItem: StoredItem<CustomData>,
): StoredItem<CustomData> {
if (Overrides.calculateItemWeight) {
return Overrides.calculateItemWeight(baseItem, storedItem);
}

if (typeof baseItem.weight === 'number' && storedItem.quantity !== 0) {
const newItem = deepCloneObject<StoredItem>(storedItem);
const newItem = deepCloneObject<StoredItem<CustomData>>(storedItem);
newItem.totalWeight = baseItem.weight * newItem.quantity;
return newItem;
}
Expand Down Expand Up @@ -284,15 +287,17 @@ export function clearData(item: Item | StoredItem) {
* @param {Array<StoredItem<{}>>} data
* @return {Array<Item<DefaultItemBehavior, {}>>}
*/
export function convertFromStored(data: Array<StoredItem<{}>>): Array<Item<DefaultItemBehavior, {}>> {
export function convertFromStored<CustomData = {}>(
data: Array<StoredItem<CustomData>>,
): Array<Item<DefaultItemBehavior, CustomData>> {
if (Overrides.convertFromStored) {
return Overrides.convertFromStored(data);
}

const convertedItemList: Array<Item<DefaultItemBehavior, {}>> = [];
const convertedItemList: Array<Item<DefaultItemBehavior, CustomData>> = [];

for (let i = 0; i < data.length; i++) {
const convertedItem = Athena.systems.inventory.factory.fromStoredItem(data[i]);
const convertedItem = Athena.systems.inventory.factory.fromStoredItem<CustomData>(data[i]);
convertedItemList.push(convertedItem);
}

Expand All @@ -304,16 +309,16 @@ export function convertFromStored(data: Array<StoredItem<{}>>): Array<Item<Defau
* Requires the basic version of a stored item to be added to a user.
* Returns undefined if the data set could not be modified to include the quantity of items necessary.
*
* @param {Array<StoredItem>} data
* @param {Array<StoredItem<CustomData>>} data
* @param {number} amount
* @param {InventoryType | number} size The maximum slot size for this item group.
* @return {Array<StoredItem>} Returns undefined or the new array of added items.
*/
export function add<CustomData = {}>(
item: Omit<StoredItem<CustomData>, 'slot'>,
data: Array<StoredItem>,
data: Array<StoredItem<CustomData>>,
size: InventoryType | number = 256,
): Array<StoredItem> | undefined {
): Array<StoredItem<CustomData>> | undefined {
if (Overrides.add) {
return Overrides.add(item, data, size);
}
Expand All @@ -335,7 +340,7 @@ export function add<CustomData = {}>(
}

const actualMaxStack = baseItem.maxStack ? baseItem.maxStack : 512;
const copyOfData = deepCloneArray<StoredItem>(data);
const copyOfData = deepCloneArray<StoredItem<CustomData>>(data);
let availableStackIndex = -1;
if (baseItem.behavior.canStack && actualMaxStack > 1) {
availableStackIndex = copyOfData.findIndex(
Expand All @@ -360,7 +365,7 @@ export function add<CustomData = {}>(
return undefined;
}

let itemClone = deepCloneObject<StoredItem>(item);
let itemClone = deepCloneObject<StoredItem<CustomData>>(item);
itemClone.slot = openSlot;

// Use quantity to subtract from max stack size or use amount left
Expand Down Expand Up @@ -471,12 +476,12 @@ export function sub<CustomData = {}>(
* @param {number} splitCount
* @param {(InventoryType | number)} [size=DEFAULT_CONFIG.custom.size]
*/
export function splitAt(
export function splitAt<CustomData = {}>(
slot: number,
data: Array<StoredItem>,
data: Array<StoredItem<CustomData>>,
splitCount: number,
dataSize: InventoryType | number = Athena.systems.inventory.config.get().custom.size,
): Array<StoredItem> | undefined {
): Array<StoredItem<CustomData>> | undefined {
if (Overrides.splitAt) {
return Overrides.splitAt(slot, data, splitCount, dataSize);
}
Expand All @@ -485,7 +490,7 @@ export function splitAt(
return undefined;
}

let copyOfData = deepCloneArray<StoredItem>(data);
let copyOfData = deepCloneArray<StoredItem<CustomData>>(data);
if (typeof dataSize === 'string') {
dataSize = Athena.systems.inventory.config.get()[dataSize].size;
}
Expand Down Expand Up @@ -516,14 +521,14 @@ export function splitAt(
}

// Create copy of item, set quantity to split count.
let itemClone = deepCloneObject<StoredItem>(copyOfData[index]);
let itemClone = deepCloneObject<StoredItem<CustomData>>(copyOfData[index]);
itemClone.quantity = splitCount;
itemClone.slot = openSlot;
itemClone = calculateItemWeight(baseItem, itemClone);

// Remove quantity from existing item based on split count.
copyOfData[index].quantity -= splitCount;
copyOfData[index] = calculateItemWeight(baseItem, copyOfData[index]);
copyOfData[index] = calculateItemWeight<CustomData>(baseItem, copyOfData[index]);
copyOfData.push(itemClone);

return copyOfData;
Expand All @@ -538,7 +543,11 @@ export function splitAt(
* @param {Array<StoredItem>} data
* @return {(Array<StoredItem> | undefined)}
*/
export function combineAt(fromSlot: number, toSlot: number, data: Array<StoredItem>): Array<StoredItem> | undefined {
export function combineAt<CustomData = {}>(
fromSlot: number,
toSlot: number,
data: Array<StoredItem<CustomData>>,
): Array<StoredItem<CustomData>> | undefined {
if (Overrides.combineAt) {
return Overrides.combineAt(fromSlot, toSlot, data);
}
Expand Down Expand Up @@ -568,7 +577,7 @@ export function combineAt(fromSlot: number, toSlot: number, data: Array<StoredIt
return undefined;
}

let copyOfData = deepCloneArray<StoredItem>(data);
let copyOfData = deepCloneArray<StoredItem<CustomData>>(data);
if (copyOfData[toIndex].quantity === baseItem.maxStack) {
return undefined;
}
Expand Down

0 comments on commit f69c9e6

Please sign in to comment.