stardew-valley-data 0.22.0 → 0.24.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 +20 -3
- package/data/buildings.json +19 -0
- package/dist/index.d.mts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +47 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,24 @@ 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.24.0] - 2026-03-22
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `parseFishPonds()` parser added — new `fishPonds` field on `SaveData` extracting fish pond
|
|
13
|
+
buildings with `buildingId`, `fishType` (item ID), `currentOccupants`, and `maxOccupants`
|
|
14
|
+
- `SaveFishPond` interface added to save file types
|
|
15
|
+
|
|
16
|
+
## [0.23.0] - 2026-03-22
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **Greenhouse** added to `data/buildings.json` — unlocked via Community Center Pantry bundles or
|
|
21
|
+
Joja purchase; climate-controlled building for all-season crop growing
|
|
22
|
+
- `animalCapacity?: number` optional field added to `Building` type — Coop (4), Big Coop (8), Deluxe
|
|
23
|
+
Coop (12), Barn (4), Big Barn (8), Deluxe Barn (12), Slime Hutch (20)
|
|
24
|
+
- `BuildingBuilder` type expanded to include `'Community Center' | 'Joja'`
|
|
25
|
+
|
|
8
26
|
## [0.22.0] - 2026-03-22
|
|
9
27
|
|
|
10
28
|
### Added
|
|
@@ -37,8 +55,6 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
37
55
|
|
|
38
56
|
- **Prismatic Slime** added to `data/monsters.json` as a top-level monster (HP 1000, damage 35);
|
|
39
57
|
drops Slime and Prismatic Shard; image downloaded as GIF
|
|
40
|
-
- **Dragon Tooth** (`id: "852"`) added to `data/monster-loot.json` — 500g sell price, dropped by
|
|
41
|
-
Lava Lurk; image moved from `images/minerals/` to `images/monsters/monster-loot/`
|
|
42
58
|
- **Frost Jelly** extracted from Green Slime variants as its own top-level monster entry
|
|
43
59
|
|
|
44
60
|
### Fix
|
|
@@ -65,7 +81,8 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
65
81
|
|
|
66
82
|
### Added
|
|
67
83
|
|
|
68
|
-
-
|
|
84
|
+
- **Dragon Tooth** (`id: "852"`) added to `data/monster-loot.json` — 500g sell price, dropped by
|
|
85
|
+
Lava Lurk; image moved from `images/minerals/` to `images/monsters/monster-loot/`
|
|
69
86
|
|
|
70
87
|
## [0.15.0] - 2026-03-20
|
|
71
88
|
|
package/data/buildings.json
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"upgradeFrom": null,
|
|
22
22
|
"magical": false,
|
|
23
|
+
"animalCapacity": 4,
|
|
23
24
|
"image": "images/buildings/coop/Coop.png"
|
|
24
25
|
},
|
|
25
26
|
{
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
],
|
|
44
45
|
"upgradeFrom": "coop",
|
|
45
46
|
"magical": false,
|
|
47
|
+
"animalCapacity": 8,
|
|
46
48
|
"image": "images/buildings/coop/Big Coop.png"
|
|
47
49
|
},
|
|
48
50
|
{
|
|
@@ -66,6 +68,7 @@
|
|
|
66
68
|
],
|
|
67
69
|
"upgradeFrom": "big-coop",
|
|
68
70
|
"magical": false,
|
|
71
|
+
"animalCapacity": 12,
|
|
69
72
|
"image": "images/buildings/coop/Deluxe Coop.png"
|
|
70
73
|
},
|
|
71
74
|
{
|
|
@@ -89,6 +92,7 @@
|
|
|
89
92
|
],
|
|
90
93
|
"upgradeFrom": null,
|
|
91
94
|
"magical": false,
|
|
95
|
+
"animalCapacity": 4,
|
|
92
96
|
"image": "images/buildings/barn/Barn.png"
|
|
93
97
|
},
|
|
94
98
|
{
|
|
@@ -112,6 +116,7 @@
|
|
|
112
116
|
],
|
|
113
117
|
"upgradeFrom": "barn",
|
|
114
118
|
"magical": false,
|
|
119
|
+
"animalCapacity": 8,
|
|
115
120
|
"image": "images/buildings/barn/Big Barn.png"
|
|
116
121
|
},
|
|
117
122
|
{
|
|
@@ -135,6 +140,7 @@
|
|
|
135
140
|
],
|
|
136
141
|
"upgradeFrom": "big-barn",
|
|
137
142
|
"magical": false,
|
|
143
|
+
"animalCapacity": 12,
|
|
138
144
|
"image": "images/buildings/barn/Deluxe Barn.png"
|
|
139
145
|
},
|
|
140
146
|
{
|
|
@@ -329,6 +335,7 @@
|
|
|
329
335
|
],
|
|
330
336
|
"upgradeFrom": null,
|
|
331
337
|
"magical": false,
|
|
338
|
+
"animalCapacity": 20,
|
|
332
339
|
"image": "images/buildings/Slime Hutch.png"
|
|
333
340
|
},
|
|
334
341
|
{
|
|
@@ -525,5 +532,17 @@
|
|
|
525
532
|
"upgradeFrom": null,
|
|
526
533
|
"magical": true,
|
|
527
534
|
"image": "images/buildings/Gold Clock.png"
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
"id": "greenhouse",
|
|
538
|
+
"name": "Greenhouse",
|
|
539
|
+
"description": "A climate-controlled building where crops can be grown in any season. Unlocked by completing the Pantry bundles or purchasing the Joja Greenhouse.",
|
|
540
|
+
"builder": "Community Center",
|
|
541
|
+
"buildCost": 0,
|
|
542
|
+
"buildDays": 0,
|
|
543
|
+
"materials": [],
|
|
544
|
+
"upgradeFrom": null,
|
|
545
|
+
"magical": false,
|
|
546
|
+
"image": "images/buildings/Greenhouse.png"
|
|
528
547
|
}
|
|
529
548
|
]
|
package/dist/index.d.mts
CHANGED
|
@@ -1235,7 +1235,7 @@ interface BuildingMaterial {
|
|
|
1235
1235
|
item: string;
|
|
1236
1236
|
quantity: number;
|
|
1237
1237
|
}
|
|
1238
|
-
type BuildingBuilder = 'Robin' | 'Wizard';
|
|
1238
|
+
type BuildingBuilder = 'Robin' | 'Wizard' | 'Community Center' | 'Joja';
|
|
1239
1239
|
interface Building {
|
|
1240
1240
|
id: string;
|
|
1241
1241
|
name: string;
|
|
@@ -1246,6 +1246,7 @@ interface Building {
|
|
|
1246
1246
|
materials: BuildingMaterial[];
|
|
1247
1247
|
upgradeFrom: string | null;
|
|
1248
1248
|
magical: boolean;
|
|
1249
|
+
animalCapacity?: number;
|
|
1249
1250
|
image: string;
|
|
1250
1251
|
}
|
|
1251
1252
|
|
|
@@ -2636,6 +2637,7 @@ interface SaveData {
|
|
|
2636
2637
|
stardrops: SaveStardropEntry[];
|
|
2637
2638
|
stats: SaveStats;
|
|
2638
2639
|
animals: SaveAnimal[];
|
|
2640
|
+
fishPonds: SaveFishPond[];
|
|
2639
2641
|
buildings: SaveBuilding[];
|
|
2640
2642
|
cookingRecipes: SaveRecipeEntry[];
|
|
2641
2643
|
craftingRecipes: SaveRecipeEntry[];
|
|
@@ -2776,6 +2778,13 @@ interface SaveAnimal {
|
|
|
2776
2778
|
age: number;
|
|
2777
2779
|
hasAnimalCracker: boolean;
|
|
2778
2780
|
}
|
|
2781
|
+
/** A fish pond building with the fish species and population. */
|
|
2782
|
+
interface SaveFishPond {
|
|
2783
|
+
buildingId: string;
|
|
2784
|
+
fishType: number;
|
|
2785
|
+
currentOccupants: number;
|
|
2786
|
+
maxOccupants: number;
|
|
2787
|
+
}
|
|
2779
2788
|
/** A farm building with its type, position, and current animal count. */
|
|
2780
2789
|
interface SaveBuilding {
|
|
2781
2790
|
id: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1235,7 +1235,7 @@ interface BuildingMaterial {
|
|
|
1235
1235
|
item: string;
|
|
1236
1236
|
quantity: number;
|
|
1237
1237
|
}
|
|
1238
|
-
type BuildingBuilder = 'Robin' | 'Wizard';
|
|
1238
|
+
type BuildingBuilder = 'Robin' | 'Wizard' | 'Community Center' | 'Joja';
|
|
1239
1239
|
interface Building {
|
|
1240
1240
|
id: string;
|
|
1241
1241
|
name: string;
|
|
@@ -1246,6 +1246,7 @@ interface Building {
|
|
|
1246
1246
|
materials: BuildingMaterial[];
|
|
1247
1247
|
upgradeFrom: string | null;
|
|
1248
1248
|
magical: boolean;
|
|
1249
|
+
animalCapacity?: number;
|
|
1249
1250
|
image: string;
|
|
1250
1251
|
}
|
|
1251
1252
|
|
|
@@ -2636,6 +2637,7 @@ interface SaveData {
|
|
|
2636
2637
|
stardrops: SaveStardropEntry[];
|
|
2637
2638
|
stats: SaveStats;
|
|
2638
2639
|
animals: SaveAnimal[];
|
|
2640
|
+
fishPonds: SaveFishPond[];
|
|
2639
2641
|
buildings: SaveBuilding[];
|
|
2640
2642
|
cookingRecipes: SaveRecipeEntry[];
|
|
2641
2643
|
craftingRecipes: SaveRecipeEntry[];
|
|
@@ -2776,6 +2778,13 @@ interface SaveAnimal {
|
|
|
2776
2778
|
age: number;
|
|
2777
2779
|
hasAnimalCracker: boolean;
|
|
2778
2780
|
}
|
|
2781
|
+
/** A fish pond building with the fish species and population. */
|
|
2782
|
+
interface SaveFishPond {
|
|
2783
|
+
buildingId: string;
|
|
2784
|
+
fishType: number;
|
|
2785
|
+
currentOccupants: number;
|
|
2786
|
+
maxOccupants: number;
|
|
2787
|
+
}
|
|
2779
2788
|
/** A farm building with its type, position, and current animal count. */
|
|
2780
2789
|
interface SaveBuilding {
|
|
2781
2790
|
id: string;
|
package/dist/index.js
CHANGED
|
@@ -40029,6 +40029,7 @@ var buildings_default = [
|
|
|
40029
40029
|
],
|
|
40030
40030
|
upgradeFrom: null,
|
|
40031
40031
|
magical: false,
|
|
40032
|
+
animalCapacity: 4,
|
|
40032
40033
|
image: "images/buildings/coop/Coop.png"
|
|
40033
40034
|
},
|
|
40034
40035
|
{
|
|
@@ -40052,6 +40053,7 @@ var buildings_default = [
|
|
|
40052
40053
|
],
|
|
40053
40054
|
upgradeFrom: "coop",
|
|
40054
40055
|
magical: false,
|
|
40056
|
+
animalCapacity: 8,
|
|
40055
40057
|
image: "images/buildings/coop/Big Coop.png"
|
|
40056
40058
|
},
|
|
40057
40059
|
{
|
|
@@ -40075,6 +40077,7 @@ var buildings_default = [
|
|
|
40075
40077
|
],
|
|
40076
40078
|
upgradeFrom: "big-coop",
|
|
40077
40079
|
magical: false,
|
|
40080
|
+
animalCapacity: 12,
|
|
40078
40081
|
image: "images/buildings/coop/Deluxe Coop.png"
|
|
40079
40082
|
},
|
|
40080
40083
|
{
|
|
@@ -40098,6 +40101,7 @@ var buildings_default = [
|
|
|
40098
40101
|
],
|
|
40099
40102
|
upgradeFrom: null,
|
|
40100
40103
|
magical: false,
|
|
40104
|
+
animalCapacity: 4,
|
|
40101
40105
|
image: "images/buildings/barn/Barn.png"
|
|
40102
40106
|
},
|
|
40103
40107
|
{
|
|
@@ -40121,6 +40125,7 @@ var buildings_default = [
|
|
|
40121
40125
|
],
|
|
40122
40126
|
upgradeFrom: "barn",
|
|
40123
40127
|
magical: false,
|
|
40128
|
+
animalCapacity: 8,
|
|
40124
40129
|
image: "images/buildings/barn/Big Barn.png"
|
|
40125
40130
|
},
|
|
40126
40131
|
{
|
|
@@ -40144,6 +40149,7 @@ var buildings_default = [
|
|
|
40144
40149
|
],
|
|
40145
40150
|
upgradeFrom: "big-barn",
|
|
40146
40151
|
magical: false,
|
|
40152
|
+
animalCapacity: 12,
|
|
40147
40153
|
image: "images/buildings/barn/Deluxe Barn.png"
|
|
40148
40154
|
},
|
|
40149
40155
|
{
|
|
@@ -40338,6 +40344,7 @@ var buildings_default = [
|
|
|
40338
40344
|
],
|
|
40339
40345
|
upgradeFrom: null,
|
|
40340
40346
|
magical: false,
|
|
40347
|
+
animalCapacity: 20,
|
|
40341
40348
|
image: "images/buildings/Slime Hutch.png"
|
|
40342
40349
|
},
|
|
40343
40350
|
{
|
|
@@ -40534,6 +40541,18 @@ var buildings_default = [
|
|
|
40534
40541
|
upgradeFrom: null,
|
|
40535
40542
|
magical: true,
|
|
40536
40543
|
image: "images/buildings/Gold Clock.png"
|
|
40544
|
+
},
|
|
40545
|
+
{
|
|
40546
|
+
id: "greenhouse",
|
|
40547
|
+
name: "Greenhouse",
|
|
40548
|
+
description: "A climate-controlled building where crops can be grown in any season. Unlocked by completing the Pantry bundles or purchasing the Joja Greenhouse.",
|
|
40549
|
+
builder: "Community Center",
|
|
40550
|
+
buildCost: 0,
|
|
40551
|
+
buildDays: 0,
|
|
40552
|
+
materials: [],
|
|
40553
|
+
upgradeFrom: null,
|
|
40554
|
+
magical: false,
|
|
40555
|
+
image: "images/buildings/Greenhouse.png"
|
|
40537
40556
|
}
|
|
40538
40557
|
];
|
|
40539
40558
|
|
|
@@ -40641,6 +40660,33 @@ function parseAnimals(root) {
|
|
|
40641
40660
|
}
|
|
40642
40661
|
return result;
|
|
40643
40662
|
}
|
|
40663
|
+
function parseFishPonds(root) {
|
|
40664
|
+
const result = [];
|
|
40665
|
+
const locations2 = ensureArray(root.locations?.GameLocation);
|
|
40666
|
+
for (const loc of locations2) {
|
|
40667
|
+
const l = loc;
|
|
40668
|
+
if (str(l.name) !== "Farm") continue;
|
|
40669
|
+
const buildings2 = ensureArray(l.buildings?.Building);
|
|
40670
|
+
for (const building of buildings2) {
|
|
40671
|
+
const b = building;
|
|
40672
|
+
const xsiType = str(
|
|
40673
|
+
b["@_xsi:type"] ?? b["@_type"]
|
|
40674
|
+
);
|
|
40675
|
+
if (xsiType !== "FishPond") continue;
|
|
40676
|
+
const fishTypeRaw = b.fishType;
|
|
40677
|
+
const fishType = num(fishTypeRaw?.int);
|
|
40678
|
+
if (fishType === 0) continue;
|
|
40679
|
+
result.push({
|
|
40680
|
+
buildingId: str(b.id),
|
|
40681
|
+
fishType,
|
|
40682
|
+
currentOccupants: num(b.currentOccupants),
|
|
40683
|
+
maxOccupants: num(b.maxOccupants)
|
|
40684
|
+
});
|
|
40685
|
+
}
|
|
40686
|
+
break;
|
|
40687
|
+
}
|
|
40688
|
+
return result;
|
|
40689
|
+
}
|
|
40644
40690
|
|
|
40645
40691
|
// src/save-file/parsers/v1/buildings.ts
|
|
40646
40692
|
function parseBuildings(root) {
|
|
@@ -41547,6 +41593,7 @@ var v1 = (ctx) => ({
|
|
|
41547
41593
|
stardrops: parseStardrops(ctx.player.mailReceived),
|
|
41548
41594
|
stats: parseStats(ctx.player),
|
|
41549
41595
|
animals: parseAnimals(ctx.root),
|
|
41596
|
+
fishPonds: parseFishPonds(ctx.root),
|
|
41550
41597
|
buildings: parseBuildings(ctx.root),
|
|
41551
41598
|
cookingRecipes: parseCookingRecipes(ctx.player.cookingRecipes, ctx.player.recipesCooked),
|
|
41552
41599
|
craftingRecipes: parseCraftingRecipes(ctx.player.craftingRecipes),
|