Jesse Plamondon-Willard
de178828dd
sort new entries, add alternate author name for Stardew Essentials
2026-09-13 19:14:46 -04:00
AnotherPillow
da02ee9cfb
Update SMAPI.blacklist.json for stardewessentials & stardew spaec age
2026-09-14 00:10:57 +01:00
Jesse Plamondon-Willard
f2da005117
update mod blacklist for malicious 'Stardew Sprint' mod
2026-09-12 01:25:00 -04:00
Jesse Plamondon-Willard
327809f912
assign stat color for new 'malware scan' SMAPI cost
2026-09-12 01:25:00 -04:00
Jesse Plamondon-Willard
930d8d94f2
update stats page automatically when dataset changes
2026-09-12 01:25:00 -04:00
Jesse Plamondon-Willard
79f9bbbe3e
deprecate mod compatibility list
2026-07-01 16:31:21 -04:00
Jesse Plamondon-Willard
446dd933c8
fix stats page when mod ID capitalization changes in data
2026-06-30 21:34:30 -04:00
Jesse Plamondon-Willard
5689c8d6ae
switch to zip download for fetching mod dataset
...
Azure App Services doesn't have Git installed on the servers by default, and alternatives like LibGit2Sharp are slower than just redownloading the latest branch when it changes.
2026-06-25 01:07:48 -04:00
Jesse Plamondon-Willard
a444b2b359
update release notes & URL for open mod dataset
2026-06-24 16:01:15 -04:00
Jesse Plamondon-Willard
012f1cd109
simplify chart controls
...
This commit:
- removes the 'enable advanced controls' checkbox;
- disables the 'data view' option for simplicity;
- and enables the remaining features which the checkbox toggled.
2026-06-24 15:46:28 -04:00
Jesse Plamondon-Willard
a979564a8c
remove timeline on bar/line charts
...
These aren't as useful with the new mark lines.
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
9b8712a4e3
add independent error-handling for each file
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
40611258bf
add DNS traffic to stats page
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
d691aeba15
add marklines for notable events
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
bfdd2b4126
add web costs & Patreon to stats page
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
6002688149
add stats quick nav sidebar
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
45cea17788
add 'Content Patcher packs' stats
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
f8d23d3799
add checkbox to toggle advanced controls
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
65f57bff6c
add timeline controls for all charts
2026-06-24 15:46:27 -04:00
Jesse Plamondon-Willard
ef3001aa49
add stats page with initial 'mods by type' and 'new mods' charts
2026-06-24 15:46:25 -04:00
Jesse Plamondon-Willard
13818abc3d
fix inconsistent mod/user ID types in mod data
...
This avoids needing to cast values between models (e.g. between the compatibility list and open mod dataset).
2026-06-10 22:17:08 -04:00
Jesse Plamondon-Willard
e5e35f0253
add open mod dataset to the SMAPI toolkit
2026-06-09 01:43:47 -04:00
Jesse Plamondon-Willard
67cfb40600
update mod blacklist
2026-04-30 10:48:09 -04:00
Jesse Plamondon-Willard
d3d161488c
update mod blacklist
2026-04-30 00:26:43 -04:00
Jesse Plamondon-Willard
423076ff90
update mod blacklist
2026-04-01 11:58:52 -04:00
Jesse Plamondon-Willard
11c6d61031
optimize watcher IsChanged tracking
...
This commit...
- avoids repeated collection count accesses since we can just track the result while updating;
- and adds more short-circuiting in cases where we know watchers haven't changed.
2026-03-29 18:31:02 -04:00
Jesse Plamondon-Willard
f2d1fa5e65
reduce unneeded internal use of IEnumerable<T>
2026-03-28 23:52:50 -04:00
Jesse Plamondon-Willard
d9c62b9815
optimize ButtonsChanged event args
...
This commit...
- removes the Lazy<T>, which was unnecessary since mods will virtually always check which buttons were changed;
- avoids a dictionary lookup on each property access;
- and avoids allocating LINQ enumerators, temporary array, and dictionary on init.
2026-03-28 23:52:50 -04:00
Jesse Plamondon-Willard
bc6d7e90ff
optimize AssetsInvalidated event args
...
Some quick benchmarks show that...
- `new HashSet<T>(values)` (266ns) is 79% faster than `values.ToImmutableHashSet()` (1440ns);
- filling a hash set with a loop (554ns) is 21% faster than filling it from a LINQ enumerable (697ns);
- and searching a `HashSet` (18ns) is 49% faster than searching an `ImmutableHashSet` (35ns).
2026-03-28 23:52:50 -04:00
Jesse Plamondon-Willard
6bfb481838
prefer strongly-typed Enum.* methods
2026-03-28 23:52:50 -04:00
Jesse Plamondon-Willard
1070761192
prefer empty collection expression
2026-03-28 23:52:50 -04:00
Jesse Plamondon-Willard
677dd94b61
update Korean translations
...
Thanks to To2morrow on Nexus!
2026-03-27 23:59:34 -04:00
Jesse Plamondon-Willard
45216fe62b
reduce allocations in collection watchers
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
aaa23edc49
use cached HasListeners in ManagedEvent.Raise for simplicity
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
e4f42f961b
avoid redundant set.Contains before Add/Remove
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
a6b5b3260a
avoid Math.sqrt call in gamepad deadzone handling
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
d9d33c5949
reduce remaining uses of LINQ on warmer paths
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
06ebc8d049
avoid unneeded OrderBy(…) in AssemblyLoader
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
2194fa6f28
avoid Any() on warmer paths
...
This is typically much slower than equivalent manual checks.
2026-03-27 23:59:33 -04:00
Jesse Plamondon-Willard
7bc3595e66
avoid Union() enumerator in player inventory tracking
2026-03-26 22:42:35 -04:00
Jesse Plamondon-Willard
db59d384b9
avoid Where() enumerators when possible
2026-03-26 22:42:35 -04:00
Jesse Plamondon-Willard
da888ba9b0
avoid ToArray() copies when possible
2026-03-26 22:42:35 -04:00
Jesse Plamondon-Willard
42238538bd
remove Distinct() in inventory tracking
...
These cover very rare edge cases with invalid inventory data, so it's not really worth the added performance hit of handling them. The next commits will avoid the error if duplicates do occur.
2026-03-26 22:42:35 -04:00
Jesse Plamondon-Willard
67dff9ea7a
avoid unneeded inventory scan in PlayerTracker.TryGetInventoryChanges
...
We already have the current inventory (as of the last update) in `this.CurrentInventory`, which is usually what we want to diff against.
2026-03-26 22:42:35 -04:00
Jesse Plamondon-Willard
88c2250738
add OS platform type to temporary stats
2026-03-26 22:42:35 -04:00
Jesse Plamondon-Willard
87bfc1b093
split up extension files
2026-03-26 00:48:58 -04:00
Jesse Plamondon-Willard
bdf5b0eb48
migrate to extension blocks
2026-03-26 00:48:57 -04:00
Jesse Plamondon-Willard
daf6b1050d
optimize input button tracking
...
This replaces `ButtonStates` dictionaries with `PressedButtons` sets, which...
- reduces allocations (since most buttons aren't down at any given time);
- reduces iteration (and a yield generator in `GamePadStateBuilder.GetPressedGamePadButtons()`) for filling pressed buttons;
- and simplifies change tracking.
2026-03-24 21:53:38 -04:00
Jesse Plamondon-Willard
3474f49c8c
reduce allocations when applying input overrides
2026-03-24 00:07:36 -04:00
Jesse Plamondon-Willard
f7bc2d96f5
avoid .Any() on hot paths
...
This allocates an enumerator unnecessarily if we already have the count available.
2026-03-22 23:15:38 -04:00