public override bool HasBuildingMaterials(MyEntity builder) { if (MySession.Static.CreativeMode || (MySession.Static.IsAdminModeEnabled(Sync.MyId) && builder == MySession.Static.LocalCharacter)) { return(true); } if (builder == null) { return(false); } var inventory = GetBuilderInventory(builder); if (inventory == null) { return(false); } MyInventory shipInventory = null; MyCockpit cockpit = null; long identityId = MySession.Static.LocalPlayerId; if (builder is MyCharacter) {//construction cockpit? cockpit = (builder as MyCharacter).IsUsing as MyCockpit; if (cockpit != null) { shipInventory = cockpit.GetInventory(); identityId = cockpit.ControllerInfo.ControllingIdentityId; } else if ((builder as MyCharacter).ControllerInfo != null) { identityId = (builder as MyCharacter).ControllerInfo.ControllingIdentityId; } else { Debug.Fail("failed to get identityId"); } } bool result = true; foreach (var entry in m_materialList.RequiredMaterials) { result &= inventory.GetItemAmount(entry.Key) >= entry.Value; if (!result && shipInventory != null) { result = shipInventory.GetItemAmount(entry.Key) >= entry.Value; if (!result) { //MyGridConveyorSystem.ItemPullRequest((MySession.Static.ControlledEntity as MyCockpit), shipInventory, MySession.Static.LocalPlayerId, entry.Key, entry.Value); result = MyGridConveyorSystem.ConveyorSystemItemAmount(cockpit, shipInventory, identityId, entry.Key) >= entry.Value; } } if (!result) { break; } } return(result); }