summaryrefslogtreecommitdiff
path: root/build/smapi.targets
blob: ea6af7236d3456c3ee342d128ad63b6d08a8faa3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!--######
  ## import global settings
  #######-->
  <Import Condition="$(OS) != 'Windows_NT' AND Exists('$(HOME)\stardewvalley.targets')" Project="$(HOME)\stardewvalley.targets" />
  <Import Condition="$(OS) == 'Windows_NT' AND Exists('$(USERPROFILE)\stardewvalley.targets')" Project="$(USERPROFILE)\stardewvalley.targets" />

  <!--######
  ## select target OS
  #######-->
  <PropertyGroup>
    <GamePlatform Condition="$(OS) == 'Unix'">Linux</GamePlatform>
    <GamePlatform Condition="$(OS) == 'OSX'">Mac</GamePlatform>
    <GamePlatform Condition="$(OS) == 'Windows_NT'">Windows</GamePlatform>
  </PropertyGroup>

  <!--######
  ## select game path
  #######-->
  <PropertyGroup>
    <!-- Linux -->
    <GamePath Condition="!Exists('$(GamePath)')">$(HOME)/GOG Games/Stardew Valley/game</GamePath>
    <GamePath Condition="!Exists('$(GamePath)')">$(HOME)/.local/share/Steam/steamapps/common/Stardew Valley</GamePath>

    <!-- Mac -->
    <GamePath Condition="!Exists('$(GamePath)')">/Applications/Stardew Valley.app/Contents/MacOS</GamePath>
    <GamePath Condition="!Exists('$(GamePath)')">$(HOME)/Library/Application Support/Steam/steamapps/common/Stardew Valley/Contents/MacOS</GamePath>

    <!-- Windows -->
    <GamePath Condition="!Exists('$(GamePath)')">C:\Program Files (x86)\GalaxyClient\Games\Stardew Valley</GamePath>
    <GamePath Condition="!Exists('$(GamePath)')">C:\Program Files (x86)\Steam\steamapps\common\Stardew Valley</GamePath>
    <GamePath Condition="!Exists('$(GamePath)') AND '$(GamePlatform)' == 'Windows'">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\GOG.com\Games\1453375253', 'PATH', null, RegistryView.Registry32))</GamePath>
    <GamePath Condition="!Exists('$(GamePath)') AND '$(GamePlatform)' == 'Windows'">$([MSBuild]::GetRegistryValueFromView('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 413150', 'InstallLocation', null, RegistryView.Registry64, RegistryView.Registry32))</GamePath>
  </PropertyGroup>

  <!--######
  ## set up configuration
  #######-->
  <Choose>
    <When Condition="$(GamePlatform) == 'Windows'">
      <!-- references -->
      <ItemGroup>
        <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
          <Private>false</Private>
        </Reference>
        <Reference Include="Microsoft.Xna.Framework.Game, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
          <Private>false</Private>
        </Reference>
        <Reference Include="Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
          <Private>false</Private>
        </Reference>
        <Reference Include="Stardew Valley">
          <HintPath>$(GamePath)\Stardew Valley.exe</HintPath>
          <Private>false</Private>
        </Reference>
        <Reference Include="StardewModdingAPI">
          <HintPath>$(GamePath)\StardewModdingAPI.exe</HintPath>
          <Private>false</Private>
        </Reference>
        <Reference Include="xTile, Version=2.0.4.0, Culture=neutral, processorArchitecture=x86">
          <HintPath>$(GamePath)\xTile.dll</HintPath>
          <Private>false</Private>
          <SpecificVersion>False</SpecificVersion>
        </Reference>
      </ItemGroup>

      <!-- launch game for debugging -->
      <PropertyGroup>
        <StartAction>Program</StartAction>
        <StartProgram>$(GamePath)\StardewModdingAPI.exe</StartProgram>
        <StartWorkingDirectory>$(GamePath)</StartWorkingDirectory>
      </PropertyGroup>
    </When>
    <Otherwise>
      <!-- references -->
      <ItemGroup>
        <Reference Include="MonoGame.Framework">
          <HintPath>$(GamePath)\MonoGame.Framework.dll</HintPath>
          <Private>false</Private>
          <SpecificVersion>False</SpecificVersion>
        </Reference>
        <Reference Include="StardewValley">
          <HintPath>$(GamePath)\StardewValley.exe</HintPath>
          <Private>false</Private>
        </Reference>
        <Reference Include="StardewModdingAPI">
          <HintPath>$(GamePath)\StardewModdingAPI.exe</HintPath>
          <Private>false</Private>
        </Reference>
        <Reference Include="xTile">
          <HintPath>$(GamePath)\xTile.dll</HintPath>
          <Private>false</Private>
        </Reference>
      </ItemGroup>
    </Otherwise>
  </Choose>

  <!--######
  ## validate
  #######-->
  <Target Name="BeforeBuild">
    <!-- if game path is invalid, show one user-friendly error instead of a slew of reference errors -->
    <Error Condition="!Exists('$(GamePath)')" Text="Failed to find the game install path. See https://github.com/Pathoschild/Stardew.ModBuildConfig#troubleshoot for help." />
    <Error Condition="'$(GamePlatform)' == 'Windows' AND !Exists('$(GamePath)\Stardew Valley.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain Stardew Valley. You should delete this folder if it's empty." />
    <Error Condition="'$(GamePlatform)' != 'Windows' AND !Exists('$(GamePath)\StardewValley.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain Stardew Valley. You should delete this folder if it's empty." />
    <Error Condition="!Exists('$(GamePath)\StardewModdingAPI.exe')" Text="Found a game folder at $(GamePath), but it doesn't contain SMAPI." />
  </Target>

  <!--######
  ## deploy mod files
  #######-->
  <Target Name="AfterBuild" Condition="'$(DeployModFolderName)' != ''">
    <!--generate paths-->
    <PropertyGroup>
      <ModDeployPath>$(GamePath)\Mods\$(DeployModFolderName)</ModDeployPath>
      <FallbackManifestPath>$(ProjectDir)\manifest.json</FallbackManifestPath>
    </PropertyGroup>
    <ItemGroup>
      <BuildFiles Include="$(TargetDir)\**\*.*" />
      <FallbackTranslationFiles Include="$(ProjectDir)\i18n\*.json" />
    </ItemGroup>

    <!--validate-->
    <Error Text="Could not deploy mod automatically because no build output was found." Condition="'@(BuildFiles)' == ''" />
    <Error Text="Could not deploy mod automatically because no manifest.json was found in the project or build output." Condition="!Exists('$(TargetDir)\manifest.json') AND !Exists('$(FallbackManifestPath)')" />

    <!-- copy mod files -->
    <Message Text="Deploying mod to $(ModDeployPath)..." Importance="high" />
    <Copy SourceFiles="@(BuildFiles)" DestinationFolder="$(ModDeployPath)\%(RecursiveDir)" SkipUnchangedFiles="true" />
    <Copy SourceFiles="$(FallbackManifestPath)" DestinationFolder="$(ModDeployPath)" Condition="!Exists('$(TargetDir)\manifest.json')" />
    <Copy SourceFiles="@(FallbackTranslationFiles)" DestinationFolder="$(ModDeployPath)\i18n\%(RecursiveDir)" Condition="!Exists('$(TargetDir)\i18n')" />
  </Target>
</Project>