public static void AddPieceToTool() { Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "com.rolopogo.Basement"); MaterialReplacer.GetAllMaterials(); // Load from assetbundle var bundle = AssetBundle.LoadFromMemory(ResourceUtils.GetResource(Assembly.GetExecutingAssembly(), "Basement.Resources.basement")); basementPrefab = bundle.LoadAsset <GameObject>("Basement"); basementPrefab.AddComponent <Basement>(); bundle.Unload(false); Plugin.basementPrefab.name = "basement.basementprefab"; // update material references MaterialReplacer.ReplaceAllMaterialsWithOriginal(basementPrefab); var woodRequirement = MockRequirement.Create("Wood", 100, true); woodRequirement.FixReferences(); var stoneRequirement = MockRequirement.Create("Stone", 100, true); stoneRequirement.FixReferences(); var customRequirements = new Piece.Requirement[] { woodRequirement, stoneRequirement }; var piece = basementPrefab.GetComponent <Piece>(); piece.m_resources = customRequirements; piece.m_category = Piece.PieceCategory.Misc; piece.m_craftingStation = Mock <CraftingStation> .Create("piece_stonecutter"); piece.m_clipEverything = true; // Add spawn effect piece.m_placeEffect = Prefab.Cache.GetPrefab <GameObject>("piece_stonecutter").GetComponent <Piece>().m_placeEffect; piece.FixReferences(); Prefab.NetworkRegister(basementPrefab); // Add to tool var hammerPrefab = Prefab.Cache.GetPrefab <GameObject>("Hammer"); var hammerPieceTable = hammerPrefab.GetComponent <ItemDrop>().m_itemData.m_shared.m_buildPieces; hammerPieceTable.m_pieces.Add(basementPrefab.gameObject); }
public static void AddPieceToTool() { if (prefabRoot) { return; } MaterialReplacer.GetAllMaterials(); prefabRoot = new GameObject("CartPrefabs"); prefabRoot.SetActive(false); DontDestroyOnLoad(prefabRoot); var cart = Prefab.Cache.GetPrefab <GameObject>("Cart"); var workbenchCart = Instantiate(cart, prefabRoot.transform); DestroyImmediate(workbenchCart.transform.Find("AttachPoint").gameObject); DestroyImmediate(workbenchCart.transform.Find("Wheel1").GetChild(0).gameObject); DestroyImmediate(workbenchCart.transform.Find("Wheel2").GetChild(0).gameObject); DestroyImmediate(workbenchCart.transform.Find("Container").gameObject); DestroyImmediate(workbenchCart.transform.Find("Vagon").gameObject); DestroyImmediate(workbenchCart.transform.Find("load").gameObject); DestroyImmediate(workbenchCart.transform.Find("LineAttach0").gameObject); DestroyImmediate(workbenchCart.transform.Find("LineAttach1").gameObject); DestroyImmediate(workbenchCart.transform.Find("cart_Destruction").gameObject); cart.GetComponent <Rigidbody>().mass = 50; workbenchCart.name = "CraftyCarts.WorkbenchCart"; var stoneCart = Instantiate(workbenchCart, prefabRoot.transform); stoneCart.name = "CraftyCarts.StoneCart"; var forgeCart = Instantiate(workbenchCart, prefabRoot.transform); forgeCart.name = "CraftyCarts.ForgeCart"; // Load from assetbundle var bundle = AssetBundle.LoadFromMemory(ResourceUtils.GetResource(Assembly.GetExecutingAssembly(), "CraftyCarts.Resources.carts")); var workbenchCartModel = bundle.LoadAsset <GameObject>("workbench_cart"); var wbIcon = bundle.LoadAsset <Sprite>("workbenchcarticon"); var forgeCartModel = bundle.LoadAsset <GameObject>("forge_cart"); var fIcon = bundle.LoadAsset <Sprite>("forgecarticon"); var stoneCartModel = bundle.LoadAsset <GameObject>("stone_cart"); var scIcon = bundle.LoadAsset <Sprite>("stonecarticon"); bundle.Unload(false); Debug.Log("add crafting station"); var workbench = Prefab.Cache.GetPrefab <GameObject>("piece_workbench").GetComponent <CraftingStation>(); var stoneCutter = Prefab.Cache.GetPrefab <GameObject>("piece_stonecutter").GetComponent <CraftingStation>(); var forge = Prefab.Cache.GetPrefab <GameObject>("forge").GetComponent <CraftingStation>(); var wbPiece = SetupCraftingStation(workbenchCartModel, workbench, workbenchCart); var fPiece = SetupCraftingStation(forgeCartModel, forge, forgeCart); var scPiece = SetupCraftingStation(stoneCartModel, stoneCutter, stoneCart); wbPiece.m_icon = wbIcon; fPiece.m_icon = fIcon; scPiece.m_icon = scIcon; // Add to tool var hammerPrefab = Prefab.Cache.GetPrefab <GameObject>("Hammer"); var hammerPieceTable = hammerPrefab.GetComponent <ItemDrop>().m_itemData.m_shared.m_buildPieces; if (!hammerPieceTable.m_pieces.Contains(workbenchCart.gameObject)) { hammerPieceTable.m_pieces.Add(workbenchCart.gameObject); Prefab.NetworkRegister(workbenchCart); hammerPieceTable.m_pieces.Add(forgeCart.gameObject); Prefab.NetworkRegister(forgeCart); hammerPieceTable.m_pieces.Add(stoneCart.gameObject); Prefab.NetworkRegister(stoneCart); } }