Test and fix enchantment table float parsing bugfix

This commit is contained in:
NGnius (Graham) 2020-12-22 20:27:54 -05:00
parent 65ebc1b1fa
commit 384f1b3092

View file

@ -14,13 +14,20 @@ namespace CLre.Fixes
class Float_TryParse_Patch class Float_TryParse_Patch
{ {
[HarmonyPostfix] [HarmonyPostfix]
public static void BeforeMethodCall(string s, ref float result, ref bool __result) public static void AfterMethodCall(string s, ref float result, ref bool __result)
{ {
if (__result) return; if (__result) return;
#if DEBUG
API.Utility.Logging.Log($"Replacing float.TryParse method call with invariant call. Parsing: \"{s}\"");
#endif
__result = float.TryParse(s, __result = float.TryParse(s,
NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign |
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent, NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent,
NumberFormatInfo.InvariantInfo, out result); NumberFormatInfo.InvariantInfo, out result);
#if DEBUG
API.Utility.Logging.Log($"Parsed \"{s}\" into {result}");
#endif
} }
[HarmonyTargetMethod] [HarmonyTargetMethod]
@ -29,4 +36,24 @@ namespace CLre.Fixes
return AccessTools.Method(typeof(float), "TryParse", new []{typeof(string), typeof(float).MakeByRefType()}); return AccessTools.Method(typeof(float), "TryParse", new []{typeof(string), typeof(float).MakeByRefType()});
} }
} }
[HarmonyPatch(typeof(float), "Parse", new Type[] {typeof(string)})]
class Float_Parse_Patch
{
[HarmonyPrefix]
public static bool BeforeMethodCall(string s, ref float __result)
{
#if DEBUG
API.Utility.Logging.Log($"Replacing float.Parse method call with invariant call. Parsing: \"{s}\"");
#endif
bool success = float.TryParse(s,
NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | NumberStyles.AllowLeadingSign |
NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowExponent,
NumberFormatInfo.InvariantInfo, out __result);
#if DEBUG
API.Utility.Logging.Log($"Parsed \"{s}\" into {__result}");
#endif
return !success;
}
}
} }