UNPKG

farming-weight

Version:

Tools for calculating farming weight and fortune in Hypixel Skyblock

73 lines 2.9 kB
import { Stat } from '../constants/stats.js'; export function getFortuneFromEnchant(level, enchant, options, crop) { return getStatFromEnchant(level, enchant, Stat.FarmingFortune, options, crop); } export function getStatFromEnchant(level, enchant, stat, options, crop) { return evalStatFromEnchant(level, enchant, stat, options, crop, false); } /** * Like {@link getStatFromEnchant}, but when no crop is provided, evaluates * `cropComputed` contributions with `undefined` so non-crop-bound items (e.g. * armor with Sunset) can resolve per-level deltas without a representative crop. */ export function getOptimisticStatFromEnchant(level, enchant, stat, options, crop) { return evalStatFromEnchant(level, enchant, stat, options, crop, true); } function evalStatFromEnchant(level, enchant, stat, options, crop, optimistic) { if (level <= 0) return 0; const tier = enchant.levels?.[level]; if (!tier) return 0; let value = getStatFromTier(tier, stat, options, crop, enchant, optimistic); if (enchant.computedLevels && options) { const computedTier = enchant.computedLevels(options)?.[level]; if (computedTier) { value += getStatFromTier(computedTier, stat, options, crop, enchant, optimistic); } } return value; } export function getMaxFortuneFromEnchant(enchant, options, crop) { return getMaxStatFromEnchant(enchant, Stat.FarmingFortune, options, crop); } export function getMaxStatFromEnchant(enchant, stat, options, crop) { if (enchant.maxStats) { return enchant.maxStats[stat] ?? 0; } const tier = enchant.levels?.[enchant.maxLevel]; if (!tier) return 0; const optimistic = !crop; let value = getStatFromTier(tier, stat, options, crop, enchant, optimistic); if (enchant.computedLevels && options) { const computedTier = enchant.computedLevels(options)?.[enchant.maxLevel]; if (computedTier) { value += getStatFromTier(computedTier, stat, options, crop, enchant, optimistic); } } return value; } function getStatFromTier(tier, stat, options, crop, enchant, optimistic = false) { if (crop && enchant.cropSpecific && enchant.cropSpecific !== crop) { return 0; } let value = 0; const s = stat; value += tier.stats?.[s] ?? 0; if (options) { value += tier.computed?.[s]?.(options) ?? 0; const computedStats = tier.computedStats?.(options); if (computedStats) { value += computedStats[s] ?? 0; } } if (crop && (!enchant.cropSpecific || enchant.cropSpecific === crop)) { value += tier.cropComputed?.[s]?.(crop, options) ?? 0; } else if (!crop && optimistic && !enchant.cropSpecific) { value += tier.cropComputed?.[s]?.(undefined, options) ?? 0; } return value; } //# sourceMappingURL=enchants.js.map