stardew-valley-data 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,41 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
6
6
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.14.0] - 2026-03-20
9
+
10
+ ### Added
11
+
12
+ - `ProfessionCalculator` class and `professionCalculator()` factory added to the `calculator` module
13
+ — 8 methods covering all sell-price profession bonuses: `artisan` (×1.4), `rancher` (×1.2),
14
+ `tiller` (×1.1), `blacksmith` (×1.5), `gemologist` (×1.3), `tapper` (×1.25), `fisher` (×1.25),
15
+ `angler` (×1.5); all use `Math.floor`
16
+ - `KnowledgeCalculator` class and `knowledgeCalculator()` factory added to the `calculator` module —
17
+ `springOnionMastery` (×5) and `bearsKnowledge` (×3)
18
+ - `ProfessionBonus` type added to `src/types/common.ts` —
19
+ `'artisan' | 'rancher' | 'tiller' | 'blacksmith' | 'gemologist' | 'tapper' | 'fisher' | 'angler'`
20
+ - `KnowledgeBonus` type added to `src/types/common.ts` —
21
+ `'spring-onion-mastery' | 'bears-knowledge'`
22
+ - `profession: ProfessionBonus[]` field added to 12 item interfaces and all corresponding data
23
+ entries — empty array means no profession bonus applies; most items carry one profession; Smoked
24
+ Fish carries two (`["artisan", "angler"]` — it benefits from both simultaneously); fish entries
25
+ carry `["fisher", "angler"]` to reflect the full level-5/level-10 fishing profession path:
26
+ - `Crop` (`data/crops.json`, 47 entries) — `["tiller"]`
27
+ - `Forageable` (`data/forageables.json`, 49 entries) — `[]` (Botanist affects quality, not price)
28
+ - `ArtisanGood` (`data/artisan-goods.json`, 30 entries) — `["artisan"]` for 26 goods, `["tapper"]`
29
+ for 4 tapper products (Oak Resin, Maple Syrup, Pine Tar, Mystic Syrup); Smoked Fish gets
30
+ `["artisan", "angler"]`
31
+ - `MineralItem` (`data/minerals.json`) — `["gemologist"]`
32
+ - `GeodeContainer`, `OreItem`, `ResourceItem` (`data/minerals.json`) — `[]`
33
+ - `BarItem` (`data/minerals.json`, 6 entries) — `["blacksmith"]`
34
+ - `AnimalProduce` (`data/animals.json`) — `["rancher"]`
35
+ - `Fish` (`data/fish.json`, 77 entries) — `["fisher", "angler"]` for 71 true fish; `[]` for
36
+ Seaweed, Green Algae, White Algae, Sea Jelly, River Jelly, Cave Jelly
37
+ - `FruitTreeProduce` (`data/trees.json`) — `["tiller"]`
38
+ - `WildTreeTapper` (`data/trees.json`) — `["tapper"]`
39
+ - `knowledge: KnowledgeBonus[]` field added to `Forageable` type and all 49 forageable entries —
40
+ Spring Onion: `["spring-onion-mastery"]`; Blackberry and Salmonberry: `["bears-knowledge"]`; all
41
+ others: `[]`
42
+
8
43
  ## [0.13.0] - 2026-03-20
9
44
 
10
45
  ### Added
package/data/animals.json CHANGED
@@ -105,6 +105,7 @@
105
105
  "id": "176",
106
106
  "name": "Egg",
107
107
  "sellPrice": 50,
108
+ "profession": ["rancher"],
108
109
  "image": "images/animals/produce/Egg.png",
109
110
  "maxQuality": "iridium"
110
111
  },
@@ -112,6 +113,7 @@
112
113
  "id": "174",
113
114
  "name": "Large Egg",
114
115
  "sellPrice": 95,
116
+ "profession": ["rancher"],
115
117
  "image": "images/animals/produce/Large Egg.png",
116
118
  "maxQuality": "iridium"
117
119
  },
@@ -133,6 +135,7 @@
133
135
  "id": "180",
134
136
  "name": "Brown Egg",
135
137
  "sellPrice": 50,
