Skip to content

Commit e7e18ea

Browse files
committed
Removed JSON
1 parent 797d52e commit e7e18ea

7 files changed

Lines changed: 96 additions & 240 deletions

File tree

Core/Features/MainMenuFeatures/MainMenuActions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public static void StartServer()
176176
throw new Exception("No worlds found.");
177177

178178
// Getting Player and World from ClientDataHandler
179-
var world = Main.WorldList.FirstOrDefault(p => p.Path.Equals(ClientDataJsonHelper.WorldPath)) ?? throw new Exception("World not found: " + ClientDataJsonHelper.WorldPath);
179+
var world = Main.WorldList.FirstOrDefault(p => p.Path.Equals(ClientDataMemoryStorage.WorldPath)) ?? throw new Exception("World not found: " + ClientDataMemoryStorage.WorldPath);
180180
if (string.IsNullOrEmpty(world.Path))
181181
{
182182
Log.Error($"World {world.Name} has an invalid or null path.");

Core/Features/MainMenuFeatures/MainMenuState.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,9 @@ private void AddSingleplayerSection(TooltipPanel tooltipPanel)
152152
var joinSingleplayer = new ActionMainMenuElement(
153153
() =>
154154
{
155-
ClientDataJsonHelper.ClientMode = ClientMode.SinglePlayer;
156-
ClientDataJsonHelper.PlayerPath = null;
157-
ClientDataJsonHelper.WorldPath = null;
155+
ClientDataMemoryStorage.ClientMode = ClientMode.SinglePlayer;
156+
ClientDataMemoryStorage.PlayerPath = null;
157+
ClientDataMemoryStorage.WorldPath = null;
158158
AutoloadPlayerInWorldSystem.EnterSingleplayerWorld();
159159
},
160160
Loc.Get("MainMenu.JoinSingleplayerText"),

Core/Features/Reload/AutoloadPlayerInWorldSystem.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class AutoloadPlayerInWorldSystem : ModSystem
2222
public override void Unload()
2323
{
2424
if (Main.netMode != NetmodeID.Server)
25-
ClientDataJsonHelper.WriteData();
25+
ClientDataMemoryStorage.WriteData();
2626

2727
// Reset some hooks
2828
typeof(ModLoader).GetField("OnSuccessfulLoad", BindingFlags.NonPublic | BindingFlags.Static)?.SetValue(null, null);
@@ -36,12 +36,12 @@ public override void OnModLoad()
3636
return;
3737
}
3838

39-
if (ClientDataJsonHelper.ClientMode == ClientMode.SinglePlayer)
39+
if (ClientDataMemoryStorage.ClientMode == ClientMode.SinglePlayer)
4040
{
4141
// Modify the delegate to call EnterSingleplayerWorld() when OnSuccessfulLoad is called
4242
ModLoader.OnSuccessfulLoad += EnterSingleplayerWorld;
4343
}
44-
else if (ClientDataJsonHelper.ClientMode == ClientMode.MPMajor || ClientDataJsonHelper.ClientMode == ClientMode.MPMinor)
44+
else if (ClientDataMemoryStorage.ClientMode == ClientMode.MPMajor || ClientDataMemoryStorage.ClientMode == ClientMode.MPMinor)
4545
{
4646
ModLoader.OnSuccessfulLoad += EnterMultiplayerWorld;
4747
}
@@ -153,9 +153,9 @@ private static bool SelectPlayerAndWorld(bool onlyPlayer = false)
153153
}
154154
var player = Main.PlayerList[playerId];
155155

156-
if (ClientDataJsonHelper.PlayerPath != null && ClientDataJsonHelper.ClientMode != ClientMode.FreshClient)
156+
if (ClientDataMemoryStorage.PlayerPath != null && ClientDataMemoryStorage.ClientMode != ClientMode.FreshClient)
157157
{
158-
player = Main.PlayerList.FirstOrDefault(p => p.Path.Equals(ClientDataJsonHelper.PlayerPath), null);
158+
player = Main.PlayerList.FirstOrDefault(p => p.Path.Equals(ClientDataMemoryStorage.PlayerPath), null);
159159
}
160160

161161
if (player == null)
@@ -185,9 +185,9 @@ private static bool SelectPlayerAndWorld(bool onlyPlayer = false)
185185
}
186186
var world = Main.WorldList[worldId];
187187

