forked from tModLoader/tModLoader
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_assembly_manager_8cs_source.html
132 lines (130 loc) · 57.9 KB
/
_assembly_manager_8cs_source.html
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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Terraria ModLoader: D:/Documents/My Games/Terraria/Modding/tModLoader/patches/tModLoader/Terraria.ModLoader/AssemblyManager.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="tModLoaderIcon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Terraria ModLoader
 <span id="projectnumber">0.9.1.1</span>
</div>
<div id="projectbrief">A framework for Terraria mods</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_assembly_manager_8cs_source.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">AssemblyManager.cs</div> </div>
</div><!--header-->
<div class="contents">
<a href="_assembly_manager_8cs.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="keyword">using</span> <a class="code" href="namespace_system.html">System</a>;</div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="keyword">using</span> <a class="code" href="namespace_system.html">System</a>.Collections.Generic;</div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="keyword">using</span> <a class="code" href="namespace_system.html">System</a>.Diagnostics;</div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="keyword">using</span> <a class="code" href="namespace_system.html">System</a>.IO;</div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="keyword">using</span> <a class="code" href="namespace_system.html">System</a>.Linq;</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">using</span> <a class="code" href="namespace_system.html">System</a>.Reflection;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">using</span> Mono.Cecil;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">using</span> <a class="code" href="namespace_terraria.html">Terraria</a>.<a class="code" href="namespace_terraria_1_1_mod_loader.html">ModLoader</a>.<a class="code" href="namespace_terraria_1_1_mod_loader_1_1_i_o.html">IO</a>;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"><a class="line" href="namespace_terraria_1_1_mod_loader.html"> 10</a></span> <span class="keyword">namespace </span><a class="code" href="namespace_terraria.html">Terraria</a>.<a class="code" href="class_terraria_1_1_mod_loader_1_1_mod_loader.html">ModLoader</a></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> {</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  <span class="comment">//todo: further documentation</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  <span class="keyword">internal</span> <span class="keyword">class </span>AssemblyManager</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  {</div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html"> 15</a></span>  <span class="keyword">private</span> <span class="keyword">class </span><a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html">LoadedMod</a></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  {</div><div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#adc377e63fee81c682346b68b7990b5d0"> 17</a></span>  <span class="keyword">public</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html">TmodFile</a> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#adc377e63fee81c682346b68b7990b5d0">modFile</a>;</div><div class="line"><a name="l00018"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ad66ceae780a51e4824580d5424c11447"> 18</a></span>  <span class="keyword">public</span> BuildProperties <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ad66ceae780a51e4824580d5424c11447">properties</a>;</div><div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a437559667a762dae5d8c5455265a0965"> 19</a></span>  <span class="keyword">public</span> <span class="keywordtype">string</span> Name => modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#acaf448eb733e7bf5e4383c707ee37186">name</a>;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a75c3e6abd05c040d8cf0965f81a84547"> 21</a></span>  <span class="keyword">public</span> readonly List<LoadedMod> dependencies = <span class="keyword">new</span> List<LoadedMod>();</div><div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a5c9de86a25361d7c4588740e88b2cf86"> 22</a></span>  <span class="keyword">public</span> readonly List<LoadedMod> dependents = <span class="keyword">new</span> List<LoadedMod>();</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="comment">//list of weak dependencies that are not currently loaded</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="comment">//weak dependencies assume loadIndex 0 when they come into being</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ae643996c2853e9920e00158a40170f55"> 25</a></span>  <span class="keyword">public</span> readonly ISet<string> weakDependencies = <span class="keyword">new</span> HashSet<string>();</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a9f3bd2fd1805a4dc012653846c800cf2"> 27</a></span>  <span class="keyword">public</span> Assembly <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a9f3bd2fd1805a4dc012653846c800cf2">assembly</a>;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#afc438fe5f44ed3c7c1e4abb10ac36e66"> 29</a></span>  <span class="keyword">private</span> <span class="keywordtype">int</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#afc438fe5f44ed3c7c1e4abb10ac36e66">loadIndex</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#af35474d57f0810fd47ba7d4d7a2cedce"> 30</a></span>  <span class="keyword">private</span> <span class="keywordtype">bool</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#af35474d57f0810fd47ba7d4d7a2cedce">eacEnabled</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a535309fccc6a664b0f9fa163068a899b"> 32</a></span>  <span class="keyword">private</span> <span class="keywordtype">bool</span> _needsReload = <span class="keyword">true</span>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#abdbb8c9f89ef36e42c06a16eed2a99e8"> 33</a></span>  <span class="keyword">private</span> <span class="keywordtype">bool</span> NeedsReload {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">get</span> { <span class="keywordflow">return</span> _needsReload; }</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="keyword">set</span> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span> (value && !_needsReload) loadIndex++;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  _needsReload = value;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  }</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ac302b5327050b9849dcf52e7b26e01cb"> 41</a></span>  <span class="keyword">private</span> <span class="keywordtype">string</span> AssemblyName => eacEnabled ? Name : Name + <span class="charliteral">'_'</span> + loadIndex;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">private</span> <span class="keywordtype">string</span> DllName(<span class="keywordtype">string</span> dll) => eacEnabled ? dll : Name + <span class="charliteral">'_'</span> + dll + <span class="charliteral">'_'</span> + loadIndex;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">private</span> <span class="keywordtype">string</span> WeakDepName(<span class="keywordtype">string</span> depName) => eacEnabled ? depName : depName + <span class="stringliteral">"_0"</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a908ec52fc2db5d7560fbd7fc88569bfa"> 45</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a908ec52fc2db5d7560fbd7fc88569bfa">SetMod</a>(<a class="code" href="class_terraria_1_1_mod_loader_1_1_mod_loader.html">ModLoader</a>.<a class="code" href="class_terraria_1_1_mod_loader_1_1_mod_loader_1_1_loading_mod.html">LoadingMod</a> mod) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">if</span> (modFile == null ||</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a7f718c6834ad10c459dca288b3605617">version</a> != mod.modFile.version ||</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  !modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a58ddd1c61911fd6a178f4298670decb3">hash</a>.SequenceEqual(mod.modFile.hash))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  SetNeedsReload();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  modFile = mod.modFile;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  properties = mod.properties;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a955a38adca3eb017b94fe7f11de3162a"> 55</a></span>  <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a955a38adca3eb017b94fe7f11de3162a">SetNeedsReload</a>() {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  NeedsReload = <span class="keyword">true</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  eacEnabled = <span class="keyword">false</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">foreach</span> (var dep <span class="keywordflow">in</span> dependents)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  dep.SetNeedsReload();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a24e61a2b53f289cf00c137bce61989d2"> 63</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a24e61a2b53f289cf00c137bce61989d2">AddDependency</a>(<a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html">LoadedMod</a> dep) {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  dependencies.Add(dep);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  dep.<a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a5c9de86a25361d7c4588740e88b2cf86">dependents</a>.Add(<span class="keyword">this</span>);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a420c97425854c66a58c03dd6a7a49f16"> 68</a></span>  <span class="keyword">public</span> <span class="keywordtype">bool</span> CanEaC => eacEnabled || </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  !loadedAssemblies.ContainsKey(modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#acaf448eb733e7bf5e4383c707ee37186">name</a>) && dependencies.All(dep => dep.CanEaC);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a9d80010aa1b56a4d51d208f240652d42"> 71</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a9d80010aa1b56a4d51d208f240652d42">EnableEaC</a>() {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (eacEnabled)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  SetNeedsReloadUnlessEaC();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  eacEnabled = <span class="keyword">true</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="comment">//all dependencies need to have unmodified names</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">foreach</span> (var dep <span class="keywordflow">in</span> dependencies)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  dep.EnableEaC();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#addc263767f6b814e699a048d425c75b3"> 83</a></span>  <span class="keyword">private</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#addc263767f6b814e699a048d425c75b3">SetNeedsReloadUnlessEaC</a>() {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">if</span> (!eacEnabled)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  NeedsReload = <span class="keyword">true</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">foreach</span> (var dep <span class="keywordflow">in</span> dependents)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  dep.SetNeedsReloadUnlessEaC();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a60af3f0d047dc1ed3883c4056b6eee1e"> 91</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a60af3f0d047dc1ed3883c4056b6eee1e">UpdateWeakRefs</a>() {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">foreach</span> (var loaded <span class="keywordflow">in</span> dependencies.Where(dep => weakDependencies.Remove(dep.Name))) {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">if</span> (eacEnabled && !loaded.eacEnabled)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  loaded.EnableEaC();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (loaded.AssemblyName != WeakDepName(loaded.Name))</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  SetNeedsReload();</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  }</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ad406f52f32b86d42353ef40f2c4936f7"> 100</a></span>  <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ad406f52f32b86d42353ef40f2c4936f7">LoadAssemblies</a>() {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (!NeedsReload)</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">foreach</span> (var dll <span class="keywordflow">in</span> properties.dllReferences)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  LoadAssembly(EncapsulateReferences(modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a341b95187ce9b1244684a28d367d3490">GetFile</a>(<span class="stringliteral">"lib/"</span> + dll + <span class="stringliteral">".dll"</span>)));</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  assembly = LoadAssembly(EncapsulateReferences(modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a994778e9ea498e083090787637f83cea">GetMainAssembly</a>()), modFile.<a class="code" href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#aac0bcec46daa4f82a8f2b73266e3dda5">GetMainPDB</a>());</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  NeedsReload = <span class="keyword">false</span>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ac5c3718bc5def39e46596eec59f0123c"> 111</a></span>  <span class="keyword">private</span> byte[] <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ac5c3718bc5def39e46596eec59f0123c">EncapsulateReferences</a>(byte[] code) {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (eacEnabled)</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">return</span> code;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  var <span class="keyword">asm</span> = AssemblyDefinition.ReadAssembly(<span class="keyword">new</span> MemoryStream(code));</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">asm</span>.Name.Name = EncapsulateName(<span class="keyword">asm</span>.Name.Name);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">//randomise the module version id so that the debugger can detect it as a different module (even if it has the same content)</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">asm</span>.MainModule.Mvid = Guid.NewGuid();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">foreach</span> (var mod <span class="keywordflow">in</span> <span class="keyword">asm</span>.Modules)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">foreach</span> (var asmRef <span class="keywordflow">in</span> mod.AssemblyReferences)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  asmRef.Name = EncapsulateName(asmRef.Name);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  var ret = <span class="keyword">new</span> MemoryStream();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">asm</span>.Write(ret);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> ret.ToArray();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#acb7a0b19359fe4ce746d033d880a623c"> 130</a></span>  <span class="keyword">private</span> <span class="keywordtype">string</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#acb7a0b19359fe4ce746d033d880a623c">EncapsulateName</a>(<span class="keywordtype">string</span> name) {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">if</span> (name == Name)</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> AssemblyName;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">if</span> (properties.dllReferences.Contains(name))</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> DllName(name);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (weakDependencies.Contains(name))</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">return</span> WeakDepName(name);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">foreach</span> (var dep <span class="keywordflow">in</span> dependencies) {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  var _name = dep.EncapsulateName(name);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (_name != name)</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">return</span> _name;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> name;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">private</span> <span class="keyword">static</span> readonly IDictionary<string, LoadedMod> loadedMods = <span class="keyword">new</span> Dictionary<string, LoadedMod>(); </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">private</span> <span class="keyword">static</span> readonly IDictionary<string, Assembly> loadedAssemblies = <span class="keyword">new</span> Dictionary<string, Assembly>();</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">static</span> AssemblyManager() {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordtype">string</span> name = <span class="keyword">new</span> AssemblyName(args.Name).Name;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">if</span> (name == <span class="stringliteral">"Terraria"</span>)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">return</span> Assembly.GetExecutingAssembly();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  Assembly a;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  loadedAssemblies.TryGetValue(name, out a);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> a;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  };</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">private</span> <span class="keyword">static</span> <span class="keywordtype">void</span> RecalculateReferences() {</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">foreach</span> (var mod <span class="keywordflow">in</span> loadedMods.Values) {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  mod.dependencies.Clear();</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  mod.dependents.Clear();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">foreach</span> (var mod <span class="keywordflow">in</span> loadedMods.Values)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">foreach</span> (var depName <span class="keywordflow">in</span> mod.properties.RefNames(<span class="keyword">true</span>))</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">if</span> (loadedMods.ContainsKey(depName))</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  mod.AddDependency(loadedMods[depName]);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  mod.weakDependencies.Add(depName);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">foreach</span> (var mod <span class="keywordflow">in</span> loadedMods.Values)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  mod.UpdateWeakRefs();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">private</span> <span class="keyword">static</span> Assembly LoadAssembly(byte[] code, byte[] pdb = null) {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  var <span class="keyword">asm</span> = Assembly.Load(code, pdb);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  loadedAssemblies[<span class="keyword">asm</span>.GetName().Name] = <span class="keyword">asm</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">return</span> <span class="keyword">asm</span>;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">internal</span> <span class="keyword">static</span> List<Mod> InstantiateMods(List<ModLoader.LoadingMod> modsToLoad) {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  var modList = <span class="keyword">new</span> List<LoadedMod>();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">foreach</span> (var loading <span class="keywordflow">in</span> modsToLoad) {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html">LoadedMod</a> mod;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (!loadedMods.TryGetValue(loading.Name, out mod))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  mod = loadedMods[loading.Name] = <span class="keyword">new</span> <a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html">LoadedMod</a>();</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  mod.<a class="code" href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a908ec52fc2db5d7560fbd7fc88569bfa">SetMod</a>(loading);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  modList.Add(mod);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  RecalculateReferences();</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">if</span> (Debugger.IsAttached) {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">foreach</span> (var mod <span class="keywordflow">in</span> modList.Where(mod => mod.properties.editAndContinue && mod.CanEaC))</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  mod.EnableEaC();</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  var modInstances = <span class="keyword">new</span> List<Mod>();</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordtype">int</span> i = 0;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">foreach</span> (var mod <span class="keywordflow">in</span> modList) {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  Interface.loadMods.SetProgressCompatibility(mod.Name, i++, modsToLoad.Count);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">try</span> {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  Interface.loadMods.SetProgressReading(mod.Name, 0, 1);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  mod.LoadAssemblies();</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  Interface.loadMods.SetProgressReading(mod.Name, 1, 2);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  var modType = mod.assembly.GetTypes().Single(t => t.IsSubclassOf(typeof(<a class="code" href="class_terraria_1_1_mod_loader_1_1_mod.html">Mod</a>)));</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  var m = (<a class="code" href="class_terraria_1_1_mod_loader_1_1_mod.html">Mod</a>)Activator.CreateInstance(modType);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  m.File = mod.modFile;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  m.Code = mod.assembly;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  m.Side = mod.properties.side;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  m.DisplayName = mod.properties.displayName;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  modInstances.Add(m);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">catch</span> (Exception e) {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="class_terraria_1_1_mod_loader_1_1_mod_loader.html">ModLoader</a>.DisableMod(mod.modFile);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <a class="code" href="class_terraria_1_1_mod_loader_1_1_error_logger.html">ErrorLogger</a>.LogLoadingError(mod.Name, mod.modFile.tModLoaderVersion, e);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> null;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> modInstances;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div><div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_af35474d57f0810fd47ba7d4d7a2cedce"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#af35474d57f0810fd47ba7d4d7a2cedce">Terraria.ModLoader.AssemblyManager.LoadedMod.eacEnabled</a></div><div class="ttdeci">bool eacEnabled</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00030">AssemblyManager.cs:30</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_mod_loader_1_1_loading_mod_html"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_mod_loader_1_1_loading_mod.html">Terraria.ModLoader.ModLoader.LoadingMod</a></div><div class="ttdef"><b>Definition:</b> <a href="_mod_loader_8cs_source.html#l00690">ModLoader.cs:690</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a5c9de86a25361d7c4588740e88b2cf86"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a5c9de86a25361d7c4588740e88b2cf86">Terraria.ModLoader.AssemblyManager.LoadedMod.dependents</a></div><div class="ttdeci">readonly List< LoadedMod > dependents</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00022">AssemblyManager.cs:22</a></div></div>
<div class="ttc" id="namespace_terraria_1_1_mod_loader_1_1_i_o_html"><div class="ttname"><a href="namespace_terraria_1_1_mod_loader_1_1_i_o.html">Terraria.ModLoader.IO</a></div><div class="ttdef"><b>Definition:</b> <a href="_big_endian_8cs_source.html#l00005">BigEndian.cs:5</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html_aac0bcec46daa4f82a8f2b73266e3dda5"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#aac0bcec46daa4f82a8f2b73266e3dda5">Terraria.ModLoader.IO.TmodFile.GetMainPDB</a></div><div class="ttdeci">byte [] GetMainPDB(bool windows=ModLoader.windows)</div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00176">TmodFile.cs:176</a></div></div>
<div class="ttc" id="namespace_system_html"><div class="ttname"><a href="namespace_system.html">System</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html">Terraria.ModLoader.AssemblyManager.LoadedMod</a></div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00015">AssemblyManager.cs:15</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_afc438fe5f44ed3c7c1e4abb10ac36e66"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#afc438fe5f44ed3c7c1e4abb10ac36e66">Terraria.ModLoader.AssemblyManager.LoadedMod.loadIndex</a></div><div class="ttdeci">int loadIndex</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00029">AssemblyManager.cs:29</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_adc377e63fee81c682346b68b7990b5d0"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#adc377e63fee81c682346b68b7990b5d0">Terraria.ModLoader.AssemblyManager.LoadedMod.modFile</a></div><div class="ttdeci">TmodFile modFile</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00017">AssemblyManager.cs:17</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_mod_loader_html"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_mod_loader.html">Terraria.ModLoader.ModLoader</a></div><div class="ttdoc">This serves as the central class which loads mods. It contains many static fields and methods related...</div><div class="ttdef"><b>Definition:</b> <a href="_mod_loader_8cs_source.html#l00022">ModLoader.cs:22</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a955a38adca3eb017b94fe7f11de3162a"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a955a38adca3eb017b94fe7f11de3162a">Terraria.ModLoader.AssemblyManager.LoadedMod.SetNeedsReload</a></div><div class="ttdeci">void SetNeedsReload()</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00055">AssemblyManager.cs:55</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a60af3f0d047dc1ed3883c4056b6eee1e"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a60af3f0d047dc1ed3883c4056b6eee1e">Terraria.ModLoader.AssemblyManager.LoadedMod.UpdateWeakRefs</a></div><div class="ttdeci">void UpdateWeakRefs()</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00091">AssemblyManager.cs:91</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html_a58ddd1c61911fd6a178f4298670decb3"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a58ddd1c61911fd6a178f4298670decb3">Terraria.ModLoader.IO.TmodFile.hash</a></div><div class="ttdeci">byte [] hash</div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00030">TmodFile.cs:30</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html_a994778e9ea498e083090787637f83cea"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a994778e9ea498e083090787637f83cea">Terraria.ModLoader.IO.TmodFile.GetMainAssembly</a></div><div class="ttdeci">byte [] GetMainAssembly(bool windows=ModLoader.windows)</div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00171">TmodFile.cs:171</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html_a7f718c6834ad10c459dca288b3605617"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a7f718c6834ad10c459dca288b3605617">Terraria.ModLoader.IO.TmodFile.version</a></div><div class="ttdeci">Version version</div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00025">TmodFile.cs:25</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html_a341b95187ce9b1244684a28d367d3490"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#a341b95187ce9b1244684a28d367d3490">Terraria.ModLoader.IO.TmodFile.GetFile</a></div><div class="ttdeci">byte [] GetFile(string fileName)</div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00060">TmodFile.cs:60</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_error_logger_html"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_error_logger.html">Terraria.ModLoader.ErrorLogger</a></div><div class="ttdoc">This class consists of functions that write error messages to text files for you to read...</div><div class="ttdef"><b>Definition:</b> <a href="_error_logger_8cs_source.html#l00013">ErrorLogger.cs:13</a></div></div>
<div class="ttc" id="namespace_terraria_html"><div class="ttname"><a href="namespace_terraria.html">Terraria</a></div><div class="ttdef"><b>Definition:</b> <a href="_item__t_m_l_8cs_source.html#l00004">Item_tML.cs:4</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_ad406f52f32b86d42353ef40f2c4936f7"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ad406f52f32b86d42353ef40f2c4936f7">Terraria.ModLoader.AssemblyManager.LoadedMod.LoadAssemblies</a></div><div class="ttdeci">void LoadAssemblies()</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00100">AssemblyManager.cs:100</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_acb7a0b19359fe4ce746d033d880a623c"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#acb7a0b19359fe4ce746d033d880a623c">Terraria.ModLoader.AssemblyManager.LoadedMod.EncapsulateName</a></div><div class="ttdeci">string EncapsulateName(string name)</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00130">AssemblyManager.cs:130</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_ad66ceae780a51e4824580d5424c11447"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ad66ceae780a51e4824580d5424c11447">Terraria.ModLoader.AssemblyManager.LoadedMod.properties</a></div><div class="ttdeci">BuildProperties properties</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00018">AssemblyManager.cs:18</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a908ec52fc2db5d7560fbd7fc88569bfa"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a908ec52fc2db5d7560fbd7fc88569bfa">Terraria.ModLoader.AssemblyManager.LoadedMod.SetMod</a></div><div class="ttdeci">void SetMod(ModLoader.LoadingMod mod)</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00045">AssemblyManager.cs:45</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html_acaf448eb733e7bf5e4383c707ee37186"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html#acaf448eb733e7bf5e4383c707ee37186">Terraria.ModLoader.IO.TmodFile.name</a></div><div class="ttdeci">string name</div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00022">TmodFile.cs:22</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a9d80010aa1b56a4d51d208f240652d42"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a9d80010aa1b56a4d51d208f240652d42">Terraria.ModLoader.AssemblyManager.LoadedMod.EnableEaC</a></div><div class="ttdeci">void EnableEaC()</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00071">AssemblyManager.cs:71</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a24e61a2b53f289cf00c137bce61989d2"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a24e61a2b53f289cf00c137bce61989d2">Terraria.ModLoader.AssemblyManager.LoadedMod.AddDependency</a></div><div class="ttdeci">void AddDependency(LoadedMod dep)</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00063">AssemblyManager.cs:63</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file_html"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_i_o_1_1_tmod_file.html">Terraria.ModLoader.IO.TmodFile</a></div><div class="ttdef"><b>Definition:</b> <a href="_tmod_file_8cs_source.html#l00012">TmodFile.cs:12</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_a9f3bd2fd1805a4dc012653846c800cf2"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#a9f3bd2fd1805a4dc012653846c800cf2">Terraria.ModLoader.AssemblyManager.LoadedMod.assembly</a></div><div class="ttdeci">Assembly assembly</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00027">AssemblyManager.cs:27</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_mod_html"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_mod.html">Terraria.ModLoader.Mod</a></div><div class="ttdoc">Mod is an abstract class that you will override. It serves as a central place from which the mod&#39;s co...</div><div class="ttdef"><b>Definition:</b> <a href="_mod_8cs_source.html#l00021">Mod.cs:21</a></div></div>
<div class="ttc" id="namespace_terraria_1_1_mod_loader_html"><div class="ttname"><a href="namespace_terraria_1_1_mod_loader.html">Terraria.ModLoader</a></div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00010">AssemblyManager.cs:10</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_ac5c3718bc5def39e46596eec59f0123c"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#ac5c3718bc5def39e46596eec59f0123c">Terraria.ModLoader.AssemblyManager.LoadedMod.EncapsulateReferences</a></div><div class="ttdeci">byte [] EncapsulateReferences(byte[] code)</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00111">AssemblyManager.cs:111</a></div></div>
<div class="ttc" id="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod_html_addc263767f6b814e699a048d425c75b3"><div class="ttname"><a href="class_terraria_1_1_mod_loader_1_1_assembly_manager_1_1_loaded_mod.html#addc263767f6b814e699a048d425c75b3">Terraria.ModLoader.AssemblyManager.LoadedMod.SetNeedsReloadUnlessEaC</a></div><div class="ttdeci">void SetNeedsReloadUnlessEaC()</div><div class="ttdef"><b>Definition:</b> <a href="_assembly_manager_8cs_source.html#l00083">AssemblyManager.cs:83</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_b2dee0249ca1c6e98736e679cc6a5269.html">patches</a></li><li class="navelem"><a class="el" href="dir_33550c180f9cedd6db1017f362610614.html">tModLoader</a></li><li class="navelem"><a class="el" href="dir_563615b9ae08cf63712a5de713529dc7.html">Terraria.ModLoader</a></li><li class="navelem"><a class="el" href="_assembly_manager_8cs.html">AssemblyManager.cs</a></li>
<li class="footer">Generated by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
</ul>
</div>
</body>
</html>