138
+ "profession": ["rancher"],
136
139
  "image": "images/animals/produce/Brown Egg.png",
137
140
  "maxQuality": "iridium"
138
141
  },
@@ -140,6 +143,7 @@
140
143
  "id": "182",
141
144
  "name": "Large Brown Egg",
142
145
  "sellPrice": 95,
146
+ "profession": ["rancher"],
143
147
  "image": "images/animals/produce/Large Brown Egg.png",
144
148
  "maxQuality": "iridium"
145
149
  },
@@ -161,6 +165,7 @@
161
165
  "id": "176",
162
166
  "name": "Egg",
163
167
  "sellPrice": 50,
168
+ "profession": ["rancher"],
164
169
  "image": "images/animals/produce/Egg.png",
165
170
  "maxQuality": "iridium"
166
171
  },
@@ -168,6 +173,7 @@
168
173
  "id": "174",
169
174
  "name": "Large Egg",
170
175
  "sellPrice": 95,
176
+ "profession": ["rancher"],
171
177
  "image": "images/animals/produce/Large Egg.png",
172
178
  "maxQuality": "iridium"
173
179
  },
@@ -189,6 +195,7 @@
189
195
  "id": "305",
190
196
  "name": "Void Egg",
191
197
  "sellPrice": 65,
198
+ "profession": ["rancher"],
192
199
  "image": "images/animals/produce/Void Egg.png",
193
200
  "maxQuality": "iridium"
194
201
  },
@@ -211,6 +218,7 @@
211
218
  "id": "928",
212
219
  "name": "Golden Egg",
213
220
  "sellPrice": 500,
221
+ "profession": ["rancher"],
214
222
  "image": "images/animals/produce/Golden Egg.png",
215
223
  "maxQuality": "iridium"
216
224
  },
@@ -233,6 +241,7 @@
233
241
  "id": "442",
234
242
  "name": "Duck Egg",
235
243
  "sellPrice": 95,
244
+ "profession": ["rancher"],
236
245
  "image": "images/animals/produce/Duck Egg.png",
237
246
  "maxQuality": "iridium"
238
247
  },
@@ -240,6 +249,7 @@
240
249
  "id": "444",
241
250
  "name": "Duck Feather",
242
251
  "sellPrice": 250,
252
+ "profession": ["rancher"],
243
253
  "image": "images/animals/produce/Duck Feather.png",
244
254
  "maxQuality": "iridium"
245
255
  },
@@ -261,6 +271,7 @@
261
271
  "id": "440",
262
272
  "name": "Wool",
263
273
  "sellPrice": 340,
274
+ "profession": ["rancher"],
264
275
  "image": "images/animals/produce/Wool.png",
265
276
  "maxQuality": "iridium"
266
277
  },
@@ -268,6 +279,7 @@
268
279
  "id": "446",
269
280
  "name": "Rabbit's Foot",
270
281
  "sellPrice": 565,
282
+ "profession": ["rancher"],
271
283
  "image": "images/animals/produce/Rabbit's Foot.png",
272
284
  "maxQuality": "iridium"
273
285
  },
@@ -289,6 +301,7 @@
289
301
  "id": "107",
290
302
  "name": "Dinosaur Egg",
291
303
  "sellPrice": 350,
304
+ "profession": ["rancher"],
292
305
  "image": "images/animals/produce/Dinosaur Egg.png",
293
306
  "maxQuality": "iridium"
294
307
  },
@@ -311,6 +324,7 @@
311
324
  "id": "184",
312
325
  "name": "Milk",
313
326
  "sellPrice": 125,
327
+ "profession": ["rancher"],
314
328
  "image": "images/animals/produce/Milk.png",
315
329
  "maxQuality": "iridium"
316
330
  },
@@ -318,6 +332,7 @@
318
332
  "id": "186",
319
333
  "name": "Large Milk",
320
334
  "sellPrice": 190,
335
+ "profession": ["rancher"],
321
336
  "image": "images/animals/produce/Large Milk.png",
322
337
  "maxQuality": "iridium"
323
338
  },
@@ -339,6 +354,7 @@
339
354
  "id": "184",
340
355
  "name": "Milk",
