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);
}
}
}