Decompiled source of AccurateEnemies v1.1.0

AccurateEnemies.dll

Decompiled 6 months ago
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using AccurateEnemies.Hooks;
using BepInEx;
using BepInEx.Bootstrap;
using EntityStates;
using EntityStates.BeetleGuardMonster;
using EntityStates.Bell.BellWeapon;
using EntityStates.ClayBoss.ClayBossWeapon;
using EntityStates.ClayGrenadier;
using EntityStates.FlyingVermin.Weapon;
using EntityStates.GravekeeperBoss;
using EntityStates.GreaterWispMonster;
using EntityStates.LemurianBruiserMonster;
using EntityStates.LemurianMonster;
using EntityStates.RoboBallBoss.Weapon;
using EntityStates.ScavMonster;
using EntityStates.VagrantMonster.Weapon;
using EntityStates.VoidJailer.Weapon;
using EntityStates.Vulture.Weapon;
using IL.EntityStates;
using IL.EntityStates.BeetleGuardMonster;
using IL.EntityStates.Bell.BellWeapon;
using IL.EntityStates.ClayBoss.ClayBossWeapon;
using IL.EntityStates.GravekeeperBoss;
using IL.EntityStates.GreaterWispMonster;
using IL.EntityStates.LemurianBruiserMonster;
using IL.EntityStates.LemurianMonster;
using IL.EntityStates.RoboBallBoss.Weapon;
using IL.EntityStates.ScavMonster;
using IL.EntityStates.VagrantMonster.Weapon;
using IL.EntityStates.Vulture.Weapon;
using Inferno;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.EntityStates.ClayGrenadier;
using On.EntityStates.VoidJailer.Weapon;
using Risky_Artifacts.Artifacts;
using RoR2;
using RoR2.CharacterAI;
using RoR2.Projectile;
using UnityEngine;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("AccurateEnemies")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+33de3bc6d5ec4bf5611673e16bdb1c3eca790851")]
[assembly: AssemblyProduct("AccurateEnemies")]
[assembly: AssemblyTitle("AccurateEnemies")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace R2API.Utils
{
	[AttributeUsage(AttributeTargets.Assembly)]
	public class ManualNetworkRegistrationAttribute : Attribute
	{
	}
}
namespace AccurateEnemies
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("com.Moffein.AccurateEnemies", "Accurate Enemies", "1.1.0")]
	public class AccurateEnemiesPlugin : BaseUnityPlugin
	{
		public static bool InfernoLoaded = false;

		public static bool RiskyArtifactsLoaded = false;

		public static DifficultyDef InfernoDef = null;

		public static float basePredictionAngle = 45f;

		public static bool hardmodeOnly = false;

		public static bool eliteOnly = false;

		public static bool alwaysAllowBosses = true;

		public void Awake()
		{
			InfernoLoaded = Chainloader.PluginInfos.ContainsKey("HIFU.Inferno");
			RiskyArtifactsLoaded = Chainloader.PluginInfos.ContainsKey("com.Moffein.RiskyArtifacts");
			ReadConfig();
			RunHooks();
			RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(InfernoCompat));
		}

		private void InfernoCompat()
		{
			if (InfernoLoaded)
			{
				InfernoDef = GetInfernoDef();
			}
		}

		private void ReadConfig()
		{
			hardmodeOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Gameplay", "Restrict to Hard Difficulties", false, "Changes only apply on Monsoon and above.").Value;
			eliteOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Gameplay", "Elite Only", true, "Only apply changes to Elite enemies.").Value;
			alwaysAllowBosses = ((BaseUnityPlugin)this).Config.Bind<bool>("Gameplay", "Always Allow Champions", true, "Always enable changes on champion-tier (boss) enemies.").Value;
			string text = "Enable projectile prediction.";
			string text2 = "Only use projectile prediction after looping.";
			BeetleGuard.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Beetle Guard", true, text).Value;
			Bronzong.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Brass Contraption", true, text).Value;
			ClayBoss.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Clay Dunestrider", true, text).Value;
			ClayGrenadier.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Clay Apothecary", true, text).Value;
			FlyingVermin.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Blind Pest", true, text).Value;
			GreaterWisp.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Greater Wisp/Archaic Wisp", true, text).Value;
			Grovetender.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Grovetender", true, text).Value;
			Lemurian.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Lemurian", true, text).Value;
			LemurianBruiser.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Elder Lemurian", true, text).Value;
			LunarExploder.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Lunar Exploder", true, text).Value;
			MinorConstruct.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Alpha Construct", true, text).Value;
			RoboBallBoss.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Solus Control Unit/Alloy Worship Unit", true, text).Value;
			Scavenger.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Scavenger", true, text).Value;
			Vagrant.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Wandering Vagrant", true, text).Value;
			VoidJailer.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Void Jailer", true, text).Value;
			Vulture.enabled = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Alloy Vulture", true, text).Value;
			BeetleGuard.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Beetle Guard - Loop Only", false, text2).Value;
			Bronzong.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Brass Contraption - Loop Only", false, text2).Value;
			ClayBoss.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Clay Dunestrider - Loop Only", false, text2).Value;
			ClayGrenadier.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Clay Apothecary - Loop Only", false, text2).Value;
			FlyingVermin.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Blind Pest - Loop Only", false, text2).Value;
			GreaterWisp.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Greater Wisp/Archaic Wisp - Loop Only", false, text2).Value;
			Grovetender.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Grovetender - Loop Only", false, text2).Value;
			Lemurian.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Lemurian - Loop Only", false, text2).Value;
			LemurianBruiser.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Elder Lemurian - Loop Only", false, text2).Value;
			LunarExploder.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Lunar Exploder - Loop Only", false, text2).Value;
			MinorConstruct.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Alpha Construct - Loop Only", false, text2).Value;
			RoboBallBoss.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Solus Control Unit/Alloy Worship Unit - Loop Only", false, text2).Value;
			Scavenger.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Scavenger - Loop Only", false, text2).Value;
			Vagrant.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Wandering Vagrant - Loop Only", false, text2).Value;
			VoidJailer.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Void Jailer - Loop Only", false, text2).Value;
			Vulture.loopOnly = ((BaseUnityPlugin)this).Config.Bind<bool>("Enemies", "Alloy Vulture - Loop Only", false, text2).Value;
		}

		private void RunHooks()
		{
			Lemurian.Init();
			Vulture.Init();
			Bronzong.Init();
			GreaterWisp.Init();
			BeetleGuard.Init();
			ClayGrenadier.Init();
			LemurianBruiser.Init();
			Scavenger.Init();
			Vagrant.Init();
			VoidJailer.Init();
			ClayBoss.Init();
			Grovetender.Init();
			RoboBallBoss.Init();
			FlyingVermin.Init();
			MinorConstruct.Init();
			LunarExploder.Init();
		}

		public static float GetProjectileSimpleModifiers(float speed)
		{
			if (InfernoLoaded)
			{
				speed *= GetInfernoProjectileSpeedMult();
			}
			if (RiskyArtifactsLoaded)
			{
				speed *= GetRiskyArtifactsWarfareProjectileSpeedMult();
			}
			return speed;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static float GetRiskyArtifactsWarfareProjectileSpeedMult()
		{
			if (Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(Warfare.artifact))
			{
				return Warfare.projSpeed;
			}
			return 1f;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static DifficultyDef GetInfernoDef()
		{
			return Main.InfernoDiffDef;
		}

		[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
		public static float GetInfernoProjectileSpeedMult()
		{
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			if (Object.op_Implicit((Object)(object)Run.instance) && DifficultyCatalog.GetDifficultyDef(Run.instance.selectedDifficulty) == InfernoDef)
			{
				return Main.ProjectileSpeed.Value;
			}
			return 1f;
		}
	}
	public class Util
	{
		public static bool AllowPrediction(CharacterBody body, bool loopOnly)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (AccurateEnemiesPlugin.hardmodeOnly && Object.op_Implicit((Object)(object)Run.instance))
			{
				DifficultyDef difficultyDef = DifficultyCatalog.GetDifficultyDef(Run.instance.selectedDifficulty);
				if (difficultyDef != null && !difficultyDef.countsAsHardMode)
				{
					return false;
				}
			}
			if (AccurateEnemiesPlugin.alwaysAllowBosses && Object.op_Implicit((Object)(object)body) && body.isChampion)
			{
				return true;
			}
			if (loopOnly && Object.op_Implicit((Object)(object)Run.instance) && Run.instance.stageClearCount < 5)
			{
				return false;
			}
			if (Object.op_Implicit((Object)(object)body))
			{
				if (body.isPlayerControlled)
				{
					return false;
				}
				if (AccurateEnemiesPlugin.eliteOnly && !body.isElite)
				{
					return false;
				}
			}
			return true;
		}

		public static Ray PredictAimray(Ray aimRay, TeamIndex attackerTeam, float maxTargetAngle, float projectileSpeed, HurtBox targetHurtBox)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: Unknown result type (might be due to invalid IL or missing references)
			//IL_0218: Unknown result type (might be due to invalid IL or missing references)
			//IL_0089: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0103: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010d: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_013f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0160: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_017f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0193: Unknown result type (might be due to invalid IL or missing references)
			//IL_020f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0211: Unknown result type (might be due to invalid IL or missing references)
			bool flag = false;
			if ((Object)(object)targetHurtBox == (Object)null)
			{
				targetHurtBox = AcquireTarget(aimRay, attackerTeam, maxTargetAngle);
			}
			if (Object.op_Implicit((Object)(object)targetHurtBox) && Object.op_Implicit((Object)(object)targetHurtBox.healthComponent) && Object.op_Implicit((Object)(object)targetHurtBox.healthComponent.body) && Object.op_Implicit((Object)(object)targetHurtBox.healthComponent.body.characterMotor) && projectileSpeed > 0f)
			{
				CharacterBody body = targetHurtBox.healthComponent.body;
				Vector3 position = ((Component)targetHurtBox).transform.position;
				Vector3 val = body.characterMotor.velocity;
				if (!((NetworkBehaviour)body).hasAuthority)
				{
					val = (body.transform.position - body.previousPosition) / Time.fixedDeltaTime;
				}
				if (((Vector3)(ref val)).sqrMagnitude > 0f && (!Object.op_Implicit((Object)(object)body) || !body.hasCloakBuff))
				{
					Vector3 val2 = position - ((Ray)(ref aimRay)).origin;
					float num = ((Vector3)(ref val2)).magnitude / projectileSpeed;
					Vector3 val3 = default(Vector3);
					((Vector3)(ref val3))..ctor(val.x, 0f, val.z);
					Vector3 val4 = position + val3 * num;
					if (Object.op_Implicit((Object)(object)body.characterMotor) && !body.characterMotor.isGrounded && val.y > 0f)
					{
						float num2 = position.y + val.y * num;
						num2 += 0.5f * Physics.gravity.y * num * num;
						val4.y = num2;
					}
					Ray val5 = default(Ray);
					((Ray)(ref val5)).origin = ((Ray)(ref aimRay)).origin;
					Vector3 val6 = val4 - ((Ray)(ref aimRay)).origin;
					((Ray)(ref val5)).direction = ((Vector3)(ref val6)).normalized;
					Ray result = val5;
					float num3 = Vector3.Angle(((Ray)(ref aimRay)).direction, ((Ray)(ref result)).direction);
					if (num3 <= maxTargetAngle)
					{
						return result;
					}
				}
			}
			return aimRay;
		}

		public static Ray PredictAimrayPS(Ray aimRay, TeamIndex attackerTeam, float maxTargetAngle, GameObject projectilePrefab, HurtBox targetHurtBox)
		{
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Invalid comparison between Unknown and I4
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
			float num = -1f;
			if (Object.op_Implicit((Object)(object)projectilePrefab))
			{
				ProjectileSimple component = projectilePrefab.GetComponent<ProjectileSimple>();
				if (Object.op_Implicit((Object)(object)component))
				{
					num = component.desiredForwardSpeed;
					if ((int)attackerTeam != 1 && Object.op_Implicit((Object)(object)component.rigidbody) && !component.rigidbody.useGravity)
					{
						num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
					}
				}
			}
			if (num <= 0f)
			{
				Debug.LogError((object)"AccurateEnemies: Could not get speed of ProjectileSimple.");
				return aimRay;
			}
			return (num > 0f) ? PredictAimray(aimRay, attackerTeam, maxTargetAngle, num, targetHurtBox) : aimRay;
		}

		public static Ray PredictAimrayPCC(Ray aimRay, TeamIndex attackerTeam, float maxTargetAngle, GameObject projectilePrefab, HurtBox targetHurtBox)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			float num = -1f;
			if (Object.op_Implicit((Object)(object)projectilePrefab))
			{
				ProjectileCharacterController component = projectilePrefab.GetComponent<ProjectileCharacterController>();
				if (Object.op_Implicit((Object)(object)component))
				{
					num = component.velocity;
				}
			}
			if (num <= 0f)
			{
				Debug.LogError((object)"AccurateEnemies: Could not get speed of ProjectileCharacterController.");
				return aimRay;
			}
			return PredictAimray(aimRay, attackerTeam, maxTargetAngle, num, targetHurtBox);
		}

		public static HurtBox AcquireTarget(Ray aimRay, TeamIndex attackerTeam, float maxTargetAngle)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			BullseyeSearch val = new BullseyeSearch();
			val.teamMaskFilter = TeamMask.allButNeutral;
			((TeamMask)(ref val.teamMaskFilter)).RemoveTeam(attackerTeam);
			val.filterByLoS = true;
			val.searchOrigin = ((Ray)(ref aimRay)).origin;
			val.sortMode = (SortMode)2;
			val.maxDistanceFilter = 200f;
			val.maxAngleFilter = maxTargetAngle;
			val.searchDirection = ((Ray)(ref aimRay)).direction;
			val.RefreshCandidates();
			return val.GetResults().FirstOrDefault();
		}

		public static HurtBox GetMasterAITargetHurtbox(CharacterMaster cm)
		{
			if (Object.op_Implicit((Object)(object)cm) && cm.aiComponents.Length != 0)
			{
				BaseAI[] aiComponents = cm.aiComponents;
				foreach (BaseAI val in aiComponents)
				{
					if (val.currentEnemy != null && (Object)(object)val.currentEnemy.bestHurtBox != (Object)null)
					{
						return val.currentEnemy.bestHurtBox;
					}
				}
			}
			return null;
		}
	}
}
namespace AccurateEnemies.Hooks
{
	public class BeetleGuard
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireSunder, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireSunder, Ray>>((Func<Ray, FireSunder, Ray>)delegate(Ray aimRay, FireSunder self)
					{
						//IL_0056: Unknown result type (might be due to invalid IL or missing references)
						//IL_0057: Unknown result type (might be due to invalid IL or missing references)
						//IL_001e: Unknown result type (might be due to invalid IL or missing references)
						//IL_003a: Unknown result type (might be due to invalid IL or missing references)
						//IL_003c: Unknown result type (might be due to invalid IL or missing references)
						//IL_004c: Unknown result type (might be due to invalid IL or missing references)
						//IL_0051: Unknown result type (might be due to invalid IL or missing references)
						//IL_0052: Unknown result type (might be due to invalid IL or missing references)
						//IL_0053: Unknown result type (might be due to invalid IL or missing references)
						//IL_005a: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							((Ray)(ref aimRay)).origin = self.handRTransform.position;
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPCC(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireSunder.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.BeetleGuardMonster.FireSunder.FixedUpdate IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireSunder self)
			{
				//IL_0056: Unknown result type (might be due to invalid IL or missing references)
				//IL_0057: Unknown result type (might be due to invalid IL or missing references)
				//IL_001e: Unknown result type (might be due to invalid IL or missing references)
				//IL_003a: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_004c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0051: Unknown result type (might be due to invalid IL or missing references)
				//IL_0052: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: Unknown result type (might be due to invalid IL or missing references)
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					((Ray)(ref aimRay)).origin = self.handRTransform.position;
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPCC(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireSunder.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireSunder, Ray>>((Func<Ray, FireSunder, Ray>)delegate(Ray aimRay, FireSunder self)
						{
							//IL_0056: Unknown result type (might be due to invalid IL or missing references)
							//IL_0057: Unknown result type (might be due to invalid IL or missing references)
							//IL_001e: Unknown result type (might be due to invalid IL or missing references)
							//IL_003a: Unknown result type (might be due to invalid IL or missing references)
							//IL_003c: Unknown result type (might be due to invalid IL or missing references)
							//IL_004c: Unknown result type (might be due to invalid IL or missing references)
							//IL_0051: Unknown result type (might be due to invalid IL or missing references)
							//IL_0052: Unknown result type (might be due to invalid IL or missing references)
							//IL_0053: Unknown result type (might be due to invalid IL or missing references)
							//IL_005a: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								((Ray)(ref aimRay)).origin = self.handRTransform.position;
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPCC(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireSunder.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.BeetleGuardMonster.FireSunder.FixedUpdate IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireSunder.FixedUpdate += (Manipulator)obj;
		}
	}
	public class Bronzong
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, ChargeTrioBomb, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, ChargeTrioBomb, Ray>>((Func<Ray, ChargeTrioBomb, Ray>)delegate(Ray aimRay, ChargeTrioBomb self)
					{
						//IL_0043: Unknown result type (might be due to invalid IL or missing references)
						//IL_0044: Unknown result type (might be due to invalid IL or missing references)
						//IL_0027: Unknown result type (might be due to invalid IL or missing references)
						//IL_0029: Unknown result type (might be due to invalid IL or missing references)
						//IL_0039: Unknown result type (might be due to invalid IL or missing references)
						//IL_003e: Unknown result type (might be due to invalid IL or missing references)
						//IL_003f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0040: Unknown result type (might be due to invalid IL or missing references)
						//IL_0047: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, ChargeTrioBomb.bombProjectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.Bell.BellWeapon.ChargeTrioBomb.FixedUpdate IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, ChargeTrioBomb self)
			{
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, ChargeTrioBomb.bombProjectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, ChargeTrioBomb, Ray>>((Func<Ray, ChargeTrioBomb, Ray>)delegate(Ray aimRay, ChargeTrioBomb self)
						{
							//IL_0043: Unknown result type (might be due to invalid IL or missing references)
							//IL_0044: Unknown result type (might be due to invalid IL or missing references)
							//IL_0027: Unknown result type (might be due to invalid IL or missing references)
							//IL_0029: Unknown result type (might be due to invalid IL or missing references)
							//IL_0039: Unknown result type (might be due to invalid IL or missing references)
							//IL_003e: Unknown result type (might be due to invalid IL or missing references)
							//IL_003f: Unknown result type (might be due to invalid IL or missing references)
							//IL_0040: Unknown result type (might be due to invalid IL or missing references)
							//IL_0047: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, ChargeTrioBomb.bombProjectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.Bell.BellWeapon.ChargeTrioBomb.FixedUpdate IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			ChargeTrioBomb.FixedUpdate += (Manipulator)obj;
		}
	}
	public class ClayBoss
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireFireball, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireFireball, Ray>>((Func<Ray, FireFireball, Ray>)delegate(Ray aimRay, FireFireball self)
					{
						//IL_0043: Unknown result type (might be due to invalid IL or missing references)
						//IL_0044: Unknown result type (might be due to invalid IL or missing references)
						//IL_0027: Unknown result type (might be due to invalid IL or missing references)
						//IL_0029: Unknown result type (might be due to invalid IL or missing references)
						//IL_0039: Unknown result type (might be due to invalid IL or missing references)
						//IL_003e: Unknown result type (might be due to invalid IL or missing references)
						//IL_003f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0040: Unknown result type (might be due to invalid IL or missing references)
						//IL_0047: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireBombardment.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.ClayBoss.ClayBossWeapon.FireBombardment.FireGrenade IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireFireball self)
			{
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireBombardment.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireFireball, Ray>>((Func<Ray, FireFireball, Ray>)delegate(Ray aimRay, FireFireball self)
						{
							//IL_0043: Unknown result type (might be due to invalid IL or missing references)
							//IL_0044: Unknown result type (might be due to invalid IL or missing references)
							//IL_0027: Unknown result type (might be due to invalid IL or missing references)
							//IL_0029: Unknown result type (might be due to invalid IL or missing references)
							//IL_0039: Unknown result type (might be due to invalid IL or missing references)
							//IL_003e: Unknown result type (might be due to invalid IL or missing references)
							//IL_003f: Unknown result type (might be due to invalid IL or missing references)
							//IL_0040: Unknown result type (might be due to invalid IL or missing references)
							//IL_0047: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireBombardment.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.ClayBoss.ClayBossWeapon.FireBombardment.FireGrenade IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireBombardment.FireGrenade += (Manipulator)obj;
		}
	}
	public class ClayGrenadier
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static hook_ModifyProjectileAimRay <>9__3_0;

			internal Ray <Init>b__3_0(orig_ModifyProjectileAimRay orig, ThrowBarrel self, Ray aimRay)
			{
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				//IL_004e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0053: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_003a: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					Ray val = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, ((GenericProjectileBaseState)self).projectilePrefab, masterAITargetHurtbox);
					return orig.Invoke(self, val);
				}
				return orig.Invoke(self, aimRay);
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				hook_ModifyProjectileAimRay val = delegate(orig_ModifyProjectileAimRay orig, ThrowBarrel self, Ray aimRay)
				{
					//IL_004d: Unknown result type (might be due to invalid IL or missing references)
					//IL_004e: Unknown result type (might be due to invalid IL or missing references)
					//IL_0053: Unknown result type (might be due to invalid IL or missing references)
					//IL_0027: Unknown result type (might be due to invalid IL or missing references)
					//IL_0029: Unknown result type (might be due to invalid IL or missing references)
					//IL_003a: Unknown result type (might be due to invalid IL or missing references)
					//IL_003f: Unknown result type (might be due to invalid IL or missing references)
					//IL_0042: Unknown result type (might be due to invalid IL or missing references)
					//IL_0043: Unknown result type (might be due to invalid IL or missing references)
					//IL_0048: Unknown result type (might be due to invalid IL or missing references)
					//IL_0056: Unknown result type (might be due to invalid IL or missing references)
					if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
					{
						HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
						Ray val2 = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, ((GenericProjectileBaseState)self).projectilePrefab, masterAITargetHurtbox);
						return orig.Invoke(self, val2);
					}
					return orig.Invoke(self, aimRay);
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			ThrowBarrel.ModifyProjectileAimRay += (hook_ModifyProjectileAimRay)obj;
		}
	}
	public class FlyingVermin
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, GenericProjectileBaseState, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, GenericProjectileBaseState, Ray>>((Func<Ray, GenericProjectileBaseState, Ray>)delegate(Ray aimRay, GenericProjectileBaseState self)
					{
						//IL_0060: Unknown result type (might be due to invalid IL or missing references)
						//IL_0061: Unknown result type (might be due to invalid IL or missing references)
						//IL_0065: Unknown result type (might be due to invalid IL or missing references)
						//IL_0041: Unknown result type (might be due to invalid IL or missing references)
						//IL_0043: Unknown result type (might be due to invalid IL or missing references)
						//IL_0054: Unknown result type (might be due to invalid IL or missing references)
						//IL_0059: Unknown result type (might be due to invalid IL or missing references)
						//IL_005a: Unknown result type (might be due to invalid IL or missing references)
						//IL_005b: Unknown result type (might be due to invalid IL or missing references)
						if (((object)self).GetType() == typeof(Spit) && Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: FlyingVermin EntityStates.GenericProjectileBaseState.FireProjectile IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, GenericProjectileBaseState self)
			{
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0065: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0054: Unknown result type (might be due to invalid IL or missing references)
				//IL_0059: Unknown result type (might be due to invalid IL or missing references)
				//IL_005a: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				if (((object)self).GetType() == typeof(Spit) && Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, GenericProjectileBaseState, Ray>>((Func<Ray, GenericProjectileBaseState, Ray>)delegate(Ray aimRay, GenericProjectileBaseState self)
						{
							//IL_0060: Unknown result type (might be due to invalid IL or missing references)
							//IL_0061: Unknown result type (might be due to invalid IL or missing references)
							//IL_0065: Unknown result type (might be due to invalid IL or missing references)
							//IL_0041: Unknown result type (might be due to invalid IL or missing references)
							//IL_0043: Unknown result type (might be due to invalid IL or missing references)
							//IL_0054: Unknown result type (might be due to invalid IL or missing references)
							//IL_0059: Unknown result type (might be due to invalid IL or missing references)
							//IL_005a: Unknown result type (might be due to invalid IL or missing references)
							//IL_005b: Unknown result type (might be due to invalid IL or missing references)
							if (((object)self).GetType() == typeof(Spit) && Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: FlyingVermin EntityStates.GenericProjectileBaseState.FireProjectile IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			GenericProjectileBaseState.FireProjectile += (Manipulator)obj;
		}
	}
	public class GreaterWisp
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireCannons, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireCannons, Ray>>((Func<Ray, FireCannons, Ray>)delegate(Ray aimRay, FireCannons self)
					{
						//IL_0044: Unknown result type (might be due to invalid IL or missing references)
						//IL_0045: Unknown result type (might be due to invalid IL or missing references)
						//IL_0027: Unknown result type (might be due to invalid IL or missing references)
						//IL_0029: Unknown result type (might be due to invalid IL or missing references)
						//IL_003a: Unknown result type (might be due to invalid IL or missing references)
						//IL_003f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0040: Unknown result type (might be due to invalid IL or missing references)
						//IL_0041: Unknown result type (might be due to invalid IL or missing references)
						//IL_0048: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.GreaterWispMonster.FireCannons.OnEnter IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireCannons self)
			{
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_003a: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireCannons, Ray>>((Func<Ray, FireCannons, Ray>)delegate(Ray aimRay, FireCannons self)
						{
							//IL_0044: Unknown result type (might be due to invalid IL or missing references)
							//IL_0045: Unknown result type (might be due to invalid IL or missing references)
							//IL_0027: Unknown result type (might be due to invalid IL or missing references)
							//IL_0029: Unknown result type (might be due to invalid IL or missing references)
							//IL_003a: Unknown result type (might be due to invalid IL or missing references)
							//IL_003f: Unknown result type (might be due to invalid IL or missing references)
							//IL_0040: Unknown result type (might be due to invalid IL or missing references)
							//IL_0041: Unknown result type (might be due to invalid IL or missing references)
							//IL_0048: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.GreaterWispMonster.FireCannons.OnEnter IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireCannons.OnEnter += (Manipulator)obj;
		}
	}
	public class Grovetender
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireHook, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireHook, Ray>>((Func<Ray, FireHook, Ray>)delegate(Ray aimRay, FireHook self)
					{
						//IL_0043: Unknown result type (might be due to invalid IL or missing references)
						//IL_0044: Unknown result type (might be due to invalid IL or missing references)
						//IL_0027: Unknown result type (might be due to invalid IL or missing references)
						//IL_0029: Unknown result type (might be due to invalid IL or missing references)
						//IL_0039: Unknown result type (might be due to invalid IL or missing references)
						//IL_003e: Unknown result type (might be due to invalid IL or missing references)
						//IL_003f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0040: Unknown result type (might be due to invalid IL or missing references)
						//IL_0047: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireHook.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.GravekeeperBoss.FireHook.OnEnter IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireHook self)
			{
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireHook.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireHook, Ray>>((Func<Ray, FireHook, Ray>)delegate(Ray aimRay, FireHook self)
						{
							//IL_0043: Unknown result type (might be due to invalid IL or missing references)
							//IL_0044: Unknown result type (might be due to invalid IL or missing references)
							//IL_0027: Unknown result type (might be due to invalid IL or missing references)
							//IL_0029: Unknown result type (might be due to invalid IL or missing references)
							//IL_0039: Unknown result type (might be due to invalid IL or missing references)
							//IL_003e: Unknown result type (might be due to invalid IL or missing references)
							//IL_003f: Unknown result type (might be due to invalid IL or missing references)
							//IL_0040: Unknown result type (might be due to invalid IL or missing references)
							//IL_0047: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireHook.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.GravekeeperBoss.FireHook.OnEnter IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireHook.OnEnter += (Manipulator)obj;
		}
	}
	public class Lemurian
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireFireball, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireFireball, Ray>>((Func<Ray, FireFireball, Ray>)delegate(Ray aimRay, FireFireball self)
					{
						//IL_0043: Unknown result type (might be due to invalid IL or missing references)
						//IL_0044: Unknown result type (might be due to invalid IL or missing references)
						//IL_0027: Unknown result type (might be due to invalid IL or missing references)
						//IL_0029: Unknown result type (might be due to invalid IL or missing references)
						//IL_0039: Unknown result type (might be due to invalid IL or missing references)
						//IL_003e: Unknown result type (might be due to invalid IL or missing references)
						//IL_003f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0040: Unknown result type (might be due to invalid IL or missing references)
						//IL_0047: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireFireball.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.LemurianMonster.FireFireball.OnEnter IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireFireball self)
			{
				//IL_0043: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0039: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0040: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireFireball.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireFireball, Ray>>((Func<Ray, FireFireball, Ray>)delegate(Ray aimRay, FireFireball self)
						{
							//IL_0043: Unknown result type (might be due to invalid IL or missing references)
							//IL_0044: Unknown result type (might be due to invalid IL or missing references)
							//IL_0027: Unknown result type (might be due to invalid IL or missing references)
							//IL_0029: Unknown result type (might be due to invalid IL or missing references)
							//IL_0039: Unknown result type (might be due to invalid IL or missing references)
							//IL_003e: Unknown result type (might be due to invalid IL or missing references)
							//IL_003f: Unknown result type (might be due to invalid IL or missing references)
							//IL_0040: Unknown result type (might be due to invalid IL or missing references)
							//IL_0047: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireFireball.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.LemurianMonster.FireFireball.OnEnter IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireFireball.OnEnter += (Manipulator)obj;
		}
	}
	public class LemurianBruiser
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireMegaFireball, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireMegaFireball, Ray>>((Func<Ray, FireMegaFireball, Ray>)delegate(Ray aimRay, FireMegaFireball self)
					{
						//IL_008b: Unknown result type (might be due to invalid IL or missing references)
						//IL_008c: Unknown result type (might be due to invalid IL or missing references)
						//IL_0090: Unknown result type (might be due to invalid IL or missing references)
						//IL_006d: Unknown result type (might be due to invalid IL or missing references)
						//IL_006f: Unknown result type (might be due to invalid IL or missing references)
						//IL_007f: Unknown result type (might be due to invalid IL or missing references)
						//IL_0084: Unknown result type (might be due to invalid IL or missing references)
						//IL_003d: Unknown result type (might be due to invalid IL or missing references)
						//IL_0043: Invalid comparison between Unknown and I4
						//IL_0086: Unknown result type (might be due to invalid IL or missing references)
						//IL_0087: Unknown result type (might be due to invalid IL or missing references)
						//IL_0055: Unknown result type (might be due to invalid IL or missing references)
						//IL_0057: Unknown result type (might be due to invalid IL or missing references)
						//IL_0063: Unknown result type (might be due to invalid IL or missing references)
						//IL_0068: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							float num = FireMegaFireball.projectileSpeed;
							Ray result;
							if (num > 0f)
							{
								if ((int)((BaseState)self).GetTeam() != 1)
								{
									num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
								}
								result = Util.PredictAimray(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, num, masterAITargetHurtbox);
							}
							else
							{
								result = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireMegaFireball.projectilePrefab, masterAITargetHurtbox);
							}
							return result;
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.LemurianBruiserMonster.FireMegaFireball.FixedUpdate IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireMegaFireball self)
			{
				//IL_008b: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0090: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_006f: Unknown result type (might be due to invalid IL or missing references)
				//IL_007f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0084: Unknown result type (might be due to invalid IL or missing references)
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0043: Invalid comparison between Unknown and I4
				//IL_0086: Unknown result type (might be due to invalid IL or missing references)
				//IL_0087: Unknown result type (might be due to invalid IL or missing references)
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				//IL_0057: Unknown result type (might be due to invalid IL or missing references)
				//IL_0063: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					float num = FireMegaFireball.projectileSpeed;
					Ray result;
					if (num > 0f)
					{
						if ((int)((BaseState)self).GetTeam() != 1)
						{
							num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
						}
						result = Util.PredictAimray(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, num, masterAITargetHurtbox);
					}
					else
					{
						result = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireMegaFireball.projectilePrefab, masterAITargetHurtbox);
					}
					return result;
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireMegaFireball, Ray>>((Func<Ray, FireMegaFireball, Ray>)delegate(Ray aimRay, FireMegaFireball self)
						{
							//IL_008b: Unknown result type (might be due to invalid IL or missing references)
							//IL_008c: Unknown result type (might be due to invalid IL or missing references)
							//IL_0090: Unknown result type (might be due to invalid IL or missing references)
							//IL_006d: Unknown result type (might be due to invalid IL or missing references)
							//IL_006f: Unknown result type (might be due to invalid IL or missing references)
							//IL_007f: Unknown result type (might be due to invalid IL or missing references)
							//IL_0084: Unknown result type (might be due to invalid IL or missing references)
							//IL_003d: Unknown result type (might be due to invalid IL or missing references)
							//IL_0043: Invalid comparison between Unknown and I4
							//IL_0086: Unknown result type (might be due to invalid IL or missing references)
							//IL_0087: Unknown result type (might be due to invalid IL or missing references)
							//IL_0055: Unknown result type (might be due to invalid IL or missing references)
							//IL_0057: Unknown result type (might be due to invalid IL or missing references)
							//IL_0063: Unknown result type (might be due to invalid IL or missing references)
							//IL_0068: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								float num = FireMegaFireball.projectileSpeed;
								Ray result;
								if (num > 0f)
								{
									if ((int)((BaseState)self).GetTeam() != 1)
									{
										num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
									}
									result = Util.PredictAimray(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, num, masterAITargetHurtbox);
								}
								else
								{
									result = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, FireMegaFireball.projectilePrefab, masterAITargetHurtbox);
								}
								return result;
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.LemurianBruiserMonster.FireMegaFireball.FixedUpdate IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireMegaFireball.FixedUpdate += (Manipulator)obj;
		}
	}
	public class LunarExploder
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, GenericProjectileBaseState, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, GenericProjectileBaseState, Ray>>((Func<Ray, GenericProjectileBaseState, Ray>)delegate(Ray aimRay, GenericProjectileBaseState self)
					{
						//IL_007d: Unknown result type (might be due to invalid IL or missing references)
						//IL_007e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0082: Unknown result type (might be due to invalid IL or missing references)
						//IL_005e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0060: Unknown result type (might be due to invalid IL or missing references)
						//IL_0071: Unknown result type (might be due to invalid IL or missing references)
						//IL_0076: Unknown result type (might be due to invalid IL or missing references)
						//IL_0077: Unknown result type (might be due to invalid IL or missing references)
						//IL_0078: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.isPlayerControlled && (!AccurateEnemiesPlugin.eliteOnly || ((EntityState)self).characterBody.isElite))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: LunarExploder EntityStates.GenericProjectileBaseState.FireProjectile IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, GenericProjectileBaseState self)
			{
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_0077: Unknown result type (might be due to invalid IL or missing references)
				//IL_0078: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.isPlayerControlled && (!AccurateEnemiesPlugin.eliteOnly || ((EntityState)self).characterBody.isElite))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, GenericProjectileBaseState, Ray>>((Func<Ray, GenericProjectileBaseState, Ray>)delegate(Ray aimRay, GenericProjectileBaseState self)
						{
							//IL_007d: Unknown result type (might be due to invalid IL or missing references)
							//IL_007e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0082: Unknown result type (might be due to invalid IL or missing references)
							//IL_005e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0060: Unknown result type (might be due to invalid IL or missing references)
							//IL_0071: Unknown result type (might be due to invalid IL or missing references)
							//IL_0076: Unknown result type (might be due to invalid IL or missing references)
							//IL_0077: Unknown result type (might be due to invalid IL or missing references)
							//IL_0078: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.isPlayerControlled && (!AccurateEnemiesPlugin.eliteOnly || ((EntityState)self).characterBody.isElite))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: LunarExploder EntityStates.GenericProjectileBaseState.FireProjectile IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			GenericProjectileBaseState.FireProjectile += (Manipulator)obj;
		}
	}
	public class MinorConstruct
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, GenericProjectileBaseState, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, GenericProjectileBaseState, Ray>>((Func<Ray, GenericProjectileBaseState, Ray>)delegate(Ray aimRay, GenericProjectileBaseState self)
					{
						//IL_007d: Unknown result type (might be due to invalid IL or missing references)
						//IL_007e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0082: Unknown result type (might be due to invalid IL or missing references)
						//IL_005e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0060: Unknown result type (might be due to invalid IL or missing references)
						//IL_0071: Unknown result type (might be due to invalid IL or missing references)
						//IL_0076: Unknown result type (might be due to invalid IL or missing references)
						//IL_0077: Unknown result type (might be due to invalid IL or missing references)
						//IL_0078: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.isPlayerControlled && (!AccurateEnemiesPlugin.eliteOnly || ((EntityState)self).characterBody.isElite))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: MinorConstruct EntityStates.GenericProjectileBaseState.FireProjectile IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, GenericProjectileBaseState self)
			{
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0082: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0060: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0076: Unknown result type (might be due to invalid IL or missing references)
				//IL_0077: Unknown result type (might be due to invalid IL or missing references)
				//IL_0078: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.isPlayerControlled && (!AccurateEnemiesPlugin.eliteOnly || ((EntityState)self).characterBody.isElite))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, GenericProjectileBaseState, Ray>>((Func<Ray, GenericProjectileBaseState, Ray>)delegate(Ray aimRay, GenericProjectileBaseState self)
						{
							//IL_007d: Unknown result type (might be due to invalid IL or missing references)
							//IL_007e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0082: Unknown result type (might be due to invalid IL or missing references)
							//IL_005e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0060: Unknown result type (might be due to invalid IL or missing references)
							//IL_0071: Unknown result type (might be due to invalid IL or missing references)
							//IL_0076: Unknown result type (might be due to invalid IL or missing references)
							//IL_0077: Unknown result type (might be due to invalid IL or missing references)
							//IL_0078: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.isPlayerControlled && (!AccurateEnemiesPlugin.eliteOnly || ((EntityState)self).characterBody.isElite))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								return Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: MinorConstruct EntityStates.GenericProjectileBaseState.FireProjectile IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			GenericProjectileBaseState.FireProjectile += (Manipulator)obj;
		}
	}
	public class RoboBallBoss
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireEyeBlast, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//IL_003d: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
				}))
				{
					val.Emit(OpCodes.Ldarg_0);
					val.EmitDelegate<Func<Ray, FireEyeBlast, Ray>>((Func<Ray, FireEyeBlast, Ray>)delegate(Ray aimRay, FireEyeBlast self)
					{
						//IL_008d: Unknown result type (might be due to invalid IL or missing references)
						//IL_008e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0092: Unknown result type (might be due to invalid IL or missing references)
						//IL_006e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0070: Unknown result type (might be due to invalid IL or missing references)
						//IL_0081: Unknown result type (might be due to invalid IL or missing references)
						//IL_0086: Unknown result type (might be due to invalid IL or missing references)
						//IL_003e: Unknown result type (might be due to invalid IL or missing references)
						//IL_0044: Invalid comparison between Unknown and I4
						//IL_0088: Unknown result type (might be due to invalid IL or missing references)
						//IL_0089: Unknown result type (might be due to invalid IL or missing references)
						//IL_0056: Unknown result type (might be due to invalid IL or missing references)
						//IL_0058: Unknown result type (might be due to invalid IL or missing references)
						//IL_0064: Unknown result type (might be due to invalid IL or missing references)
						//IL_0069: Unknown result type (might be due to invalid IL or missing references)
						if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
						{
							HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
							float num = self.projectileSpeed;
							Ray result;
							if (num > 0f)
							{
								if ((int)((BaseState)self).GetTeam() != 1)
								{
									num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
								}
								result = Util.PredictAimray(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, num, masterAITargetHurtbox);
							}
							else
							{
								result = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
							}
							return result;
						}
						return aimRay;
					});
				}
				else
				{
					Debug.LogError((object)"AccurateEnemies: EntityStates.RoboBallBoss.Weapon.FireEyeBlast.FixedUpdate IL Hook failed");
				}
			}

			internal bool <Init>b__3_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay");
			}

			internal Ray <Init>b__3_1(Ray aimRay, FireEyeBlast self)
			{
				//IL_008d: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0092: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0070: Unknown result type (might be due to invalid IL or missing references)
				//IL_0081: Unknown result type (might be due to invalid IL or missing references)
				//IL_0086: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0044: Invalid comparison between Unknown and I4
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_0089: Unknown result type (might be due to invalid IL or missing references)
				//IL_0056: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_0064: Unknown result type (might be due to invalid IL or missing references)
				//IL_0069: Unknown result type (might be due to invalid IL or missing references)
				if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
				{
					HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
					float num = self.projectileSpeed;
					Ray result;
					if (num > 0f)
					{
						if ((int)((BaseState)self).GetTeam() != 1)
						{
							num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
						}
						result = Util.PredictAimray(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, num, masterAITargetHurtbox);
					}
					else
					{
						result = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
					}
					return result;
				}
				return aimRay;
			}
		}

		public static bool enabled = true;

		public static bool loopOnly = false;

		private static bool initialized = false;

		public static void Init()
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Expected O, but got Unknown
			if (!enabled || initialized)
			{
				return;
			}
			initialized = true;
			object obj = <>c.<>9__3_0;
			if (obj == null)
			{
				Manipulator val = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val2 = new ILCursor(il);
					if (val2.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<BaseState>(x, "GetAimRay")
					}))
					{
						val2.Emit(OpCodes.Ldarg_0);
						val2.EmitDelegate<Func<Ray, FireEyeBlast, Ray>>((Func<Ray, FireEyeBlast, Ray>)delegate(Ray aimRay, FireEyeBlast self)
						{
							//IL_008d: Unknown result type (might be due to invalid IL or missing references)
							//IL_008e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0092: Unknown result type (might be due to invalid IL or missing references)
							//IL_006e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0070: Unknown result type (might be due to invalid IL or missing references)
							//IL_0081: Unknown result type (might be due to invalid IL or missing references)
							//IL_0086: Unknown result type (might be due to invalid IL or missing references)
							//IL_003e: Unknown result type (might be due to invalid IL or missing references)
							//IL_0044: Invalid comparison between Unknown and I4
							//IL_0088: Unknown result type (might be due to invalid IL or missing references)
							//IL_0089: Unknown result type (might be due to invalid IL or missing references)
							//IL_0056: Unknown result type (might be due to invalid IL or missing references)
							//IL_0058: Unknown result type (might be due to invalid IL or missing references)
							//IL_0064: Unknown result type (might be due to invalid IL or missing references)
							//IL_0069: Unknown result type (might be due to invalid IL or missing references)
							if (Util.AllowPrediction(((EntityState)self).characterBody, loopOnly))
							{
								HurtBox masterAITargetHurtbox = Util.GetMasterAITargetHurtbox(((EntityState)self).characterBody.master);
								float num = self.projectileSpeed;
								Ray result;
								if (num > 0f)
								{
									if ((int)((BaseState)self).GetTeam() != 1)
									{
										num = AccurateEnemiesPlugin.GetProjectileSimpleModifiers(num);
									}
									result = Util.PredictAimray(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, num, masterAITargetHurtbox);
								}
								else
								{
									result = Util.PredictAimrayPS(aimRay, ((BaseState)self).GetTeam(), AccurateEnemiesPlugin.basePredictionAngle, self.projectilePrefab, masterAITargetHurtbox);
								}
								return result;
							}
							return aimRay;
						});
					}
					else
					{
						Debug.LogError((object)"AccurateEnemies: EntityStates.RoboBallBoss.Weapon.FireEyeBlast.FixedUpdate IL Hook failed");
					}
				};
				<>c.<>9__3_0 = val;
				obj = (object)val;
			}
			FireEyeBlast.FixedUpdate += (Manipulator)obj;
		}
	}
	public class Scavenger
	{
		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__3_2;

			public static Func<Ray, FireEnergyCannon, Ray> <>9__3_1;

			public static Manipulator <>9__3_0;

			internal void <Init>b__3_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to i