Skip to content

Commit 3c61b21

Browse files
authored
Merge pull request #93 from senko-forks/pr-defaultsettingsgrr
Don't fail cus of a negative number in some modpacks
2 parents d19beb5 + 4d59343 commit 3c61b21

File tree

1 file changed

+33
-0
lines changed
  • xivModdingFramework/Mods/FileTypes

1 file changed

+33
-0
lines changed

xivModdingFramework/Mods/FileTypes/PMP.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,6 +1373,7 @@ public class PMPGroupJson
13731373
[JsonIgnore] public ulong? SelectedSettings = null;
13741374

13751375
// Either single Index or Bitflag.
1376+
[JsonConverter(typeof(CustomUInt64Converter))]
13761377
public ulong DefaultSettings;
13771378

13781379
[JsonIgnore]
@@ -1524,4 +1525,36 @@ public class PmpImcOptionJson : PMPOptionJson
15241525

15251526
#endregion
15261527

1528+
#region JSON helper classes
1529+
1530+
// Handle negative numbers without crashing
1531+
internal class CustomUInt64Converter : JsonConverter<ulong>
1532+
{
1533+
public override ulong ReadJson(JsonReader reader, Type objectType, ulong existingValue, bool hasExistingValue, JsonSerializer serializer)
1534+
{
1535+
var token = JToken.ReadFrom(reader);
1536+
1537+
// TexTools was previously of writing -1 instead of 2^32 - 1
1538+
// Even though we know that was the intended value, we'll interpret it as 2^64 - 1 for bug-compatibility with Penumbra
1539+
if (token.ToString().StartsWith("-"))
1540+
{
1541+
var signedValue = JToken.ReadFrom(reader).Value<long>();
1542+
return (ulong)signedValue;
1543+
}
1544+
else
1545+
{
1546+
return JToken.ReadFrom(reader).Value<ulong>();
1547+
}
1548+
}
1549+
1550+
public override void WriteJson(JsonWriter writer, ulong value, JsonSerializer serializer)
1551+
{
1552+
writer.WriteValue(value);
1553+
}
1554+
1555+
public override bool CanRead => true;
1556+
public override bool CanWrite => true;
1557+
}
1558+
1559+
#endregion
15271560
}

0 commit comments

Comments
 (0)