This page explains some of the Stardew Valley fundamentals that are useful for modders. See also [[Modding:Common tasks]].
This page explains some of the Stardew Valley fundamentals that are useful for modders. See also [[Modding:Common tasks]].
+
+
==Data structures==
+
===Net fields===
+
A 'net type' is any of several new classes which Stardew Valley 1.3 uses to sync data between players, named for the <code>Net</code> prefix in their name. A net type can represent a simple value like <tt>NetBool</tt>, or complex values like <tt>NetFieldDictionary</tt>. Many existing fields have been converted to net types (called 'net fields'), each wrapping the underlying value:
+
: <source lang="C#">
+
NetString str = new NetString("bar");
+
if (str.Value == "bar") // true
+
</source>
+
+
Impact on mods:
+
* The game will regularly collect all the net fields reachable from <tt>Game1.netWorldState</tt> and sync them with other players. That means that many mod changes will be synchronised automatically in multiplayer.
+
* Net fields can implicitly convert to their equivalent normal values (like <code>bool x = new NetBool(true)</code>), but their conversion rules can be counterintuitive and error-prone. For example, <code>item?.category == null && item?.category != null</code> can both be true at once. '''Always avoid implicit casts to minimise bugs.'''
+
+
Suggested fix:
+
* With the latest mod build package installed, rebuild your project. The package will detect net field references you need to update, and show an appropriate warning. See [[#Fix common build warnings|''fix common build warnings'']] below.