Decompiled source of DisableGolemCrafting v1.0.0

Plugins/Disable Golem Crafting.dll

Decompiled 3 weeks ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using FishNet.Connection;
using FishNet.Object;
using HarmonyLib;
using UnityEngine;
using UnityEngine.SceneManagement;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Gnomes Only Give Spellpages")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Gnomes Only Give Spellpages")]
[assembly: AssemblyCopyright("Copyright ©  2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("372add71-342e-437a-b6cf-137d8e586699")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("wilson.disablegolemcrafting", "Disable Golem Crafting", "1.0.0")]
public class DisableGolemCraftingPlugin : BaseUnityPlugin
{
	private void Awake()
	{
		//IL_0005: Unknown result type (might be due to invalid IL or missing references)
		new Harmony("wilson.disablegolemcrafting").PatchAll();
	}
}
[HarmonyPatch(typeof(CraftingForge), "RpcLogic___ServerCraft_2166136261")]
public class Patch_CraftingForge_ServerCraft
{
	private static bool Prefix(CraftingForge __instance)
	{
		if ((Object)(object)__instance.SlotItems[0] == (Object)null || (Object)(object)__instance.SlotItems[1] == (Object)null)
		{
			return false;
		}
		Type typeFromHandle = typeof(CraftingForge);
		FieldInfo didCraftField = typeFromHandle.GetField("didCraft", BindingFlags.Instance | BindingFlags.NonPublic);
		FieldInfo field = typeFromHandle.GetField("craftingComplete", BindingFlags.Instance | BindingFlags.NonPublic);
		MethodInfo method = typeFromHandle.GetMethod("makepoof", BindingFlags.Instance | BindingFlags.NonPublic);
		MethodInfo method2 = typeFromHandle.GetMethod("CraftCleanUp", BindingFlags.Instance | BindingFlags.NonPublic);
		int itemID = __instance.SlotItems[0].GetComponent<IItemInteraction>().GetItemID();
		int itemID2 = __instance.SlotItems[1].GetComponent<IItemInteraction>().GetItemID();
		int combo = itemID * 10 + itemID2;
		if (combo != 12 && combo != 21)
		{
			method?.Invoke(__instance, null);
		}
		GameObject[] craftablePrefabs = __instance.CraftablePrefabs;
		Transform spawn = __instance.itemSpawnPoint;
		switch (combo)
		{
		case 0:
			Craft(craftablePrefabs[0], "0");
			break;
		case 1:
		case 10:
			Craft(craftablePrefabs[1], "1/10");
			break;
		case 2:
		case 20:
			Craft(craftablePrefabs[9], "2/20");
			break;
		case 3:
		case 30:
			Craft(craftablePrefabs[8], "3/30");
			break;
		case 4:
		case 40:
			Craft(craftablePrefabs[7], "4/40");
			break;
		case 11:
			Craft(craftablePrefabs[2], "11");
			break;
		case 12:
		case 21:
			Debug.Log((object)$"[CraftingForge] Combo {combo} (12/21) is disabled.");
			break;
		case 13:
		case 31:
			Craft(craftablePrefabs[15], "13/31");
			break;
		case 14:
		case 41:
			Craft(craftablePrefabs[10], "14/41");
			break;
		case 22:
			Craft(craftablePrefabs[12], "22");
			break;
		case 23:
		case 32:
			Craft(craftablePrefabs[13], "23/32");
			break;
		case 24:
		case 42:
			Craft(craftablePrefabs[11], "24/42");
			break;
		case 33:
			Craft(craftablePrefabs[4], "33");
			break;
		case 34:
		case 43:
			Craft(craftablePrefabs[5], "34/43");
			break;
		case 44:
			Craft(craftablePrefabs[6], "44");
			break;
		case 89:
		case 98:
			Craft(craftablePrefabs[14], "89/98");
			break;
		case 5:
		case 6:
		case 7:
		case 8:
		case 9:
		case 15:
		case 16:
		case 17:
		case 18:
		case 19:
		case 25:
		case 26:
		case 27:
		case 28:
		case 29:
		case 35:
		case 36:
		case 37:
		case 38:
		case 39:
			Debug.Log((object)$"[CraftingForge] Ignored combo {combo}");
			break;
		default:
			Debug.Log((object)$"[CraftingForge] Unknown combo {combo}");
			break;
		}
		if (didCraftField != null && (bool)didCraftField.GetValue(__instance))
		{
			didCraftField.SetValue(__instance, false);
			__instance.SlotItems[0] = null;
			__instance.SlotItems[1] = null;
			method2?.Invoke(__instance, null);
		}
		field?.SetValue(__instance, true);
		return false;
		void Craft(GameObject prefab, string label)
		{
			//IL_0080: 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_009f: Unknown result type (might be due to invalid IL or missing references)
			Debug.Log((object)$"[CraftingForge] Combo {combo} ({label}) → Crafting {((Object)prefab).name}");
			((NetworkBehaviour)__instance).ServerManager.Despawn(__instance.SlotItems[0], (DespawnType?)null);
			((NetworkBehaviour)__instance).ServerManager.Despawn(__instance.SlotItems[1], (DespawnType?)null);
			GameObject val = Object.Instantiate<GameObject>(prefab);
			val.transform.position = spawn.position;
			((NetworkBehaviour)__instance).ServerManager.Spawn(val, (NetworkConnection)null, default(Scene));
			didCraftField?.SetValue(__instance, true);
		}
	}
}