UNPKG

farming-weight

Version:

Tools for calculating farming weight and fortune in Hypixel Skyblock

60 lines 2.31 kB
import { Stat } from '../../constants/stats.js'; import { statsToEffects } from '../../items/sources/effects-util.js'; import { CROP_FORTUNE_SOURCES } from './cropsources.js'; import { GENERAL_FORTUNE_SOURCES } from './generalsources.js'; function getItemFamily(info) { if (!info || !('family' in info)) return undefined; const { family } = info; return typeof family === 'string' ? family : undefined; } function effectsFromSourceStats(source, ctx) { const stats = {}; for (const stat of Object.values(Stat)) { let value = 0; if (source.currentStat) { value = source.currentStat(ctx, stat) ?? 0; } else if (source.current && stat === Stat.FarmingFortune) { value = source.current(ctx) ?? 0; } if (value) stats[stat] = (stats[stat] ?? 0) + value; } return [...statsToEffects(stats, source.name), ...(source.calculationEffects?.(ctx) ?? [])]; } export function collectGeneralFortuneSourceEffects(player) { const effects = []; for (const source of GENERAL_FORTUNE_SOURCES) { if (source.name === 'Attribute Shards' || source.name === 'Garden Chips') continue; if (player.activeAccessories.some((accessory) => accessory.info.name === source.name)) continue; const sourceInfo = source.info?.(player); const sourceFamily = getItemFamily(sourceInfo?.info); if (sourceFamily && player.activeAccessories.some((accessory) => accessory.info.family === sourceFamily)) { continue; } if (source.exists && !source.exists(player)) continue; effects.push(...effectsFromSourceStats(source, player)); } return effects; } export function collectCropFortuneSourceEffects(player, env) { if (!env.crop) return []; const effects = []; const ctx = { player, crop: env.crop }; for (const source of CROP_FORTUNE_SOURCES) { if (source.name === 'Farming Tool') continue; if (source.name === 'Helianthus Relic Family') continue; if (source.exists && !source.exists(ctx)) continue; effects.push(...effectsFromSourceStats(source, ctx)); } return effects; } //# sourceMappingURL=effectsources.js.map