341
356
  "sellPrice": 125,
357
+ "profession": ["rancher"],
342
358
  "image": "images/animals/produce/Milk.png",
343
359
  "maxQuality": "iridium"
344
360
  },
@@ -346,6 +362,7 @@
346
362
  "id": "186",
347
363
  "name": "Large Milk",
348
364
  "sellPrice": 190,
365
+ "profession": ["rancher"],
349
366
  "image": "images/animals/produce/Large Milk.png",
350
367
  "maxQuality": "iridium"
351
368
  },
@@ -367,6 +384,7 @@
367
384
  "id": "436",
368
385
  "name": "Goat Milk",
369
386
  "sellPrice": 225,
387
+ "profession": ["rancher"],
370
388
  "image": "images/animals/produce/Goat Milk.png",
371
389
  "maxQuality": "iridium"
372
390
  },
@@ -374,6 +392,7 @@
374
392
  "id": "438",
375
393
  "name": "Large Goat Milk",
376
394
  "sellPrice": 345,
395
+ "profession": ["rancher"],
377
396
  "image": "images/animals/produce/Large Goat Milk.png",
378
397
  "maxQuality": "iridium"
379
398
  },
@@ -395,6 +414,7 @@
395
414
  "id": "440",
396
415
  "name": "Wool",
397
416
  "sellPrice": 340,
417
+ "profession": ["rancher"],
398
418
  "image": "images/animals/produce/Wool.png",
399
419
  "maxQuality": "iridium"
400
420
  },
@@ -417,6 +437,7 @@
417
437
  "id": "430",
418
438
  "name": "Truffle",
419
439
  "sellPrice": 625,
440
+ "profession": ["rancher"],
420
441
  "image": "images/animals/produce/Truffle.png",
421
442
  "maxQuality": "iridium"
422
443
  },
@@ -439,6 +460,7 @@
439
460
  "id": "289",
440
461
  "name": "Ostrich Egg",
441
462
  "sellPrice": 600,
463
+ "profession": ["rancher"],
442
464
  "image": "images/animals/produce/Ostrich Egg.png",
443
465
  "maxQuality": "iridium"
444
466
  },
@@ -14,6 +14,7 @@
14
14
  "processingMinutes": 6400,
15
15
  "processingDays": 4,
16
16
  "sellPrice": null,
17
+ "profession": ["artisan"],
17
18
  "sellPriceFormula": "100g for wild honey; 2× nearby flower base price + 100 for flower honey",