188-
if (ClientDataJsonHelper.WorldPath != null && ClientDataJsonHelper.ClientMode != ClientMode.FreshClient)
188+
if (ClientDataMemoryStorage.WorldPath != null && ClientDataMemoryStorage.ClientMode != ClientMode.FreshClient)
189189
{
190-
world = Main.WorldList.FirstOrDefault(p => p.Path.Equals(ClientDataJsonHelper.WorldPath), null);
190+
world = Main.WorldList.FirstOrDefault(p => p.Path.Equals(ClientDataMemoryStorage.WorldPath), null);
191191
}
192192

193193
if (world == null)

Core/Features/Reload/ClientDataJson.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

Core/Features/Reload/ClientDataJsonHelper.cs

Lines changed: 0 additions & 198 deletions
This file was deleted.
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
using System;
2+
3+
namespace ModReloader.Core.Features.Reload
4+
{
5+
/// <summary>
6+
/// Stores client data in AppDomain memory to persist across mod reloads.
7+
/// Uses separate keys for each value to avoid Assembly reload issues.
8+
/// </summary>
9+
public static class ClientDataMemoryStorage
10+
{
11+
private const string ClientModeKey = "ModReloader_ClientMode";
12+
private const string PlayerPathKey = "ModReloader_PlayerPath";
13+
private const string WorldPathKey = "ModReloader_WorldPath";
14+
15+
public static ClientMode ClientMode
16+
{
17+
get
18+
{
19+
var value = AppDomain.CurrentDomain.GetData(ClientModeKey);
20+
if (value is int intValue)
21+
return (ClientMode)intValue;
22+
return ClientMode.FreshClient;
23+
}
24+
set => AppDomain.CurrentDomain.SetData(ClientModeKey, (int)value);
25+
}
26+
27+
public static string PlayerPath
28+
{
29+
get => AppDomain.CurrentDomain.GetData(PlayerPathKey) as string;
30+
set => AppDomain.CurrentDomain.SetData(PlayerPathKey, value);
31+
}
32+
33+
public static string WorldPath
34+
{
35+
get => AppDomain.CurrentDomain.GetData(WorldPathKey) as string;
36+
set => AppDomain.CurrentDomain.SetData(WorldPathKey, value);
37+
}
38+
39+
/// <summary>
40+
/// Writes the current client data to memory.
41+
/// </summary>
42+
public static void WriteData()
43+
{
44+
if (Main.dedServ)
45+
return;
46+
47+
Log.Info($"Wrote ClientData to memory: C {ClientMode}, P {PlayerPath}, W {WorldPath}");
48+
}
49+
50+
/// <summary>
51+
/// Reads the client data from memory.
52+
/// </summary>
53+
public static void ReadData()
54+
{
55+
if (Main.dedServ)
56+
return;
57+
58+
Log.Info($"Read ClientData from memory: C {ClientMode}, P {PlayerPath}, W {WorldPath}");
59+
}
60+
61+
/// <summary>
62+
/// Clears all stored client data from memory.
63+
/// </summary>
64+
public static void ClearData()
65+
{
66+
AppDomain.CurrentDomain.SetData(ClientModeKey, null);
67+
AppDomain.CurrentDomain.SetData(PlayerPathKey, null);
68+
AppDomain.CurrentDomain.SetData(WorldPathKey, null);
69+
}
70+
}
71+
72+
public enum ClientMode
73+
{
74+
FreshClient,
75+
SinglePlayer,
76+
MPMajor,
77+
MPMinor,
78+
}
79+
}

0 commit comments

Comments
 (0)