farming-weight
Version:
Tools for calculating farming weight and fortune in Hypixel Skyblock
124 lines • 5.73 kB
JavaScript
import { CROP_INFO, Crop, EXPORTABLE_CROP_FORTUNE } from '../../constants/crops.js';
import { fortuneFromPersonalBestContest } from '../../constants/personalbests.js';
import { COCOA_FORTUNE_UPGRADE, GARDEN_CROP_UPGRADES } from '../../constants/specific.js';
import { Stat } from '../../constants/stats.js';
import { FarmingTool } from '../../fortune/farmingtool.js';
import { FARMING_ACCESSORIES_INFO } from '../../items/accessories.js';
import { FARMING_TOOLS } from '../../items/tools.js';
import { getCropDisplayName, getItemIdFromCrop } from '../../util/names.js';
export const CROP_FORTUNE_SOURCES = [
{
name: 'Farming Tool',
exists: () => true,
wiki: ({ player, crop }) => {
return player.getSelectedCropTool(crop)?.info.wiki ?? FARMING_TOOLS[CROP_INFO[crop].startingTool]?.wiki;
},
max: ({ crop }) => {
const tool = FARMING_TOOLS[CROP_INFO[crop].startingTool];
if (!tool)
return 0;
const progress = FarmingTool.fakeItem(tool)?.getProgress();
return progress?.reduce((acc, p) => acc + p.maxFortune, 0) ?? 0;
},
current: ({ player, crop }) => {
const tool = player.getSelectedCropTool(crop);
const progress = tool?.getProgress();
return progress?.reduce((acc, p) => acc + p.fortune, 0) ?? 0;
},
progress: ({ player, crop }) => {
const tool = player.getSelectedCropTool(crop);
if (tool)
return tool.getProgress();
const fake = FarmingTool.fakeItem(FARMING_TOOLS[CROP_INFO[crop].startingTool]);
return fake?.getProgress(true) ?? [];
},
info: ({ player, crop }) => {
const tool = player.selectedTool?.crop === crop ? player.selectedTool : player.getSelectedCropTool(crop);
const fake = !tool
? FarmingTool.fakeItem(FARMING_TOOLS[CROP_INFO[crop].startingTool])
: undefined;
return {
item: tool?.item,
info: tool?.info,
nextInfo: fake ? fake.info : tool?.getNextItemUpgrade()?.info,
maxInfo: (fake ? fake : tool)?.getLastItemUpgrade()?.info,
};
},
},
{
name: 'Exportable Crop',
api: false,
wiki: () => 'https://wiki.hypixel.net/Carrolyn',
exists: ({ crop }) => CROP_INFO[crop].exportable === true,
max: () => EXPORTABLE_CROP_FORTUNE,
current: ({ player, crop }) => {
return player.options.exportableCrops?.[crop] ? EXPORTABLE_CROP_FORTUNE : 0;
},
},
{
name: GARDEN_CROP_UPGRADES.name,
exists: () => true,
wiki: () => GARDEN_CROP_UPGRADES.wiki,
max: () => GARDEN_CROP_UPGRADES.fortunePerLevel * GARDEN_CROP_UPGRADES.maxLevel,
current: ({ player, crop }) => {
return (player.options.cropUpgrades?.[crop] ?? 0) * GARDEN_CROP_UPGRADES.fortunePerLevel;
},
},
{
name: COCOA_FORTUNE_UPGRADE.name,
exists: ({ crop }) => crop === Crop.CocoaBeans,
wiki: () => COCOA_FORTUNE_UPGRADE.wiki,
max: () => COCOA_FORTUNE_UPGRADE.fortunePerLevel * COCOA_FORTUNE_UPGRADE.maxLevel,
current: ({ player }) => {
return (player.options.cocoaFortuneUpgrade ?? 0) * COCOA_FORTUNE_UPGRADE.fortunePerLevel;
},
},
{
name: 'Fermento Artifact Family',
exists: ({ player, crop }) => {
const active = player.activeAccessories.find((a) => a.info.family === FARMING_ACCESSORIES_INFO.FERMENTO_ARTIFACT?.family);
if (!active)
return true;
if (active.info.crops && active.info.crops.includes(crop)) {
return true;
}
return false;
},
wiki: ({ player }) => {
const highest = player.activeAccessories.find((a) => a.info.family === FARMING_ACCESSORIES_INFO.FERMENTO_ARTIFACT?.family);
return highest?.info.wiki ?? FARMING_ACCESSORIES_INFO.CROPIE_TALISMAN?.wiki;
},
max: () => FARMING_ACCESSORIES_INFO.FERMENTO_ARTIFACT?.baseStats?.[Stat.FarmingFortune] ?? 0,
current: ({ player, crop }) => {
const highest = player.activeAccessories.find((a) => a.info.family === FARMING_ACCESSORIES_INFO.FERMENTO_ARTIFACT?.family);
if (!highest)
return 0;
if (highest.info.crops && !highest.info.crops.includes(crop)) {
return 0;
}
return highest.info.baseStats?.[Stat.FarmingFortune] ?? 0;
},
info: ({ player }) => {
const highest = player.activeAccessories.find((a) => a.info.family === FARMING_ACCESSORIES_INFO.FERMENTO_ARTIFACT?.family);
const first = !highest ? FARMING_ACCESSORIES_INFO.CROPIE_TALISMAN : undefined;
return {
item: highest?.item,
info: highest?.info,
nextInfo: first ?? highest?.getNextItemUpgrade()?.info,
maxInfo: highest?.getLastItemUpgrade()?.info ?? FARMING_ACCESSORIES_INFO.FERMENTO_ARTIFACT,
};
},
},
{
name: 'Personal Best',
exists: () => true,
wiki: () => 'https://wiki.hypixel.net/Anita#Personal_Bests',
max: () => 100,
current: ({ player, crop }) => {
const personalBest = player.options.personalBests?.[getItemIdFromCrop(crop)] ??
player.options.personalBests?.[getCropDisplayName(crop).replace(/ /g, '')];
return fortuneFromPersonalBestContest(crop, personalBest ?? 0);
},
},
];
//# sourceMappingURL=cropsources.js.map