Browse Source

Test and fix enchantment table float parsing bugfix

tags/v0.0.1
NGnius (Graham) 4 years ago
parent
commit
384f1b3092
1 changed files with 28 additions and 1 deletions
  1. +28
    -1
      CLre/Fixes/EnchantmentTableFloatParseFix.cs

+ 28
- 1
CLre/Fixes/EnchantmentTableFloatParseFix.cs View File

@@ -14,13 +14,20 @@ namespace CLre.Fixes
class Float_TryParse_Patch
{
[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 DEBUG
API.Utility.Logging.Log($"Replacing float.TryParse method call with invariant call. Parsing: \"{s}\"");
#endif
__result = 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
}
[HarmonyTargetMethod]
@@ -29,4 +36,24 @@ namespace CLre.Fixes
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;
}
}
}

Loading…
Cancel
Save