using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Serialization;
[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.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("Autodesk.Fbx")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("FbxBuildTestAssets")]
[assembly: IgnoresAccessChecksTo("Klattersynth")]
[assembly: IgnoresAccessChecksTo("Photon3Unity3D")]
[assembly: IgnoresAccessChecksTo("PhotonChat")]
[assembly: IgnoresAccessChecksTo("PhotonRealtime")]
[assembly: IgnoresAccessChecksTo("PhotonUnityNetworking")]
[assembly: IgnoresAccessChecksTo("PhotonUnityNetworking.Utilities")]
[assembly: IgnoresAccessChecksTo("PhotonVoice.API")]
[assembly: IgnoresAccessChecksTo("PhotonVoice")]
[assembly: IgnoresAccessChecksTo("PhotonVoice.PUN")]
[assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime")]
[assembly: IgnoresAccessChecksTo("SingularityGroup.HotReload.Runtime.Public")]
[assembly: IgnoresAccessChecksTo("Sirenix.OdinInspector.Attributes")]
[assembly: IgnoresAccessChecksTo("Sirenix.Serialization.Config")]
[assembly: IgnoresAccessChecksTo("Sirenix.Serialization")]
[assembly: IgnoresAccessChecksTo("Sirenix.Utilities")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Formats.Fbx.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Postprocessing.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Antlr3.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Core")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.Flow")]
[assembly: IgnoresAccessChecksTo("Unity.VisualScripting.State")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: IgnoresAccessChecksTo("websocket-sharp")]
[assembly: AssemblyCompany("GreatColtini")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+4305ac441d5d82ba23c918ce9347331e04ee7ae4")]
[assembly: AssemblyProduct("MinecraftEnderman")]
[assembly: AssemblyTitle("MinecraftEnderman")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
public class EnemyEnderman : MonoBehaviour
{
public enum State
{
Stand,
OnScreen,
Notice,
Attack,
Damage,
Despawn,
Stunned
}
private PhotonView photonView;
private Enemy enemy;
public EnemyEndermanAnim anim;
public GameObject head;
public GameObject hurtCollider;
private float hurtColliderTimer;
public State currentState;
private float stateTimer;
private bool stateImpulse;
private float tpTimer;
public Rigidbody rb;
internal PlayerAvatar playerTarget;
private bool otherEnemyFetch = true;
public List<EnemyEnderman> otherEnemies;
private Vector3 teleportPosition;
private Vector3 lastTeleportPosition;
private float teleportTimer;
private bool teleporting;
private float teleportRoamTimer;
private float noticeLerpTimer = 0f;
private float noticeLerpSpeed = 0.4f;
private float noticeThreshold = 1f;
private void Awake()
{
enemy = ((Component)this).GetComponent<Enemy>();
photonView = ((Component)this).GetComponent<PhotonView>();
}
private void Update()
{
if (!LevelGenerator.Instance.Generated)
{
return;
}
if (!GameManager.Multiplayer() || PhotonNetwork.IsMasterClient)
{
switch (currentState)
{
case State.Stand:
StateStand();
PlayerLookAt();
break;
case State.OnScreen:
StateOnScreen();
PlayerLookAt();
break;
case State.Notice:
StateNotice();
PlayerLookAt();
break;
case State.Attack:
StateAttack();
PlayerLookAt();
break;
case State.Damage:
StateDamage();
PlayerLookAt();
break;
case State.Despawn:
StateDespawn();
break;
case State.Stunned:
StateStunned();
break;
}
if (enemy.IsStunned())
{
enemy.EnemyParent.SpawnedTimerSet(0f);
UpdateState(State.Stunned);
}
}
TeleportLogic();
SetFollowTargetToPosition();
LocalEffect();
HurtColliderLogic();
if (currentState != State.OnScreen)
{
noticeLerpTimer = 0f;
}
}
private void StateStand()
{
if (stateImpulse)
{
SetTarget(null);
stateTimer = 5f;
stateImpulse = false;
}
if (!Object.op_Implicit((Object)(object)playerTarget))
{
foreach (PlayerAvatar player in GameDirector.instance.PlayerList)
{
if (!player.isDisabled && enemy.OnScreen.OnScreenPlayer.ContainsKey(player.photonView.ViewID) && enemy.OnScreen.GetOnScreen(player))
{
SetTarget(player);
UpdateState(State.OnScreen);
return;
}
}
}
if (!SemiFunc.EnemySpawnIdlePause())
{
if (teleportRoamTimer > 0f)
{
teleportRoamTimer -= Time.deltaTime;
}
else if (Teleport(_spawn: false))
{
SetRoamTimer();
}
if (SemiFunc.EnemyForceLeave(enemy))
{
Teleport(_spawn: false, _leave: true);
}
}
}
private void StateOnScreen()
{
if (stateImpulse)
{
tpTimer = Random.Range(0f, 3f);
stateTimer = 1f;
stateImpulse = false;
noticeLerpTimer = 0f;
}
bool flag = false;
bool flag2 = false;
if (Object.op_Implicit((Object)(object)playerTarget) && enemy.OnScreen.GetOnScreen(playerTarget))
{
stateTimer = 0.2f;
flag = true;
flag2 = IsPlayerLookingAtMe();
if (flag && !flag2 && tpTimer <= 0f)
{
if (Random.Range(0f, 1f) < 0.6f)
{
if (Teleport(_spawn: false))
{
tpTimer = 5f;
}
}
else
{
tpTimer = 2f;
}
}
if (flag2)
{
noticeLerpTimer += noticeLerpSpeed * Time.deltaTime;
if (playerTarget.isLocal)
{
float num = Mathf.Clamp01(noticeLerpTimer / noticeThreshold);
SemiFunc.DoNotLookEffect(((Component)this).gameObject, true, true, true, true, num > 0.5f, num > 0.8f);
}
}
else
{
noticeLerpTimer -= noticeLerpSpeed * 0.5f * Time.deltaTime;
noticeLerpTimer = Mathf.Max(0f, noticeLerpTimer);
}
}
if (tpTimer > 0f)
{
tpTimer -= Time.deltaTime;
}
if (flag && noticeLerpTimer >= noticeThreshold)
{
if (tpTimer <= 0f)
{
if (Random.Range(0f, 1f) < 0.5f)
{
if (Teleport(_spawn: false))
{
tpTimer = 5f;
}
}
else
{
tpTimer = 5f;
}
}
UpdateState(State.Notice);
}
else
{
stateTimer -= Time.deltaTime;
if (stateTimer <= 0f)
{
UpdateState(State.Stand);
}
}
}
private void StateNotice()
{
if (!GameManager.Multiplayer())
{
NoticeRPC();
}
else
{
photonView.RPC("NoticeRPC", (RpcTarget)0, Array.Empty<object>());
}
UpdateState(State.Attack);
}
private void StateAttack()
{
if (stateImpulse)
{
stateTimer = 1f;
if (IsPlayerLookingAtMe())
{
stateTimer *= 0.5f;
}
stateImpulse = false;
anim.animator.SetTrigger("Attack");
}
stateTimer -= Time.deltaTime;
if (stateTimer <= 0f)
{
UpdateState(State.Damage);
}
}
private void StateDamage()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: 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)
playerTarget.playerHealth.HurtOther(30, ((Component)playerTarget).transform.position, false, SemiFunc.EnemyGetIndex(enemy));
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("ActivateHurtColliderRPC", (RpcTarget)0, new object[1] { ((Component)playerTarget).transform.position });
}
else
{
ActivateHurtColliderRPC(((Component)playerTarget).transform.position);
}
UpdateState(State.Despawn);
}
private void StateDespawn()
{
if (stateImpulse)
{
stateTimer = 0.4f;
stateImpulse = false;
}
stateTimer -= Time.deltaTime;
if (stateTimer <= 0f)
{
enemy.EnemyParent.SpawnedTimerSet(0f);
}
}
private void StateStunned()
{
}
public void OnSpawn()
{
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
if (!SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
if (otherEnemyFetch)
{
otherEnemyFetch = false;
foreach (EnemyParent item in EnemyDirector.instance.enemiesSpawned)
{
EnemyEnderman componentInChildren = ((Component)item).GetComponentInChildren<EnemyEnderman>(true);
if (Object.op_Implicit((Object)(object)componentInChildren) && (Object)(object)componentInChildren != (Object)(object)this)
{
otherEnemies.Add(componentInChildren);
}
}
}
if (SemiFunc.EnemySpawnIdlePause())
{
lastTeleportPosition = ((Component)this).transform.position;
SemiFunc.EnemySpawn(enemy);
teleportPosition = ((Component)this).transform.position;
teleporting = true;
UpdateState(State.Stand);
}
else if (Teleport(_spawn: true))
{
SetRoamTimer();
UpdateState(State.Stand);
}
else
{
enemy.EnemyParent.Despawn();
enemy.EnemyParent.DespawnedTimerSet(3f, false);
}
}
public void OnHurt()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
anim.hurtSound.Play(((Component)anim).transform.position, 1f, 1f, 1f, 1f);
}
private void UpdateState(State _nextState)
{
stateTimer = 0f;
stateImpulse = true;
currentState = _nextState;
if (GameManager.Multiplayer())
{
photonView.RPC("UpdateStateRPC", (RpcTarget)1, new object[1] { _nextState });
}
}
private bool Teleport(bool _spawn, bool _leave = false)
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: 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_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_023f: Unknown result type (might be due to invalid IL or missing references)
//IL_026f: Unknown result type (might be due to invalid IL or missing references)
//IL_0274: Unknown result type (might be due to invalid IL or missing references)
//IL_0280: Unknown result type (might be due to invalid IL or missing references)
//IL_0285: Unknown result type (might be due to invalid IL or missing references)
//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: Unknown result type (might be due to invalid IL or missing references)
//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
if (currentState == State.Stunned)
{
return false;
}
List<LevelPoint> list = new List<LevelPoint>();
if (_leave)
{
list.Add(SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 5f));
}
else
{
list = SemiFunc.LevelPointGetWithinDistance(((Component)this).transform.position, 3f, 30f);
if (list == null)
{
list = SemiFunc.LevelPointGetWithinDistance(((Component)this).transform.position, 3f, 50f);
if (list == null)
{
list = SemiFunc.LevelPointGetWithinDistance(((Component)this).transform.position, 0f, 999f);
}
}
}
if (list == null)
{
return false;
}
bool flag = Random.Range(0, 100) < 3;
if (Object.op_Implicit((Object)(object)playerTarget))
{
flag = Random.Range(0, 100) < 30;
}
if (flag && !_leave)
{
list = SemiFunc.LevelPointsGetAllCloseToPlayers();
}
if (list == null || list.Count <= 0)
{
return false;
}
LevelPoint val = list[Random.Range(0, list.Count)];
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(((Component)val).transform.position + Vector3.up * 0.1f, Vector3.up, ref val2, 3.5f, LayerMask.GetMask(new string[1] { "Default" })))
{
return false;
}
foreach (EnemyEnderman otherEnemy in otherEnemies)
{
if (((Behaviour)otherEnemy).isActiveAndEnabled && Vector3.Distance(otherEnemy.rb.position, ((Component)val).transform.position) <= 2f)
{
return false;
}
}
if (Vector3.Distance(((Component)val).transform.position, lastTeleportPosition) < 1f)
{
return false;
}
if (SemiFunc.EnemyPhysObjectBoundingBoxCheck(((Component)this).transform.position, ((Component)val).transform.position, enemy.Rigidbody.rb))
{
return false;
}
lastTeleportPosition = ((Component)this).transform.position;
teleportPosition = ((Component)val).transform.position;
teleporting = true;
if (!_spawn)
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("TeleportEffectRPC", (RpcTarget)0, new object[2] { lastTeleportPosition, true });
}
else
{
TeleportEffectRPC(lastTeleportPosition, intro: true);
}
}
else
{
enemy.EnemyTeleported(teleportPosition);
}
return true;
}
private void TeleportLogic()
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
if (!SemiFunc.IsMasterClientOrSingleplayer() || currentState == State.Stunned)
{
return;
}
if (teleportTimer <= 0f)
{
if (teleporting)
{
enemy.EnemyTeleported(teleportPosition);
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("TeleportEffectRPC", (RpcTarget)0, new object[2] { teleportPosition, false });
}
else
{
TeleportEffectRPC(teleportPosition, intro: false);
}
teleporting = false;
}
}
else
{
teleportTimer -= Time.deltaTime;
}
}
private void PlayerLookAt()
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: 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_0045: 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_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: 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_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: 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)
if (Object.op_Implicit((Object)(object)playerTarget))
{
Quaternion val = Quaternion.LookRotation(playerTarget.PlayerVisionTarget.VisionTransform.position - ((Component)enemy.Rigidbody).transform.position);
Quaternion val2 = Quaternion.Euler(0f, ((Quaternion)(ref val)).eulerAngles.y, 0f);
((Component)this).transform.rotation = Quaternion.Slerp(((Component)this).transform.rotation, val2, 50f * Time.deltaTime);
}
}
private bool IsPlayerLookingAtMe()
{
//IL_0028: 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_0042: 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)
//IL_0060: 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_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: 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_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)playerTarget))
{
return false;
}
Vector3 val = head.transform.position - playerTarget.PlayerVisionTarget.VisionTransform.position;
((Vector3)(ref val)).Normalize();
Vector3 forward = playerTarget.PlayerVisionTarget.VisionTransform.forward;
float num = Vector3.Dot(val, forward);
float num2 = 0.9f;
if (num > num2)
{
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(playerTarget.PlayerVisionTarget.VisionTransform.position, val, ref val2, Vector3.Distance(playerTarget.PlayerVisionTarget.VisionTransform.position, head.transform.position), LayerMask.GetMask(new string[1] { "Default" })) && (Object)(object)((RaycastHit)(ref val2)).transform != (Object)(object)((Component)this).transform && !((RaycastHit)(ref val2)).transform.IsChildOf(((Component)this).transform))
{
return false;
}
return true;
}
return false;
}
private void SetFollowTargetToPosition()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
((Component)enemy).transform.position = teleportPosition;
}
public void SmokeEffect(Vector3 pos)
{
anim.particleSmokeCalmFill.Play();
}
private void Rattle()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
anim.notice.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
anim.rattleImpulse = true;
}
private void LocalEffect()
{
if (currentState == State.OnScreen && Object.op_Implicit((Object)(object)playerTarget) && playerTarget.isLocal)
{
SemiFunc.DoNotLookEffect(((Component)this).gameObject, true, true, true, true, true, false);
}
}
private void SetRoamTimer()
{
teleportRoamTimer = Random.Range(8f, 22f);
}
private void HurtColliderLogic()
{
if (hurtColliderTimer > 0f)
{
hurtColliderTimer -= Time.deltaTime;
if (hurtColliderTimer <= 0f)
{
hurtCollider.SetActive(false);
}
}
}
[PunRPC]
private void UpdateStateRPC(State _nextState)
{
currentState = _nextState;
}
[PunRPC]
private void NoticeRPC()
{
anim.NoticeSet();
}
[PunRPC]
public void TeleportEffectRPC(Vector3 position, bool intro)
{
//IL_0002: 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_0020: Unknown result type (might be due to invalid IL or missing references)
SmokeEffect(position);
if (intro)
{
anim.teleportIn.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
else
{
anim.teleportOut.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
anim.rattleImpulse = true;
teleportTimer = 0.1f;
}
private void SetTarget(PlayerAvatar _player)
{
if (!((Object)(object)_player == (Object)(object)playerTarget))
{
playerTarget = _player;
bool flag = true;
int num = -1;
if (!Object.op_Implicit((Object)(object)playerTarget))
{
flag = false;
}
if (flag)
{
Rattle();
num = playerTarget.photonView.ViewID;
}
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("SetTargetRPC", (RpcTarget)1, new object[2] { num, flag });
}
}
}
[PunRPC]
public void SetTargetRPC(int playerID, bool hasTarget)
{
if (!hasTarget)
{
playerTarget = null;
return;
}
foreach (PlayerAvatar item in SemiFunc.PlayerGetList())
{
if (item.photonView.ViewID == playerID)
{
playerTarget = item;
break;
}
}
Rattle();
}
[PunRPC]
public void ActivateHurtColliderRPC(Vector3 _position)
{
//IL_000c: 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_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: 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)
hurtCollider.transform.position = _position;
hurtCollider.transform.rotation = Quaternion.LookRotation(enemy.Vision.VisionTransform.position - _position);
hurtCollider.SetActive(true);
hurtColliderTimer = 0.25f;
}
}
public class EnemyEndermanAnim : MonoBehaviour
{
internal Animator animator;
public EnemyEnderman controller;
public Enemy enemy;
public GameObject mesh;
public Light backLight;
private float[] randomOffsets;
internal bool rattleImpulse;
public ParticleSystem particleSmoke;
public ParticleSystem particleSmokeCalmFill;
public ParticleSystem particleImpact;
public ParticleSystem particleDirectionalBits;
[Space]
public Sound teleportIn;
public Sound teleportOut;
[Space]
public Sound notice;
[Space]
public Sound growLoop;
public Sound zoom;
public Sound attack;
public Sound screamLocal;
public Sound screamGlobal;
[Space]
public Sound hurtSound;
public Sound deathSound;
private bool despawnImpulse;
private bool stunImpulse;
private void Awake()
{
animator = ((Component)this).GetComponent<Animator>();
animator.keepAnimatorStateOnDisable = true;
randomOffsets = new float[6];
for (int i = 0; i < randomOffsets.Length; i++)
{
randomOffsets[i] = Random.Range(0f, MathF.PI * 2f);
}
}
private void Update()
{
//IL_002f: 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_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Invalid comparison between Unknown and I4
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Invalid comparison between Unknown and I4
if (controller.currentState == EnemyEnderman.State.Damage)
{
particleSmoke.Play();
attack.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
GameDirector.instance.CameraShake.ShakeDistance(5f, 3f, 8f, ((Component)controller.playerTarget).transform.position, 0.3f);
GameDirector.instance.CameraImpact.ShakeDistance(10f, 3f, 8f, ((Component)controller.playerTarget).transform.position, 0.1f);
}
if (rattleImpulse)
{
if (enemy.Health.healthCurrent > 0)
{
int num = Random.Range(1, 3);
animator.SetTrigger("Rattle" + num);
}
rattleImpulse = false;
}
if ((int)enemy.CurrentState == 11 && enemy.Health.healthCurrent > 0)
{
animator.SetBool("Despawn", true);
if (despawnImpulse)
{
animator.SetTrigger("DespawnTrigger");
despawnImpulse = false;
}
}
else
{
animator.SetBool("Despawn", false);
despawnImpulse = true;
}
if (enemy.IsStunned() && (int)enemy.CurrentState != 11 && enemy.Health.healthCurrent > 0)
{
animator.SetBool("Stun", true);
if (stunImpulse)
{
animator.SetTrigger("StunTrigger");
stunImpulse = false;
}
}
else
{
animator.SetBool("Stun", false);
stunImpulse = true;
}
}
public void NoticeSet()
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
if (enemy.Health.healthCurrent < 0)
{
return;
}
if (controller.playerTarget.isLocal)
{
float num = 30f;
if (Vector3.Distance(((Component)controller.playerTarget).transform.position, ((Component)enemy).transform.position) > 5f)
{
num = 20f;
}
CameraGlitch.Instance.PlayShort();
CameraAim.Instance.AimTargetSet(controller.head.transform.position, 0.75f, 2f, ((Component)controller).gameObject, 90);
CameraZoom.Instance.OverrideZoomSet(num, 0.75f, 3f, 1f, ((Component)controller).gameObject, 50);
zoom.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
animator.SetTrigger("Scream");
}
public void OnDeath()
{
animator.SetTrigger("Death");
}
public void Scream()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
screamLocal.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
screamGlobal.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
public void DeathEffect()
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: 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_00b5: Unknown result type (might be due to invalid IL or missing references)
GameDirector.instance.CameraShake.ShakeDistance(5f, 3f, 8f, ((Component)this).transform.position, 0.5f);
GameDirector.instance.CameraImpact.ShakeDistance(5f, 3f, 8f, ((Component)this).transform.position, 0.1f);
particleImpact.Play();
Quaternion rotation = Quaternion.LookRotation(-((Vector3)(ref enemy.Health.hurtDirection)).normalized);
((Component)particleDirectionalBits).transform.rotation = rotation;
particleDirectionalBits.Play();
deathSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
enemy.EnemyParent.Despawn();
}
public void SetDespawn()
{
enemy.EnemyParent.Despawn();
}
public void DespawnSmoke()
{
//IL_0012: 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)
controller.SmokeEffect(controller.rb.position);
teleportOut.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
}
public class ItemMinecraftTNTExplosion : MonoBehaviour
{
[CompilerGenerated]
private sealed class <ThiefLaunch>d__2 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public ItemMinecraftTNTExplosion <>4__this;
private Rigidbody <component>5__1;
private Vector3 <forward>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <ThiefLaunch>d__2(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<component>5__1 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
//IL_005c: 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_0068: 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_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_008b: 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_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(0.2f);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
<component>5__1 = ((Component)<>4__this).GetComponent<Rigidbody>();
<forward>5__2 = ShopManager.instance.extractionPoint.forward;
<forward>5__2 += Vector3.up * Random.Range(0.1f, 0.5f);
<forward>5__2 += ShopManager.instance.extractionPoint.right * Random.Range(-0.5f, 0.5f);
<component>5__1.AddForce(<forward>5__2 * (float)Random.Range(3, 7), (ForceMode)1);
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private ParticleScriptExplosion particleScriptExplosion;
private void Start()
{
particleScriptExplosion = ((Component)this).GetComponent<ParticleScriptExplosion>();
if (SemiFunc.RunIsShop() && SemiFunc.IsMasterClientOrSingleplayer())
{
ItemToggle component = ((Component)this).GetComponent<ItemToggle>();
if (ShopManager.instance.isThief)
{
((MonoBehaviour)this).StartCoroutine(ThiefLaunch());
component.ToggleItem(true, -1);
((Component)this).GetComponent<ItemGrenade>().isSpawnedGrenade = true;
}
}
}
[IteratorStateMachine(typeof(<ThiefLaunch>d__2))]
private IEnumerator ThiefLaunch()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <ThiefLaunch>d__2(0)
{
<>4__this = this
};
}
public void Explosion()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
particleScriptExplosion.Spawn(((Component)this).transform.position, 1.2f, 200, 160, 4f, false, false, 1f);
}
}
public class MinecraftTNT : MonoBehaviour
{
public Color blinkColor;
public UnityEvent onDetonate;
public GameObject itemMesh;
private Material itemMaterial;
private Color originalColor;
private ItemToggle itemToggle;
private ItemAttributes itemAttributes;
internal bool isActive;
private float grenadeTimer;
public float tickTime = 3f;
private PhotonView photonView;
private PhysGrabObjectImpactDetector physGrabObjectImpactDetector;
public Sound soundSplinter;
public Sound soundTick;
private float splinterAnimationProgress;
public AnimationCurve splinterAnimationCurve;
private Transform splinterTransform;
private Material grenadeEmissionMaterial;
private ItemEquippable itemEquippable;
private Vector3 grenadeStartPosition;
private Quaternion grenadeStartRotation;
private PhysGrabObject physGrabObject;
private Vector3 prevPosition;
[FormerlySerializedAs("isThiefGrenade")]
[HideInInspector]
public bool isSpawnedGrenade;
public GameObject throwLine;
public Rigidbody rb;
private float throwLineTimer;
private TrailRenderer throwLineTrail;
private void Start()
{
//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_0092: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
itemEquippable = ((Component)this).GetComponent<ItemEquippable>();
itemToggle = ((Component)this).GetComponent<ItemToggle>();
itemAttributes = ((Component)this).GetComponent<ItemAttributes>();
photonView = ((Component)this).GetComponent<PhotonView>();
physGrabObjectImpactDetector = ((Component)this).GetComponent<PhysGrabObjectImpactDetector>();
splinterTransform = ((Component)this).transform.Find("Splinter");
GameObject gameObject = ((Component)((Component)this).transform.Find("Mesh")).gameObject;
grenadeEmissionMaterial = gameObject.GetComponent<Renderer>().material;
grenadeStartPosition = ((Component)this).transform.position;
grenadeStartRotation = ((Component)this).transform.rotation;
physGrabObject = ((Component)this).GetComponent<PhysGrabObject>();
prevPosition = (((Object)(object)rb != (Object)null) ? rb.position : Vector3.zero);
throwLineTrail = throwLine.GetComponent<TrailRenderer>();
if ((Object)(object)itemMesh != (Object)null)
{
Renderer component = itemMesh.GetComponent<Renderer>();
if ((Object)(object)component != (Object)null)
{
itemMaterial = component.material;
originalColor = itemMaterial.color;
}
}
}
private void FixedUpdate()
{
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: 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_0069: 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_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: 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_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: 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_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: 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_0057: Unknown result type (might be due to invalid IL or missing references)
if (itemEquippable.isEquipped || itemEquippable.wasEquippedTimer > 0f)
{
prevPosition = rb.position;
return;
}
_ = prevPosition;
if (false)
{
prevPosition = rb.position;
}
Vector3 val = (rb.position - prevPosition) / Time.fixedDeltaTime;
Vector3 val2 = rb.position - prevPosition;
_ = ((Vector3)(ref val2)).normalized;
prevPosition = rb.position;
if (!physGrabObject.grabbed && ((Vector3)(ref val)).magnitude > 2f)
{
throwLineTimer = 0.2f;
}
if (throwLineTimer > 0f)
{
throwLineTrail.emitting = true;
throwLineTimer -= Time.fixedDeltaTime;
}
else
{
throwLineTrail.emitting = false;
}
}
private void Update()
{
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: 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_0122: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
soundTick.PlayLoop(isActive, 2f, 2f, 1f);
if (itemEquippable.isEquipped)
{
if (isActive)
{
isActive = false;
grenadeTimer = 0f;
splinterAnimationProgress = 0f;
itemToggle.ToggleItem(false, -1);
splinterTransform.localEulerAngles = new Vector3(0f, 0f, 0f);
if ((Object)(object)itemMaterial != (Object)null)
{
itemMaterial.color = originalColor;
}
}
return;
}
if (isActive)
{
float num = Mathf.PingPong(Time.time * 8f, 1f);
Color val = blinkColor * Mathf.LinearToGammaSpace(num);
if ((Object)(object)itemMaterial != (Object)null)
{
float num2 = Mathf.PingPong(Time.time * 8f, 1f);
itemMaterial.color = Color.Lerp(originalColor, blinkColor, num2);
}
}
if (!SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
if (itemToggle.toggleState && !isActive)
{
isActive = true;
TickStart();
}
if (isActive)
{
grenadeTimer += Time.deltaTime;
if (grenadeTimer >= tickTime)
{
grenadeTimer = 0f;
TickEnd();
}
}
}
private void GrenadeReset()
{
//IL_004e: 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_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
isActive = false;
grenadeTimer = 0f;
throwLine.SetActive(false);
splinterAnimationProgress = 0f;
itemToggle.ToggleItem(false, -1);
splinterTransform.localEulerAngles = new Vector3(0f, 0f, 0f);
grenadeEmissionMaterial.SetColor("_EmissionColor", Color.black);
if (SemiFunc.IsMasterClientOrSingleplayer())
{
Rigidbody component = ((Component)this).GetComponent<Rigidbody>();
component.velocity = Vector3.zero;
component.angularVelocity = Vector3.zero;
}
}
private void TickStart()
{
if (SemiFunc.IsMasterClient())
{
photonView.RPC("TickStartRPC", (RpcTarget)0, Array.Empty<object>());
}
else
{
TickStartRPC();
}
}
private void TickEnd()
{
if (SemiFunc.IsMasterClient())
{
photonView.RPC("TickEndRPC", (RpcTarget)0, Array.Empty<object>());
}
else
{
TickEndRPC();
}
}
[PunRPC]
private void TickStartRPC()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
soundSplinter.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
isActive = true;
}
[PunRPC]
private void TickEndRPC()
{
//IL_007e: 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)
if (itemEquippable.isEquipped)
{
return;
}
onDetonate.Invoke();
if (SemiFunc.IsMasterClientOrSingleplayer())
{
if (!SemiFunc.RunIsShop() || isSpawnedGrenade)
{
if (!isSpawnedGrenade)
{
StatsManager.instance.ItemRemove(itemAttributes.instanceName);
}
physGrabObjectImpactDetector.DestroyObject(true);
}
else
{
physGrabObject.Teleport(grenadeStartPosition, grenadeStartRotation);
}
}
if (SemiFunc.RunIsShop() && !isSpawnedGrenade)
{
GrenadeReset();
}
}
}
namespace MinecraftEnderman
{
[HarmonyPatch(typeof(PlayerController))]
internal static class ExamplePlayerControllerPatch
{
[HarmonyPrefix]
[HarmonyPatch("Start")]
private static void Start_Prefix(PlayerController __instance)
{
MinecraftEnderman.Logger.LogDebug((object)$"{__instance} Start Prefix");
}
[HarmonyPostfix]
[HarmonyPatch("Start")]
private static void Start_Postfix(PlayerController __instance)
{
MinecraftEnderman.Logger.LogDebug((object)$"{__instance} Start Postfix");
}
}
[BepInPlugin("GreatColtini.MinecraftEnderman", "MinecraftEnderman", "1.0")]
public class MinecraftEnderman : BaseUnityPlugin
{
internal static MinecraftEnderman Instance { get; private set; }
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
private void Awake()
{
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
Patch();
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!");
}
internal void Patch()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_0026: Expected O, but got Unknown
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll();
}
internal void Unpatch()
{
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
private void Update()
{
}
}
}