18
19
  "priceFormula": {
19
20
  "multiplier": 2,
@@ -43,6 +44,7 @@
43
44
  "processingMinutes": 10000,
44
45
  "processingDays": 6.25,
45
46
  "sellPrice": null,
47
+ "profession": ["artisan"],
46
48
  "sellPriceFormula": "3× base fruit price",
47
49
  "priceFormula": {
48
50
  "multiplier": 3,
@@ -81,6 +83,7 @@
81
83
  "processingMinutes": 6000,
82
84
  "processingDays": 3.75,
83
85
  "sellPrice": null,
86
+ "profession": ["artisan"],
84
87
  "sellPriceFormula": "2.25× base vegetable price",
85
88
  "priceFormula": {
86
89
  "multiplier": 2.25,
@@ -114,6 +117,7 @@
114
117
  "processingMinutes": 2250,
115
118
  "processingDays": 1.41,
116
119
  "sellPrice": 300,
120
+ "profession": ["artisan"],
117
121
  "sellPriceFormula": null,
118
122
  "priceFormula": null,
119
123
  "qualityLevels": true,
@@ -152,6 +156,7 @@
152
156
  "processingMinutes": 1750,
153
157
  "processingDays": 1.09,
154
158
  "sellPrice": 200,
159
+ "profession": ["artisan"],
155
160
  "sellPriceFormula": null,
156
161
  "priceFormula": null,
157
162
  "qualityLevels": true,
@@ -190,6 +195,7 @@
190
195
  "processingMinutes": 600,
191
196
  "processingDays": 0.38,
192
197
  "sellPrice": 300,
198
+ "profession": ["artisan"],
193
199
  "sellPriceFormula": null,
194
200
  "priceFormula": null,
195
201
  "qualityLevels": true,
@@ -228,6 +234,7 @@
228
234
  "processingMinutes": 120,
229
235
  "processingDays": 0.08,
230
236
  "sellPrice": 150,
237
+ "profession": [],
231
238
  "sellPriceFormula": null,
232
239
  "priceFormula": null,
233
240
  "qualityLevels": false,
@@ -262,6 +269,7 @@
262
269
  "processingMinutes": 600,
263
270
  "processingDays": 0.38,
264
271
  "sellPrice": 100,
272
+ "profession": [],
265
273
  "sellPriceFormula": null,
266
274
  "priceFormula": null,
267
275
  "qualityLevels": false,
@@ -291,6 +299,7 @@
291
299
  "processingMinutes": 180,
292
300
  "processingDays": 0.11,
293
301
  "sellPrice": 100,
302
+ "profession": [],
294
303
  "sellPriceFormula": null,
295
304
  "priceFormula": null,
296
305
  "qualityLevels": false,
@@ -325,6 +334,7 @@
325
334
  "processingMinutes": 4000,
326
335
  "processingDays": 2.5,
327
336
  "sellPrice": null,
337
+ "profession": ["artisan"],
328
338
  "sellPriceFormula": "50 + 2× base fruit price",
329
339
  "priceFormula": {
330
340
  "multiplier": 2,
@@ -354,6 +364,7 @@
354
364
  "processingMinutes": 4000,
355
365
  "processingDays": 2.5,
356
366
  "sellPrice": null,
367
+ "profession": ["artisan"],
357
368
  "sellPriceFormula": "50 + 2× base vegetable price",
358
369
  "priceFormula": {
359
370
  "multiplier": 2,
@@ -383,6 +394,7 @@
383
394
  "processingMinutes": 4000,
384
395
  "processingDays": 2.5,
385
396
  "sellPrice": null,
397
+ "profession": ["artisan"],
386
398
  "sellPriceFormula": "2× base roe price",
387
399
  "priceFormula": {
388
400
  "multiplier": 2,
@@ -415,6 +427,7 @@
415
427
  "processingMinutes": 6000,
416
428
  "processingDays": 3.75,
417
429
  "sellPrice": 500,
430
+ "profession": ["artisan"],
418
431
  "sellPriceFormula": null,
419
432
  "priceFormula": null,
420
433
  "qualityLevels": false,
@@ -449,6 +462,7 @@
449
462
  "processingMinutes": 200,
450
463
  "processingDays": 0.13,
451
464
  "sellPrice": 230,
465
+ "profession": ["artisan"],
452
466
  "sellPriceFormula": "Large Milk produces Gold quality (345g)",
453
467
  "priceFormula": null,
454
468
  "qualityLevels": true,
@@ -487,6 +501,7 @@
487
501
  "processingMinutes": 200,
488
502
  "processingDays": 0.13,
489
503
  "sellPrice": 400,
504
+ "profession": ["artisan"],
490
505
  "sellPriceFormula": "Large Goat Milk produces Gold quality (600g)",
491
506
  "priceFormula": null,
492
507
  "qualityLevels": true,
@@ -520,6 +535,7 @@
520
535
  "processingMinutes": 240,
521
536
  "processingDays": 0.15,
522
537
  "sellPrice": 470,
538
+ "profession": ["artisan"],
523
539
  "sellPriceFormula": null,
524
540
  "priceFormula": null,
525
541
  "qualityLevels": false,
@@ -545,6 +561,7 @@
545
561
  "processingMinutes": 360,
546
562
  "processingDays": 0.23,
547
563
  "sellPrice": 1065,
564
+ "profession": ["artisan"],
548
565
  "sellPriceFormula": null,
549
566
  "priceFormula": null,
550
567
  "qualityLevels": false,
@@ -584,6 +601,7 @@
584
601
  "processingMinutes": 1000,
585
602
  "processingDays": 0.63,
586
603
  "sellPrice": 100,
604
+ "profession": ["artisan"],
587
605
  "sellPriceFormula": null,
588
606
  "priceFormula": null,
589
607
  "qualityLevels": false,
@@ -633,6 +651,7 @@
633
651
  "processingMinutes": 180,
634
652
  "processingDays": 0.11,
635
653
  "sellPrice": 190,
654
+ "profession": ["artisan"],
636
655
  "sellPriceFormula": "Large Egg produces 2× Mayonnaise; Golden Egg produces Gold quality",
637
656
  "priceFormula": null,
638
657
  "qualityLevels": false,
@@ -662,6 +681,7 @@
662
681
  "processingMinutes": 180,
663
682
  "processingDays": 0.11,
664
683
  "sellPrice": 375,
684
+ "profession": ["artisan"],
665
685
  "sellPriceFormula": null,
666
686
  "priceFormula": null,
667
687
  "qualityLevels": false,
@@ -691,6 +711,7 @@
691
711
  "processingMinutes": 180,
692
712
  "processingDays": 0.11,
693
713
  "sellPrice": 275,
714
+ "profession": ["artisan"],
694
715
  "sellPriceFormula": null,
695
716
  "priceFormula": null,
696
717
  "qualityLevels": false,
@@ -721,6 +742,7 @@
721
742
  "processingMinutes": 180,
722
743
  "processingDays": 0.11,
723
744
  "sellPrice": 800,
745
+ "profession": ["artisan"],
724
746
  "sellPriceFormula": null,
725
747
  "priceFormula": null,
726
748
  "qualityLevels": false,
@@ -750,6 +772,7 @@
750
772
  "processingMinutes": 1600,
751
773
  "processingDays": 1,
752
774
  "sellPrice": 600,
775
+ "profession": [],
753
776
  "sellPriceFormula": null,
754
777
  "priceFormula": null,
755
778
  "qualityLevels": false,
@@ -779,6 +802,7 @@
779
802
  "processingMinutes": 1600,
780
803
  "processingDays": 1,
781
804
  "sellPrice": null,
805
+ "profession": ["artisan"],
782
806
  "sellPriceFormula": "2.5× base fruit price",
783
807
  "priceFormula": {
784
808
  "multiplier": 2.5,
@@ -808,6 +832,7 @@
808
832
  "processingMinutes": 1600,
809
833
  "processingDays": 1,
810
834
  "sellPrice": null,
835
+ "profession": ["artisan"],
811
836
  "sellPriceFormula": "2.5× base mushroom price",
812
837
  "priceFormula": {
813
838
  "multiplier": 2.5,
@@ -837,6 +862,7 @@
837
862
  "processingMinutes": 50,
838
863
  "processingDays": 0.03,
839
864
  "sellPrice": null,
865
+ "profession": ["fisher", "artisan", "angler"],
840
866
  "sellPriceFormula": "2× base fish sell price",
841
867
  "priceFormula": {
842
868
  "multiplier": 2,
@@ -866,6 +892,7 @@
866
892
  "processingMinutes": 10080,
867
893
  "processingDays": 7,
868
894
  "sellPrice": 1000,
895
+ "profession": ["tapper"],
869
896
  "sellPriceFormula": null,
870
897
  "priceFormula": null,
871
898
  "qualityLevels": false,
@@ -895,6 +922,7 @@
895
922
  "processingMinutes": 14400,
896
923
  "processingDays": 9,
897
924
  "sellPrice": 200,
925
+ "profession": ["tapper"],
898
926
  "sellPriceFormula": null,
899
927
  "priceFormula": null,
900
928
  "qualityLevels": false,
@@ -924,6 +952,7 @@
924
952
  "processingMinutes": 11200,
925
953
  "processingDays": 7,
926
954
  "sellPrice": 150,
955
+ "profession": ["tapper"],
927
956
  "sellPriceFormula": null,
928
957
  "priceFormula": null,
929
958
  "qualityLevels": false,
@@ -949,6 +978,7 @@
949
978
  "processingMinutes": 8000,
950
979
  "processingDays": 5,
951
980
  "sellPrice": 100,
981
+ "profession": ["tapper"],
952
982
  "sellPriceFormula": null,
953
983
  "priceFormula": null,
954
984
  "qualityLevels": false,