Changes

Jump to navigation Jump to search
+ common build warnings from Modding:Migrate to Stardew Valley 1.3 (only author is Pathoschild)
Line 3: Line 3:  
This page helps solve common issues when creating mods. '''For issues ''using'' mods, see [[Modding:Player Guide/Troubleshooting]].'''
 
This page helps solve common issues when creating mods. '''For issues ''using'' mods, see [[Modding:Player Guide/Troubleshooting]].'''
   −
==Fix common issues==
+
==Fix common build warnings==
''TODO''
+
Make sure you check your Error List pane in Visual Studio (or equivalent in other IDEs) and fix any warnings. Here are some common ones:
 +
 
 +
===Mismatch between the processor architecture...===
 +
Sample warning: "''There was a mismatch between the processor architecture of the project being built "{0}" and the processor architecture of the reference "{1}". This mismatch may cause runtime failures.''"
 +
 
 +
That warning is normal. The error is saying that your build is set to 'Any CPU', but Stardew Valley is x86-only so it'll only work in x86 anyway. You can either ignore it, or [https://msdn.microsoft.com/en-us/library/ms185328.aspx change your platform target] to x86.
 +
 
 +
===This implicitly converts...===
 +
Sample warning: "''This implicitly converts '{0}' from Net{1} to {2}, but Net{1} has unintuitive implicit conversion rules. Consider comparing against the actual value instead to avoid bugs. See https://smapi.io/buildmsg/avoid-implicit-net-field-cast for details.''"
 +
 
 +
Your code is referencing a [[#Net fields|net field]], which can cause subtle bugs. The field you're referencing has an equivalent non-net property, like <tt>monster.Health</tt> (<tt>int</tt>) instead of <tt>monster.health</tt> (<tt>NetBool</tt>). Change your code to use the suggested property instead.
 +
 
 +
===FieldName is a Net* field...===
 +
Sample warning: "'''{0}' is a Net{1} field; consider using the {2} property instead. See https://smapi.io/buildmsg/avoid-net-field for details.''"
 +
 
 +
Your code is referencing a [[#Net fields|net field]], which can cause subtle bugs. You should access the underlying value instead:
 +
<ul>
 +
<li>For a reference type (i.e. one that can contain <tt>null</tt>), you can use the <tt>.Value</tt> property (or <tt>.FieldDict</tt> for a <tt>NetDictionary</tt>):
 +
<source lang="c#">
 +
if (building.indoors.Value == null)
 +
</source>
 +
 
 +
Or convert the value before comparison:
 +
<source lang="c#">
 +
GameLocation indoors = building.indoors.Value;
 +
if(indoors == null)
 +
  // ...
 +
</source></li>
 +
<li>For a value type (i.e. one that can't contain <tt>null</tt>), check if the parent is null (if needed) and compare with <tt>.Value</tt>:
 +
<source lang="c#">
 +
if (item != null && item.category.Value == 0)
 +
</source></li>
 +
</ul>
 +
 
 +
===The FieldName field is obsolete...===
 +
Sample warning: "''The 'Character.friendships' field is obsolete and should be replaced with 'friendshipData'. See https://smapi.io/buildmsg/avoid-obsolete-field for details.''"
 +
 
 +
You're referencing a field which should no longer be used. Use the suggested field name instead to fix it.
    
==Ask for help==
 
==Ask for help==
 
If you still need help, ask for help in [[Modding:Community#Discord|#modding on the Stardew Valley Discord]]. The Stardew Valley modding community is very welcoming!
 
If you still need help, ask for help in [[Modding:Community#Discord|#modding on the Stardew Valley Discord]]. The Stardew Valley modding community is very welcoming!
translators
8,403

edits

Navigation menu