using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Anti-Tumble_Cooldown")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Anti-Tumble_Cooldown")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("c536bce9-c9aa-4a63-a8af-0418e7a44775")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("com.yourname.antitumble", "Anti-Tumble Cooldown", "1.1.1")]
public class AntiTumblePlugin : BaseUnityPlugin
{
private FieldInfo tumbleOverrideField;
private FieldInfo tumbleInputDisableTimerField;
private FieldInfo canExitField;
private FieldInfo tumblingField;
private bool lastTumbleState;
private void Awake()
{
Assembly assembly = typeof(PlayerController).Assembly;
Type type = assembly.GetType("PlayerTumble");
Type typeFromHandle = typeof(PlayerController);
tumbleOverrideField = type.GetField("tumbleOverride", BindingFlags.Instance | BindingFlags.NonPublic);
tumblingField = type.GetField("tumbling", BindingFlags.Instance | BindingFlags.NonPublic);
tumbleInputDisableTimerField = typeFromHandle.GetField("tumbleInputDisableTimer", BindingFlags.Instance | BindingFlags.NonPublic);
canExitField = typeof(TumbleUI).GetField("canExit", BindingFlags.Instance | BindingFlags.NonPublic);
}
private void Update()
{
PlayerController instance = PlayerController.instance;
if ((Object)(object)instance == (Object)null || (Object)(object)LevelGenerator.Instance == (Object)null || !LevelGenerator.Instance.Generated)
{
return;
}
PlayerAvatar playerAvatarScript = instance.playerAvatarScript;
if ((Object)(object)playerAvatarScript == (Object)null)
{
return;
}
PlayerTumble tumble = playerAvatarScript.tumble;
if ((Object)(object)tumble == (Object)null)
{
return;
}
tumbleOverrideField?.SetValue(tumble, false);
tumbleInputDisableTimerField?.SetValue(instance, 0f);
bool flag = tumblingField != null && (bool)tumblingField.GetValue(tumble);
if ((Object)(object)TumbleUI.instance != (Object)null)
{
canExitField?.SetValue(TumbleUI.instance, true);
if (flag != lastTumbleState)
{
((Component)TumbleUI.instance).gameObject.SetActive(flag);
lastTumbleState = flag;
}
}
}
}