Skip to content

Commit 5da3a41

Browse files
committed
feat(SkyBlockMemberCrimsonIsleTrophyFishCaught)
1 parent e6dba38 commit 5da3a41

9 files changed

+91
-45
lines changed

src/Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsle.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
/* eslint-disable @stylistic/max-len */
12
import SkyBlockMemberCrimsonIsle from './SkyBlockMemberCrimsonIsle.js';
23
import SkyBlockMemberCrimsonIsleAbiphone from './SkyBlockMemberCrimsonIsleAbiphone.js';
34
import SkyBlockMemberCrimsonIsleDojo from './SkyBlockMemberCrimsonIsleDojo.js';
45
import SkyBlockMemberCrimsonIsleKuudra from './SkyBlockMemberCrimsonIsleKuudra.js';
56
import SkyBlockMemberCrimsonIsleMatriarch from './SkyBlockMemberCrimsonIsleMatriarch.js';
6-
import SkyBlockMemberCrimsonIsleTrophyFish from './SkyBlockMemberCrimsonIsleTrophyFish.js';
7+
import SkyBlockMemberCrimsonIsleTrophyFish from './SkyBlockMemberCrimsonIsleTrophyFish/SkyBlockMemberCrimsonIsleTrophyFish.js';
78
import { expect, expectTypeOf, test } from 'vitest';
89
import type { CrimsonIsleBoss, CrimsonIsleFaction } from '../../../../Types/SkyBlock.js';
10+
/* eslint-enable @stylistic/max-len */
911

