public static GameObject GetPrefab() { var alienTeleporterPrefab = Resources.Load <GameObject>("WorldEntities/Environment/Precursor/MountainIsland/Precursor_Mountain_Teleporter_ToFloatingIsland"); var baseTeleporterPrefab = new GameObject("BaseTeleporter"); var plantPotPrefab = Resources.Load <GameObject>("Submarine/Build/PlanterPot"); var aquariumPrefab = Resources.Load <GameObject>("Submarine/Build/Aquarium"); const float padHeight = 0.1f; const float fieldHeight = 1.5f; var warpCollider = ModUtils.GetChildByName(alienTeleporterPrefab, "WarpCollider"); Console.WriteLine("BoxCollider--"); ModUtils.PrintObjectFields(warpCollider.GetComponent <BoxCollider>()); Console.WriteLine("PrecursorTeleporterCollider--"); ModUtils.PrintObjectFields(warpCollider.GetComponent <PrecursorTeleporterCollider>()); var constructable = ModUtils.CopyComponent(plantPotPrefab.GetComponent <Constructable>(), baseTeleporterPrefab); constructable.techType = (TechType)CustomTechType.BaseTeleporter; var techTag = ModUtils.CopyComponent(plantPotPrefab.GetComponent <TechTag>(), baseTeleporterPrefab); techTag.type = (TechType)CustomTechType.BaseTeleporter; var prefabIdentifier = ModUtils.CopyComponent(plantPotPrefab.GetComponent <PrefabIdentifier>(), baseTeleporterPrefab); prefabIdentifier.ClassId = "Submarine/Build/BaseTeleporter"; var constructBounds = ModUtils.CopyComponent(plantPotPrefab.GetComponent <ConstructableBounds>(), baseTeleporterPrefab); constructBounds.bounds.extents = new Vector3(0.4f, padHeight, 0.4f); constructBounds.bounds.position = new Vector3(0, padHeight, 0); var teleporterPad = GameObject.CreatePrimitive(PrimitiveType.Cube); teleporterPad.name = "Pad"; teleporterPad.transform.SetParent(baseTeleporterPrefab.transform); teleporterPad.transform.localScale = new Vector3(1.5f, padHeight, 1.5f); teleporterPad.transform.localPosition = new Vector3(0, padHeight / 2, 0); teleporterPad.GetComponent <MeshRenderer>().material = alienTeleporterPrefab.GetComponentInChildren <MeshRenderer>().material; constructable.model = teleporterPad; var teleporterField = GameObject.CreatePrimitive(PrimitiveType.Cube); teleporterField.name = "TeleportField"; teleporterField.transform.SetParent(baseTeleporterPrefab.transform); teleporterField.transform.localScale = new Vector3(1, fieldHeight, 1); teleporterField.transform.localPosition = new Vector3(0, padHeight + fieldHeight / 2, 0); var fieldRenderer = teleporterField.GetComponent <MeshRenderer>(); fieldRenderer.material = alienTeleporterPrefab.GetComponentInChildren <MeshRenderer>().material; fieldRenderer.material.color = new Color(0, 1, 0, 0.5f); teleporterField.AddComponent <PrecursorTeleporterCollider>(); var teleporterCollider = teleporterField.GetComponent <BoxCollider>(); teleporterCollider.isTrigger = true; baseTeleporterPrefab.SetActive(false); var sky = baseTeleporterPrefab.AddComponent <SkyApplier>(); sky.dynamic = true; sky.renderers = baseTeleporterPrefab.GetAllComponentsInChildren <MeshRenderer>(); sky.anchorSky = Skies.BaseInterior; baseTeleporterPrefab.SetActive(true); return(baseTeleporterPrefab); }