Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ALaCart v0.0.4
plugins\ALaCart.dll
Decompiled 2 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("ALaCart")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ALaCart")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("3f273733-869d-49eb-94f1-b83b1cc7e43b")] [assembly: AssemblyFileVersion("0.0.4")] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.4.0")] namespace ALaCart; internal class GladiatorCartComponent : MonoBehaviour, Hoverable, Interactable { public string Name = "GladiatorAttach"; public float UseDistance = 2f; public Transform AttachPoint; private const string ZdoKeyAttachedPlayer = "ALaCart_AttachedPlayer"; private ZNetView _netView; private float _lastSitTime; private Player _attachedPlayer; public void Awake() { //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_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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) _netView = ((Component)this).gameObject.GetComponentInParent<ZNetView>(); if (_netView.GetZDO() == null) { ((Behaviour)this).enabled = false; return; } _netView.Register<ZDOID>("ALaCart_RPC_Attach", (Action<long, ZDOID>)RPC_Attach); _netView.Register("ALaCart_RPC_Detach", (Action<long>)RPC_Detach); if (_netView.IsOwner()) { ZDO zDO = _netView.GetZDO(); ZDOID zDOID = zDO.GetZDOID("ALaCart_AttachedPlayer"); if (zDOID != ZDOID.None && !Object.op_Implicit((Object)(object)ZNetScene.instance.FindInstance(zDOID))) { zDO.Set("ALaCart_AttachedPlayer", ZDOID.None); } Vagon componentInParent = ((Component)this).GetComponentInParent<Vagon>(); float mass = 10f / (float)componentInParent.m_bodies.Length; Rigidbody[] bodies = componentInParent.m_bodies; for (int i = 0; i < bodies.Length; i++) { bodies[i].mass = mass; } } } public void Update() { //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)_attachedPlayer)) { if (!Object.op_Implicit((Object)(object)AttachPoint)) { Detach(); } else if (ZInput.GetButtonDown("Jump") || ((Character)_attachedPlayer).IsDead()) { Detach(); } else { ((Component)_attachedPlayer).transform.position = AttachPoint.position; } } } private void OnDestroy() { Detach(); } private void Attach(Player player) { //IL_0035: Unknown result type (might be due to invalid IL or missing references) _attachedPlayer = player; if (Object.op_Implicit((Object)(object)_netView) && _netView.GetZDO() != null) { _netView.InvokeRPC("ALaCart_RPC_Attach", new object[1] { ((Character)player).GetZDOID() }); } } private void Detach() { _attachedPlayer = null; if (Object.op_Implicit((Object)(object)_netView) && _netView.GetZDO() != null) { _netView.InvokeRPC("ALaCart_RPC_Detach", Array.Empty<object>()); } } private void RPC_Attach(long sender, ZDOID playerId) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) ZDO zDO = _netView.GetZDO(); if (zDO != null && _netView.IsOwner()) { zDO.Set("ALaCart_AttachedPlayer", playerId); } } private void RPC_Detach(long sender) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) ZDO zDO = _netView.GetZDO(); if (zDO != null && _netView.IsOwner()) { zDO.Set("ALaCart_AttachedPlayer", ZDOID.None); } } private bool IsInUse() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) ZDO zDO = _netView.GetZDO(); if (zDO == null) { return false; } return zDO.GetZDOID("ALaCart_AttachedPlayer") != ZDOID.None; } public bool Interact(Humanoid human, bool hold, bool alt) { if (hold) { return false; } Player val = (Player)(object)((human is Player) ? human : null); if (!Object.op_Implicit((Object)(object)val)) { return false; } if (!Object.op_Implicit((Object)(object)AttachPoint)) { return false; } if (!InUseDistance((Humanoid)(object)val)) { return false; } if (Time.time - _lastSitTime < 2f) { return false; } if (Object.op_Implicit((Object)(object)_attachedPlayer) && (Object)(object)val == (Object)(object)_attachedPlayer) { Detach(); _lastSitTime = Time.time; return true; } if (IsInUse()) { return false; } Attach(val); _lastSitTime = Time.time; return true; } public bool UseItem(Humanoid user, ItemData item) { return false; } public string GetHoverText() { if (Time.time - _lastSitTime < 2f) { return ""; } Player localPlayer = Player.m_localPlayer; if (!Object.op_Implicit((Object)(object)localPlayer)) { return ""; } if (!InUseDistance((Humanoid)(object)localPlayer)) { return Localization.instance.Localize("<color=grey>$piece_toofar</color>"); } if (!Object.op_Implicit((Object)(object)_attachedPlayer) && IsInUse()) { return Localization.instance.Localize("<color=grey>In use</color>"); } return Localization.instance.Localize(Name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use"); } public string GetHoverName() { return Name; } private bool InUseDistance(Humanoid human) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)human) || !Object.op_Implicit((Object)(object)AttachPoint)) { return false; } return Vector3.Distance(((Component)human).transform.position, AttachPoint.position) < UseDistance; } } [BepInPlugin("de.sirskunkalot.ALaCart", "ALaCart", "0.0.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] internal class ALaCart : BaseUnityPlugin { public const string PluginGUID = "de.sirskunkalot.ALaCart"; public const string PluginName = "ALaCart"; public const string PluginVersion = "0.0.4"; public static CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); private void Awake() { PrefabManager.OnVanillaPrefabsAvailable += CloneCart; } private void CloneCart() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) try { PieceConfig val = new PieceConfig(); val.Name = "GladiatorCart"; val.Description = "Mountable cart. Feel like a gladiator."; val.PieceTable = PieceTables.Hammer; val.Category = PieceCategories.Misc; val.Requirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Wood", 1, 0, true) }; CustomPiece val2 = new CustomPiece("GladiatorCart", "Cart", val); val2.Piece.m_craftingStation = null; val2.Piece.m_canBeRemoved = true; PieceManager.Instance.AddPiece(val2); Transform transform = val2.PiecePrefab.transform; Object.DestroyImmediate((Object)(object)((Component)transform.Find("load")).gameObject); GameObject val3 = new GameObject("AttachPointPlayer"); val3.transform.SetParent(transform, false); val3.transform.SetAsFirstSibling(); val3.transform.localPosition = Vector3.up * 0.5f; GameObject gameObject = ((Component)transform.Find("Container")).gameObject; Object.DestroyImmediate((Object)(object)gameObject.GetComponent<Container>()); gameObject.AddComponent<GladiatorCartComponent>().AttachPoint = val3.transform; } catch (Exception arg) { Logger.LogWarning((object)$"Caught exception while creating cart: {arg}"); } finally { PrefabManager.OnVanillaPrefabsAvailable -= CloneCart; } } }