1012
test('SkyBlockMemberCrimsonIsle', () => {
1113
const data = new SkyBlockMemberCrimsonIsle({ stats: 'meow' }, { stats: 'meow' });

src/Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsle.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
/* eslint-disable @stylistic/max-len */
12
import SkyBlockMemberCrimsonIsleAbiphone from './SkyBlockMemberCrimsonIsleAbiphone.js';
23
import SkyBlockMemberCrimsonIsleDojo from './SkyBlockMemberCrimsonIsleDojo.js';
34
import SkyBlockMemberCrimsonIsleKuudra from './SkyBlockMemberCrimsonIsleKuudra.js';
45
import SkyBlockMemberCrimsonIsleMatriarch from './SkyBlockMemberCrimsonIsleMatriarch.js';
5-
import SkyBlockMemberCrimsonIsleTrophyFish from './SkyBlockMemberCrimsonIsleTrophyFish.js';
6+
import SkyBlockMemberCrimsonIsleTrophyFish from './SkyBlockMemberCrimsonIsleTrophyFish/SkyBlockMemberCrimsonIsleTrophyFish.ts';
67
import type { CrimsonIsleBoss, CrimsonIsleFaction } from '../../../../Types/SkyBlock.js';
8+
/* eslint-enable @stylistic/max-len */
79

810
class SkyBlockMemberCrimsonIsle {
911
dojo: SkyBlockMemberCrimsonIsleDojo;

src/Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFish.test.ts renamed to src/Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFish/SkyBlockMemberCrimsonIsleTrophyFish.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import SkyBlockMemberCrimsonIsleTrophyFish from './SkyBlockMemberCrimsonIsleTrophyFish.js';
2+
import SkyBlockMemberCrimsonIsleTrophyFishCaught from './SkyBlockMemberCrimsonIsleTrophyFishCaught.js';
23
import SkyBlockMemberCrimsonIsleTrophyFishFish from './SkyBlockMemberCrimsonIsleTrophyFishFish.js';
34
import { expect, expectTypeOf, test } from 'vitest';
4-
import type { CrimsonIsleTrophyFishRank } from '../../../../Types/SkyBlock.js';
5+
import type { CrimsonIsleTrophyFishRank } from '../../../../../Types/SkyBlock.js';
56

67
test('SkyBlockMemberCrimsonIsleTrophyFish', () => {
78
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -48,6 +49,8 @@ test('SkyBlockMemberCrimsonIsleTrophyFish', () => {
4849
expectTypeOf(data.karateFish).toEqualTypeOf<SkyBlockMemberCrimsonIsleTrophyFishFish>();
4950
expect(data.moldfin).toBeDefined();
5051
expectTypeOf(data.moldfin).toEqualTypeOf<SkyBlockMemberCrimsonIsleTrophyFishFish>();
52+
expect(data.caught).toBeDefined();
53+
expectTypeOf(data.caught).toEqualTypeOf<SkyBlockMemberCrimsonIsleTrophyFishCaught>();
5154
expect(data.toString).toBeDefined();
5255
expectTypeOf(data.toString).toEqualTypeOf<() => CrimsonIsleTrophyFishRank>();
5356
expect(data.toString()).toBeDefined();
Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import SkyBlockMemberCrimsonIsleTrophyFishFish from './SkyBlockMemberCrimsonIsleTrophyFishFish.js';
2-
import type { CrimsonIsleTrophyFishRank } from '../../../../Types/SkyBlock.js';
1+
import SkyBlockMemberCrimsonIsleTrophyFishCaught from './SkyBlockMemberCrimsonIsleTrophyFishCaught.ts';
2+
import SkyBlockMemberCrimsonIsleTrophyFishFish from './SkyBlockMemberCrimsonIsleTrophyFishFish.ts';
3+
import type { CrimsonIsleTrophyFishRank } from '../../../../../Types/SkyBlock.ts';
34

45
class SkyBlockMemberCrimsonIsleTrophyFish {
56
rank: CrimsonIsleTrophyFishRank;
@@ -21,10 +22,7 @@ class SkyBlockMemberCrimsonIsleTrophyFish {
2122
soulFish: SkyBlockMemberCrimsonIsleTrophyFishFish;
2223
karateFish: SkyBlockMemberCrimsonIsleTrophyFishFish;
2324
moldfin: SkyBlockMemberCrimsonIsleTrophyFishFish;
24-
bronze: number;
25-
silver: number;
26-
gold: number;
27-
diamond: number;
25+
caught: SkyBlockMemberCrimsonIsleTrophyFishCaught;
2826
constructor(data: Record<string, any>) {
2927
const rewards = data?.rewards || [1];
3028
this.rank = this.getTrophyFishRank(rewards[rewards.length - 1]);
@@ -46,10 +44,7 @@ class SkyBlockMemberCrimsonIsleTrophyFish {
4644
this.soulFish = new SkyBlockMemberCrimsonIsleTrophyFishFish(data || {}, 'soul_fish');
4745
this.karateFish = new SkyBlockMemberCrimsonIsleTrophyFishFish(data || {}, 'karate_fish');
4846
this.moldfin = new SkyBlockMemberCrimsonIsleTrophyFishFish(data || {}, 'moldfin');
49-
this.bronze = this.getTrophyFishPerRank('Bronze');
50-
this.silver = this.getTrophyFishPerRank('Silver');
51-
this.gold = this.getTrophyFishPerRank('Gold');
52-
this.diamond = this.getTrophyFishPerRank('Diamond');
47+
this.caught = new SkyBlockMemberCrimsonIsleTrophyFishCaught(this);
5348
}
5449

5550
toString(): CrimsonIsleTrophyFishRank {
@@ -68,36 +63,6 @@ class SkyBlockMemberCrimsonIsleTrophyFish {
6863
return 'Bronze';
6964
}
7065
}
71-
72-
private getTrophyFishPerRank(rank: CrimsonIsleTrophyFishRank): number {
73-
const fishes = [
74-
this.gusher,
75-
this.blobfish,
76-
this.lavaHorse,
77-
this.goldenFish,
78-
this.volcanicStonefish,
79-
this.slugfish,
80-
this.vanille,
81-
this.obfuscatedFish1,
82-
this.obfuscatedFish2,
83-
this.obfuscatedFish3,
84-
this.sulphurSkitter,
85-
this.skeletonFish,
86-
this.manaRay,
87-
this.flyfish,
88-
this.steamingHotFlounder,
89-
this.soulFish,
90-
this.karateFish,
91-
this.moldfin
92-
];
93-
94-
const key = rank.toLowerCase() as keyof (typeof fishes)[number];
95-
return fishes.reduce((sum, fish) => {
96-
const value = fish[key];
97-
const num = typeof value === 'function' ? value() : value;
98-
return sum + (num ?? 0);
99-
}, 0);
100-
}
10166
}
10267

10368
export default SkyBlockMemberCrimsonIsleTrophyFish;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import SkyBlockMemberCrimsonIsleTrophyFishCaught from './SkyBlockMemberCrimsonIsleTrophyFishCaught.js';
2+
import { expect, expectTypeOf, test } from 'vitest';
3+
4+
test('SkyBlockMemberCrimsonIsleTrophyFishCaught', () => {
5+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
6+
// @ts-expect-error
7+
const data = new SkyBlockMemberCrimsonIsleTrophyFishCaught({});
8+
expect(data).toBeDefined();
9+
expect(data).toBeInstanceOf(SkyBlockMemberCrimsonIsleTrophyFishCaught);
10+
expectTypeOf(data).toEqualTypeOf<SkyBlockMemberCrimsonIsleTrophyFishCaught>();
11+
expect(data.total).toBeDefined();
12+
expect(data.total).toBeGreaterThanOrEqual(0);
13+
expectTypeOf(data.total).toEqualTypeOf<number>();
14+
expect(data.bronze).toBeDefined();
15+
expect(data.bronze).toBeGreaterThanOrEqual(0);
16+
expectTypeOf(data.bronze).toEqualTypeOf<number>();
17+
expect(data.silver).toBeDefined();
18+
expect(data.silver).toBeGreaterThanOrEqual(0);
19+
expectTypeOf(data.silver).toEqualTypeOf<number>();
20+
expect(data.gold).toBeDefined();
21+
expect(data.gold).toBeGreaterThanOrEqual(0);
22+
expectTypeOf(data.gold).toEqualTypeOf<number>();
23+
expect(data.diamond).toBeDefined();
24+
expect(data.diamond).toBeGreaterThanOrEqual(0);
25+
expectTypeOf(data.diamond).toEqualTypeOf<number>();
26+
expect(data.toString).toBeDefined();
27+
expectTypeOf(data.toString).toEqualTypeOf<() => number>();
28+
expect(data.toString()).toBeDefined();
29+
expect(data.toString()).toEqual(data.total);
30+
expectTypeOf(data.toString()).toEqualTypeOf<number>();
31+
});
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import SkyBlockMemberCrimsonIsleTrophyFishFish from './SkyBlockMemberCrimsonIsleTrophyFishFish.ts';
2+
import type SkyBlockMemberCrimsonIsleTrophyFish from './SkyBlockMemberCrimsonIsleTrophyFish.ts';
3+
import type { CrimsonIsleTrophyFishRank } from '../../../../../Types/SkyBlock.ts';
4+
5+
class SkyBlockMemberCrimsonIsleTrophyFishCaught {
6+
total: number;
7+
bronze: number;
8+
silver: number;
9+
gold: number;
10+
diamond: number;
11+
constructor(data: SkyBlockMemberCrimsonIsleTrophyFish) {
12+
this.total = this.getTrophyFishPerRank(data, 'Total');
13+
this.bronze = this.getTrophyFishPerRank(data, 'Bronze');
14+
this.silver = this.getTrophyFishPerRank(data, 'Silver');
15+
this.gold = this.getTrophyFishPerRank(data, 'Gold');
16+
this.diamond = this.getTrophyFishPerRank(data, 'Diamond');
17+
}
18+
19+
toString(): number {
20+
return this.total;
21+
}
22+
23+
private getTrophyFishPerRank(
24+
data: SkyBlockMemberCrimsonIsleTrophyFish,
25+
rank: CrimsonIsleTrophyFishRank | 'Total'
26+
): number {
27+
let num = 0;
28+
29+
(Object.keys(data) as (keyof SkyBlockMemberCrimsonIsleTrophyFish)[])
30+
.filter((fish) => !['toString', 'rank', 'caught'].includes(fish as string))
31+
.forEach((fishName) => {
32+
const fish = data[fishName] as SkyBlockMemberCrimsonIsleTrophyFishFish;
33+
num += fish[rank.toLowerCase() as keyof SkyBlockMemberCrimsonIsleTrophyFishFish] as number;
34+
});
35+
36+
return num;
37+
}
38+
}
39+
40+
export default SkyBlockMemberCrimsonIsleTrophyFishCaught;
File renamed without changes.
File renamed without changes.

src/index.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,9 @@ import SkyBlockMemberCrimsonIsleDojoMinigame from './Structures/SkyBlock/Member/
180180
import SkyBlockMemberCrimsonIsleKuudra from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleKuudra.js';
181181
import SkyBlockMemberCrimsonIsleKuudraPartyFinder from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleKuudraPartyFinder.js';
182182
import SkyBlockMemberCrimsonIsleMatriarch from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleMatriarch.js';
183-
import SkyBlockMemberCrimsonIsleTrophyFish from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFish.js';
184-
import SkyBlockMemberCrimsonIsleTrophyFishFish from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFishFish.js';
183+
import SkyBlockMemberCrimsonIsleTrophyFish from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFish/SkyBlockMemberCrimsonIsleTrophyFish.js';
184+
import SkyBlockMemberCrimsonIsleTrophyFishCaught from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFish/SkyBlockMemberCrimsonIsleTrophyFishCaught.js';
185+
import SkyBlockMemberCrimsonIsleTrophyFishFish from './Structures/SkyBlock/Member/CrimsonIsle/SkyBlockMemberCrimsonIsleTrophyFish/SkyBlockMemberCrimsonIsleTrophyFishFish.js';
185186
import SkyBlockMemberCurrencies from './Structures/SkyBlock/Member/SkyBlockMemberCurrencies.js';
186187
import SkyBlockMemberDungeons from './Structures/SkyBlock/Member/Dungeons/SkyBlockMemberDungeons.js';
187188
import SkyBlockMemberDungeonsClasses from './Structures/SkyBlock/Member/Dungeons/SkyBlockMemberDungeonsClasses.js';
@@ -490,6 +491,7 @@ export {
490491
SkyBlockMemberCrimsonIsleKuudraPartyFinder,
491492
SkyBlockMemberCrimsonIsleMatriarch,
492493
SkyBlockMemberCrimsonIsleTrophyFish,
494+
SkyBlockMemberCrimsonIsleTrophyFishCaught,
493495
SkyBlockMemberCrimsonIsleTrophyFishFish,
494496
SkyBlockMemberCurrencies,
495497
SkyBlockMemberDungeons,
@@ -800,6 +802,7 @@ export default {
800802
SkyBlockMemberCrimsonIsleKuudraPartyFinder,
801803
SkyBlockMemberCrimsonIsleMatriarch,
802804
SkyBlockMemberCrimsonIsleTrophyFish,
805+
SkyBlockMemberCrimsonIsleTrophyFishCaught,
803806
SkyBlockMemberCrimsonIsleTrophyFishFish,
804807
SkyBlockMemberCurrencies,
805808
SkyBlockMemberDungeons,

0 commit comments

Comments
 (0)