Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CreativePowerManager.cs
Go to the documentation of this file.
2using System.IO;
4using Terraria.Net;
5
7
9{
11 {
12 public static ushort Id;
13
14 public static string Name;
15
16 public static T Power;
17 }
18
19 public static readonly CreativePowerManager Instance = new CreativePowerManager();
20
22
24
25 private ushort _powersCount;
26
27 private static bool _initialized = false;
28
29 private const string _powerPermissionsLineHeader = "journeypermission_";
30
32 {
33 }
34
35 public void Register<T>(string nameInServerConfig) where T : ICreativePower, new()
36 {
37 T val = (PowerTypeStorage<T>.Power = new T());
40 val.DefaultPermissionLevel = PowerPermissionLevel.CanBeChangedByEveryone;
41 val.CurrentPermissionLevel = PowerPermissionLevel.CanBeChangedByEveryone;
44 val.PowerId = _powersCount;
45 val.ServerConfigName = nameInServerConfig;
47 }
48
50 {
51 return PowerTypeStorage<T>.Power;
52 }
53
55 {
56 return PowerTypeStorage<T>.Id;
57 }
58
59 public bool TryGetPower(ushort id, out ICreativePower power)
60 {
61 return _powersById.TryGetValue(id, out power);
62 }
63
64 public static void TryListingPermissionsFrom(string line)
65 {
66 int length = "journeypermission_".Length;
67 if (line.Length < length || !line.ToLower().StartsWith("journeypermission_"))
68 {
69 return;
70 }
71 string[] array = line.Substring(length).Split('=');
72 if (array.Length == 2 && int.TryParse(array[1].Trim(), out var result))
73 {
75 string key = array[0].Trim().ToLower();
76 Initialize();
77 if (Instance._powersByName.TryGetValue(key, out var value))
78 {
79 value.DefaultPermissionLevel = powerPermissionLevel;
80 value.CurrentPermissionLevel = powerPermissionLevel;
81 }
82 }
83 }
84
85 public static void Initialize()
86 {
87 if (!_initialized)
88 {
89 Instance.Register<CreativePowers.FreezeTime>("time_setfrozen");
90 Instance.Register<CreativePowers.StartDayImmediately>("time_setdawn");
91 Instance.Register<CreativePowers.StartNoonImmediately>("time_setnoon");
92 Instance.Register<CreativePowers.StartNightImmediately>("time_setdusk");
93 Instance.Register<CreativePowers.StartMidnightImmediately>("time_setmidnight");
94 Instance.Register<CreativePowers.GodmodePower>("godmode");
95 Instance.Register<CreativePowers.ModifyWindDirectionAndStrength>("wind_setstrength");
96 Instance.Register<CreativePowers.ModifyRainPower>("rain_setstrength");
97 Instance.Register<CreativePowers.ModifyTimeRate>("time_setspeed");
98 Instance.Register<CreativePowers.FreezeRainPower>("rain_setfrozen");
99 Instance.Register<CreativePowers.FreezeWindDirectionAndStrength>("wind_setfrozen");
100 Instance.Register<CreativePowers.FarPlacementRangePower>("increaseplacementrange");
101 Instance.Register<CreativePowers.DifficultySliderPower>("setdifficulty");
102 Instance.Register<CreativePowers.StopBiomeSpreadPower>("biomespread_setfrozen");
103 Instance.Register<CreativePowers.SpawnRateSliderPerPlayerPower>("setspawnrate");
104 _initialized = true;
105 }
106 }
107
108 public void Reset()
109 {
111 {
112 item.Value.CurrentPermissionLevel = item.Value.DefaultPermissionLevel;
114 {
116 }
118 {
120 }
121 }
122 }
123
124 public void SaveToWorld(BinaryWriter writer)
125 {
127 {
129 {
130 writer.Write(value: true);
131 writer.Write(item.Key);
132 persistentPerWorldContent.Save(writer);
133 }
134 }
135 writer.Write(value: false);
136 }
137
139 {
140 while (reader.ReadBoolean())
141 {
142 ushort key = reader.ReadUInt16();
144 {
146 continue;
147 }
148 break;
149 }
150 }
151
153 {
154 while (reader.ReadBoolean())
155 {
156 ushort key = reader.ReadUInt16();
158 {
160 continue;
161 }
162 break;
163 }
164 }
165
167 {
169 {
170 NetPacket packet = NetCreativePowerPermissionsModule.SerializeCurrentPowerPermissionLevel(item.Key, (int)item.Value.CurrentPermissionLevel);
171 NetManager.Instance.SendToClient(packet, playerIndex);
172 }
174 {
176 {
177 onPlayerJoining.OnPlayerJoining(playerIndex);
178 }
179 }
180 }
181
182 public void SaveToPlayer(Player player, BinaryWriter writer)
183 {
185 {
187 {
188 writer.Write(value: true);
189 writer.Write(item.Key);
190 persistentPerPlayerContent.Save(player, writer);
191 }
192 }
193 writer.Write(value: false);
194 }
195
197 {
198 while (reader.ReadBoolean())
199 {
200 ushort key = reader.ReadUInt16();
201 if (!_powersById.TryGetValue(key, out var value))
202 {
203 break;
204 }
206 {
208 }
209 }
210 if (player.difficulty != 3)
211 {
212 ResetPowersForPlayer(player);
213 }
214 }
215
216 public void ApplyLoadedDataToPlayer(Player player)
217 {
219 {
221 {
222 persistentPerPlayerContent.ApplyLoadedDataToOutOfPlayerFields(player);
223 }
224 }
225 }
226
227 public void ResetPowersForPlayer(Player player)
228 {
230 {
232 {
233 persistentPerPlayerContent.ResetDataForNewPlayer(player);
234 }
235 }
236 }
237
238 public void ResetDataForNewPlayer(Player player)
239 {
241 {
243 {
245 persistentPerPlayerContent.ResetDataForNewPlayer(player);
246 }
247 }
248 }
249}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
virtual bool ReadBoolean()
virtual ushort ReadUInt16()
Dictionary< ushort, ICreativePower > _powersById
bool TryGetPower(ushort id, out ICreativePower power)
void LoadToPlayer(Player player, BinaryReader reader, int versionGameWasLastSavedOn)
void ValidateWorld(BinaryReader reader, int versionGameWasLastSavedOn)
void SaveToPlayer(Player player, BinaryWriter writer)
Dictionary< string, ICreativePower > _powersByName
void LoadFromWorld(BinaryReader reader, int versionGameWasLastSavedOn)
static readonly NetManager Instance
Definition NetManager.cs:18